Commit 77a228a1 authored by David Trainor's avatar David Trainor

Add enable/disable hooks to the InlineUpdateController

Add the ability to turn on/off the InlineUpdateController based on
whether or not there are any active ChromeActivities that are running
(RESUMED).

BUG=922714

Change-Id: I30be4c9894f6be7352f75f2861b6ed5165dd5296
Reviewed-on: https://chromium-review.googlesource.com/c/1468403Reviewed-by: default avatarTommy Nyquist <nyquist@chromium.org>
Cr-Commit-Position: refs/heads/master@{#632329}
parent da0ce24d
...@@ -20,6 +20,9 @@ import android.text.TextUtils; ...@@ -20,6 +20,9 @@ import android.text.TextUtils;
import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.common.GooglePlayServicesUtil;
import org.chromium.base.ActivityState;
import org.chromium.base.ApplicationStatus;
import org.chromium.base.ApplicationStatus.ActivityStateListener;
import org.chromium.base.BuildInfo; import org.chromium.base.BuildInfo;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.ContextUtils; import org.chromium.base.ContextUtils;
...@@ -28,6 +31,7 @@ import org.chromium.base.ThreadUtils; ...@@ -28,6 +31,7 @@ import org.chromium.base.ThreadUtils;
import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.task.AsyncTask; import org.chromium.base.task.AsyncTask;
import org.chromium.base.task.AsyncTask.Status; import org.chromium.base.task.AsyncTask.Status;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.omaha.inline.InlineUpdateController; import org.chromium.chrome.browser.omaha.inline.InlineUpdateController;
import org.chromium.chrome.browser.preferences.ChromePreferenceManager; import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
import org.chromium.chrome.browser.util.ConversionUtils; import org.chromium.chrome.browser.util.ConversionUtils;
...@@ -42,7 +46,7 @@ import java.lang.annotation.RetentionPolicy; ...@@ -42,7 +46,7 @@ import java.lang.annotation.RetentionPolicy;
* *
* For manually testing this functionality, see {@link UpdateConfigs}. * For manually testing this functionality, see {@link UpdateConfigs}.
*/ */
public class UpdateStatusProvider { public class UpdateStatusProvider implements ActivityStateListener {
/** Possible update states. */ /** Possible update states. */
@IntDef({UpdateState.NONE, UpdateState.UPDATE_AVAILABLE, UpdateState.UNSUPPORTED_OS_VERSION, @IntDef({UpdateState.NONE, UpdateState.UPDATE_AVAILABLE, UpdateState.UNSUPPORTED_OS_VERSION,
UpdateState.INLINE_UPDATE_AVAILABLE, UpdateState.INLINE_UPDATE_DOWNLOADING, UpdateState.INLINE_UPDATE_AVAILABLE, UpdateState.INLINE_UPDATE_DOWNLOADING,
...@@ -188,9 +192,28 @@ public class UpdateStatusProvider { ...@@ -188,9 +192,28 @@ public class UpdateStatusProvider {
mInlineController.completeUpdate(); mInlineController.completeUpdate();
} }
// ApplicationStateListener implementation.
@Override
public void onActivityStateChange(Activity changedActivity, @ActivityState int newState) {
boolean hasActiveActivity = false;
for (Activity activity : ApplicationStatus.getRunningActivities()) {
if (activity == null || !(activity instanceof ChromeActivity)) continue;
hasActiveActivity |=
ApplicationStatus.getStateForActivity(activity) == ActivityState.RESUMED;
if (hasActiveActivity) break;
}
mInlineController.setEnabled(hasActiveActivity);
}
private UpdateStatusProvider() { private UpdateStatusProvider() {
mInlineController = new InlineUpdateController(this::resolveStatus); mInlineController = new InlineUpdateController(this::resolveStatus);
mOmahaQuery = new UpdateQuery(this::resolveStatus); mOmahaQuery = new UpdateQuery(this::resolveStatus);
// Note that as a singleton this class never unregisters.
ApplicationStatus.registerStateListenerForAllActivities(this);
} }
private void pingObservers() { private void pingObservers() {
......
...@@ -21,6 +21,9 @@ public class InlineUpdateController { ...@@ -21,6 +21,9 @@ public class InlineUpdateController {
private final Runnable mCallback; private final Runnable mCallback;
private boolean mEnabled;
private @Nullable @UpdateState Integer mUpdateState;
/** /**
* Builds an instance of {@link InlineUpdateController}. * Builds an instance of {@link InlineUpdateController}.
* @param callback The {@link Runnable} to notify when an inline update state change occurs. * @param callback The {@link Runnable} to notify when an inline update state change occurs.
...@@ -28,7 +31,17 @@ public class InlineUpdateController { ...@@ -28,7 +31,17 @@ public class InlineUpdateController {
public InlineUpdateController(Runnable callback) { public InlineUpdateController(Runnable callback) {
mCallback = callback; mCallback = callback;
mHandler.post(mCallback); setEnabled(true);
}
public void setEnabled(boolean enabled) {
if (mEnabled == enabled) return;
mEnabled = enabled;
if (mEnabled) {
mUpdateState = UpdateState.NONE;
mHandler.post(mCallback);
}
} }
/** /**
...@@ -36,7 +49,7 @@ public class InlineUpdateController { ...@@ -36,7 +49,7 @@ public class InlineUpdateController {
* hasn't been determined yet. * hasn't been determined yet.
*/ */
public @Nullable @UpdateState Integer getStatus() { public @Nullable @UpdateState Integer getStatus() {
return UpdateState.NONE; return mUpdateState;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment