Merge branch 'data-wifi-update-schedule' into 'master'

data/wifi update scheduling

Closes #1474, #1451, and #1457

See merge request fdroid/fdroidclient!711
This commit is contained in:
Hans-Christoph Steiner 2018-07-13 21:41:12 +00:00
commit 9d398746fa
5 changed files with 77 additions and 46 deletions

View File

@ -142,8 +142,9 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
lightWithDarkActionBar, // Obsolete
}
public static final long UPDATE_INTERVAL_DISABLED = Long.MAX_VALUE;
public static final long[] UPDATE_INTERVAL_VALUES = {
Long.MAX_VALUE, // never
UPDATE_INTERVAL_DISABLED,
DateUtils.WEEK_IN_MILLIS * 2,
DateUtils.WEEK_IN_MILLIS,
DateUtils.DAY_IN_MILLIS,
@ -211,12 +212,8 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
* Get the update interval in milliseconds.
*/
public long getUpdateInterval() {
if (getOverData() == OVER_NETWORK_NEVER && getOverWifi() == OVER_NETWORK_NEVER) {
return UPDATE_INTERVAL_VALUES[0];
} else {
int position = preferences.getInt(PREF_UPDATE_INTERVAL, IGNORED_I);
return UPDATE_INTERVAL_VALUES[position];
}
int position = preferences.getInt(PREF_UPDATE_INTERVAL, IGNORED_I);
return UPDATE_INTERVAL_VALUES[position];
}
/**

View File

@ -20,7 +20,7 @@ public class UpdateJobService extends JobService {
@Override
public boolean onStopJob(JobParameters params) {
// TODO this should gracefully stop UpdateService
UpdateService.stopNow(this);
return true;
}
}

View File

@ -93,8 +93,6 @@ public class UpdateService extends JobIntentService {
private NotificationCompat.Builder notificationBuilder;
private AppUpdateStatusManager appUpdateStatusManager;
private static boolean updating;
public static void updateNow(Context context) {
updateRepoNow(context, null);
}
@ -140,6 +138,12 @@ public class UpdateService extends JobIntentService {
public static void schedule(Context context) {
Preferences prefs = Preferences.get();
long interval = prefs.getUpdateInterval();
int data = prefs.getOverData();
int wifi = prefs.getOverWifi();
boolean scheduleNewJob =
interval != Preferences.UPDATE_INTERVAL_DISABLED
&& data != Preferences.OVER_NETWORK_NEVER
&& wifi != Preferences.OVER_NETWORK_NEVER;
if (Build.VERSION.SDK_INT < 21) {
Intent intent = new Intent(context, UpdateService.class);
@ -147,7 +151,7 @@ public class UpdateService extends JobIntentService {
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pending);
if (interval > 0) {
if (scheduleNewJob) {
alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + 5000, interval, pending);
Utils.debugLog(TAG, "Update scheduler alarm set");
@ -165,17 +169,19 @@ public class UpdateService extends JobIntentService {
builder.setRequiresBatteryNotLow(true)
.setRequiresStorageNotLow(true);
}
int wifi = prefs.getOverWifi();
if (prefs.getOverData() == Preferences.OVER_NETWORK_ALWAYS) {
if (Build.VERSION.SDK_INT < 26 || wifi == Preferences.OVER_NETWORK_ALWAYS) {
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
} else {
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_METERED);
}
} else if (wifi == Preferences.OVER_NETWORK_ALWAYS) {
if (data == Preferences.OVER_NETWORK_ALWAYS && wifi == Preferences.OVER_NETWORK_ALWAYS) {
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
} else {
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED);
}
jobScheduler.schedule(builder.build());
jobScheduler.cancel(JOB_ID);
if (scheduleNewJob) {
jobScheduler.schedule(builder.build());
Utils.debugLog(TAG, "Update scheduler alarm set");
} else {
Utils.debugLog(TAG, "Update scheduler alarm not set");
}
}
}
@ -184,7 +190,7 @@ public class UpdateService extends JobIntentService {
* the app to users, so they know something is happening.
*/
public static boolean isUpdating() {
return updating;
return updateService != null;
}
private static volatile boolean isScheduleIfStillOnWifiRunning;
@ -230,11 +236,22 @@ public class UpdateService extends JobIntentService {
isScheduleIfStillOnWifiRunning = false;
return null;
}
}
private static UpdateService updateService;
public static void stopNow(Context context) {
if (updateService != null) {
updateService.stopSelf(JOB_ID);
updateService = null;
}
}
@Override
public void onCreate() {
super.onCreate();
updateService = this;
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
@ -263,6 +280,7 @@ public class UpdateService extends JobIntentService {
super.onDestroy();
notificationManager.cancel(NOTIFY_ID_UPDATING);
LocalBroadcastManager.getInstance(this).unregisterReceiver(updateStatusReceiver);
updateService = null;
}
public static void sendStatus(Context context, int statusCode) {
@ -402,14 +420,13 @@ public class UpdateService extends JobIntentService {
sendNoInternetToast();
}
return;
} else if (manualUpdate || forcedUpdate) {
} else if ((manualUpdate || forcedUpdate) && fdroidPrefs.isOnDemandDownloadAllowed()) {
Utils.debugLog(TAG, "manually requested or forced update");
} else if (!fdroidPrefs.isBackgroundDownloadAllowed()) {
} else if (!fdroidPrefs.isBackgroundDownloadAllowed() && !fdroidPrefs.isOnDemandDownloadAllowed()) {
Utils.debugLog(TAG, "don't run update");
return;
}
updating = true;
setNotification();
LocalBroadcastManager.getInstance(this).registerReceiver(updateStatusReceiver,
new IntentFilter(LOCAL_ACTION_STATUS));
@ -498,8 +515,6 @@ public class UpdateService extends JobIntentService {
} catch (Exception e) {
Log.e(TAG, "Exception during update processing", e);
sendStatus(this, STATUS_ERROR_GLOBAL, e.getMessage());
} finally {
updating = false;
}
long time = System.currentTimeMillis() - startTime;

View File

@ -63,8 +63,8 @@
<string name="no_handler_app">Nincs elérhető alkalmazás, ami képes ezt kezelni: %s.</string>
<string name="theme">Téma</string>
<string name="repo_not_yet_updated">Ezt a tárolót még nem használta. Engedélyeznie kell, hogy megtekinthesse az általa kínált alkalmazásokat.</string>
<string name="repo_confirm_delete_body">Egy tároló törlése azt jelenti, hogy a belőle származó alkalmazások többé nem lesznek elérhetőek az F-Droidban.
\n
<string name="repo_confirm_delete_body">Egy tároló törlése azt jelenti, hogy a belőle származó alkalmazások többé nem lesznek elérhetőek.
\n
\nMegjegyzés: Minden korábban telepített alkalmazás az eszközön marad.</string>
<string name="repo_disabled_notification">%1$s letiltva.
\n
@ -77,7 +77,7 @@
<string name="unstable_updates">Instabil frissítések</string>
<string name="unstable_updates_summary">Frissítések ajánlása instabil verziókra</string>
<string name="system_installer">Kiváltságos kiterjesztés</string>
<string name="system_installer_on">Az F-Droid kiváltságos kiterjesztésének használata a csomagok telepítéséhez, frissítéséhez és eltávolításához</string>
<string name="system_installer_on">Kiváltságos kiterjesztés használata a csomagok telepítéséhez, frissítéséhez és eltávolításához</string>
<string name="local_repo_name">Helyi tároló neve</string>
<string name="local_repo_name_summary">A helyi tárolója közzétett címe: %s</string>
<string name="local_repo_https_on">Titkosított HTTPS:// kapcsolat használata a helyi tárolóhoz</string>
@ -139,7 +139,8 @@
<string name="repo_name">Név</string>
<string name="unknown">Ismeretlen</string>
<string name="repo_confirm_delete_title">Törli a tárolót?</string>
<string name="repo_searching_address">F-Droid tároló keresése itt:\n%1$s</string>
<string name="repo_searching_address">Csomagtároló keresése itt:
\n%1$s</string>
<string name="pref_language">Nyelv</string>
<string name="pref_language_default">Rendszer-alapértelmezés</string>
@ -276,9 +277,7 @@
<string name="keep_forever">Örökké</string>
<string name="keep_install_history">Telepítési előzmények megtartása</string>
<string name="keep_install_history_summary">Napló tárolása az F-Droidban végzett telepítésekről és
eltávolításokról
</string>
<string name="keep_install_history_summary">Az összes telepítés és eltávolítás naplójának tárolása egy privát tárolóban</string>
<string name="update_auto_install">Frissítések automatikus telepítése</string>
<string name="update_auto_install_summary">Alkalmazásfrissítések letöltése és telepítése a háttérben</string>
<string name="uninstall_system">Kiváltságos kiterjesztés frissítése/törlése</string>
@ -354,7 +353,7 @@
<string name="linking_apks">APK fájlok tárolóhoz csatolása…</string>
<string name="download_404">A kért fájl nem található.</string>
<string name="unsigned_description">Ez azt jelenti, hogy az alkalmazások listája nem ellenőrizhető. Óvatosnak kell lennie a hitelesítetlen indexekből letöltött alkalmazásokkal.</string>
<string name="repo_added">A(z) %1$s F-Droid tároló mentve.</string>
<string name="repo_added">A(z) %1$s csomagtároló mentve.</string>
<string name="up_to_maxsdk">%s-ig</string>
<string name="minsdk_up_to_maxsdk">%1$s-től %2$s-ig</string>
<string name="by_author_format">Készítette: %s</string>
@ -525,4 +524,17 @@
<string name="swap_toast_could_not_enable_hotspot">A Wi-Fi Hotspot nem engedélyezhető!</string>
<string name="warning_scaning_qr_code">A kamerának úgy tűnik nincs autofókusza. Így nehézkes lehet a kód leolvasása.</string>
<string name="prompt_to_send_crash_reports">Kérdezzen az összeomlási jelentések küldésekor</string>
<string name="prompt_to_send_crash_reports_summary">Adatok begyűjtése az összeomlásokról, és annak megkérdezése, hogy elküldje azokat a fejlesztőnek</string>
<string name="hide_all_notifications">Minden értesítés elrejtése</string>
<string name="hide_all_notifications_summary">Az összes művelet megakadályozása az állapotsávban és az értesítési oldalsávban való megjelenítésben.</string>
<string name="install_history">Telepítési előzmények</string>
<string name="install_history_summary">Az összes telepítés és eltávolítás privát naplójának megtekintése</string>
<string name="send_version_and_uuid">Verzió és UUID küldése a kiszolgálóknak</string>
<string name="send_version_and_uuid_summary">Az alkalmazás verziójának és egy véletlenszerű, egyedi azonosítónak a felvétele letöltéskor az alkalmazás következő újraindításakor lép hatályba.</string>
<string name="allow_push_requests">Engedélyezés a tárolóknak alkalmazások telepítését vagy eltávolítását</string>
<string name="allow_push_requests_summary">A tároló metaadatai tartalmazhatnak küldési kéréseket alkalmazások telepítéséhez vagy eltávolításához</string>
<string name="antinosourcesince">A forráskód többé nem érhető el, a frissítések nem lehetségesek.</string>
<string name="share_repository">Tároló megosztása</string>
</resources>

View File

@ -117,7 +117,7 @@
<string name="unstable_updates">不稳定更新</string>
<string name="unstable_updates_summary">建议更新至不稳定的版本</string>
<string name="system_installer_on">使用F-Droid特权扩展安装、更新和卸载应用</string>
<string name="system_installer_on">使用特权扩展安装、更新和卸载应用</string>
<string name="uninstall_system">更新或卸载特权扩展</string>
<string name="uninstall_system_summary">打开详情以更新或卸载特权扩展</string>
<string name="local_repo_name">本地软件源的名称</string>
@ -168,9 +168,9 @@
<string name="permissions">权限</string>
<string name="repo_details">软件源</string>
<string name="repo_url">地址</string>
<string name="repo_added">已保存 F-Droid 软件源 %1$s。</string>
<string name="repo_searching_address">正在 %1$s
\n里查找 F-Droid 软件源</string>
<string name="repo_added">已保存软件源 %1$s。</string>
<string name="repo_searching_address">正在 %1$s
\n里查找软件源</string>
<string name="pref_language">语言</string>
<string name="pref_language_default">系统默认</string>
@ -262,13 +262,13 @@
<string name="perms_description_app">由 %1$s 提供。</string>
<string name="downloading">下载中…</string>
<string name="interval_never"></string>
<string name="interval_1h">每小时</string>
<string name="interval_4h">每 4 小时</string>
<string name="interval_12h">每 12 小时</string>
<string name="interval_1d">每天</string>
<string name="interval_1w">每周</string>
<string name="interval_2w">每两周</string>
<string name="interval_never">自动更新应用</string>
<string name="interval_1h">每小时检查一次更新</string>
<string name="interval_4h">每 4 小时检查一次更新</string>
<string name="interval_12h">每 12 小时检查一次更新</string>
<string name="interval_1d">每天检查一次更新</string>
<string name="interval_1w">每周检查一次更新</string>
<string name="interval_2w">每两周检查一次更新</string>
<string name="theme_light">明亮</string>
<string name="theme_dark">夜间</string>
@ -494,7 +494,7 @@
<string name="over_network_always_summary">当此连接可用时,总是使用它</string>
<string name="over_network_on_demand_summary">仅当我点击下载时才使用此连接</string>
<string name="over_network_never_summary">从不使用此连接下载任何内容</string>
<string name="antidisabledalgorithmlist">这个应用程序的安全签较弱</string>
<string name="antidisabledalgorithmlist">这个应用程序的安全签较弱</string>
<string name="antiknownvulnlist">这个应用程序包含已知的安全漏洞</string>
<string name="repo_exists_add_fingerprint">%1$s已经设立此举将会加入新的钥匙信息。</string>
@ -505,4 +505,11 @@
<string name="swap_toast_hotspot_enabled">Wi-Fi 热点已启用</string>
<string name="swap_toast_could_not_enable_hotspot">无法启用 Wi-Fi 热点!</string>
<string name="prompt_to_send_crash_reports">提示发送崩溃报告</string>
<string name="prompt_to_send_crash_reports_summary">收集有关崩溃的数据并询问是否发送给开发人员</string>
<string name="hide_all_notifications">隐藏所有通知</string>
<string name="install_history">安装历史</string>
<string name="send_version_and_uuid">发送版本和 UUID 到服务器</string>
<string name="antinosourcesince">源代码不再可用,无法更新。</string>
</resources>