mirror of
https://github.com/syncthing/syncthing-android.git
synced 2024-11-29 15:51:17 +00:00
Reduce unnecessary applyCustomRunConditions after service state change (#435)
Ref.: #7e7b2c9850
Improve RunConditionMonitor#updateShouldRunDecision (7e7b2c9850
)
This commit is contained in:
parent
0046a75078
commit
6b9745c800
2 changed files with 37 additions and 30 deletions
|
@ -253,19 +253,39 @@ public class RunConditionMonitor {
|
|||
* We then need to decide if syncthing should run.
|
||||
*/
|
||||
public void updateShouldRunDecision() {
|
||||
// Check if the current conditions changed the result of decideShouldRun()
|
||||
// compared to the last determined result.
|
||||
boolean newShouldRun = decideShouldRun();
|
||||
if (newShouldRun != lastDeterminedShouldRun) {
|
||||
if (mOnShouldRunChangedListener != null) {
|
||||
mOnShouldRunChangedListener.onShouldRunDecisionChanged(newShouldRun);
|
||||
}
|
||||
lastDeterminedShouldRun = newShouldRun;
|
||||
if (newShouldRun) {
|
||||
/**
|
||||
* Trigger:
|
||||
* a) Sync pre-conditions changed
|
||||
* a1) AND SyncthingService.State should remain ACTIVE
|
||||
* a2) AND SyncthingService.State should transition from INIT/DISABLED to ACTIVE
|
||||
* b) Sync pre-conditions did not change
|
||||
* b1) AND SyncthingService.State should remain ACTIVE
|
||||
* because a reevaluation of the run conditions was forced from code.
|
||||
* Action:
|
||||
* SyncthingService will evaluate custom per-object run conditions
|
||||
* and pause/unpause objects accordingly.
|
||||
*/
|
||||
if (mOnSyncPreconditionChangedListener != null) {
|
||||
mOnSyncPreconditionChangedListener.onSyncPreconditionChanged(this);
|
||||
}
|
||||
}
|
||||
|
||||
// Notify about changed preconditions.
|
||||
if (mOnSyncPreconditionChangedListener != null) {
|
||||
mOnSyncPreconditionChangedListener.onSyncPreconditionChanged(this);
|
||||
/**
|
||||
* Check if the current conditions changed the result of decideShouldRun()
|
||||
* compared to the last determined result.
|
||||
*/
|
||||
if (newShouldRun != lastDeterminedShouldRun) {
|
||||
/**
|
||||
* Notify SyncthingService in case it has to transition from
|
||||
* a) INIT/DISABLED => STARTING => ACTIVE
|
||||
* b) ACTIVE => DISABLED
|
||||
*/
|
||||
if (mOnShouldRunChangedListener != null) {
|
||||
mOnShouldRunChangedListener.onShouldRunDecisionChanged(newShouldRun);
|
||||
lastDeterminedShouldRun = newShouldRun;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -461,6 +481,7 @@ public class RunConditionMonitor {
|
|||
|
||||
/**
|
||||
* Check if an object's individual sync conditions are met.
|
||||
* Precondition: Object must own pref "...CustomSyncConditionsEnabled == true".
|
||||
*/
|
||||
public Boolean checkObjectSyncConditions(String objectPrefixAndId) {
|
||||
// Sync on mobile data?
|
||||
|
|
|
@ -252,19 +252,6 @@ public class SyncthingService extends Service {
|
|||
return START_NOT_STICKY;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send current service state to listening endpoints.
|
||||
* This is required that components know about the service State.DISABLED
|
||||
* if RunConditionMonitor does not send a "shouldRun = true" callback
|
||||
* to start the binary according to preferences shortly after its creation.
|
||||
* See {@link mLastDeterminedShouldRun} defaulting to "false".
|
||||
*/
|
||||
if (mCurrentState == State.DISABLED) {
|
||||
synchronized (mStateLock) {
|
||||
onServiceStateChange(mCurrentState);
|
||||
}
|
||||
}
|
||||
|
||||
if (mPrefBroadcastServiceControl) {
|
||||
Log.i(TAG, "onStartCommand: mPrefBroadcastServiceControl == true, RunConditionMonitor is disabled.");
|
||||
/**
|
||||
|
@ -584,9 +571,6 @@ public class SyncthingService extends Service {
|
|||
}
|
||||
onServiceStateChange(State.ACTIVE);
|
||||
}
|
||||
if (mRestApi != null && mRunConditionMonitor != null) {
|
||||
mRestApi.applyCustomRunConditions(mRunConditionMonitor);
|
||||
}
|
||||
|
||||
if (mEventProcessor == null) {
|
||||
mEventProcessor = new EventProcessor(SyncthingService.this, mRestApi);
|
||||
|
@ -705,8 +689,10 @@ public class SyncthingService extends Service {
|
|||
* @see #unregisterOnServiceStateChangeListener
|
||||
*/
|
||||
public void registerOnServiceStateChangeListener(OnServiceStateChangeListener listener) {
|
||||
// Make sure we don't send an invalid state or syncthing might show a "disabled" message
|
||||
// when it's just starting up.
|
||||
/**
|
||||
* Initially send the current state to the new subscriber to make sure it doesn't stay
|
||||
* in undefined state forever until the state next change occurs.
|
||||
*/
|
||||
listener.onServiceStateChange(mCurrentState);
|
||||
mOnServiceStateChangeListeners.add(listener);
|
||||
}
|
||||
|
@ -726,9 +712,9 @@ public class SyncthingService extends Service {
|
|||
private void onServiceStateChange(State newState) {
|
||||
if (newState == mCurrentState) {
|
||||
Log.d(TAG, "onServiceStateChange: Called with unchanged state " + newState);
|
||||
} else {
|
||||
Log.i(TAG, "onServiceStateChange: from " + mCurrentState + " to " + newState);
|
||||
return;
|
||||
}
|
||||
Log.i(TAG, "onServiceStateChange: from " + mCurrentState + " to " + newState);
|
||||
mCurrentState = newState;
|
||||
mHandler.post(() -> {
|
||||
mNotificationHandler.updatePersistentNotification(this);
|
||||
|
|
Loading…
Reference in a new issue