Skip to content

Commit 0276153

Browse files
committed
feat: Optimize Notification permission request action
Signed-off-by: Hu Shenghao <dede.hu@qq.com>
1 parent 1b9320d commit 0276153

File tree

3 files changed

+65
-56
lines changed

3 files changed

+65
-56
lines changed

core/activity-actions/src/main/java/com/dede/android_eggs/activity_actions/ActivityActionDispatcher.kt

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import android.content.Context
88
import android.os.Bundle
99
import androidx.startup.Initializer
1010
import com.dede.android_eggs.activity_actions.noOpDelegate
11-
import com.dede.android_eggs.util.actions.PermissionRequestAction
1211
import com.dede.android_eggs.util.actions.PlatLogoActivityAction
12+
import com.dede.android_eggs.util.actions.RequestNotificationPermissionAction
1313
import com.dede.android_eggs.util.actions.WarningDialogAction
1414

1515
internal class ActivityActionDispatcher : Application.ActivityLifecycleCallbacks by noOpDelegate(),
@@ -23,6 +23,8 @@ internal class ActivityActionDispatcher : Application.ActivityLifecycleCallbacks
2323

2424
interface ActivityAction {
2525

26+
fun isEnabled(): Boolean = true
27+
2628
fun onPreCreate(activity: Activity) {}
2729

2830
fun onCreate(activity: Activity) {}
@@ -31,28 +33,31 @@ internal class ActivityActionDispatcher : Application.ActivityLifecycleCallbacks
3133

3234
}
3335

34-
private val actions: List<ActivityAction> = arrayListOf(
36+
private val actions: Array<ActivityAction> = arrayOf(
3537
PlatLogoActivityAction(),
3638
WarningDialogAction(),
37-
PermissionRequestAction(),
39+
RequestNotificationPermissionAction(),
3840
)
3941

40-
override fun onActivityPreCreated(activity: Activity, savedInstanceState: Bundle?) {
41-
for (action in actions) {
42-
action.onPreCreate(activity)
42+
private fun filterPerformAction(action: ActivityAction.() -> Unit) {
43+
for (impl in actions) {
44+
if (!impl.isEnabled()) {
45+
continue
46+
}
47+
action(impl)
4348
}
4449
}
4550

51+
override fun onActivityPreCreated(activity: Activity, savedInstanceState: Bundle?) {
52+
filterPerformAction { onPreCreate(activity) }
53+
}
54+
4655
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
47-
for (action in actions) {
48-
action.onCreate(activity)
49-
}
56+
filterPerformAction { onCreate(activity) }
5057
}
5158

5259
override fun onActivityStarted(activity: Activity) {
53-
for (action in actions) {
54-
action.onStart(activity)
55-
}
60+
filterPerformAction { onStart(activity) }
5661
}
5762

5863
}

core/activity-actions/src/main/java/com/dede/android_eggs/util/actions/PermissionRequestAction.kt

Lines changed: 0 additions & 44 deletions
This file was deleted.
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.dede.android_eggs.util.actions
2+
3+
import android.Manifest
4+
import android.app.Activity
5+
import android.content.Context
6+
import android.content.pm.PackageManager
7+
import android.os.Build
8+
import androidx.annotation.ChecksSdkIntAtLeast
9+
import androidx.annotation.RequiresApi
10+
import androidx.core.app.ActivityCompat
11+
import com.dede.android_eggs.util.ActivityActionDispatcher
12+
13+
internal class RequestNotificationPermissionAction : ActivityActionDispatcher.ActivityAction {
14+
15+
private val pagers = arrayOf(
16+
com.android_t.egg.ComponentActivationActivity::class,
17+
com.android_s.egg.ComponentActivationActivity::class,
18+
com.android_r.egg.neko.NekoActivationActivity::class,
19+
com.android_n.egg.neko.NekoActivationActivity::class,
20+
)
21+
22+
@ChecksSdkIntAtLeast(api = Build.VERSION_CODES.TIRAMISU)
23+
override fun isEnabled(): Boolean {
24+
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
25+
}
26+
27+
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
28+
override fun onCreate(activity: Activity) {
29+
if (pagers.contains(activity.javaClass.kotlin)) {
30+
val permissions = arrayOf(Manifest.permission.POST_NOTIFICATIONS)
31+
if (!checkPermissions(activity, *permissions)) {
32+
ActivityCompat.requestPermissions(activity, permissions, 0)
33+
}
34+
}
35+
}
36+
37+
private fun checkPermissions(context: Context, vararg permissions: String): Boolean {
38+
for (permission in permissions) {
39+
if (
40+
ActivityCompat.checkSelfPermission(context, permission)
41+
!= PackageManager.PERMISSION_GRANTED
42+
) {
43+
return false
44+
}
45+
}
46+
return true
47+
}
48+
}

0 commit comments

Comments
 (0)