From fd856dce700b9b0b7d30210b0e72a13bc1819ae2 Mon Sep 17 00:00:00 2001 From: Gabriele M Date: Sun, 16 Jul 2017 21:23:44 +0200 Subject: [PATCH] Allow to disable the automatic updates check --- res/menu/menu_toolbar.xml | 6 +++ res/values/strings.xml | 1 + .../lineageos/updater/UpdatesActivity.java | 14 +++++++ .../updater/UpdatesCheckReceiver.java | 37 +++++++++++++++---- src/org/lineageos/updater/misc/Constants.java | 1 + 5 files changed, 51 insertions(+), 8 deletions(-) diff --git a/res/menu/menu_toolbar.xml b/res/menu/menu_toolbar.xml index f745e59..cfdaea6 100644 --- a/res/menu/menu_toolbar.xml +++ b/res/menu/menu_toolbar.xml @@ -6,4 +6,10 @@ android:icon="@drawable/ic_menu_refresh" android:title="@string/menu_refresh" app:showAsAction="always" /> + diff --git a/res/values/strings.xml b/res/values/strings.xml index e5b114e..6bdc2b0 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -53,6 +53,7 @@ Reboot Refresh + Auto updates check Checking for updates New updates found diff --git a/src/org/lineageos/updater/UpdatesActivity.java b/src/org/lineageos/updater/UpdatesActivity.java index 37ad2b2..fa65331 100644 --- a/src/org/lineageos/updater/UpdatesActivity.java +++ b/src/org/lineageos/updater/UpdatesActivity.java @@ -130,6 +130,20 @@ public class UpdatesActivity extends AppCompatActivity { case R.id.menu_refresh: downloadUpdatesList(true); return true; + case R.id.menu_auto_updates_check: + boolean enable = !item.isChecked(); + item.setChecked(enable); + PreferenceManager.getDefaultSharedPreferences(UpdatesActivity.this) + .edit() + .putBoolean(Constants.PREF_AUTO_UPDATES_CHECK, enable) + .apply(); + if (enable) { + UpdatesCheckReceiver.scheduleRepeatingUpdatesCheck(this); + } else { + UpdatesCheckReceiver.cancelRepeatingUpdatesCheck(this); + UpdatesCheckReceiver.cancelUpdatesCheck(this); + } + return true; } return super.onOptionsItemSelected(item); } diff --git a/src/org/lineageos/updater/UpdatesCheckReceiver.java b/src/org/lineageos/updater/UpdatesCheckReceiver.java index e97e3b2..e3fbfff 100644 --- a/src/org/lineageos/updater/UpdatesCheckReceiver.java +++ b/src/org/lineageos/updater/UpdatesCheckReceiver.java @@ -44,6 +44,12 @@ public class UpdatesCheckReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { + final SharedPreferences preferences = + PreferenceManager.getDefaultSharedPreferences(context); + if (!preferences.getBoolean(Constants.PREF_AUTO_UPDATES_CHECK, true)) { + return; + } + if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { // Set a repeating alarm on boot to check for new updates once per day scheduleRepeatingUpdatesCheck(context); @@ -51,8 +57,6 @@ public class UpdatesCheckReceiver extends BroadcastReceiver { Utils.cleanupDownloadsDir(context); } - final SharedPreferences preferences = - PreferenceManager.getDefaultSharedPreferences(context); long lastCheck = preferences.getLong(Constants.PREF_LAST_UPDATE_CHECK, -1); final long currentMillis = System.currentTimeMillis(); if (currentMillis > lastCheck + AlarmManager.INTERVAL_DAY) { @@ -116,24 +120,41 @@ public class UpdatesCheckReceiver extends BroadcastReceiver { notificationManager.notify(0, notificationBuilder.build()); } - private static void scheduleRepeatingUpdatesCheck(Context context) { - AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + private static PendingIntent getRepeatingUpdatesCheckIntent(Context context) { Intent intent = new Intent(context, UpdatesCheckReceiver.class); intent.setAction(DAILY_CHECK_ACTION); - PendingIntent updateCheckIntent = PendingIntent.getBroadcast(context, 0, intent, 0); + return PendingIntent.getBroadcast(context, 0, intent, 0); + } + + public static void scheduleRepeatingUpdatesCheck(Context context) { + PendingIntent updateCheckIntent = getRepeatingUpdatesCheckIntent(context); + AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY, AlarmManager.INTERVAL_DAY, updateCheckIntent); } - private static void scheduleUpdatesCheck(Context context) { + public static void cancelRepeatingUpdatesCheck(Context context) { AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + alarmMgr.cancel(getRepeatingUpdatesCheckIntent(context)); + } + + private static PendingIntent getUpdatesCheckIntent(Context context) { Intent intent = new Intent(context, UpdatesCheckReceiver.class); intent.setAction(ONESHOT_CHECK_ACTION); - PendingIntent updateCheckIntent = PendingIntent.getBroadcast(context, 0, intent, 0); - alarmMgr.cancel(updateCheckIntent); + return PendingIntent.getBroadcast(context, 0, intent, 0); + } + + public static void scheduleUpdatesCheck(Context context) { + PendingIntent updateCheckIntent = getUpdatesCheckIntent(context); + AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmMgr.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HOUR * 2, updateCheckIntent); } + + public static void cancelUpdatesCheck(Context context) { + AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + alarmMgr.cancel(getUpdatesCheckIntent(context)); + } } diff --git a/src/org/lineageos/updater/misc/Constants.java b/src/org/lineageos/updater/misc/Constants.java index dd5b3a3..3f31d98 100644 --- a/src/org/lineageos/updater/misc/Constants.java +++ b/src/org/lineageos/updater/misc/Constants.java @@ -21,6 +21,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 PROP_BUILD_DATE = "ro.build.date.utc"; public static final String PROP_BUILD_VERSION = "ro.cm.build.version";