OSDN Git Service

Add special system view cookie to OverflowButton. [DO NOT MERGE]
authorDeepanshu Gupta <deepanshu@google.com>
Fri, 25 Apr 2014 18:07:19 +0000 (11:07 -0700)
committerDeepanshu Gupta <deepanshu@google.com>
Tue, 29 Apr 2014 23:49:21 +0000 (16:49 -0700)
Add a special view cookie to enable the IDE to identify the overflow
menu button in the Action Bar.

Change-Id: Ida3ed776afb8c9fa8af23b73d4cf6d47eef0ab87
(cherry picked from commit 674af92fd3a618695448ff88568b03390e90bc66)

tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ActionBarLayout.java

index 69f6a65..6f18bd5 100644 (file)
@@ -23,8 +23,10 @@ import com.android.ide.common.rendering.api.ActionBarCallback.HomeButtonStyle;
 import com.android.ide.common.rendering.api.RenderResources;
 import com.android.ide.common.rendering.api.ResourceValue;
 import com.android.ide.common.rendering.api.SessionParams;
+import com.android.ide.common.rendering.api.SystemViewCookie;
 import com.android.internal.R;
 import com.android.internal.app.ActionBarImpl;
+import com.android.internal.util.Predicate;
 import com.android.internal.view.menu.MenuBuilder;
 import com.android.internal.view.menu.MenuBuilderAccessor;
 import com.android.internal.view.menu.MenuItemImpl;
@@ -57,6 +59,8 @@ import android.widget.RelativeLayout;
 
 import java.util.ArrayList;
 
+import static com.android.ide.common.rendering.api.SystemViewCookie.ACTION_BAR_OVERFLOW;
+
 /**
  * A layout representing the action bar.
  */
@@ -165,10 +169,33 @@ public class ActionBarLayout extends LinearLayout {
             }
 
             // Set action bar to be split, if needed.
-            mActionBarView.setSplitView((ActionBarContainer) findViewById(R.id.split_action_bar));
+            ActionBarContainer splitView = (ActionBarContainer) findViewById(R.id.split_action_bar);
+            mActionBarView.setSplitView(splitView);
             mActionBarView.setSplitActionBar(mSplit);
 
             inflateMenus();
+
+            // Find if the Overflow Menu Button (the three dots) exists. If yes,
+            // add the view cookie.
+            Predicate<View> overflowMenuButtonTest = new Predicate<View>() {
+                @Override
+                public boolean apply(View view) {
+                    return view.getClass().getName()
+                            .equals("android.widget.ActionMenuPresenter$OverflowMenuButton");
+                }
+            };
+            View overflowMenu = null;
+            if (mSplit) {
+                if (splitView != null) {
+                    overflowMenu = splitView.findViewByPredicate(overflowMenuButtonTest);
+                }
+            }
+            else {
+                overflowMenu = mActionBarView.findViewByPredicate(overflowMenuButtonTest);
+            }
+            if (overflowMenu != null) {
+                mBridgeContext.addViewKey(overflowMenu, new SystemViewCookie(ACTION_BAR_OVERFLOW));
+            }
         }
     }