Commit 7bce9429 authored by wanglei's avatar wanglei

[新增]通知

parent c3593211
......@@ -101,7 +101,7 @@
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.main.SettingActivity"
android:name=".ui.set.SettingActivity"
android:exported="false"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
......
......@@ -30,12 +30,13 @@ import com.base.appzxhy.bean.config.AdConfigBean
import com.base.appzxhy.bean.config.ConfigBean
import com.base.appzxhy.bean.config.PopupConfigBean
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.notification.MyNotificationManager
import com.base.appzxhy.push.receiver.AlarmReceiver.Companion.startAlarm
import com.base.appzxhy.push.receiver.ScreenStatusReceiver
import com.base.appzxhy.push.timer.TimerManager.Companion.changeTimer
import com.base.appzxhy.push.work.RepeatingWorker.Companion.schedulePeriodicWork
import com.base.appzxhy.ui.splash.SplashActivity
class MyApplication : Application() {
......@@ -55,7 +56,7 @@ class MyApplication : Application() {
"adActivity",
"AdActivity",
"AppLovinFullscreenActivity",
// StartActivity::class.java.simpleName,
SplashActivity::class.java.simpleName,
// 返回前台时不跳转启动页的 activity
)
}
......@@ -170,7 +171,6 @@ class MyApplication : Application() {
}.start()
}
private var lastTimePause = 0L
private var lastTimeResume = 0L
private fun isHotLaunch(): Boolean {
......
......@@ -6,6 +6,7 @@ import java.util.Locale
object SpConstObject {
//是否已经点击start
var ifAgreePrivacy = false
get() {
return AppPreferences.getInstance().getBoolean("ifAgreePrivacy", field)
......@@ -15,10 +16,12 @@ object SpConstObject {
AppPreferences.getInstance().put("ifAgreePrivacy", value, true)
}
//是否已经走过引导页
var isGuided
get() = AppPreferences.getInstance().getBoolean("isGuided", false)
set(value) = AppPreferences.getInstance().putBoolean("isGuided", value)
var appLanguageSp: String = Locale.getDefault().language
get() {
return AppPreferences.getInstance().getString("languageSp", field)
......@@ -37,6 +40,7 @@ object SpConstObject {
AppPreferences.getInstance().put("languageCountrySp", value, true)
}
//清理过的文件大小
var cleanedSize = 0L
get() {
return AppPreferences.getInstance().getLong("cleanedSize", field)
......@@ -46,5 +50,35 @@ object SpConstObject {
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(
var bigRemoteViews: RemoteViews? = null
var smallRemoteViews: RemoteViews? = null
var intent: Intent? = null
var notificationId: Int = 1999
var notificationId: Int = 2025
companion object {
......
......@@ -5,8 +5,8 @@ import android.content.Context
import android.content.Intent
import com.base.appzxhy.bean.push.NotificationSendBean
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.push.notification.MyNotificationManager
class FcmReceiver : BroadcastReceiver() {
......
......@@ -3,8 +3,8 @@ package com.base.appzxhy.business.push.fcm
import android.annotation.SuppressLint
import com.base.appzxhy.bean.push.NotificationSendBean
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.push.notification.MyNotificationManager
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import org.json.JSONObject
......
package com.base.appzxhy.push.notification
package com.base.appzxhy.business.push.notification
import android.content.Context
import com.base.appzxhy.BuildConfig
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.Companion.ACTION_ID_TEST
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.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.utils.AppPreferences
import com.base.appzxhy.utils.KotlinExt.currentDate
......@@ -50,7 +58,7 @@ object MyNotificationManager {
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() {
if (isStartSendQueue.get()) return
......@@ -81,7 +89,7 @@ object MyNotificationManager {
}
//提前准备数据
when(bean.actionId){
when (bean.actionId) {
}
......@@ -180,20 +188,26 @@ object MyNotificationManager {
* 值测某些类型
*/
private var testWhere = listOf(
// POPUP_WHERE_TIMER,
// POPUP_WHERE_LOCK,
// POPUP_WHERE_ALARM,
POPUP_WHERE_TIMER,
POPUP_WHERE_LOCK,
POPUP_WHERE_ALARM,
POPUP_WHERE_WORK_MANAGER
)
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 fun getNextActionId(): String {
if (BuildConfig.DEBUG) {
return ACTION_ID_TEST
}
// if (BuildConfig.DEBUG) {
// return JUNK_CLEAN
// }
if (actionIdList.isEmpty()) {
actionIdList.addAll(looper_actionId)
......
package com.base.appzxhy.push.notification
package com.base.appzxhy.business.push.notification
import android.graphics.Bitmap
import android.graphics.BitmapFactory
......
package com.base.appzxhy.push.notification
package com.base.appzxhy.business.push.notification
import android.os.Handler
import android.os.HandlerThread
......
package com.base.appzxhy.push.notification
package com.base.appzxhy.business.push.notification
import android.app.NotificationChannel
import android.app.NotificationManager
......@@ -11,8 +11,12 @@ import android.widget.RemoteViews
import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.IconCompat
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.Companion.ACTION_ID_TEST
import com.base.appzxhy.bean.config.PopupConfigBean
import com.base.appzxhy.ui.splash.SplashActivity
import kotlin.random.Random
......@@ -22,8 +26,8 @@ import kotlin.random.Random
*/
object NotificationUiUtil {
private val CHANNEL_ID = "video downloader saver Channel"
private val CHANNEL_NAME = "video downloader saver Channel NAME"
private val CHANNEL_ID = "dumpster cleaner Channel"
private val CHANNEL_NAME = "dumpster cleaner Channel NAME"
/**
* 这部分准备UI的代码不能放入IO
......@@ -31,8 +35,60 @@ object NotificationUiUtil {
fun setNotification(sendBean: NotificationSendBean): NotificationSendBean {
val context = sendBean.context
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 {
// val bean = sendBean.valueMap["bean"] as NotificationInfoBean
intent.putExtra("actionId", sendBean.actionId)
// intent.putExtra("linkUrl", bean.linkUrl)
// intent.putExtra("notificationId", sendBean.notificationId)
intent.putExtra("notificationId", sendBean.notificationId)
sendBean.intent = intent
sendCustomNotification(sendBean)
return sendBean
......
......@@ -11,7 +11,7 @@ import com.base.appzxhy.BuildConfig
import com.base.appzxhy.bean.push.NotificationSendBean
import com.base.appzxhy.bean.config.PopupConfigBean
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.utils.LogEx
import java.util.Calendar
......
......@@ -8,7 +8,7 @@ import android.os.Build
import com.base.appzxhy.bean.push.NotificationSendBean
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_LOCK
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
class ScreenStatusReceiver : BroadcastReceiver() {
......
......@@ -5,7 +5,7 @@ import com.base.appzxhy.MyApplication
import com.base.appzxhy.bean.push.NotificationSendBean
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_TIMER
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 java.util.Timer
import java.util.TimerTask
......
......@@ -11,8 +11,8 @@ import androidx.work.WorkerParameters
import com.base.appzxhy.bean.push.NotificationSendBean
import com.base.appzxhy.bean.push.NotificationSendBean.Companion.POPUP_WHERE_WORK_MANAGER
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.push.notification.MyNotificationManager
import java.util.concurrent.TimeUnit
class RepeatingWorker(val appContext: Context, workerParams: WorkerParameters) : Worker(appContext, workerParams) {
......
package com.base.appzxhy.ui.dialog
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(
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
import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.FragmentHome2Binding
import com.base.appzxhy.ui.dialog.permissionStorageJump
import com.base.appzxhy.ui.set.SettingActivity
import com.base.appzxhy.utils.Utils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
......@@ -46,7 +47,7 @@ class Home2Fragment : BaseFragment<FragmentHome2Binding>(FragmentHome2Binding::i
(requireActivity() as MainActivity).jumpAction(BATTERY_INFO)
}
binding.llLarge.setOnClickListener {
(requireActivity() as MainActivity).jumpAction(LARGE_FILE_CLEAN)
(requireActivity() as MainActivity).permissionStorageJump(LARGE_FILE_CLEAN)
}
binding.llDuplicate.setOnClickListener {
(requireActivity() as MainActivity).permissionStorageJump(SIMILAR_PHOTOS)
......
......@@ -6,19 +6,28 @@ import android.view.View
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.base.appzxhy.R
import com.base.appzxhy.SpConstObject.mainPageCount
import com.base.appzxhy.base.BaseActivity
import com.base.appzxhy.bean.HomeTabUIBean
import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.ActivityMainBinding
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.OnTabSelectedListener
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::inflate) {
val viewModel by lazy { ViewModelProvider(this)[MainViewModel::class.java] }
private val fragmentList = listOf(
Home2Fragment(),
RecoveryFragment(),
......@@ -38,9 +47,26 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
initTab()
initViewPager2()
initDialogFlow()
AdsMgr.showBanner(binding.flBanner, false)
}
private fun initDialogFlow() {
lifecycleScope.launch {
viewModel.dialogFlow.collectLatest { dialogType ->
when (dialogType) {
"StoreDialog" -> {
requestStoragePermission(launcher) {}
}
"NotificationDialog"->{
}
}
}
}
}
private fun initViewPager2() {
binding.viewPager2.adapter = viewPagerAdapter
binding.viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
......@@ -103,4 +129,11 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
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
import android.content.Context
import androidx.lifecycle.ViewModel
import com.base.appzxhy.utils.PermissionUtils.checkStorePermission
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
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.base.BaseFragment
import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.FragmentRecycleBinBinding
class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>(FragmentRecycleBinBinding::inflate) {
override fun initView() {
......@@ -16,4 +15,5 @@ class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>(FragmentRecyc
override fun 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.view.ViewCompat
......
package com.base.appzxhy.ui.main
package com.base.appzxhy.ui.set
import android.annotation.SuppressLint
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import com.base.appzxhy.BuildConfig
import com.base.appzxhy.GlobalConfig.URL_PRIVACY
......@@ -14,6 +13,7 @@ import androidx.core.net.toUri
import androidx.core.view.updatePadding
import com.base.appzxhy.R
import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.ui.dialog.RateDialog
import com.base.appzxhy.utils.MyAnimationUtils
......@@ -46,7 +46,8 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding>(FragmentSettingsB
startActivity(Intent(Intent.ACTION_VIEW, URL_PRIVACY.toUri()))
}
binding.clRateUs.setOnClickListener {
val dialog = RateDialog(requireActivity())
dialog.showDialog(true)
}
}
......
......@@ -5,11 +5,11 @@
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.SettingActivity">
tools:context=".ui.set.SettingActivity">
<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_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 @@
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:layout_weight="1"
android:text="@string/duplicate_photos"
android:text="@string/screenshot_cleaner"
android:textColor="#1A1A1A"
android:textSize="@dimen/sp_14" />
......
......@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F4F5F9"
tools:context=".ui.main.RecycleBinFragment">
tools:context=".ui.recyclebin.RecycleBinFragment">
<FrameLayout
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 @@
<dimen name="sp_20">20sp</dimen>
<dimen name="dp_70">70dp</dimen>
<dimen name="dp_38">38dp</dimen>
<dimen name="dp_320">320dp</dimen>
<dimen name="dp_330">330dp</dimen>
</resources>
\ No newline at end of file
......@@ -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="recyclebin_tip"><![CDATA[Mobispeedy is protecting your photos, videos, files & App files from being deleted]]></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>
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