aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuK1337 <priv.luk@gmail.com>2018-11-17 23:53:07 +0100
committerLuca Stefani <luca.stefani.ge1@gmail.com>2019-02-10 10:45:35 +0100
commit2454a339a320c4cfcd9c0d565834d04cdd41de56 (patch)
treeee00fc0d10c2a975743336c49fbb68bf792be835
parentee251456c3771ed79d9f358a9729f8902d8228fa (diff)
downloadandroid_packages_apps_Updater-2454a339a320c4cfcd9c0d565834d04cdd41de56.tar.gz
android_packages_apps_Updater-2454a339a320c4cfcd9c0d565834d04cdd41de56.tar.bz2
android_packages_apps_Updater-2454a339a320c4cfcd9c0d565834d04cdd41de56.zip
Updater: Implement auto update check interval preference
* This replaces auto update check switch with a dropdown with 4 options: * Never * Once a day * Once a week (default) * Once a month Change-Id: I4bcae4c013a5d44958f9c54d641e64aac3062a8b
-rw-r--r--res/layout/preferences_dialog.xml22
-rw-r--r--res/values/arrays.xml24
-rw-r--r--res/values/strings.xml4
-rw-r--r--src/org/lineageos/updater/UpdatesActivity.java14
-rw-r--r--src/org/lineageos/updater/UpdatesCheckReceiver.java66
-rw-r--r--src/org/lineageos/updater/misc/Constants.java7
-rw-r--r--src/org/lineageos/updater/misc/Utils.java23
7 files changed, 95 insertions, 65 deletions
diff --git a/res/layout/preferences_dialog.xml b/res/layout/preferences_dialog.xml
index 898f53e..e30c117 100644
--- a/res/layout/preferences_dialog.xml
+++ b/res/layout/preferences_dialog.xml
@@ -7,13 +7,27 @@
android:paddingStart="24dp"
android:paddingTop="16dp">
- <Switch
- android:id="@+id/preferences_auto_updates_check"
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
- android:text="@string/menu_auto_updates_check"
- android:textSize="16sp" />
+ android:orientation="horizontal">
+
+ <TextView
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/menu_auto_updates_check"
+ android:textColor="@color/inverted"
+ android:textSize="16sp" />
+
+ <Spinner
+ android:id="@+id/preferences_auto_updates_check_interval"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:entries="@array/menu_auto_updates_check_interval_entries" />
+ </LinearLayout>
<Switch
android:id="@+id/preferences_auto_delete_updates"
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
new file mode 100644
index 0000000..287c221
--- /dev/null
+++ b/res/values/arrays.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2019 The LineageOS Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+ <string-array name="menu_auto_updates_check_interval_entries" translatable="false">
+ <item>@string/menu_auto_updates_check_interval_never</item>
+ <item>@string/menu_auto_updates_check_interval_daily</item>
+ <item>@string/menu_auto_updates_check_interval_weekly</item>
+ <item>@string/menu_auto_updates_check_interval_monthly</item>
+ </string-array>
+</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index aa84059..b3ce44e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -64,6 +64,10 @@
<string name="menu_refresh">Refresh</string>
<string name="menu_preferences">Preferences</string>
<string name="menu_auto_updates_check">Auto updates check</string>
+ <string name="menu_auto_updates_check_interval_daily">Once a day</string>
+ <string name="menu_auto_updates_check_interval_weekly">Once a week</string>
+ <string name="menu_auto_updates_check_interval_monthly">Once a month</string>
+ <string name="menu_auto_updates_check_interval_never">Never</string>
<string name="menu_auto_delete_updates">Delete updates when installed</string>
<string name="menu_delete_update">Delete</string>
<string name="menu_copy_url">Copy URL</string>
diff --git a/src/org/lineageos/updater/UpdatesActivity.java b/src/org/lineageos/updater/UpdatesActivity.java
index 2d3fc57..efea969 100644
--- a/src/org/lineageos/updater/UpdatesActivity.java
+++ b/src/org/lineageos/updater/UpdatesActivity.java
@@ -45,6 +45,7 @@ import android.view.View;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
+import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView;
@@ -292,7 +293,7 @@ public class UpdatesActivity extends UpdatesListActivity {
long millis = System.currentTimeMillis();
preferences.edit().putLong(Constants.PREF_LAST_UPDATE_CHECK, millis).apply();
updateLastCheckedString();
- if (json.exists() && preferences.getBoolean(Constants.PREF_AUTO_UPDATES_CHECK, true) &&
+ if (json.exists() && Utils.isUpdateCheckEnabled(this) &&
Utils.checkForNewUpdates(json, jsonNew)) {
UpdatesCheckReceiver.updateRepeatingUpdatesCheck(this);
}
@@ -406,7 +407,8 @@ public class UpdatesActivity extends UpdatesListActivity {
private void showPreferencesDialog() {
View view = LayoutInflater.from(this).inflate(R.layout.preferences_dialog, null);
- Switch autoCheck = view.findViewById(R.id.preferences_auto_updates_check);
+ Spinner autoCheckInterval =
+ view.findViewById(R.id.preferences_auto_updates_check_interval);
Switch autoDelete = view.findViewById(R.id.preferences_auto_delete_updates);
Switch dataWarning = view.findViewById(R.id.preferences_mobile_data_warning);
Switch abPerfMode = view.findViewById(R.id.preferences_ab_perf_mode);
@@ -416,7 +418,7 @@ public class UpdatesActivity extends UpdatesListActivity {
}
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- autoCheck.setChecked(prefs.getBoolean(Constants.PREF_AUTO_UPDATES_CHECK, true));
+ autoCheckInterval.setSelection(Utils.getUpdateCheckSetting(this));
autoDelete.setChecked(prefs.getBoolean(Constants.PREF_AUTO_DELETE_UPDATES, false));
dataWarning.setChecked(prefs.getBoolean(Constants.PREF_MOBILE_DATA_WARNING, true));
abPerfMode.setChecked(prefs.getBoolean(Constants.PREF_AB_PERF_MODE, false));
@@ -426,8 +428,8 @@ public class UpdatesActivity extends UpdatesListActivity {
.setView(view)
.setOnDismissListener(dialogInterface -> {
prefs.edit()
- .putBoolean(Constants.PREF_AUTO_UPDATES_CHECK,
- autoCheck.isChecked())
+ .putInt(Constants.PREF_AUTO_UPDATES_CHECK_INTERVAL,
+ autoCheckInterval.getSelectedItemPosition())
.putBoolean(Constants.PREF_AUTO_DELETE_UPDATES,
autoDelete.isChecked())
.putBoolean(Constants.PREF_MOBILE_DATA_WARNING,
@@ -436,7 +438,7 @@ public class UpdatesActivity extends UpdatesListActivity {
abPerfMode.isChecked())
.apply();
- if (autoCheck.isChecked()) {
+ if (Utils.isUpdateCheckEnabled(this)) {
UpdatesCheckReceiver.scheduleRepeatingUpdatesCheck(this);
} else {
UpdatesCheckReceiver.cancelRepeatingUpdatesCheck(this);
diff --git a/src/org/lineageos/updater/UpdatesCheckReceiver.java b/src/org/lineageos/updater/UpdatesCheckReceiver.java
index c7f1b4e..d0769cf 100644
--- a/src/org/lineageos/updater/UpdatesCheckReceiver.java
+++ b/src/org/lineageos/updater/UpdatesCheckReceiver.java
@@ -59,7 +59,8 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
final SharedPreferences preferences =
PreferenceManager.getDefaultSharedPreferences(context);
- if (!preferences.getBoolean(Constants.PREF_AUTO_UPDATES_CHECK, true)) {
+
+ if (!Utils.isUpdateCheckEnabled(context)) {
return;
}
@@ -155,15 +156,19 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
}
public static void scheduleRepeatingUpdatesCheck(Context context) {
- long millisToNextRelease = millisToNextRelease(context);
+ if (!Utils.isUpdateCheckEnabled(context)) {
+ return;
+ }
+
PendingIntent updateCheckIntent = getRepeatingUpdatesCheckIntent(context);
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
- alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,
- SystemClock.elapsedRealtime() + millisToNextRelease,
- AlarmManager.INTERVAL_DAY, updateCheckIntent);
+ alarmMgr.setRepeating(AlarmManager.RTC, System.currentTimeMillis() +
+ Utils.getUpdateCheckInterval(context), Utils.getUpdateCheckInterval(context),
+ updateCheckIntent);
- Date nextCheckDate = new Date(System.currentTimeMillis() + millisToNextRelease);
- Log.d(TAG, "Setting daily updates check: " + nextCheckDate);
+ Date nextCheckDate = new Date(System.currentTimeMillis() +
+ Utils.getUpdateCheckInterval(context));
+ Log.d(TAG, "Setting automatic updates check: " + nextCheckDate);
}
public static void cancelRepeatingUpdatesCheck(Context context) {
@@ -194,51 +199,4 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
alarmMgr.cancel(getUpdatesCheckIntent(context));
Log.d(TAG, "Cancelling pending one-shot check");
}
-
- private static long millisToNextRelease(Context context) {
- final long extraMillis = 3 * AlarmManager.INTERVAL_HOUR;
-
- List<UpdateInfo> updates = null;
- try {
- updates = Utils.parseJson(Utils.getCachedUpdateList(context), false);
- } catch (IOException | JSONException ignored) {
- }
-
- if (updates == null || updates.size() == 0) {
- return SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY;
- }
-
- long buildTimestamp = 0;
- for (UpdateInfo update : updates) {
- if (update.getTimestamp() > buildTimestamp) {
- buildTimestamp = update.getTimestamp();
- }
- }
- buildTimestamp *= 1000;
-
- Calendar c = Calendar.getInstance();
- long now = c.getTimeInMillis();
- c.set(Calendar.HOUR_OF_DAY, 0);
- c.set(Calendar.MINUTE, 0);
- c.set(Calendar.SECOND, 0);
- c.set(Calendar.MILLISECOND, 0);
- c.setTimeInMillis(c.getTimeInMillis() + millisSinceMidnight(buildTimestamp));
- long millisToNextRelease = (c.getTimeInMillis() - now);
- millisToNextRelease += extraMillis;
- if (c.getTimeInMillis() < now) {
- millisToNextRelease += AlarmManager.INTERVAL_DAY;
- }
-
- return millisToNextRelease;
- }
-
- private static long millisSinceMidnight(long millis) {
- Calendar c = Calendar.getInstance();
- c.setTimeInMillis(millis);
- c.set(Calendar.HOUR_OF_DAY, 0);
- c.set(Calendar.MINUTE, 0);
- c.set(Calendar.SECOND, 0);
- c.set(Calendar.MILLISECOND, 0);
- return millis - c.getTimeInMillis();
- }
}
diff --git a/src/org/lineageos/updater/misc/Constants.java b/src/org/lineageos/updater/misc/Constants.java
index 5bc0e8b..81e7c1a 100644
--- a/src/org/lineageos/updater/misc/Constants.java
+++ b/src/org/lineageos/updater/misc/Constants.java
@@ -23,8 +23,13 @@ public final class Constants {
public static final String AB_PAYLOAD_BIN_PATH = "payload.bin";
public static final String AB_PAYLOAD_PROPERTIES_PATH = "payload_properties.txt";
+ public static final int AUTO_UPDATES_CHECK_INTERVAL_NEVER = 0;
+ public static final int AUTO_UPDATES_CHECK_INTERVAL_DAILY = 1;
+ public static final int AUTO_UPDATES_CHECK_INTERVAL_WEEKLY = 2;
+ public static final int AUTO_UPDATES_CHECK_INTERVAL_MONTHLY = 3;
+
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_UPDATES_CHECK_INTERVAL = "auto_updates_check_interval";
public static final String PREF_AUTO_DELETE_UPDATES = "auto_delete_updates";
public static final String PREF_AB_PERF_MODE = "ab_perf_mode";
public static final String PREF_MOBILE_DATA_WARNING = "pref_mobile_data_warning";
diff --git a/src/org/lineageos/updater/misc/Utils.java b/src/org/lineageos/updater/misc/Utils.java
index 171c2cc..6ca7f94 100644
--- a/src/org/lineageos/updater/misc/Utils.java
+++ b/src/org/lineageos/updater/misc/Utils.java
@@ -15,6 +15,7 @@
*/
package org.lineageos.updater.misc;
+import android.app.AlarmManager;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
@@ -368,4 +369,26 @@ public class Utils {
StorageManager sm = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
return sm.isEncrypted(file);
}
+
+ public static int getUpdateCheckSetting(Context context) {
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
+ return preferences.getInt(Constants.PREF_AUTO_UPDATES_CHECK_INTERVAL,
+ Constants.AUTO_UPDATES_CHECK_INTERVAL_WEEKLY);
+ }
+
+ public static boolean isUpdateCheckEnabled(Context context) {
+ return getUpdateCheckSetting(context) != Constants.AUTO_UPDATES_CHECK_INTERVAL_NEVER;
+ }
+
+ public static long getUpdateCheckInterval(Context context) {
+ switch (Utils.getUpdateCheckSetting(context)) {
+ case Constants.AUTO_UPDATES_CHECK_INTERVAL_DAILY:
+ return AlarmManager.INTERVAL_DAY;
+ case Constants.AUTO_UPDATES_CHECK_INTERVAL_WEEKLY:
+ default:
+ return AlarmManager.INTERVAL_DAY * 7;
+ case Constants.AUTO_UPDATES_CHECK_INTERVAL_MONTHLY:
+ return AlarmManager.INTERVAL_DAY * 30;
+ }
+ }
}