From dc95edbf8005be4f23a66afa2868a7151327d891 Mon Sep 17 00:00:00 2001 From: Gabriele M Date: Mon, 3 Jul 2017 16:08:33 +0200 Subject: [PATCH] Start service to pause/resume downloads from notification These operations require the service, so it's better to let DownloadService handle them. This also ensures we always fulfil the requests, even when sent while the service is not running. --- .../lineageos/updater/DownloadService.java | 39 +++++++++++++------ .../updater/UpdaterBroadcastReceiver.java | 38 +----------------- 2 files changed, 29 insertions(+), 48 deletions(-) diff --git a/src/org/lineageos/updater/DownloadService.java b/src/org/lineageos/updater/DownloadService.java index c9a46084..84fe144a 100644 --- a/src/org/lineageos/updater/DownloadService.java +++ b/src/org/lineageos/updater/DownloadService.java @@ -36,6 +36,13 @@ public class DownloadService extends Service { private static final String TAG = "DownloadService"; + public static final String ACTION_DOWNLOAD_CONTROL = "action_download_control"; + public static final String EXTRA_DOWNLOAD_ID = "extra_download_id"; + public static final String EXTRA_DOWNLOAD_CONTROL = "extra_download_control"; + + public static final int DOWNLOAD_RESUME = 0; + public static final int DOWNLOAD_PAUSE = 1; + private static final int NOTIFICATION_ID = 10; private final IBinder mBinder = new LocalBinder(); @@ -135,6 +142,16 @@ public class DownloadService extends Service { mNotificationBuilder.setOngoing(false); mNotificationManager.cancel(NOTIFICATION_ID); stopSelf(); + } else if (ACTION_DOWNLOAD_CONTROL.equals(intent.getAction())) { + String downloadId = intent.getStringExtra(EXTRA_DOWNLOAD_ID); + int action = intent.getIntExtra(EXTRA_DOWNLOAD_CONTROL, -1); + if (action == DOWNLOAD_RESUME) { + mDownloadController.resumeDownload(downloadId); + } else if (action == DOWNLOAD_PAUSE) { + mDownloadController.pauseDownload(downloadId); + } else { + Log.e(TAG, "Unknown download action"); + } } Log.d(TAG, "Service started"); return START_STICKY; @@ -250,22 +267,20 @@ public class DownloadService extends Service { } private PendingIntent getResumePendingIntent(String downloadId) { - final Intent intent = new Intent(this, UpdaterBroadcastReceiver.class); - intent.setAction(UpdaterBroadcastReceiver.ACTION_DOWNLOAD); - intent.putExtra(UpdaterBroadcastReceiver.EXTRA_DOWNLOAD_ID, downloadId); - intent.putExtra(UpdaterBroadcastReceiver.EXTRA_DOWNLOAD_ACTION, - UpdaterBroadcastReceiver.RESUME); - return PendingIntent.getBroadcast(this, 0, intent, + final Intent intent = new Intent(this, DownloadService.class); + intent.setAction(ACTION_DOWNLOAD_CONTROL); + intent.putExtra(EXTRA_DOWNLOAD_ID, downloadId); + intent.putExtra(EXTRA_DOWNLOAD_CONTROL, DOWNLOAD_RESUME); + return PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT); } private PendingIntent getPausePendingIntent(String downloadId) { - final Intent intent = new Intent(this, UpdaterBroadcastReceiver.class); - intent.setAction(UpdaterBroadcastReceiver.ACTION_DOWNLOAD); - intent.putExtra(UpdaterBroadcastReceiver.EXTRA_DOWNLOAD_ID, downloadId); - intent.putExtra(UpdaterBroadcastReceiver.EXTRA_DOWNLOAD_ACTION, - UpdaterBroadcastReceiver.PAUSE); - return PendingIntent.getBroadcast(this, 0, intent, + final Intent intent = new Intent(this, DownloadService.class); + intent.setAction(ACTION_DOWNLOAD_CONTROL); + intent.putExtra(EXTRA_DOWNLOAD_ID, downloadId); + intent.putExtra(EXTRA_DOWNLOAD_CONTROL, DOWNLOAD_PAUSE); + return PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT); } diff --git a/src/org/lineageos/updater/UpdaterBroadcastReceiver.java b/src/org/lineageos/updater/UpdaterBroadcastReceiver.java index 3852f4fd..2cfec876 100644 --- a/src/org/lineageos/updater/UpdaterBroadcastReceiver.java +++ b/src/org/lineageos/updater/UpdaterBroadcastReceiver.java @@ -26,56 +26,22 @@ import java.io.IOException; public class UpdaterBroadcastReceiver extends BroadcastReceiver { - public static final String ACTION_DOWNLOAD = - "org.lineageos.updater.action.DOWNLOAD"; public static final String EXTRA_DOWNLOAD_ID = "org.lineageos.updater.extra.DOWNLOAD_ID"; - public static final String EXTRA_DOWNLOAD_ACTION = - "org.lineageos.updater.extra.DOWNLOAD_CHANGE"; public static final String ACTION_INSTALL_UPDATE = "org.lineageos.updater.action.INSTALL_UPDATE"; - public static final int PAUSE = 0; - public static final int RESUME = 1; - private final static String TAG = "BroadcastReceiver"; @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); - if (ACTION_DOWNLOAD.equals(action)) { + if (ACTION_INSTALL_UPDATE.equals(action)) { if (!intent.hasExtra(EXTRA_DOWNLOAD_ID)) { Log.e(TAG, "Missing download ID"); return; } - DownloadController downloadController = DownloadController.getInstance(); - if (downloadController == null) { - Log.e(TAG, "No download controller instance found"); - return; - } - String downloadId = intent.getStringExtra(EXTRA_DOWNLOAD_ID); - if (intent.hasExtra(EXTRA_DOWNLOAD_ACTION)) { - int requestedAction = intent.getIntExtra(EXTRA_DOWNLOAD_ACTION, -1); - if (requestedAction == PAUSE) { - downloadController.pauseDownload(downloadId); - } else if (requestedAction == RESUME) { - downloadController.resumeDownload(downloadId); - } else { - Log.e(TAG, "Unknown action"); - } - } else { - Log.e(TAG, "Missing extra data"); - } - } else if (ACTION_INSTALL_UPDATE.equals(action)) { - if (!intent.hasExtra(EXTRA_DOWNLOAD_ID)) { - Log.e(TAG, "Missing download ID"); - return; - } - DownloadController downloadController = DownloadController.getInstance(); - if (downloadController == null) { - Log.e(TAG, "No download controller instance found"); - return; - } + DownloadController downloadController = DownloadController.getInstance(context); String downloadId = intent.getStringExtra(EXTRA_DOWNLOAD_ID); UpdateDownload update = downloadController.getUpdate(downloadId); try {