Commit abdebb56 authored by Peter Kotwicz's avatar Peter Kotwicz Committed by Commit Bot

Fix deep links for new-style WebAPKs

This CL:
- Handles onActivityResult() being called after onNewIntent()
and before onResume()
- Changes SplashActivityTest#testDeepLink() to reflect what actually
occurs

BUG=978716

Change-Id: I3b5265368a32eb0b94fdc78e905285258666b72f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1717877
Commit-Queue: Peter Kotwicz <pkotwicz@chromium.org>
Reviewed-by: default avatarPavel Shmakov <pshmakov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#681469}
parent a238a6bf
...@@ -12,4 +12,4 @@ ...@@ -12,4 +12,4 @@
# //chrome/android/webapk/shell_apk:webapk is changed. This includes # //chrome/android/webapk/shell_apk:webapk is changed. This includes
# Java files, Android resource files and AndroidManifest.xml. Does not affect # Java files, Android resource files and AndroidManifest.xml. Does not affect
# Chrome.apk # Chrome.apk
current_shell_apk_version = 100 current_shell_apk_version = 101
...@@ -200,6 +200,25 @@ public final class SplashActivityTest { ...@@ -200,6 +200,25 @@ public final class SplashActivityTest {
Robolectric.buildActivity(SplashActivity.class, new Intent()); Robolectric.buildActivity(SplashActivity.class, new Intent());
setAppTaskTopActivity(splashActivityController.get().getTaskId(), new Activity()); setAppTaskTopActivity(splashActivityController.get().getTaskId(), new Activity());
splashActivityController.create(new Bundle()).visible();
splashActivityController.newIntent(new Intent());
splashActivityController.get().onActivityResult(0, 0, null);
splashActivityController.resume();
assertNotNull(mShadowApplication.getNextStartedActivity());
assertFalse(splashActivityController.get().isFinishing());
}
/**
* Test that SplashActivity does not finish itself when it receives onActivityResult()
* prior to onNewIntent().
*/
@Test
public void testActivityResultBeforeNewIntent() {
ActivityController<SplashActivity> splashActivityController =
Robolectric.buildActivity(SplashActivity.class, new Intent());
setAppTaskTopActivity(splashActivityController.get().getTaskId(), new Activity());
splashActivityController.create(new Bundle()).visible(); splashActivityController.create(new Bundle()).visible();
splashActivityController.get().onActivityResult(0, 0, null); splashActivityController.get().onActivityResult(0, 0, null);
splashActivityController.newIntent(new Intent()); splashActivityController.newIntent(new Intent());
......
...@@ -14,6 +14,7 @@ import android.graphics.Color; ...@@ -14,6 +14,7 @@ import android.graphics.Color;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.annotation.IntDef;
import android.view.View; import android.view.View;
import android.view.ViewTreeObserver; import android.view.ViewTreeObserver;
...@@ -26,6 +27,8 @@ import org.chromium.webapk.shell_apk.WebApkUtils; ...@@ -26,6 +27,8 @@ import org.chromium.webapk.shell_apk.WebApkUtils;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/** Displays splash screen. */ /** Displays splash screen. */
public class SplashActivity extends Activity { public class SplashActivity extends Activity {
...@@ -36,9 +39,17 @@ public class SplashActivity extends Activity { ...@@ -36,9 +39,17 @@ public class SplashActivity extends Activity {
@SuppressWarnings("NoAndroidAsyncTaskCheck") @SuppressWarnings("NoAndroidAsyncTaskCheck")
private android.os.AsyncTask mScreenshotSplashTask; private android.os.AsyncTask mScreenshotSplashTask;
@IntDef({ActivityResult.NONE, ActivityResult.CANCELED, ActivityResult.IGNORE})
@Retention(RetentionPolicy.SOURCE)
private @interface ActivityResult {
int NONE = 0;
int CANCELED = 1;
int IGNORE = 2;
}
private View mSplashView; private View mSplashView;
private HostBrowserLauncherParams mParams; private HostBrowserLauncherParams mParams;
private boolean mGotCanceledResult; private @ActivityResult int mResult;
private boolean mResumed; private boolean mResumed;
private boolean mPendingLaunch; private boolean mPendingLaunch;
...@@ -67,7 +78,9 @@ public class SplashActivity extends Activity { ...@@ -67,7 +78,9 @@ public class SplashActivity extends Activity {
@Override @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
mGotCanceledResult = (resultCode == Activity.RESULT_CANCELED); if (mResult != ActivityResult.IGNORE && resultCode == Activity.RESULT_CANCELED) {
mResult = ActivityResult.CANCELED;
}
} }
@Override @Override
...@@ -79,7 +92,7 @@ public class SplashActivity extends Activity { ...@@ -79,7 +92,7 @@ public class SplashActivity extends Activity {
// The host browser activity is killed - triggering SplashActivity#onActivityResult() // The host browser activity is killed - triggering SplashActivity#onActivityResult()
// - when SplashActivity gets a new intent because SplashActivity has launchMode // - when SplashActivity gets a new intent because SplashActivity has launchMode
// "singleTask". // "singleTask".
mGotCanceledResult = false; mResult = ActivityResult.IGNORE;
mPendingLaunch = true; mPendingLaunch = true;
...@@ -90,11 +103,12 @@ public class SplashActivity extends Activity { ...@@ -90,11 +103,12 @@ public class SplashActivity extends Activity {
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
mResumed = true; mResumed = true;
if (mGotCanceledResult) { if (mResult == ActivityResult.CANCELED) {
WebApkUtils.finishAndRemoveTask(this); WebApkUtils.finishAndRemoveTask(this);
return; return;
} }
mResult = ActivityResult.NONE;
maybeScreenshotSplashAndLaunch(); maybeScreenshotSplashAndLaunch();
} }
......
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