Ver Fonte

feat: 迁移requestPostNotificationPermission

XiaodongLin há 11 meses atrás
pai
commit
a220bca797

+ 12 - 3
app/src/main/java/com/adealink/weparty/MainActivity.kt

@@ -21,6 +21,7 @@ import com.adealink.weparty.module.account.AccountModule
 import com.adealink.weparty.module.attribution.AttributionModule
 import com.adealink.weparty.module.profile.ProfileModule
 import com.adealink.weparty.module.share.ShareModule
+import com.adealink.weparty.push.NotificationUtil
 import com.adealink.weparty.push.PushStatEvent
 import com.adealink.weparty.stat.manager.serveReportManager
 import com.adealink.weparty.stat.reportAppOpenIfNeed
@@ -41,6 +42,11 @@ class MainActivity : BaseActivity() {
         private const val TAG = "MainActivity"
     }
 
+    enum class DispatchFrom {
+        ON_CREATE,
+        ON_NEW_INTENT
+    }
+
     @BindExtra(AppModule.Main.EXTRA_MAIN_TAB)
     var mainTabKey: String? = ""
 
@@ -75,7 +81,7 @@ class MainActivity : BaseActivity() {
 
         QMUIStatusBarHelper.setStatusBarLightMode(this)
         setContentView(R.layout.activity_main)
-        dispatch(intent)
+        dispatch(intent, DispatchFrom.ON_CREATE)
     }
 
     override fun initOthers() {
@@ -106,10 +112,10 @@ class MainActivity : BaseActivity() {
     override fun handleNewIntent(intent: Intent?) {
         super.handleNewIntent(intent)
 
-        dispatch(intent)
+        dispatch(intent, DispatchFrom.ON_NEW_INTENT)
     }
 
-    private fun dispatch(intent: Intent?) {
+    private fun dispatch(intent: Intent?, from: DispatchFrom) {
         when {
             needGoLoginActivity() -> {
                 Router.build(this, Account.Login.PATH)
@@ -128,6 +134,9 @@ class MainActivity : BaseActivity() {
             }
         }
         initView()
+        if (from == DispatchFrom.ON_CREATE) {
+            NotificationUtil.requestPostNotificationPermission(this)
+        }
         intent ?: return
         val pushDeeplink = intent.getStringExtra(KEY_PUSH_DEEPLINK)
         if (!pushDeeplink.isNullOrEmpty()) {

+ 34 - 0
app/src/main/java/com/adealink/weparty/push/NotificationUtil.kt

@@ -1,5 +1,7 @@
 package com.adealink.weparty.push
 
+import android.Manifest
+import android.annotation.SuppressLint
 import android.app.ActivityOptions
 import android.app.Notification
 import android.app.NotificationChannel
@@ -14,6 +16,7 @@ import android.os.Build
 import android.widget.RemoteViews
 import androidx.core.app.NotificationCompat
 import androidx.core.app.NotificationManagerCompat
+import androidx.fragment.app.FragmentActivity
 import com.adealink.frame.aab.util.getCompatColor
 import com.adealink.frame.aab.util.getCompatDrawable
 import com.adealink.frame.aab.util.getCompatString
@@ -32,7 +35,9 @@ import com.adealink.frame.util.PackageUtil
 import com.adealink.weparty.AppModule
 import com.adealink.weparty.R
 import com.adealink.weparty.commonui.imageview.CircleDrawable
+import com.adealink.weparty.commonui.widget.CommonDialog
 import com.adealink.weparty.module.profile.view.UserNameTextView
+import com.adealink.weparty.permission.PermissionUtils
 import com.adealink.weparty.push.data.WeNextPushMessage
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
@@ -190,4 +195,33 @@ object NotificationUtil {
             R.drawable.notification_ic
         }
     }
+
+
+
+    @SuppressLint("CheckResult")
+    fun requestPostNotificationPermission(activity: FragmentActivity) {
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
+            return
+        }
+
+        if (PermissionUtils.hasPermissions(activity, Manifest.permission.POST_NOTIFICATIONS)) {
+            return
+        }
+
+        PermissionUtils.getRxPermissions(activity)
+            .request(Manifest.permission.POST_NOTIFICATIONS).subscribe { granted ->
+                if (!granted) {
+                    CommonDialog.Builder()
+                        .message(getCompatString(R.string.common_open_notification_tip))
+                        .onPositive {
+                            PermissionUtils.goNotificationSettingActivity(activity)
+                        }
+                        .positiveText(getCompatString(R.string.common_open))
+                        .setShowDefaultCancel(true)
+                        .dismissAfterClick(true)
+                        .build()
+                        .show(activity.supportFragmentManager, "POST_NOTIFICATIONS_PERMISSION_NO_GRANT")
+                }
+            }
+    }
 }

+ 8 - 0
module/account/src/main/java/com/adealink/weparty/account/login/LoginActivity.kt

@@ -50,6 +50,7 @@ import com.adealink.weparty.module.account.Account
 import com.adealink.weparty.module.account.data.UserKickReason
 import com.adealink.weparty.module.setting.Setting
 import com.adealink.weparty.module.webview.Web
+import com.adealink.weparty.push.NotificationUtil
 import com.adealink.weparty.stat.reportEnterApp
 import com.adealink.weparty.storage.AppPref
 import com.adealink.weparty.url.H5Page
@@ -214,6 +215,13 @@ class LoginActivity : BaseLoginActivity() {
         }
     }
 
+    override fun initOthers() {
+        super.initOthers()
+        if (!AppPref.deviceLogined) {
+            NotificationUtil.requestPostNotificationPermission(this)
+        }
+    }
+
     override fun handleNewIntent(intent: Intent?) {
         super.handleNewIntent(intent)
         intent?.extras?.let {