Commit 7bce9429 authored by wanglei's avatar wanglei

[新增]通知

parent c3593211
...@@ -101,7 +101,7 @@ ...@@ -101,7 +101,7 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:name=".ui.main.SettingActivity" android:name=".ui.set.SettingActivity"
android:exported="false" android:exported="false"
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
......
...@@ -30,12 +30,13 @@ import com.base.appzxhy.bean.config.AdConfigBean ...@@ -30,12 +30,13 @@ import com.base.appzxhy.bean.config.AdConfigBean
import com.base.appzxhy.bean.config.ConfigBean import com.base.appzxhy.bean.config.ConfigBean
import com.base.appzxhy.bean.config.PopupConfigBean import com.base.appzxhy.bean.config.PopupConfigBean
import com.base.appzxhy.business.ads.AdsMgr import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.business.push.notification.MyNotificationManager
import com.base.appzxhy.push.fcm.FCMManager import com.base.appzxhy.push.fcm.FCMManager
import com.base.appzxhy.push.notification.MyNotificationManager
import com.base.appzxhy.push.receiver.AlarmReceiver.Companion.startAlarm import com.base.appzxhy.push.receiver.AlarmReceiver.Companion.startAlarm
import com.base.appzxhy.push.receiver.ScreenStatusReceiver import com.base.appzxhy.push.receiver.ScreenStatusReceiver
import com.base.appzxhy.push.timer.TimerManager.Companion.changeTimer import com.base.appzxhy.push.timer.TimerManager.Companion.changeTimer
import com.base.appzxhy.push.work.RepeatingWorker.Companion.schedulePeriodicWork import com.base.appzxhy.push.work.RepeatingWorker.Companion.schedulePeriodicWork
import com.base.appzxhy.ui.splash.SplashActivity
class MyApplication : Application() { class MyApplication : Application() {
...@@ -55,7 +56,7 @@ class MyApplication : Application() { ...@@ -55,7 +56,7 @@ class MyApplication : Application() {
"adActivity", "adActivity",
"AdActivity", "AdActivity",
"AppLovinFullscreenActivity", "AppLovinFullscreenActivity",
// StartActivity::class.java.simpleName, SplashActivity::class.java.simpleName,
// 返回前台时不跳转启动页的 activity // 返回前台时不跳转启动页的 activity
) )
} }
...@@ -170,7 +171,6 @@ class MyApplication : Application() { ...@@ -170,7 +171,6 @@ class MyApplication : Application() {
}.start() }.start()
} }
private var lastTimePause = 0L private var lastTimePause = 0L
private var lastTimeResume = 0L private var lastTimeResume = 0L
private fun isHotLaunch(): Boolean { private fun isHotLaunch(): Boolean {
......
...@@ -6,6 +6,7 @@ import java.util.Locale ...@@ -6,6 +6,7 @@ import java.util.Locale
object SpConstObject { object SpConstObject {
//是否已经点击start
var ifAgreePrivacy = false var ifAgreePrivacy = false
get() { get() {
return AppPreferences.getInstance().getBoolean("ifAgreePrivacy", field) return AppPreferences.getInstance().getBoolean("ifAgreePrivacy", field)
...@@ -15,10 +16,12 @@ object SpConstObject { ...@@ -15,10 +16,12 @@ object SpConstObject {
AppPreferences.getInstance().put("ifAgreePrivacy", value, true) AppPreferences.getInstance().put("ifAgreePrivacy", value, true)
} }
//是否已经走过引导页
var isGuided var isGuided
get() = AppPreferences.getInstance().getBoolean("isGuided", false) get() = AppPreferences.getInstance().getBoolean("isGuided", false)
set(value) = AppPreferences.getInstance().putBoolean("isGuided", value) set(value) = AppPreferences.getInstance().putBoolean("isGuided", value)
var appLanguageSp: String = Locale.getDefault().language var appLanguageSp: String = Locale.getDefault().language
get() { get() {
return AppPreferences.getInstance().getString("languageSp", field) return AppPreferences.getInstance().getString("languageSp", field)
...@@ -37,6 +40,7 @@ object SpConstObject { ...@@ -37,6 +40,7 @@ object SpConstObject {
AppPreferences.getInstance().put("languageCountrySp", value, true) AppPreferences.getInstance().put("languageCountrySp", value, true)
} }
//清理过的文件大小
var cleanedSize = 0L var cleanedSize = 0L
get() { get() {
return AppPreferences.getInstance().getLong("cleanedSize", field) return AppPreferences.getInstance().getLong("cleanedSize", field)
...@@ -46,5 +50,35 @@ object SpConstObject { ...@@ -46,5 +50,35 @@ object SpConstObject {
AppPreferences.getInstance().put("cleanedSize", value, true) AppPreferences.getInstance().put("cleanedSize", value, true)
} }
//是否已经评价过
var isScoreRated = false
get() {
return AppPreferences.getInstance().getBoolean("isScoreRated", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("isScoreRated", value, true)
}
//平均分数
var scoreRate = 0
get() {
return AppPreferences.getInstance().getInt("scoreRate", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("scoreRate", value, true)
}
//回到主页的次数
var mainPageCount = 0L
get() {
return AppPreferences.getInstance().getLong("mainPageCount", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("mainPageCount", value, true)
}
} }
\ No newline at end of file
...@@ -16,7 +16,7 @@ class NotificationSendBean( ...@@ -16,7 +16,7 @@ class NotificationSendBean(
var bigRemoteViews: RemoteViews? = null var bigRemoteViews: RemoteViews? = null
var smallRemoteViews: RemoteViews? = null var smallRemoteViews: RemoteViews? = null
var intent: Intent? = null var intent: Intent? = null
var notificationId: Int = 1999 var notificationId: Int = 2025
companion object { companion object {
......
...@@ -5,8 +5,8 @@ import android.content.Context ...@@ -5,8 +5,8 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import com.base.appzxhy.bean.push.NotificationSendBean import com.base.appzxhy.bean.push.NotificationSendBean
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_FCM import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_FCM
import com.base.appzxhy.push.notification.MyNotificationManager
import com.base.appzxhy.business.helper.EventUtils.event import com.base.appzxhy.business.helper.EventUtils.event
import com.base.appzxhy.business.push.notification.MyNotificationManager
class FcmReceiver : BroadcastReceiver() { class FcmReceiver : BroadcastReceiver() {
......
...@@ -3,8 +3,8 @@ package com.base.appzxhy.business.push.fcm ...@@ -3,8 +3,8 @@ package com.base.appzxhy.business.push.fcm
import android.annotation.SuppressLint import android.annotation.SuppressLint
import com.base.appzxhy.bean.push.NotificationSendBean import com.base.appzxhy.bean.push.NotificationSendBean
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_FCM import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_FCM
import com.base.appzxhy.push.notification.MyNotificationManager
import com.base.appzxhy.business.helper.EventUtils.event import com.base.appzxhy.business.helper.EventUtils.event
import com.base.appzxhy.business.push.notification.MyNotificationManager
import com.google.firebase.messaging.FirebaseMessagingService import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage import com.google.firebase.messaging.RemoteMessage
import org.json.JSONObject import org.json.JSONObject
......
package com.base.appzxhy.push.notification package com.base.appzxhy.business.push.notification
import android.content.Context import android.content.Context
import com.base.appzxhy.BuildConfig import com.base.appzxhy.BuildConfig
import com.base.appzxhy.MyApplication import com.base.appzxhy.MyApplication
import com.base.appzxhy.bean.FeatureBean.Companion.BATTERY_INFO
import com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN
import com.base.appzxhy.bean.FeatureBean.Companion.LARGE_FILE_CLEAN
import com.base.appzxhy.bean.FeatureBean.Companion.PHOTO_COMPRESSION
import com.base.appzxhy.bean.FeatureBean.Companion.SCREENSHOT_CLEAN
import com.base.appzxhy.bean.FeatureBean.Companion.SIMILAR_PHOTOS
import com.base.appzxhy.bean.push.NotificationSendBean import com.base.appzxhy.bean.push.NotificationSendBean
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.ACTION_ID_TEST
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_WORK_MANAGER import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_WORK_MANAGER
import com.base.appzxhy.bean.config.PopupConfigBean.Companion.popupConfigBean import com.base.appzxhy.bean.config.PopupConfigBean.Companion.popupConfigBean
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_ALARM
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_LOCK
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_TIMER
import com.base.appzxhy.business.helper.EventUtils import com.base.appzxhy.business.helper.EventUtils
import com.base.appzxhy.utils.AppPreferences import com.base.appzxhy.utils.AppPreferences
import com.base.appzxhy.utils.KotlinExt.currentDate import com.base.appzxhy.utils.KotlinExt.currentDate
...@@ -50,7 +58,7 @@ object MyNotificationManager { ...@@ -50,7 +58,7 @@ object MyNotificationManager {
private var isStartSendQueue = AtomicBoolean(false) private var isStartSendQueue = AtomicBoolean(false)
private var isUnLimit: Boolean = if (BuildConfig.DEBUG) true else false private var isUnLimit: Boolean = if (BuildConfig.DEBUG) false else false
fun startNotificationQueue() { fun startNotificationQueue() {
if (isStartSendQueue.get()) return if (isStartSendQueue.get()) return
...@@ -81,7 +89,7 @@ object MyNotificationManager { ...@@ -81,7 +89,7 @@ object MyNotificationManager {
} }
//提前准备数据 //提前准备数据
when(bean.actionId){ when (bean.actionId) {
} }
...@@ -180,20 +188,26 @@ object MyNotificationManager { ...@@ -180,20 +188,26 @@ object MyNotificationManager {
* 值测某些类型 * 值测某些类型
*/ */
private var testWhere = listOf( private var testWhere = listOf(
// POPUP_WHERE_TIMER, POPUP_WHERE_TIMER,
// POPUP_WHERE_LOCK, POPUP_WHERE_LOCK,
// POPUP_WHERE_ALARM, POPUP_WHERE_ALARM,
POPUP_WHERE_WORK_MANAGER POPUP_WHERE_WORK_MANAGER
) )
private val looper_actionId = listOf( private val looper_actionId = listOf(
ACTION_ID_TEST, // ACTION_ID_TEST,
JUNK_CLEAN,
BATTERY_INFO,
SCREENSHOT_CLEAN,
LARGE_FILE_CLEAN,
PHOTO_COMPRESSION,
SIMILAR_PHOTOS,
) )
private var actionIdList = arrayListOf<String>() private var actionIdList = arrayListOf<String>()
private fun getNextActionId(): String { private fun getNextActionId(): String {
if (BuildConfig.DEBUG) { // if (BuildConfig.DEBUG) {
return ACTION_ID_TEST // return JUNK_CLEAN
} // }
if (actionIdList.isEmpty()) { if (actionIdList.isEmpty()) {
actionIdList.addAll(looper_actionId) actionIdList.addAll(looper_actionId)
......
package com.base.appzxhy.push.notification package com.base.appzxhy.business.push.notification
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
......
package com.base.appzxhy.push.notification package com.base.appzxhy.business.push.notification
import android.os.Handler import android.os.Handler
import android.os.HandlerThread import android.os.HandlerThread
......
package com.base.appzxhy.push.notification package com.base.appzxhy.business.push.notification
import android.app.NotificationChannel import android.app.NotificationChannel
import android.app.NotificationManager import android.app.NotificationManager
...@@ -11,8 +11,12 @@ import android.widget.RemoteViews ...@@ -11,8 +11,12 @@ import android.widget.RemoteViews
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.IconCompat import androidx.core.graphics.drawable.IconCompat
import com.base.appzxhy.R import com.base.appzxhy.R
import com.base.appzxhy.bean.FeatureBean.Companion.BATTERY_INFO
import com.base.appzxhy.bean.FeatureBean.Companion.JUNK_CLEAN
import com.base.appzxhy.bean.FeatureBean.Companion.LARGE_FILE_CLEAN
import com.base.appzxhy.bean.FeatureBean.Companion.SCREENSHOT_CLEAN
import com.base.appzxhy.bean.FeatureBean.Companion.SIMILAR_PHOTOS
import com.base.appzxhy.bean.push.NotificationSendBean import com.base.appzxhy.bean.push.NotificationSendBean
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.ACTION_ID_TEST
import com.base.appzxhy.bean.config.PopupConfigBean import com.base.appzxhy.bean.config.PopupConfigBean
import com.base.appzxhy.ui.splash.SplashActivity import com.base.appzxhy.ui.splash.SplashActivity
import kotlin.random.Random import kotlin.random.Random
...@@ -22,8 +26,8 @@ import kotlin.random.Random ...@@ -22,8 +26,8 @@ import kotlin.random.Random
*/ */
object NotificationUiUtil { object NotificationUiUtil {
private val CHANNEL_ID = "video downloader saver Channel" private val CHANNEL_ID = "dumpster cleaner Channel"
private val CHANNEL_NAME = "video downloader saver Channel NAME" private val CHANNEL_NAME = "dumpster cleaner Channel NAME"
/** /**
* 这部分准备UI的代码不能放入IO * 这部分准备UI的代码不能放入IO
...@@ -31,8 +35,60 @@ object NotificationUiUtil { ...@@ -31,8 +35,60 @@ object NotificationUiUtil {
fun setNotification(sendBean: NotificationSendBean): NotificationSendBean { fun setNotification(sendBean: NotificationSendBean): NotificationSendBean {
val context = sendBean.context val context = sendBean.context
when (sendBean.actionId) { when (sendBean.actionId) {
ACTION_ID_TEST -> {
JUNK_CLEAN -> {
val text = "Clean up the junk files on your phone now!"
sendBean.smallRemoteViews = RemoteViews(context.packageName, R.layout.notification_common_small).apply {
setTextViewText(R.id.tv1, text)
}
sendBean.bigRemoteViews = RemoteViews(context.packageName, R.layout.notification_common_large).apply {
setTextViewText(R.id.tv1, text)
setImageViewResource(R.id.ivIcon, R.drawable.icon_clean)
}
}
BATTERY_INFO -> {
val text = "Check your phone battery consumption recently!"
sendBean.smallRemoteViews = RemoteViews(context.packageName, R.layout.notification_common_small).apply {
setTextViewText(R.id.tv1, text)
}
sendBean.bigRemoteViews = RemoteViews(context.packageName, R.layout.notification_common_large).apply {
setTextViewText(R.id.tv1, text)
setImageViewResource(R.id.ivIcon, R.drawable.icon_battery)
}
}
LARGE_FILE_CLEAN -> {
val text = "Clear out large files to free up your storage space!"
sendBean.smallRemoteViews = RemoteViews(context.packageName, R.layout.notification_common_small).apply {
setTextViewText(R.id.tv1, text)
}
sendBean.bigRemoteViews = RemoteViews(context.packageName, R.layout.notification_common_large).apply {
setTextViewText(R.id.tv1, text)
setImageViewResource(R.id.ivIcon, R.drawable.icon_large_file_cleanner)
}
}
SIMILAR_PHOTOS -> {
val text = "Clean Up Similar Photos – Save Space!"
sendBean.smallRemoteViews = RemoteViews(context.packageName, R.layout.notification_common_small).apply {
setTextViewText(R.id.tv1, text)
}
sendBean.bigRemoteViews = RemoteViews(context.packageName, R.layout.notification_common_large).apply {
setTextViewText(R.id.tv1, text)
setImageViewResource(R.id.ivIcon, R.drawable.icon_duplicate_photos)
}
}
SCREENSHOT_CLEAN -> {
val text = "Free up space by clearing screenshot clutter!"
sendBean.smallRemoteViews = RemoteViews(context.packageName, R.layout.notification_common_small).apply {
setTextViewText(R.id.tv1, text)
}
sendBean.bigRemoteViews = RemoteViews(context.packageName, R.layout.notification_common_large).apply {
setTextViewText(R.id.tv1, text)
setImageViewResource(R.id.ivIcon, R.drawable.icon_screenshot_cleaner)
}
} }
} }
...@@ -43,7 +99,7 @@ object NotificationUiUtil { ...@@ -43,7 +99,7 @@ object NotificationUiUtil {
// val bean = sendBean.valueMap["bean"] as NotificationInfoBean // val bean = sendBean.valueMap["bean"] as NotificationInfoBean
intent.putExtra("actionId", sendBean.actionId) intent.putExtra("actionId", sendBean.actionId)
// intent.putExtra("linkUrl", bean.linkUrl) // intent.putExtra("linkUrl", bean.linkUrl)
// intent.putExtra("notificationId", sendBean.notificationId) intent.putExtra("notificationId", sendBean.notificationId)
sendBean.intent = intent sendBean.intent = intent
sendCustomNotification(sendBean) sendCustomNotification(sendBean)
return sendBean return sendBean
......
...@@ -11,7 +11,7 @@ import com.base.appzxhy.BuildConfig ...@@ -11,7 +11,7 @@ import com.base.appzxhy.BuildConfig
import com.base.appzxhy.bean.push.NotificationSendBean import com.base.appzxhy.bean.push.NotificationSendBean
import com.base.appzxhy.bean.config.PopupConfigBean import com.base.appzxhy.bean.config.PopupConfigBean
import com.base.appzxhy.business.helper.EventUtils import com.base.appzxhy.business.helper.EventUtils
import com.base.appzxhy.push.notification.MyNotificationManager import com.base.appzxhy.business.push.notification.MyNotificationManager
import com.base.appzxhy.push.work.RepeatingWorker import com.base.appzxhy.push.work.RepeatingWorker
import com.base.appzxhy.utils.LogEx import com.base.appzxhy.utils.LogEx
import java.util.Calendar import java.util.Calendar
......
...@@ -8,7 +8,7 @@ import android.os.Build ...@@ -8,7 +8,7 @@ import android.os.Build
import com.base.appzxhy.bean.push.NotificationSendBean import com.base.appzxhy.bean.push.NotificationSendBean
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_LOCK import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_LOCK
import com.base.appzxhy.bean.config.PopupConfigBean.Companion.popupConfigBean import com.base.appzxhy.bean.config.PopupConfigBean.Companion.popupConfigBean
import com.base.appzxhy.push.notification.MyNotificationManager import com.base.appzxhy.business.push.notification.MyNotificationManager
import java.util.Objects import java.util.Objects
class ScreenStatusReceiver : BroadcastReceiver() { class ScreenStatusReceiver : BroadcastReceiver() {
......
...@@ -5,7 +5,7 @@ import com.base.appzxhy.MyApplication ...@@ -5,7 +5,7 @@ import com.base.appzxhy.MyApplication
import com.base.appzxhy.bean.push.NotificationSendBean import com.base.appzxhy.bean.push.NotificationSendBean
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_TIMER import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_TIMER
import com.base.appzxhy.bean.config.PopupConfigBean.Companion.popupConfigBean import com.base.appzxhy.bean.config.PopupConfigBean.Companion.popupConfigBean
import com.base.appzxhy.push.notification.MyNotificationManager import com.base.appzxhy.business.push.notification.MyNotificationManager
import com.base.appzxhy.push.receiver.ScreenStatusReceiver import com.base.appzxhy.push.receiver.ScreenStatusReceiver
import java.util.Timer import java.util.Timer
import java.util.TimerTask import java.util.TimerTask
......
...@@ -11,8 +11,8 @@ import androidx.work.WorkerParameters ...@@ -11,8 +11,8 @@ import androidx.work.WorkerParameters
import com.base.appzxhy.bean.push.NotificationSendBean import com.base.appzxhy.bean.push.NotificationSendBean
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_WORK_MANAGER import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_WORK_MANAGER
import com.base.appzxhy.bean.config.PopupConfigBean import com.base.appzxhy.bean.config.PopupConfigBean
import com.base.appzxhy.push.notification.MyNotificationManager
import com.base.appzxhy.business.helper.EventUtils import com.base.appzxhy.business.helper.EventUtils
import com.base.appzxhy.business.push.notification.MyNotificationManager
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
class RepeatingWorker(val appContext: Context, workerParams: WorkerParameters) : Worker(appContext, workerParams) { class RepeatingWorker(val appContext: Context, workerParams: WorkerParameters) : Worker(appContext, workerParams) {
......
package com.base.appzxhy.ui.dialog package com.base.appzxhy.ui.dialog
import android.app.Activity import android.app.Activity
import android.content.Intent
import android.view.LayoutInflater
import androidx.appcompat.app.AlertDialog
import com.base.appzxhy.R
import com.base.appzxhy.SpConstObject.scoreRate
import com.base.appzxhy.databinding.DialogRateBinding
import androidx.core.net.toUri
import com.base.appzxhy.SpConstObject.isScoreRated
class RateDialog( class RateDialog(
val activity: Activity val activity: Activity
) { ) {
val dialog = AlertDialog.Builder(activity).create()
val binding = DialogRateBinding.inflate(LayoutInflater.from(activity))
var action: (() -> Unit)? = null
fun showDialog(isMust: Boolean) {
if (!isMust) {
if (isScoreRated && scoreRate == 5)
return
}
dialog.setView(binding.root)
dialog.setCanceledOnTouchOutside(true)
val params = dialog.window?.attributes
// params?.width = activity.resources.getDimensionPixelSize(R.dimen.dp_300)
// params?.width = FrameLayout.LayoutParams.WRAP_CONTENT
// params?.height = FrameLayout.LayoutParams.WRAP_CONTENT
// params?.gravity = Gravity.CENTER
dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
dialog.show()
val appName = activity.getString(R.string.app_name)
val thankTip = activity.getString(R.string.thank_you_for_using_app, appName)
binding.tvThank.text = thankTip
binding.ivClose.setOnClickListener {
dialog.dismiss()
}
var score = 0
val starList = listOf(
binding.star1,
binding.star2,
binding.star3,
binding.star4,
binding.star5,
)
starList.forEachIndexed { index, view ->
view.setOnClickListener {
starList.forEachIndexed { index2, view2 ->
view2.setImageResource(if (index2 <= index) R.drawable.icon_star_s else R.drawable.icon_star_n)
}
score = index + 1
}
}
binding.tvSubmit.setOnClickListener {
if (score == 5) {
scoreRate = score
}
try {
val url = "https://play.google.com/store/apps/details?id=${activity.packageName}"
activity.startActivity(Intent(Intent.ACTION_VIEW, url.toUri()))
isScoreRated = true
} catch (_: Exception) {
}
dialog.dismiss()
}
binding.star1.callOnClick()
}
} }
\ No newline at end of file
...@@ -14,6 +14,7 @@ import com.base.appzxhy.bean.FeatureBean.Companion.SIMILAR_PHOTOS ...@@ -14,6 +14,7 @@ import com.base.appzxhy.bean.FeatureBean.Companion.SIMILAR_PHOTOS
import com.base.appzxhy.business.ads.AdsMgr import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.FragmentHome2Binding import com.base.appzxhy.databinding.FragmentHome2Binding
import com.base.appzxhy.ui.dialog.permissionStorageJump import com.base.appzxhy.ui.dialog.permissionStorageJump
import com.base.appzxhy.ui.set.SettingActivity
import com.base.appzxhy.utils.Utils import com.base.appzxhy.utils.Utils
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async import kotlinx.coroutines.async
...@@ -46,7 +47,7 @@ class Home2Fragment : BaseFragment<FragmentHome2Binding>(FragmentHome2Binding::i ...@@ -46,7 +47,7 @@ class Home2Fragment : BaseFragment<FragmentHome2Binding>(FragmentHome2Binding::i
(requireActivity() as MainActivity).jumpAction(BATTERY_INFO) (requireActivity() as MainActivity).jumpAction(BATTERY_INFO)
} }
binding.llLarge.setOnClickListener { binding.llLarge.setOnClickListener {
(requireActivity() as MainActivity).jumpAction(LARGE_FILE_CLEAN) (requireActivity() as MainActivity).permissionStorageJump(LARGE_FILE_CLEAN)
} }
binding.llDuplicate.setOnClickListener { binding.llDuplicate.setOnClickListener {
(requireActivity() as MainActivity).permissionStorageJump(SIMILAR_PHOTOS) (requireActivity() as MainActivity).permissionStorageJump(SIMILAR_PHOTOS)
......
...@@ -6,19 +6,28 @@ import android.view.View ...@@ -6,19 +6,28 @@ import android.view.View
import android.widget.TextView import android.widget.TextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import com.base.appzxhy.R import com.base.appzxhy.R
import com.base.appzxhy.SpConstObject.mainPageCount
import com.base.appzxhy.base.BaseActivity import com.base.appzxhy.base.BaseActivity
import com.base.appzxhy.bean.HomeTabUIBean import com.base.appzxhy.bean.HomeTabUIBean
import com.base.appzxhy.business.ads.AdsMgr import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.ActivityMainBinding import com.base.appzxhy.databinding.ActivityMainBinding
import com.base.appzxhy.databinding.ItemHomeTabBinding import com.base.appzxhy.databinding.ItemHomeTabBinding
import com.base.appzxhy.ui.recyclebin.RecycleBinFragment
import com.base.appzxhy.utils.PermissionUtils.requestStoragePermission
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayout.OnTabSelectedListener import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate) { class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate) {
val viewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] }
private val fragmentList = listOf( private val fragmentList = listOf(
Home2Fragment(), Home2Fragment(),
RecoveryFragment(), RecoveryFragment(),
...@@ -38,9 +47,26 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl ...@@ -38,9 +47,26 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
initTab() initTab()
initViewPager2() initViewPager2()
initDialogFlow()
AdsMgr.showBanner(binding.flBanner, false) AdsMgr.showBanner(binding.flBanner, false)
} }
private fun initDialogFlow() {
lifecycleScope.launch {
viewModel.dialogFlow.collectLatest { dialogType ->
when (dialogType) {
"StoreDialog" -> {
requestStoragePermission(launcher) {}
}
"NotificationDialog"->{
}
}
}
}
}
private fun initViewPager2() { private fun initViewPager2() {
binding.viewPager2.adapter = viewPagerAdapter binding.viewPager2.adapter = viewPagerAdapter
binding.viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { binding.viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
...@@ -103,4 +129,11 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl ...@@ -103,4 +129,11 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
textView?.setTextColor(Color.parseColor("#999999")) textView?.setTextColor(Color.parseColor("#999999"))
} }
override fun onResumeOneShoot() {
super.onResumeOneShoot()
mainPageCount = mainPageCount + 1
viewModel.checkDialog(this)
}
} }
\ No newline at end of file
package com.base.appzxhy.ui.main package com.base.appzxhy.ui.main
import android.content.Context
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.base.appzxhy.utils.PermissionUtils.checkStorePermission
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
class MainViewModel : ViewModel() { class MainViewModel : ViewModel() {
var dialogFlow: MutableStateFlow<String> = MutableStateFlow("")
var nextShowDialog: Boolean = true
fun checkDialog(context: Context) {
if (!context.checkStorePermission()) {
dialogFlow.update { "StoreDialog" }
return
}
// if (!context.checkNotificationPermission()) {
// dialogFlow.update { "NotificationDialog" }
// return
// }
}
} }
\ No newline at end of file
package com.base.appzxhy.ui.main package com.base.appzxhy.ui.recyclebin
import com.base.appzxhy.R import com.base.appzxhy.R
import com.base.appzxhy.base.BaseFragment import com.base.appzxhy.base.BaseFragment
import com.base.appzxhy.business.ads.AdsMgr import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.FragmentRecycleBinBinding import com.base.appzxhy.databinding.FragmentRecycleBinBinding
class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>(FragmentRecycleBinBinding::inflate) { class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>(FragmentRecycleBinBinding::inflate) {
override fun initView() { override fun initView() {
...@@ -16,4 +15,5 @@ class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>(FragmentRecyc ...@@ -16,4 +15,5 @@ class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>(FragmentRecyc
override fun initListener() { override fun initListener() {
super.initListener() super.initListener()
} }
} }
\ No newline at end of file
package com.base.appzxhy.ui.recyclebin
import com.base.appzxhy.MyApplication
import java.io.File
object RecycleBinUtils {
val mImageStr: Set<String> = HashSet(
mutableListOf(".jpg", ".jpeg", ".png", ".gif", ".bmp")
)
val mVideoStr: Set<String> = HashSet(
mutableListOf(".mp4", ".avi", ".mov", ".mkv")
)
val mAudioStr: Set<String> = HashSet(
mutableListOf(".mp3", ".flac", ".wav")
)
val mDocumentStr: Set<String> = HashSet(mutableListOf(".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf"))
fun getRecycleBinData(): List<File> {
val file = File(MyApplication.Companion.appContext.filesDir, "recycleBin")
if (file.exists()) {
val arrayList = arrayListOf<File>()
arrayList.addAll(arrayList)
return arrayList
} else {
return listOf()
}
}
fun addRecycleBinFile(file: File) {
val recycleBinDir = File(MyApplication.Companion.appContext.filesDir, "recycleBin")
if (!recycleBinDir.exists()) {
recycleBinDir.mkdirs()
}
val recycleBinFile = File(recycleBinDir, "." + file.name)
file.copyTo(recycleBinFile, true)
}
}
\ No newline at end of file
package com.base.appzxhy.ui.main package com.base.appzxhy.ui.set
import androidx.core.graphics.Insets import androidx.core.graphics.Insets
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
......
package com.base.appzxhy.ui.main package com.base.appzxhy.ui.set
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import com.base.appzxhy.BuildConfig import com.base.appzxhy.BuildConfig
import com.base.appzxhy.GlobalConfig.URL_PRIVACY import com.base.appzxhy.GlobalConfig.URL_PRIVACY
...@@ -14,6 +13,7 @@ import androidx.core.net.toUri ...@@ -14,6 +13,7 @@ import androidx.core.net.toUri
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import com.base.appzxhy.R import com.base.appzxhy.R
import com.base.appzxhy.business.ads.AdsMgr import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.ui.dialog.RateDialog
import com.base.appzxhy.utils.MyAnimationUtils import com.base.appzxhy.utils.MyAnimationUtils
...@@ -46,7 +46,8 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding>(FragmentSettingsB ...@@ -46,7 +46,8 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding>(FragmentSettingsB
startActivity(Intent(Intent.ACTION_VIEW, URL_PRIVACY.toUri())) startActivity(Intent(Intent.ACTION_VIEW, URL_PRIVACY.toUri()))
} }
binding.clRateUs.setOnClickListener { binding.clRateUs.setOnClickListener {
val dialog = RateDialog(requireActivity())
dialog.showDialog(true)
} }
} }
......
...@@ -5,11 +5,11 @@ ...@@ -5,11 +5,11 @@
android:id="@+id/main" android:id="@+id/main"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.main.SettingActivity"> tools:context=".ui.set.SettingActivity">
<fragment <fragment
android:id="@+id/fragment" android:id="@+id/fragment"
android:name="com.base.appzxhy.ui.main.SettingsFragment" android:name="com.base.appzxhy.ui.set.SettingsFragment"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent" />
......
<?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"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/transparent">
<FrameLayout
android:layout_width="@dimen/dp_320"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_45"
android:background="@drawable/bg_ffffff_8"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivClose"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_gravity="end|top"
android:layout_margin="@dimen/dp_10"
app:srcCompat="@drawable/icon_close" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dp_60"
android:gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:id="@+id/tvThank"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_40"
android:text="@string/thank_you_for_using_app"
android:textColor="#1A1A1A"
android:textSize="@dimen/sp_18" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center"
android:text="@string/thank_you_very_much_for_taking_the_time_to_rate_us" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_20"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/star1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
app:srcCompat="@drawable/icon_star_s" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/star2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
app:srcCompat="@drawable/icon_star_s" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/star3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
app:srcCompat="@drawable/icon_star_s" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/star4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
app:srcCompat="@drawable/icon_star_s" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/star5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
app:srcCompat="@drawable/icon_star_s" />
</LinearLayout>
<TextView
android:id="@+id/tvSubmit"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:layout_marginHorizontal="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_30"
android:layout_marginBottom="@dimen/dp_30"
android:background="@drawable/bg_enable_4"
android:gravity="center"
android:text="@string/submit"
android:textColor="@color/white"
android:textSize="@dimen/sp_17" />
</LinearLayout>
</FrameLayout>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/img_pingjia" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -320,7 +320,7 @@ ...@@ -320,7 +320,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10" android:layout_marginStart="@dimen/dp_10"
android:layout_weight="1" android:layout_weight="1"
android:text="@string/duplicate_photos" android:text="@string/screenshot_cleaner"
android:textColor="#1A1A1A" android:textColor="#1A1A1A"
android:textSize="@dimen/sp_14" /> android:textSize="@dimen/sp_14" />
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="#F4F5F9" android:background="#F4F5F9"
tools:context=".ui.main.RecycleBinFragment"> tools:context=".ui.recyclebin.RecycleBinFragment">
<FrameLayout <FrameLayout
android:id="@+id/flTop" android:id="@+id/flTop"
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="@drawable/white_background">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="16dp"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/ivIcon"
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:src="@mipmap/logo"
tools:ignore="ContentDescription" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginEnd="6dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:text="notification_junk_clean"
android:textColor="@color/color_181b1f"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/color_999999"
android:textSize="12sp"
android:visibility="gone"
tools:text="Are you sure you want to quit without trying to clean up the garbage again?" />
</LinearLayout>
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center">
<TextView
android:id="@+id/tv_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:background="@drawable/bg_btn_50"
android:gravity="center"
android:paddingVertical="8dp"
android:text="@string/clean_now"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold" />
</RelativeLayout>
</LinearLayout>
<TextView
android:id="@+id/tv_mark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textColor="@color/colorPrimary"
android:textSize="16sp" />
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center"
android:orientation="horizontal"
android:paddingStart="8dp"
android:paddingTop="4dp"
android:paddingEnd="12dp"
android:paddingBottom="4dp">
<LinearLayout
android:id="@+id/ll_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal"
tools:ignore="UselessParent">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:ellipsize="end"
android:maxLines="1"
android:text="notification_junk_clean"
android:textColor="@color/color_181b1f"
android:textSize="14sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/color_999999"
android:textSize="12sp"
android:visibility="gone"
tools:text="Are you sure you want to quit without trying to clean up the garbage again?" />
</LinearLayout>
<TextView
android:id="@+id/tv_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_btn_50"
android:paddingHorizontal="14dp"
android:paddingVertical="6dp"
android:text="@string/clean_now"
android:textColor="@color/white"
android:textSize="12sp"
android:textStyle="bold" />
</LinearLayout>
</RelativeLayout>
\ No newline at end of file
...@@ -32,4 +32,6 @@ ...@@ -32,4 +32,6 @@
<dimen name="sp_20">20sp</dimen> <dimen name="sp_20">20sp</dimen>
<dimen name="dp_70">70dp</dimen> <dimen name="dp_70">70dp</dimen>
<dimen name="dp_38">38dp</dimen> <dimen name="dp_38">38dp</dimen>
<dimen name="dp_320">320dp</dimen>
<dimen name="dp_330">330dp</dimen>
</resources> </resources>
\ No newline at end of file
...@@ -120,6 +120,10 @@ Please rest assured that we will handle your information in strict accordance wi ...@@ -120,6 +120,10 @@ Please rest assured that we will handle your information in strict accordance wi
<string name="recycle_bin">Recycle Bin</string> <string name="recycle_bin">Recycle Bin</string>
<string name="recyclebin_tip"><![CDATA[Mobispeedy is protecting your photos, videos, files & App files from being deleted]]></string> <string name="recyclebin_tip"><![CDATA[Mobispeedy is protecting your photos, videos, files & App files from being deleted]]></string>
<string name="recyclebin">Recycle Bin</string> <string name="recyclebin">Recycle Bin</string>
<string name="thank_you_for_using_app">Thank you for using %s!</string>
<string name="thank_you_very_much_for_taking_the_time_to_rate_us">Thank you very much for taking the time to rate us.</string>
<string name="submit">SUBMIT</string>
<string name="screenshot_cleaner">Screenshot Cleaner</string>
</resources> </resources>
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