Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrFirstRunActivity.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrFirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrFirstRunActivity.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..3496ae76917b9381ef6cdc31a400edfe3ee250d6 |
| --- /dev/null |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrFirstRunActivity.java |
| @@ -0,0 +1,68 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +package org.chromium.chrome.browser.vr_shell; |
| + |
| +import android.app.Activity; |
| +import android.content.Intent; |
| +import android.os.Bundle; |
| +import android.os.Handler; |
| + |
| +import org.chromium.chrome.browser.util.IntentUtils; |
| + |
| +/** |
| + * Handles the DOFF flow when Chrome is launched in VR mode and the FRE is not complete. This is |
| + * needed because VrCore doesn't allow calling DOFF from a non-active VR activity (b/63435686), so |
| + * we can't do it from {@link FirstRunActivity}. The android:enableVrMode attribute in the manifest |
| + * makes this a VR activity allowing us to call DOFF before triggering the standard 2D FRE flow. |
| + * This should be removed when b/63435686 is fixed. |
| + */ |
| +public class VrFirstRunActivity extends Activity { |
| + private static final long SHOW_DOFF_TIMEOUT_MS = 500; |
| + |
| + private VrDaydreamApi mApi; |
| + |
| + @Override |
| + protected void onCreate(Bundle savedInstanceState) { |
| + super.onCreate(savedInstanceState); |
| + assert VrShellDelegate.isVrIntent(getIntent()); |
| + VrClassesWrapper wrapper = VrShellDelegate.createVrClassesWrapper(); |
| + if (wrapper != null) { |
|
mthiesse
2017/07/12 14:44:46
nit: if (wrapper == null) {
showFre();
return;
ymalik
2017/07/12 15:33:03
Done.
|
| + wrapper.setVrModeEnabled(this, true); |
|
mthiesse
2017/07/12 14:44:46
Please add a comment on why we appear to call setV
ymalik
2017/07/12 15:33:03
Done.
|
| + mApi = wrapper.createVrDaydreamApi(this); |
| + if (mApi.isDaydreamCurrentViewer()) { |
|
mthiesse
2017/07/12 14:44:46
nit: if (!mApi.isDaydreamCurrentViewer()) {
show
ymalik
2017/07/12 15:33:03
Done.
|
| + // Show DOFF with a timeout so that this activity has enough time to be the active |
| + // VR app. |
| + new Handler().postDelayed(new Runnable() { |
| + @Override |
| + public void run() { |
| + mApi.exitFromVr(VrShellDelegate.EXIT_VR_RESULT, new Intent()); |
| + } |
| + }, SHOW_DOFF_TIMEOUT_MS); |
| + return; |
| + } |
| + } |
| + showFre(); |
| + finish(); |
| + } |
| + |
| + @Override |
| + protected void onActivityResult(int requestCode, int resultCode, Intent intent) { |
| + if (requestCode == VrShellDelegate.EXIT_VR_RESULT) { |
|
mthiesse
2017/07/12 14:44:46
nit: if (requestCode != VrShellDelegate.EXIT_VR_RE
ymalik
2017/07/12 15:33:03
Done.
|
| + if (resultCode != Activity.RESULT_OK) { |
| + mApi.launchVrHomescreen(); |
| + } else { |
| + showFre(); |
| + } |
| + finish(); |
| + } |
| + } |
| + |
| + private void showFre() { |
| + // Start the actual 2D FRE if the user successfully exited VR. |
| + Intent freIntent = (Intent) IntentUtils.safeGetParcelableExtra( |
| + getIntent(), VrShellDelegate.VR_FRE_INTENT_EXTRA); |
| + IntentUtils.safeStartActivity(this, freIntent); |
|
mthiesse
2017/07/12 14:44:46
nit: call finish() from showFre(), then you can cl
ymalik
2017/07/12 15:33:03
Done.
|
| + } |
| +} |