|
|
|
@ -89,6 +89,7 @@ import static android.os.Process.THREAD_PRIORITY_BACKGROUND;
|
|
|
|
|
public class ServiceSynchronize extends LifecycleService {
|
|
|
|
|
private Helper.NetworkState networkState = new Helper.NetworkState();
|
|
|
|
|
private Core.State state;
|
|
|
|
|
private boolean oneshot = false;
|
|
|
|
|
private boolean started = false;
|
|
|
|
|
private int queued = 0;
|
|
|
|
|
private long lastLost = 0;
|
|
|
|
@ -285,11 +286,13 @@ public class ServiceSynchronize extends LifecycleService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void onOneshot(boolean start) {
|
|
|
|
|
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
|
|
|
|
|
Log.i("Oneshot start=" + start);
|
|
|
|
|
|
|
|
|
|
Intent alarm = new Intent(this, ServiceSynchronize.class);
|
|
|
|
|
alarm.setAction("oneshot_end");
|
|
|
|
|
PendingIntent piOneshot;
|
|
|
|
|
|
|
|
|
|
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
|
|
|
|
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O)
|
|
|
|
|
piOneshot = PendingIntent.getService(this, PI_ONESHOT, alarm, PendingIntent.FLAG_UPDATE_CURRENT);
|
|
|
|
|
else
|
|
|
|
@ -297,17 +300,16 @@ public class ServiceSynchronize extends LifecycleService {
|
|
|
|
|
|
|
|
|
|
am.cancel(piOneshot);
|
|
|
|
|
|
|
|
|
|
oneshot = start;
|
|
|
|
|
|
|
|
|
|
if (start) {
|
|
|
|
|
// Network events will manage the service
|
|
|
|
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
|
|
|
|
|
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + ONESHOT_DURATION, piOneshot);
|
|
|
|
|
else
|
|
|
|
|
am.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + ONESHOT_DURATION, piOneshot);
|
|
|
|
|
} else {
|
|
|
|
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
|
|
|
|
prefs.edit().putBoolean("oneshot", false).apply();
|
|
|
|
|
queue_reload(true, true, "oneshot");
|
|
|
|
|
}
|
|
|
|
|
} else
|
|
|
|
|
onReload(true, "oneshot");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void queue_reload(final boolean start, final boolean clear, final String reason) {
|
|
|
|
@ -315,7 +317,7 @@ public class ServiceSynchronize extends LifecycleService {
|
|
|
|
|
final boolean doStart = (start && isEnabled() && networkState.isSuitable());
|
|
|
|
|
|
|
|
|
|
EntityLog.log(this, "Queue reload" +
|
|
|
|
|
" doStop=" + doStop + " doStart=" + doStart + " queued=" + queued + " " + reason);
|
|
|
|
|
" doStop=" + doStop + " doStart=" + doStart + " queued=" + queued + " reason=" + reason);
|
|
|
|
|
|
|
|
|
|
started = doStart;
|
|
|
|
|
|
|
|
|
@ -386,7 +388,6 @@ public class ServiceSynchronize extends LifecycleService {
|
|
|
|
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
|
|
|
|
boolean enabled = prefs.getBoolean("enabled", true);
|
|
|
|
|
int pollInterval = prefs.getInt("poll_interval", 0);
|
|
|
|
|
boolean oneshot = prefs.getBoolean("oneshot", false);
|
|
|
|
|
return ((enabled && pollInterval == 0) || oneshot);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1203,10 +1204,6 @@ public class ServiceSynchronize extends LifecycleService {
|
|
|
|
|
try {
|
|
|
|
|
DB db = DB.getInstance(context);
|
|
|
|
|
|
|
|
|
|
// Reset state
|
|
|
|
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
|
|
|
|
prefs.edit().remove("oneshot").apply();
|
|
|
|
|
|
|
|
|
|
// Restore snooze timers
|
|
|
|
|
for (EntityMessage message : db.message().getSnoozed())
|
|
|
|
|
EntityMessage.snooze(context, message.id, message.ui_snoozed);
|
|
|
|
@ -1215,6 +1212,7 @@ public class ServiceSynchronize extends LifecycleService {
|
|
|
|
|
schedule(context);
|
|
|
|
|
|
|
|
|
|
// Conditionally init service
|
|
|
|
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
|
|
|
|
boolean enabled = prefs.getBoolean("enabled", true);
|
|
|
|
|
int pollInterval = prefs.getInt("poll_interval", 0);
|
|
|
|
|
int accounts = db.account().getSynchronizingAccounts().size();
|
|
|
|
@ -1329,17 +1327,8 @@ public class ServiceSynchronize extends LifecycleService {
|
|
|
|
|
boolean enabled = prefs.getBoolean("enabled", true);
|
|
|
|
|
int pollInterval = prefs.getInt("poll_interval", 0);
|
|
|
|
|
if (!enabled || pollInterval > 0)
|
|
|
|
|
onshot(context);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void onshot(Context context) {
|
|
|
|
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
|
|
|
|
boolean oneshot = prefs.getBoolean("oneshot", false);
|
|
|
|
|
if (!oneshot) {
|
|
|
|
|
prefs.edit().putBoolean("oneshot", true).apply();
|
|
|
|
|
ContextCompat.startForegroundService(context,
|
|
|
|
|
new Intent(context, ServiceSynchronize.class)
|
|
|
|
|
.setAction("oneshot_start"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|