mirror of
https://github.com/syncthing/syncthing-android.git
synced 2024-12-23 11:21:29 +00:00
Don't call startForegroundService if app is not running in background (fixes #972)
This commit is contained in:
parent
18c419b2ed
commit
f8a41ff4b7
8 changed files with 25 additions and 18 deletions
|
@ -21,6 +21,7 @@ import com.nutomic.syncthingandroid.model.Connections;
|
|||
import com.nutomic.syncthingandroid.model.SystemInfo;
|
||||
import com.nutomic.syncthingandroid.model.SystemVersion;
|
||||
import com.nutomic.syncthingandroid.service.Constants;
|
||||
import com.nutomic.syncthingandroid.service.DeviceStateHolder;
|
||||
import com.nutomic.syncthingandroid.service.RestApi;
|
||||
import com.nutomic.syncthingandroid.service.SyncthingService;
|
||||
import com.nutomic.syncthingandroid.util.Util;
|
||||
|
@ -111,7 +112,7 @@ public class DrawerFragment extends Fragment implements View.OnClickListener {
|
|||
}
|
||||
|
||||
private void updateExitButtonVisibility() {
|
||||
boolean alwaysInBackground = SyncthingService.alwaysRunInBackground(getActivity());
|
||||
boolean alwaysInBackground = DeviceStateHolder.alwaysRunInBackground(getActivity());
|
||||
mExitButton.setVisibility(alwaysInBackground ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import android.content.Context;
|
|||
import android.content.Intent;
|
||||
|
||||
import com.nutomic.syncthingandroid.SyncthingApp;
|
||||
import com.nutomic.syncthingandroid.service.DeviceStateHolder;
|
||||
import com.nutomic.syncthingandroid.service.NotificationHandler;
|
||||
import com.nutomic.syncthingandroid.service.SyncthingService;
|
||||
|
||||
|
@ -40,7 +41,7 @@ public class AppConfigReceiver extends BroadcastReceiver {
|
|||
break;
|
||||
|
||||
case ACTION_STOP:
|
||||
if (SyncthingService.alwaysRunInBackground(context)) {
|
||||
if (DeviceStateHolder.alwaysRunInBackground(context)) {
|
||||
mNotificationHandler.showStopSyncthingWarningNotification();
|
||||
} else {
|
||||
context.stopService(new Intent(context, SyncthingService.class));
|
||||
|
|
|
@ -21,7 +21,7 @@ public class BatteryReceiver extends BroadcastReceiver {
|
|||
&& !Intent.ACTION_POWER_DISCONNECTED.equals(intent.getAction()))
|
||||
return;
|
||||
|
||||
if (!SyncthingService.alwaysRunInBackground(context))
|
||||
if (!DeviceStateHolder.alwaysRunInBackground(context))
|
||||
return;
|
||||
|
||||
boolean isCharging = Intent.ACTION_POWER_CONNECTED.equals(intent.getAction());
|
||||
|
|
|
@ -5,6 +5,7 @@ import android.content.Context;
|
|||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
|
||||
import com.nutomic.syncthingandroid.service.DeviceStateHolder;
|
||||
import com.nutomic.syncthingandroid.service.SyncthingService;
|
||||
|
||||
public class BootReceiver extends BroadcastReceiver {
|
||||
|
@ -15,7 +16,7 @@ public class BootReceiver extends BroadcastReceiver {
|
|||
!intent.getAction().equals(Intent.ACTION_MY_PACKAGE_REPLACED))
|
||||
return;
|
||||
|
||||
if (!SyncthingService.alwaysRunInBackground(context))
|
||||
if (!DeviceStateHolder.alwaysRunInBackground(context))
|
||||
return;
|
||||
|
||||
startServiceCompat(context);
|
||||
|
@ -27,6 +28,11 @@ public class BootReceiver extends BroadcastReceiver {
|
|||
* https://stackoverflow.com/a/44505719/1837158
|
||||
*/
|
||||
public static void startServiceCompat(Context context) {
|
||||
// This method is called from {@link DeviceStateHolder#DeviceStateHolder()}, make sure it
|
||||
// is only executed if run in background is enabled.
|
||||
if (!DeviceStateHolder.alwaysRunInBackground(context))
|
||||
return;
|
||||
|
||||
Intent intent = new Intent(context, SyncthingService.class);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
context.startForegroundService(intent);
|
||||
|
|
|
@ -22,7 +22,7 @@ public class NetworkReceiver extends BroadcastReceiver {
|
|||
if (!ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction()))
|
||||
return;
|
||||
|
||||
if (!SyncthingService.alwaysRunInBackground(context))
|
||||
if (!DeviceStateHolder.alwaysRunInBackground(context))
|
||||
return;
|
||||
|
||||
updateNetworkStatus(context);
|
||||
|
|
|
@ -7,6 +7,7 @@ import android.content.IntentFilter;
|
|||
import android.content.SharedPreferences;
|
||||
import android.net.wifi.WifiInfo;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.util.Log;
|
||||
|
||||
|
@ -49,6 +50,14 @@ public class DeviceStateHolder {
|
|||
public static final String EXTRA_IS_POWER_SAVING =
|
||||
"com.nutomic.syncthingandroid.syncthing.DeviceStateHolder.IS_POWER_SAVING";
|
||||
|
||||
/**
|
||||
* Returns the value of "always_run_in_background" preference.
|
||||
*/
|
||||
public static boolean alwaysRunInBackground(Context context) {
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
return sp.getBoolean(Constants.PREF_ALWAYS_RUN_IN_BACKGROUND, false);
|
||||
}
|
||||
|
||||
public interface OnDeviceStateChangedListener {
|
||||
void onDeviceStateChanged();
|
||||
}
|
||||
|
@ -114,7 +123,7 @@ public class DeviceStateHolder {
|
|||
if (prefRespectPowerSaving && mIsPowerSaving)
|
||||
return false;
|
||||
|
||||
if (SyncthingService.alwaysRunInBackground(mContext)) {
|
||||
if (alwaysRunInBackground(mContext)) {
|
||||
boolean prefStopMobileData = mPreferences.getBoolean(Constants.PREF_SYNC_ONLY_WIFI, false);
|
||||
boolean prefStopNotCharging = mPreferences.getBoolean(Constants.PREF_SYNC_ONLY_CHARGING, false);
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ public class NotificationHandler {
|
|||
// Android 8 does not allow starting service from background unless it's a foreground
|
||||
// service, so if "always run in background" is enabled, we have to use a foreground service.
|
||||
// https://stackoverflow.com/a/44505719/1837158
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && SyncthingService.alwaysRunInBackground(mContext)) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && DeviceStateHolder.alwaysRunInBackground(mContext)) {
|
||||
foreground = true;
|
||||
}
|
||||
|
||||
|
@ -87,7 +87,7 @@ public class NotificationHandler {
|
|||
}
|
||||
|
||||
public void cancelPersistentNotification(SyncthingService service) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && SyncthingService.alwaysRunInBackground(mContext))
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && DeviceStateHolder.alwaysRunInBackground(mContext))
|
||||
return;
|
||||
|
||||
service.stopForeground(false);
|
||||
|
|
|
@ -2,7 +2,6 @@ package com.nutomic.syncthingandroid.service;
|
|||
|
||||
import android.app.Service;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
|
@ -11,7 +10,6 @@ import android.os.AsyncTask;
|
|||
import android.os.Build;
|
||||
import android.os.IBinder;
|
||||
import android.os.PowerManager;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
@ -417,14 +415,6 @@ public class SyncthingService extends Service implements
|
|||
return mConfig.getWebGuiUrl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of "always_run_in_background" preference.
|
||||
*/
|
||||
public static boolean alwaysRunInBackground(Context context) {
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
return sp.getBoolean(Constants.PREF_ALWAYS_RUN_IN_BACKGROUND, false);
|
||||
}
|
||||
|
||||
public State getCurrentState() {
|
||||
return mCurrentState;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue