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";