123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package com.nextcloud.client.notifications
- import android.app.Notification
- import android.app.NotificationManager
- import android.app.PendingIntent
- import android.content.Context
- import android.content.Intent
- import android.content.res.Resources
- import android.graphics.BitmapFactory
- import android.os.Build
- import androidx.core.app.NotificationCompat
- import com.nextcloud.client.account.User
- import com.owncloud.android.R
- import com.owncloud.android.datamodel.OCFile
- import com.owncloud.android.ui.activity.FileDisplayActivity
- import com.owncloud.android.ui.notifications.NotificationUtils
- import com.owncloud.android.ui.preview.PreviewImageActivity
- import com.owncloud.android.ui.preview.PreviewImageFragment
- import com.owncloud.android.utils.theme.ThemeColorUtils
- import javax.inject.Inject
- class AppNotificationManagerImpl @Inject constructor(
- private val context: Context,
- private val resources: Resources,
- private val platformNotificationsManager: NotificationManager,
- private val themeColorUtils: ThemeColorUtils
- ) : AppNotificationManager {
- companion object {
- const val PROGRESS_PERCENTAGE_MAX = 100
- const val PROGRESS_PERCENTAGE_MIN = 0
- }
- private fun builder(channelId: String): NotificationCompat.Builder {
- val color = themeColorUtils.primaryColor(context, true)
- return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- NotificationCompat.Builder(context, channelId).setColor(color)
- } else {
- NotificationCompat.Builder(context).setColor(color)
- }
- }
- override fun buildDownloadServiceForegroundNotification(): Notification {
- val icon = BitmapFactory.decodeResource(resources, R.drawable.notification_icon)
- return builder(NotificationUtils.NOTIFICATION_CHANNEL_DOWNLOAD)
- .setContentTitle(resources.getString(R.string.app_name))
- .setContentText(resources.getString(R.string.foreground_service_download))
- .setSmallIcon(R.drawable.notification_icon)
- .setLargeIcon(icon)
- .build()
- }
- override fun postDownloadTransferProgress(fileOwner: User, file: OCFile, progress: Int, allowPreview: Boolean) {
- val builder = builder(NotificationUtils.NOTIFICATION_CHANNEL_DOWNLOAD)
- val content = resources.getString(
- R.string.downloader_download_in_progress_content,
- progress,
- file.fileName
- )
- builder
- .setSmallIcon(R.drawable.ic_cloud_download)
- .setTicker(resources.getString(R.string.downloader_download_in_progress_ticker))
- .setContentTitle(resources.getString(R.string.downloader_download_in_progress_ticker))
- .setOngoing(true)
- .setProgress(PROGRESS_PERCENTAGE_MAX, progress, progress <= PROGRESS_PERCENTAGE_MIN)
- .setContentText(content)
- if (allowPreview) {
- val openFileIntent = if (PreviewImageFragment.canBePreviewed(file)) {
- PreviewImageActivity.previewFileIntent(context, fileOwner, file)
- } else {
- FileDisplayActivity.openFileIntent(context, fileOwner, file)
- }
- openFileIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
- val pendingOpenFileIntent = PendingIntent.getActivity(
- context,
- System.currentTimeMillis().toInt(),
- openFileIntent,
- PendingIntent.FLAG_IMMUTABLE
- )
- builder.setContentIntent(pendingOpenFileIntent)
- }
- platformNotificationsManager.notify(AppNotificationManager.TRANSFER_NOTIFICATION_ID, builder.build())
- }
- override fun postUploadTransferProgress(fileOwner: User, file: OCFile, progress: Int) {
- val builder = builder(NotificationUtils.NOTIFICATION_CHANNEL_DOWNLOAD)
- val content = resources.getString(
- R.string.uploader_upload_in_progress_content,
- progress,
- file.fileName
- )
- builder
- .setSmallIcon(R.drawable.ic_cloud_upload)
- .setTicker(resources.getString(R.string.uploader_upload_in_progress_ticker))
- .setContentTitle(resources.getString(R.string.uploader_upload_in_progress_ticker))
- .setOngoing(true)
- .setProgress(PROGRESS_PERCENTAGE_MAX, progress, progress <= PROGRESS_PERCENTAGE_MIN)
- .setContentText(content)
- platformNotificationsManager.notify(AppNotificationManager.TRANSFER_NOTIFICATION_ID, builder.build())
- }
- override fun cancelTransferNotification() {
- platformNotificationsManager.cancel(AppNotificationManager.TRANSFER_NOTIFICATION_ID)
- }
- }
|