diff --git a/res/drawable/ic_tab_install.xml b/res/drawable/ic_tab_install.xml new file mode 100644 index 0000000..321b0c8 --- /dev/null +++ b/res/drawable/ic_tab_install.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/src/org/lineageos/updater/DownloadService.java b/src/org/lineageos/updater/DownloadService.java index 13e97d2..c799ee4 100644 --- a/src/org/lineageos/updater/DownloadService.java +++ b/src/org/lineageos/updater/DownloadService.java @@ -220,6 +220,9 @@ public class DownloadService extends Service { String text = getString(R.string.download_completed_notification); NotificationCompat.BigTextStyle style = new NotificationCompat.BigTextStyle() .setBigContentTitle(text).bigText(update.getName()); + mNotificationBuilder.addAction(R.drawable.ic_tab_install, + getString(R.string.install_button), + getResumePendingIntent(update.getDownloadId())); mNotificationBuilder.setStyle(style); mNotificationBuilder.setContentTitle(text); mNotificationBuilder.setTicker(text); @@ -263,4 +266,12 @@ public class DownloadService extends Service { return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT); } + + private PendingIntent getInstallPendingIntent(String downloadId) { + final Intent intent = new Intent(this, UpdaterBroadcastReceiver.class); + intent.setAction(UpdaterBroadcastReceiver.ACTION_INSTALL_UPDATE); + intent.putExtra(UpdaterBroadcastReceiver.EXTRA_DOWNLOAD_ID, downloadId); + return PendingIntent.getBroadcast(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 cb78511..3852f4f 100644 --- a/src/org/lineageos/updater/UpdaterBroadcastReceiver.java +++ b/src/org/lineageos/updater/UpdaterBroadcastReceiver.java @@ -20,6 +20,10 @@ import android.content.Context; import android.content.Intent; import android.util.Log; +import org.lineageos.updater.misc.Utils; + +import java.io.IOException; + public class UpdaterBroadcastReceiver extends BroadcastReceiver { public static final String ACTION_DOWNLOAD = @@ -28,6 +32,8 @@ public class UpdaterBroadcastReceiver extends BroadcastReceiver { "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; @@ -38,13 +44,17 @@ public class UpdaterBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (ACTION_DOWNLOAD.equals(action)) { - if (intent.hasExtra(EXTRA_DOWNLOAD_ACTION) && intent.hasExtra(EXTRA_DOWNLOAD_ID)) { - 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_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); @@ -56,6 +66,24 @@ public class UpdaterBroadcastReceiver extends BroadcastReceiver { } 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; + } + String downloadId = intent.getStringExtra(EXTRA_DOWNLOAD_ID); + UpdateDownload update = downloadController.getUpdate(downloadId); + try { + Utils.triggerUpdate(context, update); + } catch (IOException e) { + Log.e(TAG, "Could not trigger update"); + // TODO: show error + } } } }