1
0
Fork 0
mirror of https://github.com/syncthing/syncthing-android.git synced 2024-11-26 14:21:16 +00:00

Added option to configure battery saving mode behaviour (fixes #741)

This commit is contained in:
Felix Ableitner 2017-03-21 11:49:52 +09:00
parent 64e51ffe42
commit 8463c19416
4 changed files with 19 additions and 5 deletions

View file

@ -95,7 +95,8 @@ public class DeviceStateHolder extends BroadcastReceiver {
public void updateWifiSsid() {
mWifiSsid = null;
WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
WifiManager wifiManager =
(WifiManager) mContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
// may be null, if WiFi has been turned off in meantime
if (wifiInfo != null) {
@ -112,12 +113,14 @@ public class DeviceStateHolder extends BroadcastReceiver {
*/
@TargetApi(21)
public boolean shouldRun() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP && pm.isPowerSaveMode()) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP &&
prefs.getBoolean("respect_battery_saving", true) &&
pm.isPowerSaveMode()) {
return false;
}
else if (SyncthingService.alwaysRunInBackground(mContext)) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
// Check wifi/charging state against preferences and start if ok.
boolean prefStopMobileData = prefs.getBoolean(SyncthingService.PREF_SYNC_ONLY_WIFI, false);
boolean prefStopNotCharging = prefs.getBoolean(SyncthingService.PREF_SYNC_ONLY_CHARGING, false);

View file

@ -89,6 +89,7 @@ public class SyncthingService extends Service implements
public static final String PREF_SYNC_ONLY_WIFI = "sync_only_wifi";
public static final String PREF_SYNC_ONLY_WIFI_SSIDS = "sync_only_wifi_ssids_set";
public static final String PREF_SYNC_ONLY_CHARGING = "sync_only_charging";
public static final String PREF_RESPECT_BATTERY_SAVING = "respect_battery_saving";
public static final String PREF_USE_ROOT = "use_root";
private static final String PREF_NOTIFICATION_TYPE = "notification_type";
public static final String PREF_USE_WAKE_LOCK = "wakelock_while_binary_running";
@ -197,7 +198,7 @@ public class SyncthingService extends Service implements
* Depending on the result, syncthing is started or stopped, and {@link #onApiChange()} is
* called.
*/
public void updateState() {
private void updateState() {
// Start syncthing.
if (mDeviceStateHolder.shouldRun()) {
if (mCurrentState == State.ACTIVE || mCurrentState == State.STARTING) {
@ -291,9 +292,10 @@ public class SyncthingService extends Service implements
if (key.equals(PREF_NOTIFICATION_TYPE) || key.equals(PREF_FOREGROUND_SERVICE))
updateNotification();
else if (key.equals(PREF_SYNC_ONLY_CHARGING) || key.equals(PREF_SYNC_ONLY_WIFI)
|| key.equals(PREF_SYNC_ONLY_WIFI_SSIDS))
|| key.equals(PREF_SYNC_ONLY_WIFI_SSIDS) || key.equals(PREF_RESPECT_BATTERY_SAVING)) {
updateState();
}
}
/**
* Starts the native binary.

View file

@ -250,6 +250,9 @@ Please report any problems you encounter via Github.</string>
<string name="sync_only_wifi_ssids_wifi_turn_on_wifi">Please turn on WiFi to select networks.</string>
<string name="respect_battery_saving_title">Respect Android battery saving setting</string>
<string name="respect_battery_saving_summary">Disable Syncthing if battery saving is active</string>
<string name="advanced_folder_picker">Use advanced Folder Picker</string>
<string name="advanced_folder_picker_summary">Select any folder on the device for syncing</string>

View file

@ -24,6 +24,12 @@
android:key="sync_only_wifi_ssids_set"
android:title="@string/sync_only_wifi_ssids" />
<CheckBoxPreference
android:key="respect_battery_saving"
android:title="@string/respect_battery_saving_title"
android:summary="@string/respect_battery_saving_summary"
android:defaultValue="true" />
</PreferenceScreen>
<PreferenceScreen