mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-02-22 09:08:30 +00:00
parent
3668b28f62
commit
87bec70d9f
@ -9,6 +9,7 @@ import com.topjohnwu.magisk.StubApk
|
|||||||
import com.topjohnwu.magisk.core.di.ServiceLocator
|
import com.topjohnwu.magisk.core.di.ServiceLocator
|
||||||
import com.topjohnwu.magisk.core.utils.*
|
import com.topjohnwu.magisk.core.utils.*
|
||||||
import com.topjohnwu.magisk.ui.surequest.SuRequestActivity
|
import com.topjohnwu.magisk.ui.surequest.SuRequestActivity
|
||||||
|
import com.topjohnwu.magisk.view.Notifications
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
import com.topjohnwu.superuser.internal.UiThreadHandler
|
import com.topjohnwu.superuser.internal.UiThreadHandler
|
||||||
import com.topjohnwu.superuser.ipc.RootService
|
import com.topjohnwu.superuser.ipc.RootService
|
||||||
@ -70,6 +71,7 @@ open class App() : Application() {
|
|||||||
|
|
||||||
refreshLocale()
|
refreshLocale()
|
||||||
resources.patch()
|
resources.patch()
|
||||||
|
Notifications.setup()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||||
|
@ -33,7 +33,7 @@ class JobService : BaseJobService() {
|
|||||||
svc.fetchUpdate()?.let {
|
svc.fetchUpdate()?.let {
|
||||||
Info.remote = it
|
Info.remote = it
|
||||||
if (Info.env.isActive && BuildConfig.VERSION_CODE < it.magisk.versionCode)
|
if (Info.env.isActive && BuildConfig.VERSION_CODE < it.magisk.versionCode)
|
||||||
Notifications.updateAvailable(this)
|
Notifications.updateAvailable()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ open class Receiver : BaseReceiver() {
|
|||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
val installer = context.packageManager.getInstallerPackageName(context.packageName)
|
val installer = context.packageManager.getInstallerPackageName(context.packageName)
|
||||||
if (installer == context.packageName) {
|
if (installer == context.packageName) {
|
||||||
Notifications.updateDone(context)
|
Notifications.updateDone()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ open class NotificationService : BaseService() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected fun notifyUpdate(id: Int, editor: (Notification.Builder) -> Unit = {}) {
|
protected fun notifyUpdate(id: Int, editor: (Notification.Builder) -> Unit = {}) {
|
||||||
fun create() = Notifications.startProgress(this, "")
|
fun create() = Notifications.startProgress("")
|
||||||
|
|
||||||
val wasEmpty = !hasNotifications
|
val wasEmpty = !hasNotifications
|
||||||
val notification = notifications.getOrPut(id, ::create).also(editor)
|
val notification = notifications.getOrPut(id, ::create).also(editor)
|
||||||
|
@ -21,7 +21,6 @@ import com.topjohnwu.magisk.core.utils.RootUtils
|
|||||||
import com.topjohnwu.magisk.ui.theme.Theme
|
import com.topjohnwu.magisk.ui.theme.Theme
|
||||||
import com.topjohnwu.magisk.utils.Utils
|
import com.topjohnwu.magisk.utils.Utils
|
||||||
import com.topjohnwu.magisk.view.MagiskDialog
|
import com.topjohnwu.magisk.view.MagiskDialog
|
||||||
import com.topjohnwu.magisk.view.Notifications
|
|
||||||
import com.topjohnwu.magisk.view.Shortcuts
|
import com.topjohnwu.magisk.view.Shortcuts
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -107,7 +106,6 @@ abstract class SplashActivity<Binding : ViewDataBinding> : NavigationActivity<Bi
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
Notifications.setup(this)
|
|
||||||
JobService.schedule(this)
|
JobService.schedule(this)
|
||||||
Shortcuts.setupDynamic(this)
|
Shortcuts.setupDynamic(this)
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ import android.app.Notification
|
|||||||
import android.app.NotificationChannel
|
import android.app.NotificationChannel
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.content.Context
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Build.VERSION.SDK_INT
|
import android.os.Build.VERSION.SDK_INT
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
@ -23,69 +22,75 @@ object Notifications {
|
|||||||
|
|
||||||
val mgr by lazy { AppContext.getSystemService<NotificationManager>()!! }
|
val mgr by lazy { AppContext.getSystemService<NotificationManager>()!! }
|
||||||
|
|
||||||
private const val APP_UPDATED_NOTIFICATION_ID = 4
|
private const val APP_UPDATED_ID = 4
|
||||||
private const val APP_UPDATE_NOTIFICATION_ID = 5
|
private const val APP_UPDATE_AVAILABLE_ID = 5
|
||||||
|
|
||||||
private const val UPDATE_CHANNEL = "update"
|
private const val UPDATE_CHANNEL = "update"
|
||||||
private const val PROGRESS_CHANNEL = "progress"
|
private const val PROGRESS_CHANNEL = "progress"
|
||||||
private const val UPDATED_CHANNEL = "updated"
|
private const val UPDATED_CHANNEL = "updated"
|
||||||
|
|
||||||
private val nextId = AtomicInteger(APP_UPDATE_NOTIFICATION_ID)
|
private val nextId = AtomicInteger(APP_UPDATE_AVAILABLE_ID)
|
||||||
|
|
||||||
fun setup(context: Context) {
|
fun setup() {
|
||||||
if (SDK_INT >= Build.VERSION_CODES.O) {
|
AppContext.apply {
|
||||||
val channel = NotificationChannel(UPDATE_CHANNEL,
|
if (SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
context.getString(R.string.update_channel), NotificationManager.IMPORTANCE_DEFAULT)
|
val channel = NotificationChannel(UPDATE_CHANNEL,
|
||||||
val channel2 = NotificationChannel(PROGRESS_CHANNEL,
|
getString(R.string.update_channel), NotificationManager.IMPORTANCE_DEFAULT)
|
||||||
context.getString(R.string.progress_channel), NotificationManager.IMPORTANCE_LOW)
|
val channel2 = NotificationChannel(PROGRESS_CHANNEL,
|
||||||
val channel3 = NotificationChannel(UPDATED_CHANNEL,
|
getString(R.string.progress_channel), NotificationManager.IMPORTANCE_LOW)
|
||||||
context.getString(R.string.updated_channel), NotificationManager.IMPORTANCE_HIGH)
|
val channel3 = NotificationChannel(UPDATED_CHANNEL,
|
||||||
mgr.createNotificationChannels(listOf(channel, channel2, channel3))
|
getString(R.string.updated_channel), NotificationManager.IMPORTANCE_HIGH)
|
||||||
|
mgr.createNotificationChannels(listOf(channel, channel2, channel3))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("InlinedApi")
|
@SuppressLint("InlinedApi")
|
||||||
fun updateDone(context: Context) {
|
fun updateDone() {
|
||||||
val flag = PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
|
AppContext.apply {
|
||||||
val pending = PendingIntent.getActivity(context, 0, context.selfLaunchIntent(), flag)
|
val flag = PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
|
||||||
val builder = if (SDK_INT >= Build.VERSION_CODES.O) {
|
val pending = PendingIntent.getActivity(this, 0, selfLaunchIntent(), flag)
|
||||||
Notification.Builder(context, UPDATED_CHANNEL)
|
val builder = if (SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
.setSmallIcon(context.getBitmap(R.drawable.ic_magisk_outline).toIcon())
|
Notification.Builder(this, UPDATED_CHANNEL)
|
||||||
} else {
|
.setSmallIcon(getBitmap(R.drawable.ic_magisk_outline).toIcon())
|
||||||
Notification.Builder(context).setPriority(Notification.PRIORITY_HIGH)
|
} else {
|
||||||
.setSmallIcon(R.drawable.ic_magisk_outline)
|
Notification.Builder(this).setPriority(Notification.PRIORITY_HIGH)
|
||||||
|
.setSmallIcon(R.drawable.ic_magisk_outline)
|
||||||
|
}
|
||||||
|
.setContentIntent(pending)
|
||||||
|
.setContentTitle(getText(R.string.updated_title))
|
||||||
|
.setContentText(getText(R.string.updated_text))
|
||||||
|
.setAutoCancel(true)
|
||||||
|
mgr.notify(APP_UPDATED_ID, builder.build())
|
||||||
}
|
}
|
||||||
.setContentIntent(pending)
|
|
||||||
.setContentTitle(context.getText(R.string.updated_title))
|
|
||||||
.setContentText(context.getText(R.string.updated_text))
|
|
||||||
.setAutoCancel(true)
|
|
||||||
mgr.notify(APP_UPDATED_NOTIFICATION_ID, builder.build())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateAvailable(context: Context) {
|
fun updateAvailable() {
|
||||||
val intent = DownloadService.getPendingIntent(context, Subject.App())
|
AppContext.apply {
|
||||||
val bitmap = context.getBitmap(R.drawable.ic_magisk_outline)
|
val intent = DownloadService.getPendingIntent(this, Subject.App())
|
||||||
val builder = if (SDK_INT >= Build.VERSION_CODES.O) {
|
val bitmap = getBitmap(R.drawable.ic_magisk_outline)
|
||||||
Notification.Builder(context, UPDATE_CHANNEL)
|
val builder = if (SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
.setSmallIcon(bitmap.toIcon())
|
Notification.Builder(this, UPDATE_CHANNEL)
|
||||||
} else {
|
.setSmallIcon(bitmap.toIcon())
|
||||||
Notification.Builder(context)
|
} else {
|
||||||
.setSmallIcon(R.drawable.ic_magisk_outline)
|
Notification.Builder(this)
|
||||||
}
|
.setSmallIcon(R.drawable.ic_magisk_outline)
|
||||||
.setLargeIcon(bitmap)
|
}
|
||||||
.setContentTitle(context.getString(R.string.magisk_update_title))
|
.setLargeIcon(bitmap)
|
||||||
.setContentText(context.getString(R.string.manager_download_install))
|
.setContentTitle(getString(R.string.magisk_update_title))
|
||||||
.setAutoCancel(true)
|
.setContentText(getString(R.string.manager_download_install))
|
||||||
.setContentIntent(intent)
|
.setAutoCancel(true)
|
||||||
|
.setContentIntent(intent)
|
||||||
|
|
||||||
mgr.notify(APP_UPDATE_NOTIFICATION_ID, builder.build())
|
mgr.notify(APP_UPDATE_AVAILABLE_ID, builder.build())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun startProgress(context: Context, title: CharSequence): Notification.Builder {
|
fun startProgress(title: CharSequence): Notification.Builder {
|
||||||
val builder = if (SDK_INT >= Build.VERSION_CODES.O) {
|
val builder = if (SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
Notification.Builder(context, PROGRESS_CHANNEL)
|
Notification.Builder(AppContext, PROGRESS_CHANNEL)
|
||||||
} else {
|
} else {
|
||||||
Notification.Builder(context).setPriority(Notification.PRIORITY_LOW)
|
Notification.Builder(AppContext).setPriority(Notification.PRIORITY_LOW)
|
||||||
}
|
}
|
||||||
.setSmallIcon(android.R.drawable.stat_sys_download)
|
.setSmallIcon(android.R.drawable.stat_sys_download)
|
||||||
.setContentTitle(title)
|
.setContentTitle(title)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user