mirror of
https://github.com/bitfireAT/davx5-ose
synced 2024-07-23 19:50:18 +00:00
Catch SecurityException of notifications
This commit is contained in:
parent
5156ff1380
commit
29b2b2372f
|
@ -16,6 +16,7 @@ import at.bitfire.davdroid.settings.Settings
|
|||
import at.bitfire.davdroid.settings.SettingsManager
|
||||
import at.bitfire.davdroid.ui.AppSettingsActivity
|
||||
import at.bitfire.davdroid.ui.NotificationUtils
|
||||
import at.bitfire.davdroid.ui.NotificationUtils.notifyIfPossible
|
||||
import dagger.hilt.EntryPoint
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.EntryPointAccessors
|
||||
|
@ -88,7 +89,7 @@ class ForegroundService : Service() {
|
|||
.setCategory(NotificationCompat.CATEGORY_ERROR)
|
||||
|
||||
val nm = NotificationManagerCompat.from(context)
|
||||
nm.notify(NotificationUtils.NOTIFY_BATTERY_OPTIMIZATION, builder.build())
|
||||
nm.notifyIfPossible(NotificationUtils.NOTIFY_BATTERY_OPTIMIZATION, builder.build())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ import androidx.core.app.NotificationManagerCompat
|
|||
import androidx.lifecycle.MutableLiveData
|
||||
import at.bitfire.davdroid.log.Logger
|
||||
import at.bitfire.davdroid.ui.NotificationUtils
|
||||
import at.bitfire.davdroid.ui.NotificationUtils.notifyIfPossible
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
|
@ -74,7 +75,7 @@ class StorageLowReceiver private constructor(
|
|||
notify.setContentIntent(PendingIntent.getActivity(context, 0, settingsIntent, PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE))
|
||||
|
||||
val nm = NotificationManagerCompat.from(context)
|
||||
nm.notify(NotificationUtils.NOTIFY_LOW_STORAGE, notify.build())
|
||||
nm.notifyIfPossible(NotificationUtils.NOTIFY_LOW_STORAGE, notify.build())
|
||||
}
|
||||
|
||||
fun onStorageOk() {
|
||||
|
|
|
@ -20,6 +20,7 @@ import at.bitfire.davdroid.TextTable
|
|||
import at.bitfire.davdroid.log.Logger
|
||||
import at.bitfire.davdroid.ui.AccountsActivity
|
||||
import at.bitfire.davdroid.ui.NotificationUtils
|
||||
import at.bitfire.davdroid.ui.NotificationUtils.notifyIfPossible
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
|
@ -64,7 +65,7 @@ abstract class AppDatabase: RoomDatabase() {
|
|||
.setContentIntent(PendingIntent.getActivity(context, 0, launcherIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE))
|
||||
.setAutoCancel(true)
|
||||
.build()
|
||||
nm.notify(NotificationUtils.NOTIFY_DATABASE_CORRUPTED, notify)
|
||||
nm.notifyIfPossible(NotificationUtils.NOTIFY_DATABASE_CORRUPTED, notify)
|
||||
|
||||
// remove all accounts because they're unfortunately useless without database
|
||||
val am = AccountManager.get(context)
|
||||
|
|
|
@ -19,6 +19,7 @@ import at.bitfire.davdroid.R
|
|||
import at.bitfire.davdroid.ui.AppSettingsActivity
|
||||
import at.bitfire.davdroid.ui.DebugInfoActivity
|
||||
import at.bitfire.davdroid.ui.NotificationUtils
|
||||
import at.bitfire.davdroid.ui.NotificationUtils.notifyIfPossible
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.util.*
|
||||
|
@ -115,7 +116,7 @@ object Logger : SharedPreferences.OnSharedPreferenceChangeListener {
|
|||
pendingPref
|
||||
).build())
|
||||
|
||||
nm.notify(NotificationUtils.NOTIFY_VERBOSE_LOGGING, builder.build())
|
||||
nm.notifyIfPossible(NotificationUtils.NOTIFY_VERBOSE_LOGGING, builder.build())
|
||||
} catch(e: IOException) {
|
||||
log.log(Level.SEVERE, "Couldn't create log file", e)
|
||||
Toast.makeText(context, context.getString(R.string.logging_couldnt_create_file), Toast.LENGTH_LONG).show()
|
||||
|
|
|
@ -29,6 +29,7 @@ import at.bitfire.davdroid.settings.Settings
|
|||
import at.bitfire.davdroid.settings.SettingsManager
|
||||
import at.bitfire.davdroid.ui.DebugInfoActivity
|
||||
import at.bitfire.davdroid.ui.NotificationUtils
|
||||
import at.bitfire.davdroid.ui.NotificationUtils.notifyIfPossible
|
||||
import com.google.common.util.concurrent.ListenableFuture
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedInject
|
||||
|
@ -180,7 +181,7 @@ class RefreshCollectionsWorker @AssistedInject constructor(
|
|||
.setCategory(NotificationCompat.CATEGORY_ERROR)
|
||||
.build()
|
||||
NotificationManagerCompat.from(applicationContext)
|
||||
.notify(serviceId.toString(), NotificationUtils.NOTIFY_REFRESH_COLLECTIONS, notify)
|
||||
.notifyIfPossible(serviceId.toString(), NotificationUtils.NOTIFY_REFRESH_COLLECTIONS, notify)
|
||||
return Result.failure()
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@ import at.bitfire.davdroid.resource.*
|
|||
import at.bitfire.davdroid.settings.AccountSettings
|
||||
import at.bitfire.davdroid.ui.DebugInfoActivity
|
||||
import at.bitfire.davdroid.ui.NotificationUtils
|
||||
import at.bitfire.davdroid.ui.NotificationUtils.notifyIfPossible
|
||||
import at.bitfire.davdroid.ui.account.SettingsActivity
|
||||
import at.bitfire.ical4android.CalendarStorageException
|
||||
import at.bitfire.ical4android.Ical4Android
|
||||
|
@ -776,7 +777,7 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L
|
|||
.setCategory(NotificationCompat.CATEGORY_ERROR)
|
||||
viewItemAction?.let { builder.addAction(it) }
|
||||
|
||||
notificationManager.notify(notificationTag, NotificationUtils.NOTIFY_SYNC_ERROR, builder.build())
|
||||
notificationManager.notifyIfPossible(notificationTag, NotificationUtils.NOTIFY_SYNC_ERROR, builder.build())
|
||||
}
|
||||
|
||||
private fun buildDebugInfoIntent(e: Throwable, local: ResourceType?, remote: HttpUrl?) =
|
||||
|
@ -828,7 +829,7 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L
|
|||
.setAutoCancel(true)
|
||||
.setOnlyAlertOnce(true)
|
||||
.priority = NotificationCompat.PRIORITY_LOW
|
||||
notificationManager.notify(notificationTag, NotificationUtils.NOTIFY_INVALID_RESOURCE, builder.build())
|
||||
notificationManager.notifyIfPossible(notificationTag, NotificationUtils.NOTIFY_INVALID_RESOURCE, builder.build())
|
||||
}
|
||||
|
||||
protected abstract fun notifyInvalidResourceTitle(): String
|
||||
|
|
|
@ -28,6 +28,7 @@ import at.bitfire.davdroid.settings.AccountSettings
|
|||
import at.bitfire.davdroid.settings.Settings
|
||||
import at.bitfire.davdroid.settings.SettingsManager
|
||||
import at.bitfire.davdroid.ui.NotificationUtils
|
||||
import at.bitfire.davdroid.ui.NotificationUtils.notifyIfPossible
|
||||
import at.bitfire.ical4android.TaskProvider
|
||||
import dagger.hilt.EntryPoint
|
||||
import dagger.hilt.InstallIn
|
||||
|
@ -80,7 +81,7 @@ object SyncUtils {
|
|||
if (intent.resolveActivity(pm) != null)
|
||||
notify.setContentIntent(PendingIntent.getActivity(context, 0, intent, flags))
|
||||
|
||||
nm.notify(NotificationUtils.NOTIFY_TASKS_PROVIDER_TOO_OLD, notify.build())
|
||||
nm.notifyIfPossible(NotificationUtils.NOTIFY_TASKS_PROVIDER_TOO_OLD, notify.build())
|
||||
}
|
||||
|
||||
fun removePeriodicSyncs(account: Account, authority: String) {
|
||||
|
|
|
@ -5,16 +5,20 @@
|
|||
package at.bitfire.davdroid.ui
|
||||
|
||||
import android.annotation.TargetApi
|
||||
import android.app.Notification
|
||||
import android.app.NotificationChannel
|
||||
import android.app.NotificationChannelGroup
|
||||
import android.app.NotificationManager
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
import androidx.core.content.getSystemService
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import at.bitfire.davdroid.App
|
||||
import at.bitfire.davdroid.R
|
||||
import at.bitfire.davdroid.log.Logger
|
||||
import java.util.logging.Level
|
||||
|
||||
object NotificationUtils {
|
||||
|
||||
|
@ -83,4 +87,16 @@ object NotificationUtils {
|
|||
return builder
|
||||
}
|
||||
|
||||
|
||||
fun NotificationManagerCompat.notifyIfPossible(tag: String?, id: Int, notification: Notification) {
|
||||
try {
|
||||
notify(tag, id, notification)
|
||||
} catch (e: SecurityException) {
|
||||
Logger.log.log(Level.WARNING, "Couldn't post notification (SecurityException)", notification)
|
||||
}
|
||||
}
|
||||
|
||||
fun NotificationManagerCompat.notifyIfPossible(id: Int, notification: Notification) =
|
||||
notifyIfPossible(null, id, notification)
|
||||
|
||||
}
|
|
@ -20,6 +20,7 @@ import at.bitfire.davdroid.BuildConfig
|
|||
import at.bitfire.davdroid.R
|
||||
import at.bitfire.davdroid.log.Logger
|
||||
import at.bitfire.davdroid.ui.NotificationUtils
|
||||
import at.bitfire.davdroid.ui.NotificationUtils.notifyIfPossible
|
||||
import at.bitfire.davdroid.ui.PermissionsActivity
|
||||
|
||||
object PermissionUtils {
|
||||
|
@ -119,7 +120,7 @@ object PermissionUtils {
|
|||
.setAutoCancel(true)
|
||||
.build()
|
||||
NotificationManagerCompat.from(context)
|
||||
.notify(NotificationUtils.NOTIFY_PERMISSIONS, notify)
|
||||
.notifyIfPossible(NotificationUtils.NOTIFY_PERMISSIONS, notify)
|
||||
}
|
||||
|
||||
fun showAppSettings(context: Context) {
|
||||
|
|
|
@ -23,6 +23,7 @@ import at.bitfire.dav4jvm.exception.HttpException
|
|||
import at.bitfire.davdroid.*
|
||||
import at.bitfire.davdroid.log.Logger
|
||||
import at.bitfire.davdroid.ui.NotificationUtils
|
||||
import at.bitfire.davdroid.ui.NotificationUtils.notifyIfPossible
|
||||
import at.bitfire.davdroid.util.DavUtils
|
||||
import at.bitfire.davdroid.webdav.cache.MemoryCache
|
||||
import at.bitfire.davdroid.webdav.cache.SegmentedCache
|
||||
|
@ -114,7 +115,7 @@ class RandomAccessCallback private constructor(
|
|||
100
|
||||
else
|
||||
(offset*100/fileSize).toInt()
|
||||
notificationManager.notify(
|
||||
notificationManager.notifyIfPossible(
|
||||
notificationTag,
|
||||
NotificationUtils.NOTIFY_WEBDAV_ACCESS,
|
||||
notification.setProgress(100, progress, false).build()
|
||||
|
|
|
@ -12,11 +12,12 @@ import androidx.core.app.NotificationCompat
|
|||
import androidx.core.app.NotificationManagerCompat
|
||||
import at.bitfire.dav4jvm.DavResource
|
||||
import at.bitfire.dav4jvm.exception.HttpException
|
||||
import at.bitfire.davdroid.util.DavUtils
|
||||
import at.bitfire.davdroid.HttpClient
|
||||
import at.bitfire.davdroid.R
|
||||
import at.bitfire.davdroid.log.Logger
|
||||
import at.bitfire.davdroid.ui.NotificationUtils
|
||||
import at.bitfire.davdroid.ui.NotificationUtils.notifyIfPossible
|
||||
import at.bitfire.davdroid.util.DavUtils
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.MediaType
|
||||
import okhttp3.RequestBody
|
||||
|
@ -105,7 +106,7 @@ class StreamingFileDescriptor(
|
|||
notification.setContentTitle(context.getString(R.string.webdav_notification_download))
|
||||
if (length == -1L)
|
||||
// unknown file size, show notification now (no updates on progress)
|
||||
notificationManager.notify(
|
||||
notificationManager.notifyIfPossible(
|
||||
notificationTag,
|
||||
NotificationUtils.NOTIFY_WEBDAV_ACCESS,
|
||||
notification
|
||||
|
@ -124,7 +125,7 @@ class StreamingFileDescriptor(
|
|||
while (bytes != -1) {
|
||||
// update notification (if file size is known)
|
||||
if (length != -1L)
|
||||
notificationManager.notify(
|
||||
notificationManager.notifyIfPossible(
|
||||
notificationTag,
|
||||
NotificationUtils.NOTIFY_WEBDAV_ACCESS,
|
||||
notification
|
||||
|
@ -155,7 +156,7 @@ class StreamingFileDescriptor(
|
|||
override fun contentType(): MediaType? = mimeType
|
||||
override fun isOneShot() = true
|
||||
override fun writeTo(sink: BufferedSink) {
|
||||
notificationManager.notify(
|
||||
notificationManager.notifyIfPossible(
|
||||
notificationTag,
|
||||
NotificationUtils.NOTIFY_WEBDAV_ACCESS,
|
||||
notification
|
||||
|
|
Loading…
Reference in a new issue