Allow to disable the automatic updates check

This commit is contained in:
Gabriele M
2017-07-16 21:23:44 +02:00
parent f94846674f
commit fd856dce70
5 changed files with 51 additions and 8 deletions

View File

@@ -6,4 +6,10 @@
android:icon="@drawable/ic_menu_refresh"
android:title="@string/menu_refresh"
app:showAsAction="always" />
<item
android:id="@+id/menu_auto_updates_check"
android:checkable="true"
android:checked="true"
android:title="@string/menu_auto_updates_check"
app:showAsAction="never" />
</menu>

View File

@@ -53,6 +53,7 @@
<string name="reboot">Reboot</string>
<string name="menu_refresh">Refresh</string>
<string name="menu_auto_updates_check">Auto updates check</string>
<string name="dialog_checking_for_updates">Checking for updates</string>
<string name="snack_updates_found">New updates found</string>

View File

@@ -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);
}

View File

@@ -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));
}
}

View File

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