UpdateWorker: Move update notification logic to NotificationUtil
* All notification related logic should be in this class Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -1,12 +1,7 @@
|
|||||||
package com.aurora.store.data.work
|
package com.aurora.store.data.work
|
||||||
|
|
||||||
import android.app.Notification
|
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
import android.app.PendingIntent
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
|
||||||
import androidx.core.app.NotificationCompat
|
|
||||||
import androidx.core.app.NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE
|
|
||||||
import androidx.core.content.pm.PackageInfoCompat
|
import androidx.core.content.pm.PackageInfoCompat
|
||||||
import androidx.hilt.work.HiltWorker
|
import androidx.hilt.work.HiltWorker
|
||||||
import androidx.work.Constraints
|
import androidx.work.Constraints
|
||||||
@@ -18,20 +13,17 @@ import androidx.work.PeriodicWorkRequest
|
|||||||
import androidx.work.PeriodicWorkRequestBuilder
|
import androidx.work.PeriodicWorkRequestBuilder
|
||||||
import androidx.work.WorkManager
|
import androidx.work.WorkManager
|
||||||
import androidx.work.WorkerParameters
|
import androidx.work.WorkerParameters
|
||||||
import com.aurora.Constants
|
|
||||||
import com.aurora.extensions.isMAndAbove
|
import com.aurora.extensions.isMAndAbove
|
||||||
import com.aurora.gplayapi.data.models.App
|
|
||||||
import com.aurora.gplayapi.data.models.AuthData
|
import com.aurora.gplayapi.data.models.AuthData
|
||||||
import com.aurora.gplayapi.helpers.AppDetailsHelper
|
import com.aurora.gplayapi.helpers.AppDetailsHelper
|
||||||
import com.aurora.gplayapi.helpers.AuthValidator
|
import com.aurora.gplayapi.helpers.AuthValidator
|
||||||
import com.aurora.store.MainActivity
|
|
||||||
import com.aurora.store.R
|
|
||||||
import com.aurora.store.data.network.HttpClient
|
import com.aurora.store.data.network.HttpClient
|
||||||
import com.aurora.store.data.providers.AuthProvider
|
import com.aurora.store.data.providers.AuthProvider
|
||||||
import com.aurora.store.data.providers.BlacklistProvider
|
import com.aurora.store.data.providers.BlacklistProvider
|
||||||
import com.aurora.store.util.CertUtil
|
import com.aurora.store.util.CertUtil
|
||||||
import com.aurora.store.util.DownloadWorkerUtil
|
import com.aurora.store.util.DownloadWorkerUtil
|
||||||
import com.aurora.store.util.Log
|
import com.aurora.store.util.Log
|
||||||
|
import com.aurora.store.util.NotificationUtil
|
||||||
import com.aurora.store.util.PackageUtil
|
import com.aurora.store.util.PackageUtil
|
||||||
import com.aurora.store.util.Preferences
|
import com.aurora.store.util.Preferences
|
||||||
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_AUTO
|
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_AUTO
|
||||||
@@ -108,7 +100,7 @@ class UpdateWorker @AssistedInject constructor(
|
|||||||
.getBlackList()
|
.getBlackList()
|
||||||
|
|
||||||
override suspend fun getForegroundInfo(): ForegroundInfo {
|
override suspend fun getForegroundInfo(): ForegroundInfo {
|
||||||
return ForegroundInfo(workerID, getOngoingNotification())
|
return ForegroundInfo(workerID, NotificationUtil.getOngoingUpdateNotification(appContext))
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun doWork(): Result {
|
override suspend fun doWork(): Result {
|
||||||
@@ -171,9 +163,13 @@ class UpdateWorker @AssistedInject constructor(
|
|||||||
if (updatesList.isNotEmpty()) {
|
if (updatesList.isNotEmpty()) {
|
||||||
if (autoUpdatesMode == 1) {
|
if (autoUpdatesMode == 1) {
|
||||||
Log.i("Found updates, notifying!")
|
Log.i("Found updates, notifying!")
|
||||||
val notifyManager = appContext.getSystemService(Context.NOTIFICATION_SERVICE)
|
val notifyManager =
|
||||||
as NotificationManager
|
appContext.getSystemService(Context.NOTIFICATION_SERVICE)
|
||||||
notifyManager.notify(notificationID, getUpdateNotification(updatesList))
|
as NotificationManager
|
||||||
|
notifyManager.notify(
|
||||||
|
notificationID,
|
||||||
|
NotificationUtil.getUpdateNotification(appContext, updatesList)
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
Log.i("Found updates, updating!")
|
Log.i("Found updates, updating!")
|
||||||
updatesList.forEach { downloadWorkerUtil.enqueueApp(it) }
|
updatesList.forEach { downloadWorkerUtil.enqueueApp(it) }
|
||||||
@@ -197,94 +193,4 @@ class UpdateWorker @AssistedInject constructor(
|
|||||||
false
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getUpdateNotification(updatesList: List<App>): Notification {
|
|
||||||
val contentIntent = PendingIntent.getActivity(
|
|
||||||
appContext,
|
|
||||||
0,
|
|
||||||
Intent(appContext, MainActivity::class.java).apply {
|
|
||||||
action = Constants.NAVIGATION_UPDATES
|
|
||||||
},
|
|
||||||
PendingIntent.FLAG_IMMUTABLE
|
|
||||||
)
|
|
||||||
|
|
||||||
return NotificationCompat.Builder(appContext, Constants.NOTIFICATION_CHANNEL_UPDATES)
|
|
||||||
.setSmallIcon(R.drawable.ic_updates)
|
|
||||||
.setContentTitle(
|
|
||||||
if (updatesList.size == 1)
|
|
||||||
appContext.getString(
|
|
||||||
R.string.notification_updates_available_1,
|
|
||||||
updatesList.size
|
|
||||||
)
|
|
||||||
else
|
|
||||||
appContext.getString(
|
|
||||||
R.string.notification_updates_available,
|
|
||||||
updatesList.size
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.setContentText(
|
|
||||||
when (updatesList.size) {
|
|
||||||
1 -> {
|
|
||||||
appContext.getString(
|
|
||||||
R.string.notification_updates_available_desc_1,
|
|
||||||
updatesList[0].displayName
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
2 -> {
|
|
||||||
appContext.getString(
|
|
||||||
R.string.notification_updates_available_desc_2,
|
|
||||||
updatesList[0].displayName,
|
|
||||||
updatesList[1].displayName
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
3 -> {
|
|
||||||
appContext.getString(
|
|
||||||
R.string.notification_updates_available_desc_3,
|
|
||||||
updatesList[0].displayName,
|
|
||||||
updatesList[1].displayName,
|
|
||||||
updatesList[2].displayName
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
|
||||||
appContext.getString(
|
|
||||||
R.string.notification_updates_available_desc_4,
|
|
||||||
updatesList[0].displayName,
|
|
||||||
updatesList[1].displayName,
|
|
||||||
updatesList[2].displayName,
|
|
||||||
updatesList.size - 3
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.setContentIntent(contentIntent)
|
|
||||||
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
|
||||||
.setCategory(NotificationCompat.CATEGORY_RECOMMENDATION)
|
|
||||||
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
|
||||||
.setAutoCancel(true)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getOngoingNotification(): Notification {
|
|
||||||
val contentIntent = PendingIntent.getActivity(
|
|
||||||
appContext,
|
|
||||||
0,
|
|
||||||
Intent(appContext, MainActivity::class.java),
|
|
||||||
PendingIntent.FLAG_IMMUTABLE
|
|
||||||
)
|
|
||||||
|
|
||||||
return NotificationCompat.Builder(appContext, Constants.NOTIFICATION_CHANNEL_UPDATES)
|
|
||||||
.setSmallIcon(R.drawable.ic_logo)
|
|
||||||
.setContentTitle(appContext.getString(R.string.checking_for_updates))
|
|
||||||
.setContentIntent(contentIntent)
|
|
||||||
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
|
||||||
.setCategory(NotificationCompat.CATEGORY_SERVICE)
|
|
||||||
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
|
||||||
.setForegroundServiceBehavior(FOREGROUND_SERVICE_IMMEDIATE)
|
|
||||||
.setProgress(100, 0, true)
|
|
||||||
.setOngoing(true)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,6 +191,96 @@ object NotificationUtil {
|
|||||||
return builder.build()
|
return builder.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getOngoingUpdateNotification(context: Context): Notification {
|
||||||
|
val contentIntent = PendingIntent.getActivity(
|
||||||
|
context,
|
||||||
|
0,
|
||||||
|
Intent(context, MainActivity::class.java),
|
||||||
|
PendingIntent.FLAG_IMMUTABLE
|
||||||
|
)
|
||||||
|
|
||||||
|
return NotificationCompat.Builder(context, Constants.NOTIFICATION_CHANNEL_UPDATES)
|
||||||
|
.setSmallIcon(R.drawable.ic_logo)
|
||||||
|
.setContentTitle(context.getString(R.string.checking_for_updates))
|
||||||
|
.setContentIntent(contentIntent)
|
||||||
|
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||||
|
.setCategory(NotificationCompat.CATEGORY_SERVICE)
|
||||||
|
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||||
|
.setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE)
|
||||||
|
.setProgress(100, 0, true)
|
||||||
|
.setOngoing(true)
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getUpdateNotification(context: Context, updatesList: List<App>): Notification {
|
||||||
|
val contentIntent = PendingIntent.getActivity(
|
||||||
|
context,
|
||||||
|
0,
|
||||||
|
Intent(context, MainActivity::class.java).apply {
|
||||||
|
action = Constants.NAVIGATION_UPDATES
|
||||||
|
},
|
||||||
|
PendingIntent.FLAG_IMMUTABLE
|
||||||
|
)
|
||||||
|
|
||||||
|
return NotificationCompat.Builder(context, Constants.NOTIFICATION_CHANNEL_UPDATES)
|
||||||
|
.setSmallIcon(R.drawable.ic_updates)
|
||||||
|
.setContentTitle(
|
||||||
|
if (updatesList.size == 1)
|
||||||
|
context.getString(
|
||||||
|
R.string.notification_updates_available_1,
|
||||||
|
updatesList.size
|
||||||
|
)
|
||||||
|
else
|
||||||
|
context.getString(
|
||||||
|
R.string.notification_updates_available,
|
||||||
|
updatesList.size
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.setContentText(
|
||||||
|
when (updatesList.size) {
|
||||||
|
1 -> {
|
||||||
|
context.getString(
|
||||||
|
R.string.notification_updates_available_desc_1,
|
||||||
|
updatesList[0].displayName
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
2 -> {
|
||||||
|
context.getString(
|
||||||
|
R.string.notification_updates_available_desc_2,
|
||||||
|
updatesList[0].displayName,
|
||||||
|
updatesList[1].displayName
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
3 -> {
|
||||||
|
context.getString(
|
||||||
|
R.string.notification_updates_available_desc_3,
|
||||||
|
updatesList[0].displayName,
|
||||||
|
updatesList[1].displayName,
|
||||||
|
updatesList[2].displayName
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
context.getString(
|
||||||
|
R.string.notification_updates_available_desc_4,
|
||||||
|
updatesList[0].displayName,
|
||||||
|
updatesList[1].displayName,
|
||||||
|
updatesList[2].displayName,
|
||||||
|
updatesList.size - 3
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.setContentIntent(contentIntent)
|
||||||
|
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||||
|
.setCategory(NotificationCompat.CATEGORY_RECOMMENDATION)
|
||||||
|
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
private fun getContentIntentForDetails(context: Context, packageName: String): PendingIntent {
|
private fun getContentIntentForDetails(context: Context, packageName: String): PendingIntent {
|
||||||
return NavDeepLinkBuilder(context)
|
return NavDeepLinkBuilder(context)
|
||||||
.setGraph(R.navigation.mobile_navigation)
|
.setGraph(R.navigation.mobile_navigation)
|
||||||
|
|||||||
Reference in New Issue
Block a user