Commit 41ea2777 authored by leichao.gao's avatar leichao.gao

Merge remote-tracking branch 'origin/master'

parents 9bcf67ee bdce811b
...@@ -25,16 +25,8 @@ ...@@ -25,16 +25,8 @@
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.screenshot.ScreenShotAnimationActivity"
android:exported="false"
android:theme="@style/Theme.DataRecovery" />
<activity
android:name=".activity.repeat.RepeatAnimationActivity"
android:exported="false" />
<activity
android:name=".activity.SettingActivity"
android:exported="false" />
<activity <activity
android:name=".activity.SplashActivity" android:name=".activity.SplashActivity"
android:exported="true" android:exported="true"
...@@ -46,6 +38,31 @@ ...@@ -46,6 +38,31 @@
<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="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.repeat.RepeatAnimationActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.SettingActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".activity.screenshot.ScreenShotAnimationActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/Theme.DataRecovery"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:name=".activity.MainActivity" android:name=".activity.MainActivity"
android:exported="false" android:exported="false"
...@@ -147,6 +164,7 @@ ...@@ -147,6 +164,7 @@
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<meta-data <meta-data
android:name="com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION" android:name="com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION"
android:value="true" /> android:value="true" />
...@@ -159,8 +177,6 @@ ...@@ -159,8 +177,6 @@
<service <service
android:name=".service.StayNotificationService" android:name=".service.StayNotificationService"
android:permission="android.permission.FOREGROUND_SERVICE" /> android:permission="android.permission.FOREGROUND_SERVICE" />
<service <service
android:name=".fcm.MessagingService" android:name=".fcm.MessagingService"
android:exported="true"> android:exported="true">
...@@ -171,9 +187,7 @@ ...@@ -171,9 +187,7 @@
<receiver <receiver
android:name=".fcm.CloseNotificationReceiver" android:name=".fcm.CloseNotificationReceiver"
android:exported="false" /> android:exported="false" /> <!-- 添加以下接收器 -->
<!-- 添加以下接收器 -->
<!-- 注册广播 --> <!-- 注册广播 -->
<receiver <receiver
android:name=".fcm.FcmReceiver" android:name=".fcm.FcmReceiver"
...@@ -193,7 +207,6 @@ ...@@ -193,7 +207,6 @@
<meta-data <meta-data
android:name="com.facebook.sdk.ApplicationId" android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" /> android:value="@string/facebook_app_id" />
</application> </application>
</manifest> </manifest>
\ No newline at end of file
...@@ -11,6 +11,7 @@ import android.util.Log ...@@ -11,6 +11,7 @@ import android.util.Log
import android.view.View import android.view.View
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.MyApplication import com.base.datarecovery.MyApplication
import com.base.datarecovery.activity.guide.GuideActivity
import com.base.datarecovery.activity.junkclean.ScanJunkActivity import com.base.datarecovery.activity.junkclean.ScanJunkActivity
import com.base.datarecovery.activity.privacyspace.PrivacyPinOneActivity import com.base.datarecovery.activity.privacyspace.PrivacyPinOneActivity
import com.base.datarecovery.activity.privacyspace.PrivacySpaceActivity import com.base.datarecovery.activity.privacyspace.PrivacySpaceActivity
...@@ -33,6 +34,7 @@ import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_VIDEOS ...@@ -33,6 +34,7 @@ import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_VIDEOS
import com.base.datarecovery.bean.ConstObject.ID_SCREENSHOT_CLEAN import com.base.datarecovery.bean.ConstObject.ID_SCREENSHOT_CLEAN
import com.base.datarecovery.bean.ConstObject.ID_SIMILAR_IMAGE import com.base.datarecovery.bean.ConstObject.ID_SIMILAR_IMAGE
import com.base.datarecovery.bean.ConstObject.ifAgreePrivacy import com.base.datarecovery.bean.ConstObject.ifAgreePrivacy
import com.base.datarecovery.bean.ConstObject.isGuide
import com.base.datarecovery.bean.ConstObject.privacyPinPassword import com.base.datarecovery.bean.ConstObject.privacyPinPassword
import com.base.datarecovery.databinding.ActivitySplashBinding import com.base.datarecovery.databinding.ActivitySplashBinding
import com.base.datarecovery.fcm.CloseNotificationReceiver import com.base.datarecovery.fcm.CloseNotificationReceiver
...@@ -178,10 +180,14 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() { ...@@ -178,10 +180,14 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
else -> { else -> {
val isHotLaunch = intent?.extras?.getBoolean("isHotLaunch", false) ?: false val isHotLaunch = intent?.extras?.getBoolean("isHotLaunch", false) ?: false
if (!isHotLaunch) { if (!isHotLaunch) {
if (!isGuide) {
startActivity(Intent(this@SplashActivity, GuideActivity::class.java))
} else {
startActivity(Intent(this@SplashActivity, MainActivity::class.java)) startActivity(Intent(this@SplashActivity, MainActivity::class.java))
} }
} }
} }
}
finish() finish()
} }
......
package com.base.datarecovery.activity.guide
import android.graphics.Color
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.base.datarecovery.R
import com.base.datarecovery.databinding.ActivityGuideBinding
import com.base.datarecovery.fragment.GuideFragment
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.utils.BarUtils
class GuideActivity : BaseActivity<ActivityGuideBinding>() {
private val page1: GuideFragment by lazy {
GuideFragment(1)
}
private val page2: GuideFragment by lazy {
GuideFragment(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) {
}
})
}
}
\ No newline at end of file
...@@ -66,13 +66,13 @@ object AdMaxInterstitialUtils { ...@@ -66,13 +66,13 @@ object AdMaxInterstitialUtils {
override fun onAdDisplayed(p0: MaxAd) { override fun onAdDisplayed(p0: MaxAd) {
LogEx.logDebug(TAG, "onAdDisplayed") LogEx.logDebug(TAG, "onAdDisplayed")
AdDisplayUtils.getInstance().incrementAdDisplayCount() AdDisplayUtils.getInstance().incrementAdDisplayCount()
AdMaxEvent.showAd(p0, "interAd",activity) AdMaxEvent.showAd(p0, "interAd", activity)
} }
override fun onAdHidden(p0: MaxAd) { override fun onAdHidden(p0: MaxAd) {
LogEx.logDebug(TAG, "onAdHidden") LogEx.logDebug(TAG, "onAdHidden")
onHidden?.invoke() onHidden?.invoke()
interstitialAd?.loadAd() loadInterstitialAd(activity)
} }
override fun onAdClicked(p0: MaxAd) { override fun onAdClicked(p0: MaxAd) {
......
...@@ -16,7 +16,6 @@ import com.base.datarecovery.help.BaseApplication ...@@ -16,7 +16,6 @@ import com.base.datarecovery.help.BaseApplication
import com.base.datarecovery.help.ConfigHelper import com.base.datarecovery.help.ConfigHelper
import com.base.datarecovery.utils.EventUtils import com.base.datarecovery.utils.EventUtils
import com.base.datarecovery.utils.LogEx import com.base.datarecovery.utils.LogEx
import com.ironsource.ac
import org.json.JSONObject import org.json.JSONObject
object AdMaxNativeUtils { object AdMaxNativeUtils {
......
...@@ -34,6 +34,14 @@ object ConstObject { ...@@ -34,6 +34,14 @@ 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 rememberOption = false var rememberOption = false
get() { get() {
......
package com.base.datarecovery.fragment
import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.base.datarecovery.R
import com.base.datarecovery.activity.MainActivity
import com.base.datarecovery.activity.guide.GuideActivity
import com.base.datarecovery.bean.ConstObject.isGuide
import com.base.datarecovery.databinding.FragmentGuideBinding
import com.base.datarecovery.help.BaseFragment
class GuideFragment(
val page: Int
) : BaseFragment<FragmentGuideBinding>() {
override val binding: FragmentGuideBinding by lazy {
FragmentGuideBinding.inflate(layoutInflater)
}
@SuppressLint("SetTextI18n")
override fun setView() {
if (page == 1) {
binding.iv.setImageResource(R.mipmap.ydytu1)
binding.tv0.text = "All Free"
binding.tvBtn.text = "Next"
binding.flSkip.visibility = View.VISIBLE
} else {
binding.iv.setImageResource(R.mipmap.ydytu2)
binding.tv0.text = "Effective recovery"
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 {
startActivity(Intent(requireContext(), MainActivity::class.java))
requireActivity().finish()
isGuide = true
}
}
binding.flSkip.setOnClickListener {
startActivity(Intent(requireContext(), MainActivity::class.java))
requireActivity().finish()
isGuide = true
}
}
}
\ 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: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"
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/ydytu1" />
<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">
</View>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/tv_btn"
app:layout_constraintTop_toBottomOf="@id/ll"
tools:ignore="UselessLeaf" />
<View
android:id="@+id/tv_btn"
android:layout_width="164dp"
android:layout_height="45dp"
android:layout_marginBottom="100dp"
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"
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/ydytu1" />
<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="Our features are all available for free\ntrial, with no fees or trial period\nrestrictions"
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
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