Commit 5c427396 authored by Justin DeWitt's avatar Justin DeWitt Committed by Commit Bot

[Touchless] Launch NTP in case of inactivity even if activity is stopped.

Change-Id: I4ef7f45a017f24b59dae7dea24f17664c13b3136
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1555250Reviewed-by: default avatarTheresa <twellington@chromium.org>
Reviewed-by: default avatarSky Malice <skym@chromium.org>
Commit-Queue: Justin DeWitt <dewittj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#649287}
parent 5f615bcb
...@@ -19,12 +19,16 @@ import org.chromium.content_public.browser.UiThreadTaskTraits; ...@@ -19,12 +19,16 @@ import org.chromium.content_public.browser.UiThreadTaskTraits;
*/ */
public class ChromeInactivityTracker implements StartStopWithNativeObserver, Destroyable { public class ChromeInactivityTracker implements StartStopWithNativeObserver, Destroyable {
private static final String TAG = "InactivityTracker"; private static final String TAG = "InactivityTracker";
private static final String FEATURE_NAME = ChromeFeatureList.NTP_LAUNCH_AFTER_INACTIVITY;
private static final String NTP_LAUNCH_DELAY_IN_MINS_PARAM = "delay_in_mins";
private static final long UNKNOWN_LAST_BACKGROUNDED_TIME = -1; private static final long UNKNOWN_LAST_BACKGROUNDED_TIME = -1;
private static final int UNKNOWN_LAUNCH_DELAY_MINS = -1; private static final int UNKNOWN_LAUNCH_DELAY_MINS = -1;
private static final int DEFAULT_LAUNCH_DELAY_IN_MINS = 5; private static final int DEFAULT_LAUNCH_DELAY_IN_MINS = 5;
@VisibleForTesting
public static final String FEATURE_NAME = ChromeFeatureList.NTP_LAUNCH_AFTER_INACTIVITY;
@VisibleForTesting
public static final String NTP_LAUNCH_DELAY_IN_MINS_PARAM = "delay_in_mins";
// Only true if the feature is enabled. // Only true if the feature is enabled.
private final boolean mIsEnabled; private final boolean mIsEnabled;
......
...@@ -142,14 +142,22 @@ public class NoTouchActivity extends SingleTabActivity { ...@@ -142,14 +142,22 @@ public class NoTouchActivity extends SingleTabActivity {
@Override @Override
public void initializeState() { public void initializeState() {
mInactivityTracker = new ChromeInactivityTracker(
LAST_BACKGROUNDED_TIME_MS_PREF, this.getLifecycleDispatcher());
boolean launchNtpDueToInactivity = mInactivityTracker.inactivityThresholdPassed();
// SingleTabActivity#initializeState creates a tab based on #getSavedInstanceState(), so if
// we need to clear it due to inactivity, we should do it before calling
// super#initializeState.
if (launchNtpDueToInactivity) resetSavedInstanceState();
super.initializeState(); super.initializeState();
mKeyFunctionsIPHCoordinator = mKeyFunctionsIPHCoordinator =
new KeyFunctionsIPHCoordinator(mTooltipView, getActivityTabProvider()); new KeyFunctionsIPHCoordinator(mTooltipView, getActivityTabProvider());
mProgressBarCoordinator = mProgressBarCoordinator =
new ProgressBarCoordinator(mProgressBarView, getActivityTabProvider()); new ProgressBarCoordinator(mProgressBarView, getActivityTabProvider());
mTouchlessZoomHelper = new TouchlessZoomHelper(getActivityTabProvider()); mTouchlessZoomHelper = new TouchlessZoomHelper(getActivityTabProvider());
mInactivityTracker = new ChromeInactivityTracker(
LAST_BACKGROUNDED_TIME_MS_PREF, this.getLifecycleDispatcher());
// By this point if we were going to restore a URL from savedInstanceState we would already // By this point if we were going to restore a URL from savedInstanceState we would already
// have done so. // have done so.
...@@ -157,7 +165,7 @@ public class NoTouchActivity extends SingleTabActivity { ...@@ -157,7 +165,7 @@ public class NoTouchActivity extends SingleTabActivity {
boolean intentWithEffect = false; boolean intentWithEffect = false;
Intent intent = getIntent(); Intent intent = getIntent();
mIntentHandlingTimeMs = SystemClock.uptimeMillis(); mIntentHandlingTimeMs = SystemClock.uptimeMillis();
if (intent != null) { if (!launchNtpDueToInactivity && intent != null) {
// Treat Dino intent action like a url request for chrome://dino // Treat Dino intent action like a url request for chrome://dino
if (DINOSAUR_GAME_INTENT.equals(intent.getComponent().getClassName())) { if (DINOSAUR_GAME_INTENT.equals(intent.getComponent().getClassName())) {
intent.setData(Uri.parse(UrlConstants.CHROME_DINO_URL)); intent.setData(Uri.parse(UrlConstants.CHROME_DINO_URL));
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
package org.chromium.chrome.browser.touchless; package org.chromium.chrome.browser.touchless;
import static org.chromium.chrome.browser.ChromeInactivityTracker.NTP_LAUNCH_DELAY_IN_MINS_PARAM;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.support.test.InstrumentationRegistry; import android.support.test.InstrumentationRegistry;
...@@ -17,6 +19,7 @@ import org.junit.Test; ...@@ -17,6 +19,7 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.browser.ChromeInactivityTracker;
import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.MockSafeBrowsingApiHandler; import org.chromium.chrome.browser.MockSafeBrowsingApiHandler;
import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeActivityTestRule;
...@@ -131,6 +134,36 @@ public class NoTouchActivityTest { ...@@ -131,6 +134,36 @@ public class NoTouchActivityTest {
() -> mActivity.getActivityTab().getNativePage() instanceof TouchlessNewTabPage); () -> mActivity.getActivityTab().getNativePage() instanceof TouchlessNewTabPage);
} }
/**
* Tests that the tab does not persist after recreation, if enough time has passed.
*
* This test configures the time delay to be 0 minutes, which should always cause the inactivity
* threshold to be reached upon recreation.
*/
@Test
@MediumTest
@CommandLineFlags.
Add({"enable-features=" + ChromeInactivityTracker.FEATURE_NAME + "<FakeStudyName",
"force-fieldtrials=FakeStudyName/Enabled",
"force-fieldtrial-params=FakeStudyName.Enabled:" + NTP_LAUNCH_DELAY_IN_MINS_PARAM
+ "/0"})
public void
testRecreateWithTabHistoryAfterInactivity() throws Throwable {
mActivityTestRule.startMainActivityFromLauncher();
mActivity = mActivityTestRule.getActivity();
mActivityTestRule.loadUrl(mTestServer.getURL(TEST_PATH));
TestThreadUtils.runOnUiThreadBlocking(() -> {
Assert.assertEquals(mActivity.getActivityTab().getWebContents().getLastCommittedUrl(),
mTestServer.getURL(TEST_PATH));
});
mActivity = ApplicationTestUtils.recreateActivity(mActivity);
mActivityTestRule.setActivity(mActivity);
mActivityTestRule.waitForActivityNativeInitializationComplete();
CriteriaHelper.pollUiThread(
() -> mActivity.getActivityTab().getNativePage() instanceof TouchlessNewTabPage);
}
/** /**
* Tests that Safe Browsing and interstitials work. * Tests that Safe Browsing and interstitials work.
*/ */
......
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