Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(756)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java

Issue 1211673002: Move ToolbarManager and AppMenuHandler creation to ChromeActivity (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
index c20a709a77f3cfc82ea876389fa9efc6bddcd43a..ca3d02333c1b7f7d51b66d8e1e0707f030425700 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -10,6 +10,7 @@ import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Rect;
@@ -47,7 +48,11 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.BookmarksBridge.BookmarkModelObserver;
import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate;
import org.chromium.chrome.browser.IntentHandler.TabOpenType;
+import org.chromium.chrome.browser.appmenu.AppMenu;
import org.chromium.chrome.browser.appmenu.AppMenuHandler;
+import org.chromium.chrome.browser.appmenu.AppMenuObserver;
+import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegate;
+import org.chromium.chrome.browser.appmenu.ChromeAppMenuPropertiesDelegate;
import org.chromium.chrome.browser.bookmark.ManageBookmarkActivity;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.compositor.layouts.Layout;
@@ -101,6 +106,9 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver;
import org.chromium.chrome.browser.tabmodel.TabModelUtils;
import org.chromium.chrome.browser.tabmodel.TabWindowManager;
+import org.chromium.chrome.browser.toolbar.Toolbar;
+import org.chromium.chrome.browser.toolbar.ToolbarControlContainer;
+import org.chromium.chrome.browser.toolbar.ToolbarManager;
import org.chromium.chrome.browser.util.FeatureUtilities;
import org.chromium.chrome.browser.webapps.AddToHomescreenDialog;
import org.chromium.chrome.browser.widget.ControlContainer;
@@ -177,6 +185,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
private ReaderModeActivityDelegate mReaderModeActivityDelegate;
private SnackbarManager mSnackbarManager;
private LoFiBarPopupController mLoFiBarPopupController;
+ private ChromeAppMenuPropertiesDelegate mAppMenuPropertiesDelegate;
+ private AppMenuHandler mAppMenuHandler;
+ private ToolbarManager mToolbarManager;
// Time in ms that it took took us to inflate the initial layout
private long mInflateInitialLayoutDurationMs;
@@ -258,6 +269,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
};
controlContainer.getViewTreeObserver().addOnPreDrawListener(mFirstDrawListener);
}
+ initializeToolbar();
}
/**
@@ -297,6 +309,51 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
}
/**
+ * Constructs {@link ToolbarManager} and the handler necessary for controlling the menu on the
+ * {@link Toolbar}. Extending classes can override this call to avoid creating the toolbar.
+ */
+ protected void initializeToolbar() {
+ final View controlContainer = findViewById(R.id.control_container);
+ assert controlContainer != null;
+ ToolbarControlContainer toolbarContainer = (ToolbarControlContainer) controlContainer;
+ mAppMenuPropertiesDelegate = createAppMenuPropertiesDelegate();
+ mAppMenuHandler = new AppMenuHandler(this,
+ mAppMenuPropertiesDelegate, getAppMenuLayoutId());
+ mToolbarManager = new ToolbarManager(this, toolbarContainer, mAppMenuHandler,
+ mAppMenuPropertiesDelegate, getCompositorViewHolder().getInvalidator());
+ mAppMenuHandler.addObserver(new AppMenuObserver() {
+ @Override
+ public void onMenuVisibilityChanged(boolean isVisible) {
+ if (!isVisible) {
+ mAppMenuPropertiesDelegate.onMenuDismissed();
+ }
+ }
+ });
+ }
+
+ /**
+ * @return {@link ToolbarManager} that belongs to this activity.
+ */
+ protected ToolbarManager getToolbarManager() {
+ return mToolbarManager;
+ }
+
+ /**
+ * @return The resource id for the menu to use in {@link AppMenu}. Default is R.menu.main_menu.
+ */
+ protected int getAppMenuLayoutId() {
+ return R.menu.main_menu;
+ }
+
+ /**
+ * @return {@link ChromeAppMenuPropertiesDelegate} instance that the {@link AppMenuHandler}
+ * should be using in this activity.
+ */
+ protected ChromeAppMenuPropertiesDelegate createAppMenuPropertiesDelegate() {
+ return new ChromeAppMenuPropertiesDelegate(this);
+ }
+
+ /**
* @return The resource id for the layout to use for {@link ControlContainer}. 0 by default.
*/
protected int getControlContainerLayoutId() {
@@ -467,6 +524,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
@Override
public void onStopWithNative() {
+ if (mAppMenuHandler != null) mAppMenuHandler.hideAppMenu();
if (mGSAServiceClient != null) {
mGSAServiceClient.disconnect();
mGSAServiceClient = null;
@@ -487,6 +545,12 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
mIntentHandler.onNewIntent(this, intent);
}
+ @Override
+ public boolean hasDoneFirstDraw() {
+ return mToolbarManager != null
+ ? mToolbarManager.hasDoneFirstDraw() : super.hasDoneFirstDraw();
+ }
+
/**
* @return Whether the given activity contains a {@link CustomTab}.
*/
@@ -515,8 +579,12 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
getChromeApplication().getUpdateInfoBarHelper().checkForUpdateOnBackgroundThread(this);
removeSnapshotDatabase();
- RecordHistogram.recordTimesHistogram("MobileStartup.ToolbarInflationTime",
- mInflateInitialLayoutDurationMs, TimeUnit.MILLISECONDS);
+ if (mToolbarManager != null) {
+ String simpleName = getClass().getSimpleName();
+ RecordHistogram.recordTimesHistogram("MobileStartup.ToolbarInflationTime." + simpleName,
+ mInflateInitialLayoutDurationMs, TimeUnit.MILLISECONDS);
+ mToolbarManager.onDeferredStartup(getOnCreateTimestampMs(), simpleName);
+ }
}
@Override
@@ -617,6 +685,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
* by the {@link WindowAndroid}.
*/
protected void onDestroyInternal() {
+ if (mToolbarManager != null) mToolbarManager.destroy();
}
/**
@@ -662,6 +731,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
*/
protected void onAccessibilityModeChanged(boolean enabled) {
InfoBarContainer.setIsAllowedToAutoHide(!enabled);
+ if (mToolbarManager != null) mToolbarManager.onAccessibilityStatusChanged(enabled);
}
@Override
@@ -1052,9 +1122,14 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
@Override
public void onOrientationChange(int orientation) {
- if (mContextualSearchManager != null) {
- mContextualSearchManager.onOrientationChange();
- }
+ if (mContextualSearchManager != null) mContextualSearchManager.onOrientationChange();
+ if (mToolbarManager != null) mToolbarManager.onOrientationChange();
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ if (mAppMenuHandler != null) mAppMenuHandler.hideAppMenu();
+ super.onConfigurationChanged(newConfig);
}
@Override
@@ -1096,9 +1171,20 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
return true;
}
+ /**
+ * @return The {@link AppMenuHandler} associated with this activity.
+ */
@VisibleForTesting
public AppMenuHandler getAppMenuHandler() {
- return null;
+ return mAppMenuHandler;
+ }
+
+ /**
+ * @return The {@link AppMenuPropertiesDelegate} associated with this activity.
+ */
+ @VisibleForTesting
+ public ChromeAppMenuPropertiesDelegate getAppMenuPropertiesDelegate() {
+ return mAppMenuPropertiesDelegate;
}
/**
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698