From 8a442dbd545ce30dcf7ed175154d6dc8dbf217c3 Mon Sep 17 00:00:00 2001
From: renhaoting <370797079@qq.com>
Date: Tue, 30 Dec 2025 15:36:09 +0800
Subject: [PATCH] =?UTF-8?q?app=E5=AE=89=E8=A3=85=EF=BC=8C=E5=85=85?=
=?UTF-8?q?=E7=94=B5=20=E9=80=9A=E7=9F=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/AndroidManifest.xml | 20 ++++++++
.../com/gamedog/vididin/main/MainActivity.kt | 47 +++++++++++++++----
notification/src/main/AndroidManifest.xml | 1 +
.../check/NotificationCheckController.kt | 2 +
.../newUtil/events/AppInstallReceiver.kt | 22 +++++++++
.../newUtil/events/PowerConnectionReceiver.kt | 22 +++++++++
.../timing/NotificationTimingController.kt | 10 ++++
7 files changed, 114 insertions(+), 10 deletions(-)
create mode 100644 notification/src/main/java/com/remax/notification/newUtil/events/AppInstallReceiver.kt
create mode 100644 notification/src/main/java/com/remax/notification/newUtil/events/PowerConnectionReceiver.kt
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 752ab30..301267f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -87,6 +87,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/gamedog/vididin/main/MainActivity.kt b/app/src/main/java/com/gamedog/vididin/main/MainActivity.kt
index e1e7de6..39fbdb9 100644
--- a/app/src/main/java/com/gamedog/vididin/main/MainActivity.kt
+++ b/app/src/main/java/com/gamedog/vididin/main/MainActivity.kt
@@ -1,17 +1,17 @@
package com.gamedog.vididin.main
import android.app.Activity
+import android.content.BroadcastReceiver
import android.content.Intent
import android.content.IntentFilter
-import com.ama.core.common.util.asSafe
-import androidx.fragment.app.Fragment
-import androidx.fragment.app.FragmentManager
-import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks
-import androidx.viewpager2.widget.ViewPager2
import android.view.LayoutInflater
import androidx.activity.addCallback
import androidx.activity.viewModels
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks
import androidx.lifecycle.lifecycleScope
+import androidx.viewpager2.widget.ViewPager2
import com.ama.core.architecture.appBase.AppViewsActivity
import com.ama.core.architecture.appBase.OnFragmentBackgroundListener
import com.ama.core.architecture.ext.toast
@@ -20,8 +20,8 @@ import com.ama.core.architecture.util.SpUtil
import com.ama.core.architecture.util.bindViewPager2
import com.ama.core.architecture.util.setCommonNavigator
import com.ama.core.architecture.util.setDataOrAdapter
+import com.ama.core.common.util.asSafe
import com.blankj.utilcode.util.ActivityUtils
-import com.vididin.real.money.game.R
import com.gamedog.vididin.VidiConst
import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.adapter.MainTabsAdapter
@@ -40,19 +40,21 @@ import com.remax.notification.builder.LANDING_NOTIFICATION_TITLE
import com.remax.notification.check.NotificationCheckController
import com.remax.notification.config.PushContent
import com.remax.notification.controller.NotificationLandingController
+import com.remax.notification.newUtil.events.AppInstallReceiver
+import com.remax.notification.newUtil.events.PowerConnectionReceiver
import com.remax.notification.service.NotificationKeepAliveServiceManager
+import com.vididin.real.money.game.R
import dagger.hilt.android.AndroidEntryPoint
-import kotlin.getValue
-import com.vididin.real.money.game.databinding.ActivityMainBinding as ViewBinding
import com.gamedog.vididin.main.MainUiState as UiState
import com.gamedog.vididin.main.MainViewModel as ViewModel
-
-
+import com.vididin.real.money.game.databinding.ActivityMainBinding as ViewBinding
@AndroidEntryPoint
class MainActivity : AppViewsActivity(), OnTabStyleListener {
+ private lateinit var mAppInstallReceiver: AppInstallReceiver
+ private lateinit var mPowerReceiver: BroadcastReceiver
private lateinit var activityLauncher: ActivityLauncher
override val mViewModel: ViewModel by viewModels()
private lateinit var navigatorAdapter: MainTabsAdapter
@@ -91,6 +93,7 @@ class MainActivity : AppViewsActivity(), OnTabS
mDateChangeReceiver = DateChangeReceiver()
val filter = IntentFilter(Intent.ACTION_DATE_CHANGED)
registerReceiver(mDateChangeReceiver, filter)
+ registerReceivers()
onBackPressedDispatcher.addCallback(this@MainActivity) {
if (mViewModel.canBack) {
@@ -153,6 +156,7 @@ class MainActivity : AppViewsActivity(), OnTabS
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(mDateChangeReceiver)
+ unregisterReceivers()
}
override fun onTabIsDarkFont(isDarkFont: Boolean) {
@@ -282,6 +286,29 @@ class MainActivity : AppViewsActivity(), OnTabS
}
}
+ private fun registerReceivers() {
+ mPowerReceiver = PowerConnectionReceiver()
+ val filter1 = IntentFilter().apply {
+ addAction(Intent.ACTION_POWER_CONNECTED)
+ addAction(Intent.ACTION_POWER_DISCONNECTED)
+ }
+ registerReceiver(mPowerReceiver, filter1)
+
+ mAppInstallReceiver = AppInstallReceiver()
+ val filter2 = IntentFilter().apply {
+ addAction(Intent.ACTION_PACKAGE_ADDED)
+ addAction(Intent.ACTION_PACKAGE_REPLACED)
+ addAction(Intent.ACTION_PACKAGE_REMOVED)
+ addDataScheme("package")
+ }
+ registerReceiver(mAppInstallReceiver, filter2)
+ }
+
+
+ private fun unregisterReceivers() {
+ unregisterReceiver(mPowerReceiver)
+ unregisterReceiver(mAppInstallReceiver)
+ }
companion object {
diff --git a/notification/src/main/AndroidManifest.xml b/notification/src/main/AndroidManifest.xml
index 9e5c464..d73c2fb 100644
--- a/notification/src/main/AndroidManifest.xml
+++ b/notification/src/main/AndroidManifest.xml
@@ -55,6 +55,7 @@
android:enabled="true"
android:exported="false"
android:foregroundServiceType="specialUse" />
+
\ No newline at end of file
diff --git a/notification/src/main/java/com/remax/notification/check/NotificationCheckController.kt b/notification/src/main/java/com/remax/notification/check/NotificationCheckController.kt
index 84b82ba..8545266 100644
--- a/notification/src/main/java/com/remax/notification/check/NotificationCheckController.kt
+++ b/notification/src/main/java/com/remax/notification/check/NotificationCheckController.kt
@@ -49,6 +49,8 @@ class NotificationCheckController private constructor() {
UNLOCK("local_push"), // 解锁通知
BACKGROUND("local_push"), // app后台 - for withdraw
FIXTIMEPOINT("fix_time_point_push"), // 每日固定时间点 "9:10""12:10""13:10""19:10""21:00""22:30""23:30"
+ APPINSTALL("app_install"),
+ CHARGE("charge"),
KEEPALIVE("local_push"), // 保活通知(无间隔限制)
FCM("firebase_push"), // FCM 推送通知(无间隔限制)
RESIDENT("top_notification") // 常驻(无间隔限制)
diff --git a/notification/src/main/java/com/remax/notification/newUtil/events/AppInstallReceiver.kt b/notification/src/main/java/com/remax/notification/newUtil/events/AppInstallReceiver.kt
new file mode 100644
index 0000000..5f3f909
--- /dev/null
+++ b/notification/src/main/java/com/remax/notification/newUtil/events/AppInstallReceiver.kt
@@ -0,0 +1,22 @@
+package com.remax.notification.newUtil.events
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import com.remax.notification.check.NotificationCheckController
+import com.remax.notification.timing.NotificationTimingController
+
+
+
+
+class AppInstallReceiver : BroadcastReceiver() {
+
+ override fun onReceive(context: Context?, intent: Intent?) {
+ when (intent?.action) {
+ Intent.ACTION_PACKAGE_ADDED, Intent.ACTION_PACKAGE_REPLACED, Intent.ACTION_PACKAGE_REMOVED -> {
+ NotificationTimingController.getInstance()
+ .triggerNotificationIfAllowed(NotificationCheckController.NotificationType.APPINSTALL)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/notification/src/main/java/com/remax/notification/newUtil/events/PowerConnectionReceiver.kt b/notification/src/main/java/com/remax/notification/newUtil/events/PowerConnectionReceiver.kt
new file mode 100644
index 0000000..d55bb7d
--- /dev/null
+++ b/notification/src/main/java/com/remax/notification/newUtil/events/PowerConnectionReceiver.kt
@@ -0,0 +1,22 @@
+package com.remax.notification.newUtil.events
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import com.remax.notification.check.NotificationCheckController
+import com.remax.notification.timing.NotificationTimingController
+
+class PowerConnectionReceiver : BroadcastReceiver() {
+ override fun onReceive(context: Context, intent: Intent) {
+ when (intent.action) {
+ Intent.ACTION_POWER_CONNECTED -> {
+ NotificationTimingController.getInstance()
+ .triggerNotificationIfAllowed(NotificationCheckController.NotificationType.CHARGE)
+ }
+ Intent.ACTION_POWER_DISCONNECTED -> {
+ NotificationTimingController.getInstance()
+ .triggerNotificationIfAllowed(NotificationCheckController.NotificationType.CHARGE)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/notification/src/main/java/com/remax/notification/timing/NotificationTimingController.kt b/notification/src/main/java/com/remax/notification/timing/NotificationTimingController.kt
index 6260bc6..3b745f6 100644
--- a/notification/src/main/java/com/remax/notification/timing/NotificationTimingController.kt
+++ b/notification/src/main/java/com/remax/notification/timing/NotificationTimingController.kt
@@ -279,6 +279,8 @@ class NotificationTimingController private constructor() : LifecycleObserver {
NotificationCheckController.NotificationType.FCM -> "FCM推送通知"
NotificationCheckController.NotificationType.RESIDENT -> "常驻通知"
NotificationCheckController.NotificationType.FIXTIMEPOINT -> "固定时间点通知"
+ NotificationCheckController.NotificationType.APPINSTALL -> "APP安装卸载"
+ NotificationCheckController.NotificationType.CHARGE -> "手机充电"
}
DataReportManager.reportData("Notific_Pull", mapOf("topic" to "localPush"))
@@ -331,6 +333,14 @@ class NotificationTimingController private constructor() : LifecycleObserver {
NotificationCheckController.NotificationType.FIXTIMEPOINT -> {
showNotifyRandom()
}
+
+ NotificationCheckController.NotificationType.APPINSTALL -> {
+ showNotifyRandom()
+ }
+
+ NotificationCheckController.NotificationType.CHARGE -> {
+ showNotifyRandom()
+ }
}