From 8768daddf0924b8398386876cb8dcf8b18ab0b06 Mon Sep 17 00:00:00 2001 From: Gabriele M Date: Fri, 21 Jul 2017 01:17:19 +0200 Subject: [PATCH] Add option to delete updates when installed This is mostly useful on encrypted devices since it allows to not copy the update before installing it. --- res/menu/menu_toolbar.xml | 5 +++++ res/values/strings.xml | 1 + src/org/lineageos/updater/UpdatesActivity.java | 15 +++++++++++++-- .../updater/controller/ABUpdateInstaller.java | 17 ++++++++++++++--- .../updater/controller/UpdaterService.java | 13 +++++++++++-- src/org/lineageos/updater/misc/Constants.java | 1 + 6 files changed, 45 insertions(+), 7 deletions(-) diff --git a/res/menu/menu_toolbar.xml b/res/menu/menu_toolbar.xml index cfdaea6..1ba56a0 100644 --- a/res/menu/menu_toolbar.xml +++ b/res/menu/menu_toolbar.xml @@ -12,4 +12,9 @@ android:checked="true" android:title="@string/menu_auto_updates_check" app:showAsAction="never" /> + diff --git a/res/values/strings.xml b/res/values/strings.xml index 0b6ae93..4be6bb7 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -55,6 +55,7 @@ Refresh Auto updates check + Delete updates when installed Delete Copy URL Export update diff --git a/src/org/lineageos/updater/UpdatesActivity.java b/src/org/lineageos/updater/UpdatesActivity.java index 6d6c1b4..3011d55 100644 --- a/src/org/lineageos/updater/UpdatesActivity.java +++ b/src/org/lineageos/updater/UpdatesActivity.java @@ -180,10 +180,11 @@ public class UpdatesActivity extends UpdatesListActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.menu_refresh: + case R.id.menu_refresh: { downloadUpdatesList(true); return true; - case R.id.menu_auto_updates_check: + } + case R.id.menu_auto_updates_check: { boolean enable = !item.isChecked(); item.setChecked(enable); PreferenceManager.getDefaultSharedPreferences(UpdatesActivity.this) @@ -197,6 +198,16 @@ public class UpdatesActivity extends UpdatesListActivity { UpdatesCheckReceiver.cancelUpdatesCheck(this); } return true; + } + case R.id.menu_auto_delete_updates: { + boolean enable = !item.isChecked(); + item.setChecked(enable); + PreferenceManager.getDefaultSharedPreferences(UpdatesActivity.this) + .edit() + .putBoolean(Constants.PREF_AUTO_DELETE_UPDATES, enable) + .apply(); + return true; + } } return super.onOptionsItemSelected(item); } diff --git a/src/org/lineageos/updater/controller/ABUpdateInstaller.java b/src/org/lineageos/updater/controller/ABUpdateInstaller.java index 815c7ea..16320b9 100644 --- a/src/org/lineageos/updater/controller/ABUpdateInstaller.java +++ b/src/org/lineageos/updater/controller/ABUpdateInstaller.java @@ -15,8 +15,10 @@ */ package org.lineageos.updater.controller; +import android.content.Context; import android.os.UpdateEngine; import android.os.UpdateEngineCallback; +import android.support.v7.preference.PreferenceManager; import android.util.Log; import org.lineageos.updater.misc.Constants; @@ -42,6 +44,7 @@ class ABUpdateInstaller { private final UpdaterController mUpdaterController; private final String mDownloadId; + private final Context mContext; private final UpdateEngineCallback mUpdateEngineCallback = new UpdateEngineCallback() { @@ -86,15 +89,21 @@ class ABUpdateInstaller { } break; } + + boolean deleteUpdate = PreferenceManager.getDefaultSharedPreferences(mContext) + .getBoolean(Constants.PREF_AUTO_UPDATES_CHECK, false); + if (deleteUpdate) { + mUpdaterController.deleteUpdate(mDownloadId); + } } }; - static synchronized boolean start(UpdaterController updaterController, + static synchronized boolean start(Context context, UpdaterController updaterController, String downloadId) { if (sDownloadId != null) { return false; } - ABUpdateInstaller installer = new ABUpdateInstaller(updaterController, downloadId); + ABUpdateInstaller installer = new ABUpdateInstaller(context, updaterController, downloadId); if (installer.startUpdate()) { sDownloadId = downloadId; return true; @@ -110,9 +119,11 @@ class ABUpdateInstaller { return sDownloadId != null && sDownloadId.equals(downloadId); } - private ABUpdateInstaller(UpdaterController updaterController, String downloadId) { + private ABUpdateInstaller(Context context, UpdaterController updaterController, + String downloadId) { mUpdaterController = updaterController; mDownloadId = downloadId; + mContext = context; } private boolean startUpdate() { diff --git a/src/org/lineageos/updater/controller/UpdaterService.java b/src/org/lineageos/updater/controller/UpdaterService.java index c360032..d74fdc8 100644 --- a/src/org/lineageos/updater/controller/UpdaterService.java +++ b/src/org/lineageos/updater/controller/UpdaterService.java @@ -27,6 +27,7 @@ import android.os.Bundle; import android.os.IBinder; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.NotificationCompat; +import android.support.v7.preference.PreferenceManager; import android.text.format.Formatter; import android.util.Log; @@ -170,9 +171,17 @@ public class UpdaterService extends Service { } try { if (Utils.isABUpdate(update.getFile())) { - ABUpdateInstaller.start(mUpdaterController, downloadId); + ABUpdateInstaller.start(this, mUpdaterController, downloadId); } else { - if (update.getFile().getAbsolutePath().startsWith("/data/") && + boolean deleteUpdate = PreferenceManager.getDefaultSharedPreferences(this) + .getBoolean(Constants.PREF_AUTO_UPDATES_CHECK, false); + if (deleteUpdate) { + // Renaming the file is enough to have it deleted automatically + File uncrytpFile = new File( + update.getFile().getAbsolutePath() + Constants.UNCRYPT_FILE_EXT); + update.getFile().renameTo(uncrytpFile); + installPackage(uncrytpFile); + } else if (update.getFile().getAbsolutePath().startsWith("/data/") && Utils.isDeviceEncrypted(this)) { // uncrypt rewrites the file so that it can be read without mounting // the filesystem, so create a copy of it. diff --git a/src/org/lineageos/updater/misc/Constants.java b/src/org/lineageos/updater/misc/Constants.java index 5b27bb2..b620458 100644 --- a/src/org/lineageos/updater/misc/Constants.java +++ b/src/org/lineageos/updater/misc/Constants.java @@ -25,6 +25,7 @@ public final class Constants { public static final String PREF_LAST_UPDATE_CHECK = "last_update_check"; public static final String PREF_AUTO_UPDATES_CHECK = "auto_updates_check"; + public static final String PREF_AUTO_DELETE_UPDATES = "auto_delete_updates"; public static final String UNCRYPT_FILE_EXT = ".uncrypt";