Commit ab87117d authored by wanglei's avatar wanglei Committed by songjianyu

[调整]打开通知相关的弹窗

parent b1bf6c19
package com.base.appzxhy.ui.dialog
import android.app.Activity
import android.view.LayoutInflater
import androidx.appcompat.app.AlertDialog
import androidx.constraintlayout.widget.ConstraintLayout
import com.base.appzxhy.R
import com.base.appzxhy.databinding.DialogNotificationBinding
class NotificationTurnOnDialog(
val activity: Activity
) {
val dialog = AlertDialog.Builder(activity).create()
val binding = DialogNotificationBinding.inflate(LayoutInflater.from(activity))
var action: (() -> Unit)? = null
fun showDialog() {
dialog.setView(binding.root)
dialog.setCancelable(true)
dialog.setCanceledOnTouchOutside(true)
dialog.show()
val params = dialog.window?.attributes
// params?.width = ConstraintLayout.LayoutParams.MATCH_PARENT
params?.width = activity.resources.getDimensionPixelSize(R.dimen.dp_295)
params?.height = ConstraintLayout.LayoutParams.WRAP_CONTENT
// params?.gravity = Gravity.BOTTOM
dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
binding.tvTurnOn.setOnClickListener {
dialog.dismiss()
action?.invoke()
}
}
}
\ No newline at end of file
......@@ -19,8 +19,11 @@ import com.base.appzxhy.business.ads.AdsMgr
import com.base.appzxhy.databinding.ActivityMainBinding
import com.base.appzxhy.databinding.ItemHomeTabBinding
import com.base.appzxhy.ui.dialog.ExitDialog
import com.base.appzxhy.ui.dialog.NotificationTurnOnDialog
import com.base.appzxhy.ui.dialog.RateDialog
import com.base.appzxhy.ui.dialog.StoragePermissionDialog
import com.base.appzxhy.ui.recyclebin.RecycleBinFragment
import com.base.appzxhy.utils.PermissionUtils.requestNotificationPermission
import com.base.appzxhy.utils.PermissionUtils.requestStoragePermission
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
......@@ -66,13 +69,26 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
"StoreDialog" -> {
val dialog = StoragePermissionDialog(this@MainActivity)
dialog.action = {
requestStoragePermission(launcher) { }
requestStoragePermission(launcher) {
viewModel.nextShowDialog = false
}
}
dialog.showDialog()
}
"NotificationDialog" -> {
val dialog = NotificationTurnOnDialog(this@MainActivity)
dialog.action = {
requestNotificationPermission(launcher) {
viewModel.nextShowDialog = false
}
}
dialog.showDialog()
}
"RateDialog" -> {
val dialog = RateDialog(this@MainActivity)
dialog.showDialog(false)
}
}
}
......
......@@ -3,7 +3,9 @@ package com.base.appzxhy.ui.main
import android.content.Context
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.base.appzxhy.SpConstObject.isScoreRated
import com.base.appzxhy.ui.recyclebin.RecycleBinUtils.getRecycleBinData
import com.base.appzxhy.utils.PermissionUtils.checkNotificationPermission
import com.base.appzxhy.utils.PermissionUtils.checkStorePermission
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
......@@ -17,15 +19,26 @@ class MainViewModel : ViewModel() {
var nextShowDialog: Boolean = true
fun checkDialog(context: Context) {
if (!nextShowDialog) {
nextShowDialog = true
return
}
if (!context.checkStorePermission()) {
dialogFlow.update { "StoreDialog" }
return
}
// if (!context.checkNotificationPermission()) {
// dialogFlow.update { "NotificationDialog" }
// return
// }
if (!context.checkNotificationPermission()) {
dialogFlow.update { "NotificationDialog" }
return
}
if (!isScoreRated) {
dialogFlow.update { "RateDialog" }
return
}
}
var recycleBinFileFlow: MutableStateFlow<List<File>> = MutableStateFlow(listOf())
......
......@@ -53,10 +53,37 @@ object PermissionUtils {
}
}
fun Context.checkAllLocationPermission(): Boolean {
return checkLocationPermission() && checkBackgroundLocationPermission()
fun Context.requestNotificationPermission(
launcher: ActivityLauncher,
result: (Boolean) -> Unit
) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
val array = arrayOf(Manifest.permission.POST_NOTIFICATIONS)
launcher.launch(array) { permissions ->
val flag = permissions.values.all { it }
if (!flag) notificationSettings(launcher, result)
}
} else {
notificationSettings(launcher, result)
}
}
fun Context.notificationSettings(
launcher: ActivityLauncher,
result: (Boolean) -> Unit
) {
val intent = Intent()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
intent.putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
} else {
intent.action = "android.settings.APP_NOTIFICATION_SETTINGS"
intent.putExtra("app_package", packageName)
}
launcher.launch(intent) {
result.invoke(checkNotificationPermission())
}
}
//endregion
//region 储存
......@@ -96,6 +123,10 @@ object PermissionUtils {
//endregion
//region 定位
fun Context.checkAllLocationPermission(): Boolean {
return checkLocationPermission() && checkBackgroundLocationPermission()
}
fun Context.checkLocationPermission(): Boolean {
val fineLocationPermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
......
<?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="wrap_content"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivClose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="136dp"
android:layout_marginEnd="24dp"
android:src="@drawable/icon_close_pop_blue"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="246dp"
android:textAlignment="center"
android:textColor="@color/color_1a1a1a"
android:textSize="22sp"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="8dp"
android:textAlignment="center"
android:textColor="@color/color_666666"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvTurnOn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="60dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="44dp"
android:gravity="center"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:textColor="@color/white"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_content"
app:layout_constraintVertical_bias="0.0"
tools:layout_editor_absoluteX="60dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -165,7 +165,7 @@
android:layout_marginTop="16dp"
android:background="@drawable/bg_ffffff_8"
android:text="@string/large_file_clean"
android:textSize=""
android:textSize="10sp"
app:layout_constraintTop_toBottomOf="@id/cardview" />
<ImageView
......
......@@ -36,5 +36,6 @@
<dimen name="dp_320">320dp</dimen>
<dimen name="dp_55">55dp</dimen>
<dimen name="dp_6">6dp</dimen>
<dimen name="dp_295">295dp</dimen>
<dimen name="dp_345">345dp</dimen>
</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