mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +01:00 
			
		
		
		
	Add action to directly share crash log file from notification
This commit is contained in:
		| @@ -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) | ||||
|         } | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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. | ||||
|          * | ||||
|   | ||||
| @@ -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()) | ||||
|         } | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user