Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
index e4516704b844dbf988ed4a45b330130a1d1772ca..838cf37744ec75ec35877bcf6dbf2b6a76bb1e3d 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
@@ -9,6 +9,7 @@ import android.app.Activity; |
import android.app.ActivityManager; |
import android.content.Context; |
import android.content.Intent; |
+import android.content.pm.ActivityInfo; |
import android.graphics.Color; |
import android.net.Uri; |
import android.os.Build; |
@@ -111,6 +112,19 @@ import java.lang.annotation.RetentionPolicy; |
import java.lang.ref.WeakReference; |
import java.util.List; |
+import android.graphics.PixelFormat; |
+import android.graphics.SurfaceTexture; |
+import android.view.View; |
+import android.view.Window; |
+import android.view.WindowManager; |
+ |
+import org.chromium.chrome.browser.vr_shell.VrShell; |
+ |
+import org.chromium.ui.base.WindowAndroid; |
+ |
+import org.chromium.base.Log; |
+import org.chromium.chrome.browser.tab.Tab; |
+ |
/** |
* This is the main activity for ChromeMobile when not running in document mode. All the tabs |
* are accessible via a chrome specific tab switching UI. |
@@ -215,6 +229,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
// Time at which an intent was received and handled. |
private long mIntentHandlingTimeMs = 0; |
+ private VrShell mVrShellView; |
+ |
private class TabbedAssistStatusHandler extends AssistStatusHandler { |
public TabbedAssistStatusHandler(Activity activity) { |
super(activity); |
@@ -291,6 +307,13 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
if (state != null && state.containsKey(FRE_RUNNING)) { |
mIsOnFirstRun = state.getBoolean(FRE_RUNNING); |
} |
+ if (getTabModelSelector().getCurrentTab() != null) { |
+ Log.e("bshe", "current tab exist!!!!!!!"); |
+ } |
+ Log.e("bshe", "compositor====="); |
+ if (mVrShellView != null) { |
+ mVrShellView.onNativeLibraryReady(getWindowAndroid()); |
+ } |
} finally { |
TraceEvent.end("ChromeTabbedActivity.initializeCompositor"); |
} |
@@ -333,7 +356,9 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
refreshSignIn(); |
- initializeUI(); |
+ if (!mVrMode) { |
+ initializeUI(); |
+ } |
// The dataset has already been created, we need to initialize our state. |
mTabModelSelectorImpl.notifyChanged(); |
@@ -353,6 +378,18 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
} |
@Override |
+ public void onResume() { |
+ super.onResume(); |
+ if (mVrShellView != null) mVrShellView.onResume(); |
+ } |
+ |
+ @Override |
+ public void onPause() { |
+ super.onPause(); |
+ if (mVrShellView != null) mVrShellView.onPause(); |
+ } |
+ |
+ @Override |
public void onResumeWithNative() { |
super.onResumeWithNative(); |
CookiesFetcher.restoreCookies(this); |
@@ -391,6 +428,9 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
public void onStart() { |
super.onStart(); |
StartupMetrics.getInstance().updateIntent(getIntent()); |
+ if (getIntent().getBooleanExtra("android.intent.extra.VR_LAUNCH", false /* default */)) { |
+ Log.e("bshe", "from vr launder"); |
+ } |
} |
@Override |
@@ -474,15 +514,17 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
mLayoutManager.addOverviewModeObserver(this); |
// TODO(yusufo): get rid of findViewById(R.id.url_bar). |
- initializeCompositorContent(mLayoutManager, findViewById(R.id.url_bar), |
- mContentContainer, mControlContainer); |
+ if (!mVrMode) { |
+ initializeCompositorContent(mLayoutManager, findViewById(R.id.url_bar), |
+ mContentContainer, mControlContainer); |
+ } |
mTabModelSelectorImpl.setOverviewModeBehavior(mLayoutManager); |
mUndoBarPopupController.initialize(); |
// Adjust the content container if we're not entering fullscreen mode. |
- if (getFullscreenManager() == null) { |
+ if (getFullscreenManager() == null && !mVrMode) { |
float controlHeight = getResources().getDimension(R.dimen.control_container_height); |
((FrameLayout.LayoutParams) mContentContainer.getLayoutParams()).topMargin = |
(int) controlHeight; |
@@ -822,7 +864,9 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
assert false : "Unknown TabOpenType: " + tabOpenType; |
break; |
} |
- getToolbarManager().setUrlBarFocus(false); |
+ if (!mVrMode) { |
+ getToolbarManager().setUrlBarFocus(false); |
+ } |
} |
@Override |
@@ -921,6 +965,11 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
@Override |
public void postInflationStartup() { |
+ if (mVrMode) { |
+ addVrViews(); |
+ setupVrModeWindowFlags(); |
+ } |
+ |
super.postInflationStartup(); |
// Critical path for startup. Create the minimum objects needed |
@@ -935,8 +984,10 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN |
| WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); |
- mContentContainer = (ViewGroup) findViewById(android.R.id.content); |
- mControlContainer = (ToolbarControlContainer) findViewById(R.id.control_container); |
+ if (!mVrMode) { |
+ mContentContainer = (ViewGroup) findViewById(android.R.id.content); |
+ mControlContainer = (ToolbarControlContainer) findViewById(R.id.control_container); |
+ } |
mUndoBarPopupController = new UndoBarController(this, mTabModelSelectorImpl, |
getSnackbarManager()); |
@@ -1004,11 +1055,34 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
}); |
} |
+ protected void onTabReady(Tab tab) { |
+ if (mVrShellView != null) mVrShellView.onWebContentsReady(tab.getWebContents()); |
+ } |
+ |
+ private void addVrViews() { |
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); |
+ mVrShellView = new VrShell(this); |
+ WindowManager.LayoutParams params = new WindowManager.LayoutParams( |
+ WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, |
+ WindowManager.LayoutParams.TYPE_APPLICATION, 0, PixelFormat.OPAQUE); |
+ this.addContentView(mVrShellView, params); |
+ } |
+ |
+ private void setupVrModeWindowFlags() { |
+ Window window = getWindow(); |
+ window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); |
+ window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN |
+ | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); |
+ } |
+ |
private void createTabModelSelectorImpl(Bundle savedInstanceState) { |
// We determine the model as soon as possible so every systems get initialized coherently. |
boolean startIncognito = savedInstanceState != null |
&& savedInstanceState.getBoolean("is_incognito_selected", false); |
int index = savedInstanceState != null ? savedInstanceState.getInt(WINDOW_INDEX, 0) : 0; |
+ Log.e("bshe", "call request selector"); |
mTabModelSelectorImpl = (TabModelSelectorImpl) |
TabWindowManager.getInstance().requestSelector(this, getWindowAndroid(), index); |
if (mTabModelSelectorImpl == null) { |
@@ -1039,6 +1113,11 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
DataReductionPromoInfoBar.maybeLaunchPromoInfoBar(ChromeTabbedActivity.this, |
tab.getWebContents(), url, tab.isShowingErrorPage(), isFragmentNavigation, |
statusCode); |
+ if (ChromeTabbedActivity.this.mVrMode) { |
+ (ContentViewCore.fromWebContents(tab.getWebContents())) |
+ .onSizeChanged(684, 332, 0, 0); |
+ ChromeTabbedActivity.this.onTabReady(tab); |
+ } |
} |
}; |
@@ -1370,6 +1449,11 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
mUndoBarPopupController = null; |
} |
+ if (mVrShellView != null) { |
+ mVrShellView.shutdown(); |
+ mVrShellView = null; |
+ } |
+ |
super.onDestroyInternal(); |
} |