Commit 2b88a4a2 authored by wanglei's avatar wanglei

...vip

parent 30e61018
...@@ -78,6 +78,7 @@ dependencies { ...@@ -78,6 +78,7 @@ dependencies {
implementation("com.airbnb.android:lottie:6.4.0") implementation("com.airbnb.android:lottie:6.4.0")
implementation("com.github.bumptech.glide:glide:4.16.0") implementation("com.github.bumptech.glide:glide:4.16.0")
implementation("com.github.pokercc:ExpandableRecyclerView:0.9.3") implementation("com.github.pokercc:ExpandableRecyclerView:0.9.3")
implementation 'com.github.zhpanvip:viewpagerindicator:1.2.3'
//网络 //网络
implementation group: 'com.google.code.gson', name: 'gson', version: '2.10.1' implementation group: 'com.google.code.gson', name: 'gson', version: '2.10.1'
......
...@@ -25,9 +25,7 @@ ...@@ -25,9 +25,7 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.DataRecovery" android:theme="@style/Theme.DataRecovery"
tools:targetApi="34"> tools:targetApi="34">
<activity
android:name=".activity.vip.VipActivity"
android:exported="false" />
<activity <activity
android:name=".activity.SplashActivity" android:name=".activity.SplashActivity"
android:exported="true" android:exported="true"
...@@ -39,6 +37,19 @@ ...@@ -39,6 +37,19 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".activity.guide.GuideActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.vip.VipActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:name=".activity.recyclebin.RecycleBinDetailActivity" android:name=".activity.recyclebin.RecycleBinDetailActivity"
android:exported="false" android:exported="false"
......
...@@ -10,6 +10,7 @@ import android.text.style.UnderlineSpan ...@@ -10,6 +10,7 @@ import android.text.style.UnderlineSpan
import android.view.View import android.view.View
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.MyApplication import com.base.filerecoveryrecyclebin.MyApplication
import com.base.filerecoveryrecyclebin.activity.guide.GuideActivity
import com.base.filerecoveryrecyclebin.activity.junkclean.ScanJunkActivity import com.base.filerecoveryrecyclebin.activity.junkclean.ScanJunkActivity
import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacyPinOneActivity import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacyPinOneActivity
import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacySpaceActivity import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacySpaceActivity
...@@ -32,6 +33,7 @@ import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_RECOVERY_VIDEOS ...@@ -32,6 +33,7 @@ import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_RECOVERY_VIDEOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_SCREENSHOT_CLEAN import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_SCREENSHOT_CLEAN
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_SIMILAR_IMAGE import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_SIMILAR_IMAGE
import com.base.filerecoveryrecyclebin.bean.ConstObject.ifAgreePrivacy import com.base.filerecoveryrecyclebin.bean.ConstObject.ifAgreePrivacy
import com.base.filerecoveryrecyclebin.bean.ConstObject.isGuide
import com.base.filerecoveryrecyclebin.bean.ConstObject.privacyPinPassword import com.base.filerecoveryrecyclebin.bean.ConstObject.privacyPinPassword
import com.base.filerecoveryrecyclebin.databinding.ActivitySplashBinding import com.base.filerecoveryrecyclebin.databinding.ActivitySplashBinding
import com.base.filerecoveryrecyclebin.fcm.CloseNotificationReceiver import com.base.filerecoveryrecyclebin.fcm.CloseNotificationReceiver
...@@ -175,6 +177,11 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() { ...@@ -175,6 +177,11 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
val isHotLaunch = intent?.extras?.getBoolean("isHotLaunch", false) ?: false val isHotLaunch = intent?.extras?.getBoolean("isHotLaunch", false) ?: false
if (!isHotLaunch) { if (!isHotLaunch) {
startActivity(Intent(this@SplashActivity, MainActivity::class.java)) startActivity(Intent(this@SplashActivity, MainActivity::class.java))
if (!isGuide) {
startActivity(Intent(this@SplashActivity, GuideActivity::class.java))
} else {
startActivity(Intent(this@SplashActivity, MainActivity::class.java))
}
} }
} }
} }
......
package com.base.filerecoveryrecyclebin.activity.guide
import android.graphics.Color
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.databinding.ActivityGuideBinding
import com.base.filerecoveryrecyclebin.fragment.GuideFragment
import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.utils.BarUtils
import com.zhpan.indicator.enums.IndicatorSlideMode
import com.zhpan.indicator.enums.IndicatorStyle
class GuideActivity : BaseActivity<ActivityGuideBinding>() {
private val page1: GuideFragment by lazy {
GuideFragment().apply { page = 1 }
}
private val page2: GuideFragment by lazy {
GuideFragment().apply { page = 2 }
}
private val fragments by lazy {
mutableListOf(page1, page2)
}
override val binding: ActivityGuideBinding by lazy {
ActivityGuideBinding.inflate(layoutInflater)
}
fun setPosition(position: Int) {
binding.viewpager2.currentItem = position
}
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.viewpager2.run {
adapter = object : FragmentStateAdapter(this@GuideActivity) {
override fun getItemCount(): Int {
return fragments.size
}
override fun createFragment(position: Int): Fragment {
return fragments[position]
}
}
}
binding.viewpager2.registerOnPageChangeCallback(object :
ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
}
})
val normalColor = ContextCompat.getColor(this, R.color.color_cccccc)
val selectedColor = ContextCompat.getColor(this, R.color.color_4f86eb)
binding.indicatorView
.setSliderColor(normalColor, selectedColor)
.setSliderWidth(resources.getDimension(R.dimen.dp_9))
.setSliderHeight(resources.getDimension(R.dimen.dp_9))
.setSlideMode(IndicatorSlideMode.WORM)
.setIndicatorStyle(IndicatorStyle.CIRCLE)
.setupWithViewPager(binding.viewpager2)
}
}
\ No newline at end of file
package com.base.filerecoveryrecyclebin.activity.vip package com.base.filerecoveryrecyclebin.activity.vip
import android.content.Intent
import android.graphics.Color import android.graphics.Color
import androidx.activity.addCallback
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import com.base.filerecoveryrecyclebin.activity.MainActivity
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.databinding.ActivityVipBinding import com.base.filerecoveryrecyclebin.databinding.ActivityVipBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.utils.BarUtils import com.base.filerecoveryrecyclebin.utils.BarUtils
...@@ -24,6 +28,18 @@ class VipActivity : BaseActivity<ActivityVipBinding>() { ...@@ -24,6 +28,18 @@ class VipActivity : BaseActivity<ActivityVipBinding>() {
binding.cardWeek.setOnClickListener { } binding.cardWeek.setOnClickListener { }
binding.cardMonth.setOnClickListener { } binding.cardMonth.setOnClickListener { }
binding.cardYear.setOnClickListener { } binding.cardYear.setOnClickListener { }
onBackPressedDispatcher.addCallback {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@VipActivity) {
startActivity(Intent(this@VipActivity, MainActivity::class.java))
finish()
}
}
binding.flQuit.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
} }
} }
\ No newline at end of file
...@@ -36,6 +36,22 @@ object ConstObject { ...@@ -36,6 +36,22 @@ object ConstObject {
field = value field = value
AppPreferences.getInstance().put("ifAgreePrivacy", value, true) AppPreferences.getInstance().put("ifAgreePrivacy", value, true)
} }
var isGuide = false
get() {
return AppPreferences.getInstance().getBoolean("isGuide", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("isGuide", value, true)
}
var isInstallVip = true
get() {
return AppPreferences.getInstance().getBoolean("isInstallVip", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("isInstallVip", value, true)
}
var rememberOption = false var rememberOption = false
get() { get() {
......
package com.base.filerecoveryrecyclebin.fragment
import android.annotation.SuppressLint
import android.content.Intent
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.activity.MainActivity
import com.base.filerecoveryrecyclebin.activity.guide.GuideActivity
import com.base.filerecoveryrecyclebin.activity.vip.VipActivity
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.bean.ConstObject.isGuide
import com.base.filerecoveryrecyclebin.bean.ConstObject.isInstallVip
import com.base.filerecoveryrecyclebin.databinding.FragmentGuideBinding
import com.base.filerecoveryrecyclebin.help.BaseFragment
import com.base.filerecoveryrecyclebin.utils.AppPreferences
class GuideFragment constructor() : BaseFragment<FragmentGuideBinding>() {
var page: Int = 1
override val binding: FragmentGuideBinding by lazy {
FragmentGuideBinding.inflate(layoutInflater)
}
@SuppressLint("SetTextI18n")
override fun setView() {
if (page == 1) {
binding.iv.setImageResource(R.mipmap.yindaoye1)
binding.tv0.text = "Effective recovery"
binding.tvBtn.text = "Next"
// binding.flSkip.visibility = View.VISIBLE
} else {
binding.iv.setImageResource(R.mipmap.yindaoye2)
binding.tv0.text = "Recycle Bin"
binding.tvBtn.text = "Start"
// binding.flSkip.visibility = View.GONE
}
}
override fun setListener() {
super.setListener()
binding.tvBtn.setOnClickListener {
if (page == 1) {
(requireActivity() as GuideActivity).setPosition(1)
} else {
jumpNext()
}
}
binding.flSkip.setOnClickListener {
jumpNext()
}
}
private fun jumpNext() {
if (isInstallVip) {
startActivity(Intent(requireContext(), VipActivity::class.java))
requireActivity().finish()
isInstallVip = false
} else {
val showAd = AppPreferences.getInstance().getString("isShowGuideAd", "0")?.toInt()
if (showAd == 1) {
AdmobMaxHelper.admobMaxShowInterstitialAd(requireActivity()) {
startActivity(Intent(requireContext(), MainActivity::class.java))
requireActivity().finish()
isGuide = true
}
} else {
startActivity(Intent(requireContext(), MainActivity::class.java))
requireActivity().finish()
isGuide = true
}
}
}
}
\ No newline at end of file
...@@ -17,8 +17,8 @@ object PermissionDialog { ...@@ -17,8 +17,8 @@ object PermissionDialog {
val dialog = BottomSheetDialog(this) val dialog = BottomSheetDialog(this)
val binding = DialogPermissionBottomsheetBinding.inflate(LayoutInflater.from(this)) val binding = DialogPermissionBottomsheetBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root) dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false) // dialog.setCanceledOnTouchOutside(false)
dialog.setCancelable(false) // dialog.setCancelable(false)
dialog.show() dialog.show()
val parentView = binding.root.parent as View val parentView = binding.root.parent as View
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity.guide.GuideActivity">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpager2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/yindaoye1"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.25"
tools:ignore="ContentDescription" />
<View
android:id="@+id/ll"
android:layout_width="wrap_content"
android:layout_height="120dp"
android:layout_marginTop="50dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="@id/iv"
app:layout_constraintStart_toStartOf="@id/iv"
app:layout_constraintTop_toBottomOf="@id/iv" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/tv_btn"
app:layout_constraintTop_toBottomOf="@id/ll">
<com.zhpan.indicator.IndicatorView
android:id="@+id/indicator_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</FrameLayout>
<View
android:id="@+id/tv_btn"
android:layout_width="164dp"
android:layout_height="45dp"
android:layout_marginBottom="100dp"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
tools:context=".fragment.GuideFragment">
<FrameLayout
android:id="@+id/fl_skip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_marginEnd="8dp"
android:padding="10dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Skip"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
</FrameLayout>
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.25"
tools:ignore="ContentDescription"
tools:src="@mipmap/yindaoye1" />
<LinearLayout
android:id="@+id/ll"
android:layout_width="wrap_content"
android:layout_height="120dp"
android:layout_marginTop="50dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="@id/iv"
app:layout_constraintStart_toStartOf="@id/iv"
app:layout_constraintTop_toBottomOf="@id/iv">
<TextView
android:id="@+id/tv_0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="All Free"
android:textSize="22sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1">
<TextView
android:id="@+id/tv_1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|bottom"
android:text="One click scanning can restore various\ntypes of files such as photos,video,audio,\ndocuments,etc"
android:textSize="18sp"
android:visibility="gone"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|bottom"
android:text="One click scanning can restore various\ntypes of files such as photos,videos,\naudio,documents,etc."
android:textSize="18sp"
tools:ignore="HardcodedText" />
</FrameLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/tv_btn"
app:layout_constraintTop_toBottomOf="@id/ll" />
<TextView
android:id="@+id/tv_btn"
android:layout_width="164dp"
android:layout_height="45dp"
android:layout_marginBottom="100dp"
android:background="@drawable/bg_577dfd_10"
android:gravity="center"
android:textColor="@color/white"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -108,7 +108,7 @@ ...@@ -108,7 +108,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="15dp" android:layout_marginStart="15dp"
android:layout_marginTop="16dp" android:layout_marginTop="-5dp"
android:text="Recovery" android:text="Recovery"
android:textColor="@color/black" android:textColor="@color/black"
android:textSize="19sp" android:textSize="19sp"
......
...@@ -5,4 +5,6 @@ ...@@ -5,4 +5,6 @@
<color name="color_747474">#747474</color> <color name="color_747474">#747474</color>
<color name="color_fa020b">#FA020B</color> <color name="color_fa020b">#FA020B</color>
<color name="theme_color">#50B3FA</color> <color name="theme_color">#50B3FA</color>
<color name="color_cccccc">#cccccc</color>
<color name="color_4f86eb">#4f86eb</color>
</resources> </resources>
\ No newline at end of file
...@@ -6,4 +6,5 @@ ...@@ -6,4 +6,5 @@
<dimen name="fab_margin">16dp</dimen> <dimen name="fab_margin">16dp</dimen>
<dimen name="dp_355">355dp</dimen> <dimen name="dp_355">355dp</dimen>
<dimen name="dp_35">35dp</dimen> <dimen name="dp_35">35dp</dimen>
<dimen name="dp_9">9dp</dimen>
</resources> </resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment