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 3f6b891bee4cb8e5d2ae5bcf95e1221b9c40cb41..d2f6fe913aec28943f3b2ebadde350be876367e1 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
@@ -138,6 +138,17 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
implements TabCreatorManager, AccessibilityStateChangeListener, PolicyChangeListener, |
ContextualSearchTabPromotionDelegate, SnackbarManageable, SceneChangeObserver { |
/** |
+ * Factory which creates the AppMenuHandler. |
+ */ |
+ public interface AppMenuHandlerFactory { |
+ /** |
+ * @return AppMenuHandler for the given activity and menu resource id. |
+ */ |
+ public AppMenuHandler get(Activity activity, |
+ AppMenuPropertiesDelegate delegate, int menuResourceId); |
+ } |
+ |
+ /** |
* No control container to inflate during initialization. |
*/ |
private static final int NO_CONTROL_CONTAINER = -1; |
@@ -199,6 +210,22 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
private final Locale mCurrentLocale = Locale.getDefault(); |
+ private static AppMenuHandlerFactory sAppMenuHandlerFactory = new AppMenuHandlerFactory() { |
+ @Override |
+ public AppMenuHandler get( |
+ Activity activity, AppMenuPropertiesDelegate delegate, int menuResourceId) { |
+ return new AppMenuHandler(activity, delegate, menuResourceId); |
+ } |
+ }; |
+ |
+ /** |
+ * @param The {@link AppMenuHandlerFactory} for creating {@link mAppMenuHandler} |
+ */ |
+ @VisibleForTesting |
+ public static void setAppMenuHandlerFactoryForTesting(AppMenuHandlerFactory factory) { |
+ sAppMenuHandlerFactory = factory; |
+ } |
+ |
@Override |
public void preInflationStartup() { |
super.preInflationStartup(); |
@@ -320,8 +347,8 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
assert controlContainer != null; |
ToolbarControlContainer toolbarContainer = (ToolbarControlContainer) controlContainer; |
mAppMenuPropertiesDelegate = createAppMenuPropertiesDelegate(); |
- mAppMenuHandler = new AppMenuHandler(this, |
- mAppMenuPropertiesDelegate, getAppMenuLayoutId()); |
+ mAppMenuHandler = sAppMenuHandlerFactory.get(this, mAppMenuPropertiesDelegate, |
+ getAppMenuLayoutId()); |
mToolbarManager = new ToolbarManager(this, toolbarContainer, mAppMenuHandler, |
mAppMenuPropertiesDelegate, getCompositorViewHolder().getInvalidator()); |
mAppMenuHandler.addObserver(new AppMenuObserver() { |