Эх сурвалжийг харах

Add action to directly share crash log file from notification

arkon 4 жил өмнө
parent
commit
9facb51f22

+ 1 - 1
app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupCreateService.kt

@@ -111,7 +111,7 @@ class BackupCreateService : Service() {
 
             val backupFileUri = backupManager.createBackup(uri, backupFlags, false)?.toUri()
             val unifile = UniFile.fromUri(this, backupFileUri)
-            notifier.showBackupComplete(unifile)
+            notifier.showBackupComplete(unifile, backupType == BackupConst.BACKUP_TYPE_LEGACY)
         } catch (e: Exception) {
             notifier.showBackupError(e.message)
         }

+ 2 - 2
app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupNotifier.kt

@@ -60,7 +60,7 @@ class BackupNotifier(private val context: Context) {
         }
     }
 
-    fun showBackupComplete(unifile: UniFile) {
+    fun showBackupComplete(unifile: UniFile, isLegacyFormat: Boolean) {
         context.notificationManager.cancel(Notifications.ID_BACKUP_PROGRESS)
 
         with(completeNotificationBuilder) {
@@ -73,7 +73,7 @@ class BackupNotifier(private val context: Context) {
             addAction(
                 R.drawable.ic_share_24dp,
                 context.getString(R.string.action_share),
-                NotificationReceiver.shareBackupPendingBroadcast(context, unifile.uri, Notifications.ID_BACKUP_COMPLETE)
+                NotificationReceiver.shareBackupPendingBroadcast(context, unifile.uri, isLegacyFormat, Notifications.ID_BACKUP_COMPLETE)
             )
 
             show(Notifications.ID_BACKUP_COMPLETE)

+ 35 - 33
app/src/main/java/eu/kanade/tachiyomi/data/notification/NotificationReceiver.kt

@@ -70,9 +70,10 @@ class NotificationReceiver : BroadcastReceiver() {
                 )
             // Share backup file
             ACTION_SHARE_BACKUP ->
-                shareBackup(
+                shareFile(
                     context,
                     intent.getParcelableExtra(EXTRA_URI),
+                    if (intent.getBooleanExtra(EXTRA_IS_LEGACY_BACKUP, false)) "application/json" else "application/octet-stream+gzip",
                     intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1)
                 )
             ACTION_CANCEL_RESTORE -> cancelRestore(
@@ -101,6 +102,14 @@ class NotificationReceiver : BroadcastReceiver() {
                     markAsRead(urls, mangaId)
                 }
             }
+            // Share crash dump file
+            ACTION_SHARE_CRASH_LOG ->
+                shareFile(
+                    context,
+                    intent.getParcelableExtra(EXTRA_URI),
+                    "text/plain",
+                    intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1)
+                )
         }
     }
 
@@ -140,11 +149,11 @@ class NotificationReceiver : BroadcastReceiver() {
      * @param path path of file
      * @param notificationId id of notification
      */
-    private fun shareBackup(context: Context, uri: Uri, notificationId: Int) {
+    private fun shareFile(context: Context, uri: Uri, fileMimeType: String, notificationId: Int) {
         val sendIntent = Intent(Intent.ACTION_SEND).apply {
             putExtra(Intent.EXTRA_STREAM, uri)
             clipData = ClipData.newRawUri(null, uri)
-            type = "application/json"
+            type = fileMimeType
             flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION
         }
         // Dismiss notification
@@ -245,59 +254,34 @@ class NotificationReceiver : BroadcastReceiver() {
     companion object {
         private const val NAME = "NotificationReceiver"
 
-        // Called to launch share intent.
         private const val ACTION_SHARE_IMAGE = "$ID.$NAME.SHARE_IMAGE"
-
-        // Called to delete image.
         private const val ACTION_DELETE_IMAGE = "$ID.$NAME.DELETE_IMAGE"
 
-        // Called to launch send intent.
         private const val ACTION_SHARE_BACKUP = "$ID.$NAME.SEND_BACKUP"
 
-        // Called to cancel backup restore job.
+        private const val ACTION_SHARE_CRASH_LOG = "$ID.$NAME.SEND_CRASH_LOG"
+
         private const val ACTION_CANCEL_RESTORE = "$ID.$NAME.CANCEL_RESTORE"
 
-        // Called to cancel library update.
         private const val ACTION_CANCEL_LIBRARY_UPDATE = "$ID.$NAME.CANCEL_LIBRARY_UPDATE"
 
-        // Called to mark manga chapters as read.
         private const val ACTION_MARK_AS_READ = "$ID.$NAME.MARK_AS_READ"
-
-        // Called to open chapter.
         private const val ACTION_OPEN_CHAPTER = "$ID.$NAME.ACTION_OPEN_CHAPTER"
 
-        // Value containing file location.
-        private const val EXTRA_FILE_LOCATION = "$ID.$NAME.FILE_LOCATION"
-
-        // Called to resume downloads.
         private const val ACTION_RESUME_DOWNLOADS = "$ID.$NAME.ACTION_RESUME_DOWNLOADS"
-
-        // Called to pause downloads.
         private const val ACTION_PAUSE_DOWNLOADS = "$ID.$NAME.ACTION_PAUSE_DOWNLOADS"
-
-        // Called to clear downloads.
         private const val ACTION_CLEAR_DOWNLOADS = "$ID.$NAME.ACTION_CLEAR_DOWNLOADS"
 
-        // Called to dismiss notification.
         private const val ACTION_DISMISS_NOTIFICATION = "$ID.$NAME.ACTION_DISMISS_NOTIFICATION"
 
-        // Value containing uri.
+        private const val EXTRA_FILE_LOCATION = "$ID.$NAME.FILE_LOCATION"
         private const val EXTRA_URI = "$ID.$NAME.URI"
-
-        // Value containing notification id.
         private const val EXTRA_NOTIFICATION_ID = "$ID.$NAME.NOTIFICATION_ID"
-
-        // Value containing group id.
         private const val EXTRA_GROUP_ID = "$ID.$NAME.EXTRA_GROUP_ID"
-
-        // Value containing manga id.
         private const val EXTRA_MANGA_ID = "$ID.$NAME.EXTRA_MANGA_ID"
-
-        // Value containing chapter id.
         private const val EXTRA_CHAPTER_ID = "$ID.$NAME.EXTRA_CHAPTER_ID"
-
-        // Value containing chapter url.
         private const val EXTRA_CHAPTER_URL = "$ID.$NAME.EXTRA_CHAPTER_URL"
+        private const val EXTRA_IS_LEGACY_BACKUP = "$ID.$NAME.EXTRA_IS_LEGACY_BACKUP"
 
         /**
          * Returns a [PendingIntent] that resumes the download of a chapter
@@ -510,10 +494,11 @@ class NotificationReceiver : BroadcastReceiver() {
          * @param notificationId id of notification
          * @return [PendingIntent]
          */
-        internal fun shareBackupPendingBroadcast(context: Context, uri: Uri, notificationId: Int): PendingIntent {
+        internal fun shareBackupPendingBroadcast(context: Context, uri: Uri, isLegacyFormat: Boolean, notificationId: Int): PendingIntent {
             val intent = Intent(context, NotificationReceiver::class.java).apply {
                 action = ACTION_SHARE_BACKUP
                 putExtra(EXTRA_URI, uri)
+                putExtra(EXTRA_IS_LEGACY_BACKUP, isLegacyFormat)
                 putExtra(EXTRA_NOTIFICATION_ID, notificationId)
             }
             return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
@@ -535,6 +520,23 @@ class NotificationReceiver : BroadcastReceiver() {
             return PendingIntent.getActivity(context, 0, intent, 0)
         }
 
+        /**
+         * Returns [PendingIntent] that starts a share activity for a crash log dump file.
+         *
+         * @param context context of application
+         * @param uri uri of file
+         * @param notificationId id of notification
+         * @return [PendingIntent]
+         */
+        internal fun shareCrashLogPendingBroadcast(context: Context, uri: Uri, notificationId: Int): PendingIntent {
+            val intent = Intent(context, NotificationReceiver::class.java).apply {
+                action = ACTION_SHARE_CRASH_LOG
+                putExtra(EXTRA_URI, uri)
+                putExtra(EXTRA_NOTIFICATION_ID, notificationId)
+            }
+            return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
+        }
+
         /**
          * Returns [PendingIntent] that cancels a backup restore job.
          *

+ 6 - 0
app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt

@@ -44,6 +44,12 @@ class CrashLogUtil(private val context: Context) {
                 NotificationReceiver.openErrorLogPendingActivity(context, uri)
             )
 
+            addAction(
+                R.drawable.ic_share_24dp,
+                context.getString(R.string.action_share),
+                NotificationReceiver.shareCrashLogPendingBroadcast(context, uri, Notifications.ID_CRASH_LOGS)
+            )
+
             context.notificationManager.notify(Notifications.ID_CRASH_LOGS, build())
         }
     }