mirror of
https://github.com/syncthing/syncthing-android.git
synced 2024-11-26 14:21:16 +00:00
Added option to toggle persistent notification (fixes #366).
This commit is contained in:
parent
c496a5325b
commit
530c156a9a
4 changed files with 59 additions and 38 deletions
|
@ -43,23 +43,15 @@ public class SettingsFragment extends PreferenceFragment
|
||||||
private static final String IMPORT_CONFIG = "import_config";
|
private static final String IMPORT_CONFIG = "import_config";
|
||||||
private static final String STTRACE = "sttrace";
|
private static final String STTRACE = "sttrace";
|
||||||
private static final String SYNCTHING_RESET = "streset";
|
private static final String SYNCTHING_RESET = "streset";
|
||||||
|
|
||||||
private static final String SYNCTHING_VERSION_KEY = "syncthing_version";
|
private static final String SYNCTHING_VERSION_KEY = "syncthing_version";
|
||||||
|
private static final String APP_VERSION_KEY = "app_version";
|
||||||
private static final String APP_VERSION_KEY = "app_version";
|
|
||||||
|
|
||||||
private CheckBoxPreference mAlwaysRunInBackground;
|
private CheckBoxPreference mAlwaysRunInBackground;
|
||||||
|
|
||||||
private CheckBoxPreference mSyncOnlyCharging;
|
private CheckBoxPreference mSyncOnlyCharging;
|
||||||
|
|
||||||
private CheckBoxPreference mSyncOnlyWifi;
|
private CheckBoxPreference mSyncOnlyWifi;
|
||||||
|
|
||||||
private Preference mUseRoot;
|
private Preference mUseRoot;
|
||||||
|
|
||||||
private PreferenceScreen mOptionsScreen;
|
private PreferenceScreen mOptionsScreen;
|
||||||
|
|
||||||
private PreferenceScreen mGuiScreen;
|
private PreferenceScreen mGuiScreen;
|
||||||
|
|
||||||
private SyncthingService mSyncthingService;
|
private SyncthingService mSyncthingService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -224,6 +216,8 @@ public class SettingsFragment extends PreferenceFragment
|
||||||
pref.setSummary((String) o);
|
pref.setSummary((String) o);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean requireRestart = false;
|
||||||
|
|
||||||
if (preference.equals(mSyncOnlyCharging) || preference.equals(mSyncOnlyWifi)) {
|
if (preference.equals(mSyncOnlyCharging) || preference.equals(mSyncOnlyWifi)) {
|
||||||
mSyncthingService.updateState();
|
mSyncthingService.updateState();
|
||||||
} else if (preference.equals(mAlwaysRunInBackground)) {
|
} else if (preference.equals(mAlwaysRunInBackground)) {
|
||||||
|
@ -232,6 +226,10 @@ public class SettingsFragment extends PreferenceFragment
|
||||||
: R.string.always_run_in_background_disabled);
|
: R.string.always_run_in_background_disabled);
|
||||||
mSyncOnlyCharging.setEnabled((Boolean) o);
|
mSyncOnlyCharging.setEnabled((Boolean) o);
|
||||||
mSyncOnlyWifi.setEnabled((Boolean) o);
|
mSyncOnlyWifi.setEnabled((Boolean) o);
|
||||||
|
} else if (preference.equals(mUseRoot)) {
|
||||||
|
if (!(Boolean) o)
|
||||||
|
new Thread(new ChownFilesRunnable()).start();
|
||||||
|
requireRestart = true;
|
||||||
} else if (preference.getKey().equals(DEVICE_NAME_KEY)) {
|
} else if (preference.getKey().equals(DEVICE_NAME_KEY)) {
|
||||||
RestApi.Device old = mSyncthingService.getApi().getLocalDevice();
|
RestApi.Device old = mSyncthingService.getApi().getLocalDevice();
|
||||||
RestApi.Device updated = new RestApi.Device();
|
RestApi.Device updated = new RestApi.Device();
|
||||||
|
@ -254,7 +252,6 @@ public class SettingsFragment extends PreferenceFragment
|
||||||
RestApi.TYPE_GUI, preference.getKey(), o, false, getActivity());
|
RestApi.TYPE_GUI, preference.getKey(), o, false, getActivity());
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean requireRestart = false;
|
|
||||||
|
|
||||||
// Avoid any code injection.
|
// Avoid any code injection.
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
@ -281,16 +278,9 @@ public class SettingsFragment extends PreferenceFragment
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (preference.getKey().equals(SyncthingService.PREF_USE_ROOT)) {
|
|
||||||
if (!(Boolean) o)
|
|
||||||
new Thread(new ChownFilesRunnable()).start();
|
|
||||||
requireRestart = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requireRestart)
|
if (requireRestart)
|
||||||
mSyncthingService.getApi().requireRestart(getActivity());
|
mSyncthingService.getApi().requireRestart(getActivity());
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,8 @@ import java.util.LinkedList;
|
||||||
/**
|
/**
|
||||||
* Holds the native syncthing instance and provides an API to access it.
|
* Holds the native syncthing instance and provides an API to access it.
|
||||||
*/
|
*/
|
||||||
public class SyncthingService extends Service {
|
public class SyncthingService extends Service implements
|
||||||
|
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
private static final String TAG = "SyncthingService";
|
private static final String TAG = "SyncthingService";
|
||||||
|
|
||||||
|
@ -87,12 +88,10 @@ public class SyncthingService extends Service {
|
||||||
public static final String BINARY_NAME = "lib/libsyncthing.so";
|
public static final String BINARY_NAME = "lib/libsyncthing.so";
|
||||||
|
|
||||||
public static final String PREF_ALWAYS_RUN_IN_BACKGROUND = "always_run_in_background";
|
public static final String PREF_ALWAYS_RUN_IN_BACKGROUND = "always_run_in_background";
|
||||||
|
public static final String PREF_SYNC_ONLY_WIFI = "sync_only_wifi";
|
||||||
public static final String PREF_SYNC_ONLY_WIFI = "sync_only_wifi";
|
public static final String PREF_SYNC_ONLY_CHARGING = "sync_only_charging";
|
||||||
|
public static final String PREF_USE_ROOT = "use_root";
|
||||||
public static final String PREF_SYNC_ONLY_CHARGING = "sync_only_charging";
|
private static final String PREF_PERSISTENT_NOTIFICATION = "persistent_notification";
|
||||||
|
|
||||||
public static final String PREF_USE_ROOT = "use_root";
|
|
||||||
|
|
||||||
private static final int NOTIFICATION_ACTIVE = 1;
|
private static final int NOTIFICATION_ACTIVE = 1;
|
||||||
|
|
||||||
|
@ -180,6 +179,7 @@ public class SyncthingService extends Service {
|
||||||
* called.
|
* called.
|
||||||
*/
|
*/
|
||||||
public void updateState() {
|
public void updateState() {
|
||||||
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
boolean shouldRun;
|
boolean shouldRun;
|
||||||
if (!alwaysRunInBackground(this)) {
|
if (!alwaysRunInBackground(this)) {
|
||||||
// Always run, ignoring wifi/charging state.
|
// Always run, ignoring wifi/charging state.
|
||||||
|
@ -187,7 +187,6 @@ public class SyncthingService extends Service {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Check wifi/charging state against preferences and start if ok.
|
// Check wifi/charging state against preferences and start if ok.
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
|
||||||
boolean prefStopMobileData = prefs.getBoolean(PREF_SYNC_ONLY_WIFI, false);
|
boolean prefStopMobileData = prefs.getBoolean(PREF_SYNC_ONLY_WIFI, false);
|
||||||
boolean prefStopNotCharging = prefs.getBoolean(PREF_SYNC_ONLY_CHARGING, false);
|
boolean prefStopNotCharging = prefs.getBoolean(PREF_SYNC_ONLY_CHARGING, false);
|
||||||
|
|
||||||
|
@ -195,8 +194,6 @@ public class SyncthingService extends Service {
|
||||||
(mDeviceStateHolder.isWifiConnected() || !prefStopMobileData);
|
(mDeviceStateHolder.isWifiConnected() || !prefStopMobileData);
|
||||||
}
|
}
|
||||||
|
|
||||||
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
|
|
||||||
|
|
||||||
// Start syncthing.
|
// Start syncthing.
|
||||||
if (shouldRun) {
|
if (shouldRun) {
|
||||||
if (mCurrentState == State.ACTIVE || mCurrentState == State.STARTING) {
|
if (mCurrentState == State.ACTIVE || mCurrentState == State.STARTING) {
|
||||||
|
@ -216,15 +213,7 @@ public class SyncthingService extends Service {
|
||||||
new PollWebGuiAvailableTaskImpl(getFilesDir() + "/" + HTTPS_CERT_FILE).execute(mConfig.getWebGuiUrl());
|
new PollWebGuiAvailableTaskImpl(getFilesDir() + "/" + HTTPS_CERT_FILE).execute(mConfig.getWebGuiUrl());
|
||||||
mRunnable = new SyncthingRunnable(this, SyncthingRunnable.Command.main);
|
mRunnable = new SyncthingRunnable(this, SyncthingRunnable.Command.main);
|
||||||
new Thread(mRunnable).start();
|
new Thread(mRunnable).start();
|
||||||
Notification n = new NotificationCompat.Builder(this)
|
updateNotification();
|
||||||
.setContentTitle(getString(R.string.syncthing_active))
|
|
||||||
.setSmallIcon(R.drawable.ic_stat_notify)
|
|
||||||
.setOngoing(true)
|
|
||||||
.setPriority(NotificationCompat.PRIORITY_MIN)
|
|
||||||
.setContentIntent(PendingIntent.getActivity(this, 0,
|
|
||||||
new Intent(this, MainActivity.class), 0))
|
|
||||||
.build();
|
|
||||||
nm.notify(NOTIFICATION_ACTIVE, n);
|
|
||||||
}
|
}
|
||||||
// Stop syncthing.
|
// Stop syncthing.
|
||||||
else {
|
else {
|
||||||
|
@ -239,6 +228,35 @@ public class SyncthingService extends Service {
|
||||||
onApiChange();
|
onApiChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows or hides the persistent notification based on running state and
|
||||||
|
* {@link #PREF_PERSISTENT_NOTIFICATION}.
|
||||||
|
*/
|
||||||
|
private void updateNotification() {
|
||||||
|
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
|
||||||
|
if ((mCurrentState == State.ACTIVE || mCurrentState == State.STARTING) &&
|
||||||
|
sp.getBoolean(PREF_PERSISTENT_NOTIFICATION, true)) {
|
||||||
|
Notification n = new NotificationCompat.Builder(this)
|
||||||
|
.setContentTitle(getString(R.string.syncthing_active))
|
||||||
|
.setSmallIcon(R.drawable.ic_stat_notify)
|
||||||
|
.setOngoing(true)
|
||||||
|
.setPriority(NotificationCompat.PRIORITY_MIN)
|
||||||
|
.setContentIntent(PendingIntent.getActivity(this, 0,
|
||||||
|
new Intent(this, MainActivity.class), 0))
|
||||||
|
.build();
|
||||||
|
nm.notify(NOTIFICATION_ACTIVE, n);
|
||||||
|
} else {
|
||||||
|
nm.cancel(NOTIFICATION_ACTIVE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
|
if (key.equals(PREF_PERSISTENT_NOTIFICATION))
|
||||||
|
updateNotification();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts the native binary.
|
* Starts the native binary.
|
||||||
*/
|
*/
|
||||||
|
@ -267,6 +285,7 @@ public class SyncthingService extends Service {
|
||||||
mDeviceStateHolder = new DeviceStateHolder(SyncthingService.this);
|
mDeviceStateHolder = new DeviceStateHolder(SyncthingService.this);
|
||||||
registerReceiver(mDeviceStateHolder, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
|
registerReceiver(mDeviceStateHolder, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
|
||||||
new StartupTask(sp.getString("gui_user",""), sp.getString("gui_password","")).execute();
|
new StartupTask(sp.getString("gui_user",""), sp.getString("gui_password","")).execute();
|
||||||
|
sp.registerOnSharedPreferenceChangeListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -330,6 +349,8 @@ public class SyncthingService extends Service {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
Log.i(TAG, "Shutting down service");
|
Log.i(TAG, "Shutting down service");
|
||||||
shutdown();
|
shutdown();
|
||||||
|
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
sp.unregisterOnSharedPreferenceChangeListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void shutdown() {
|
private void shutdown() {
|
||||||
|
|
|
@ -229,9 +229,13 @@ Please report any problems you encounter via Github.</string>
|
||||||
|
|
||||||
<string name="advanced_folder_picker_summary">Select any folder on the device for syncing</string>
|
<string name="advanced_folder_picker_summary">Select any folder on the device for syncing</string>
|
||||||
|
|
||||||
<string name="use_root_title">Sync as root</string>
|
<string name="use_root_title">Sync as Root</string>
|
||||||
|
|
||||||
<string name="use_root_summary">Run syncthing as superuser</string>
|
<string name="use_root_summary">Run Syncthing as Superuser</string>
|
||||||
|
|
||||||
|
<string name="persistent_notification_title">Persistent Notification</string>
|
||||||
|
|
||||||
|
<string name="persistent_notification_summary">Show Notification while Syncthing is running</string>
|
||||||
|
|
||||||
<string name="category_syncthing">Syncthing</string>
|
<string name="category_syncthing">Syncthing</string>
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,12 @@
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:enabled="false" />
|
android:enabled="false" />
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:key="persistent_notification"
|
||||||
|
android:title="@string/persistent_notification_title"
|
||||||
|
android:summary="@string/persistent_notification_summary"
|
||||||
|
android:defaultValue="true" />
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
|
|
Loading…
Reference in a new issue