Index: chrome/android/testshell/java/src/org/chromium/chrome/testshell/TabManager.java |
diff --git a/chrome/android/testshell/java/src/org/chromium/chrome/testshell/TabManager.java b/chrome/android/testshell/java/src/org/chromium/chrome/testshell/TabManager.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..793fbe78e9e6e66ff951a4fcc2105966f78a2229 |
--- /dev/null |
+++ b/chrome/android/testshell/java/src/org/chromium/chrome/testshell/TabManager.java |
@@ -0,0 +1,137 @@ |
+// Copyright (c) 2012 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.testshell; |
+ |
+import android.util.AttributeSet; |
+import android.view.Surface; |
+import android.view.SurfaceHolder; |
+import android.view.SurfaceView; |
+import android.view.ViewGroup; |
+import android.content.Context; |
+import android.widget.FrameLayout; |
+import android.widget.LinearLayout; |
+ |
+import org.chromium.base.JNINamespace; |
+ |
+import org.chromium.chrome.browser.ChromeWebContentsDelegateAndroid; |
+import org.chromium.chrome.browser.TabBase; |
+import org.chromium.ui.gfx.NativeWindow; |
+ |
+/** |
+ * The TabManager hooks together all of the related {@link View}s that are used to represent |
+ * a {@link TabBase}. It properly builds a {@link TabBase} and makes sure that the {@link Toolbar} |
+ * and {@link SurfaceView} show the proper content. |
+ */ |
+@JNINamespace("chrome") |
+public class TabManager extends LinearLayout { |
+ private static final String DEFAULT_URL = "http://www.google.com"; |
+ |
+ private NativeWindow mWindow; |
+ private ViewGroup mContentViewHolder; |
+ private SurfaceView mRenderTarget; |
+ private Toolbar mToolbar; |
+ |
+ private TabBase mCurrentTab; |
+ |
+ /** |
+ * @param context The Context the view is running in. |
+ * @param attrs The attributes of the XML tag that is inflating the view. |
+ */ |
+ public TabManager(Context context, AttributeSet attrs) { |
+ super(context, attrs); |
+ nativeInit(this); |
+ } |
+ |
+ @Override |
+ protected void onFinishInflate() { |
+ super.onFinishInflate(); |
+ |
+ mContentViewHolder = (ViewGroup) findViewById(R.id.content_container); |
+ mToolbar = (Toolbar) findViewById(R.id.toolbar); |
+ mRenderTarget = (SurfaceView) findViewById(R.id.render_target); |
+ mRenderTarget.getHolder().addCallback(new SurfaceHolder.Callback() { |
+ @Override |
+ public void surfaceDestroyed(SurfaceHolder holder) { |
+ nativeSurfaceDestroyed(); |
+ } |
+ |
+ @Override |
+ public void surfaceCreated(SurfaceHolder holder) { |
+ nativeSurfaceCreated(holder.getSurface()); |
+ |
+ if (mCurrentTab == null) createTab(DEFAULT_URL); |
+ } |
+ |
+ @Override |
+ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { |
+ nativeSurfaceSetSize(width, height); |
+ } |
+ }); |
+ } |
+ |
+ /** |
+ * @param window The window used to generate all ContentViews. |
+ */ |
+ public void setWindow(NativeWindow window) { |
+ mWindow = window; |
+ } |
+ |
+ /** |
+ * @return The currently visible {@link TabBase}. |
+ */ |
+ public TabBase getCurrentTab() { |
+ return mCurrentTab; |
+ } |
+ |
+ /** |
+ * Creates a {@link TabBase} with a URL specified by {@code url}. |
+ * @param url The URL the new {@link TabBase} should start with. |
+ */ |
+ public void createTab(String url) { |
+ if (!isRenderTargetInitialized()) return; |
+ |
+ TabBase tab = new TabBase(getContext(), url, mWindow, |
+ new TabManagerWebContentsDelegateAndroid()); |
+ setCurrentTab(tab); |
+ } |
+ |
+ private boolean isRenderTargetInitialized() { |
+ return mRenderTarget != null && mRenderTarget.getHolder().getSurface() != null; |
+ } |
+ |
+ private void setCurrentTab(TabBase tab) { |
+ if (mCurrentTab != null) { |
+ mContentViewHolder.removeView(mCurrentTab.getContentView()); |
+ nativeHideTab(mCurrentTab.getNativeTab()); |
+ mCurrentTab.destroy(); |
+ } |
+ |
+ mCurrentTab = tab; |
+ |
+ mToolbar.showTab(mCurrentTab); |
+ mContentViewHolder.addView(mCurrentTab.getContentView()); |
+ mCurrentTab.getContentView().requestFocus(); |
+ nativeShowTab(mCurrentTab.getNativeTab()); |
+ } |
+ |
+ private class TabManagerWebContentsDelegateAndroid extends ChromeWebContentsDelegateAndroid { |
Ted C
2012/09/20 17:23:59
hmm...any reason why this isn't part of showTab on
David Trainor- moved to gerrit
2012/09/21 22:59:10
Has to be passed in on the constructor, or at leas
|
+ @Override |
+ public void onLoadProgressChanged(int progress) { |
+ mToolbar.onLoadProgressChanged(progress/100.f); |
Ted C
2012/09/20 17:23:59
spaces around the /
David Trainor- moved to gerrit
2012/09/21 22:59:10
Done.
|
+ } |
+ |
+ @Override |
+ public void onUpdateUrl(String url) { |
+ mToolbar.onUpdateUrl(url); |
+ } |
+ } |
+ |
+ private static native void nativeShowTab(int jtab); |
+ private static native void nativeHideTab(int jtab); |
+ private static native void nativeInit(Object renderTargetInstance); |
+ private static native void nativeSurfaceCreated(Surface surface); |
+ private static native void nativeSurfaceDestroyed(); |
+ private static native void nativeSurfaceSetSize(int width, int height); |
+} |