OSDN Git Service

Fix bug 5333962 - Problems with no action bar/overlay action mode
authorAdam Powell <adamp@google.com>
Sun, 18 Sep 2011 21:59:28 +0000 (14:59 -0700)
committerAdam Powell <adamp@google.com>
Sun, 18 Sep 2011 22:34:00 +0000 (15:34 -0700)
Change the standalone action mode window for overlay mode to be of
TYPE_APPLICATION. (This also fixes a bug where overflow menus would
not work properly on these types of action mode bars.)

Set exitFadeDuration on btn_cab_done_holo_* drawables.

Remove no-window-focus override selector states for selectable item
backgrounds to allow proper touch feedback on windows that do not have
focus but that the user can interact with.

Change-Id: Ib504866238708150d21e6183ff7b695869c05d3e

core/java/android/widget/PopupWindow.java
core/res/res/drawable/btn_cab_done_holo_dark.xml
core/res/res/drawable/btn_cab_done_holo_light.xml
core/res/res/drawable/item_background_holo_dark.xml
core/res/res/drawable/item_background_holo_light.xml
policy/src/com/android/internal/policy/impl/PhoneWindow.java

index 4d45c2f..aac20c4 100644 (file)
@@ -796,6 +796,21 @@ public class PopupWindow {
      * @param y the popup's y location offset
      */
     public void showAtLocation(View parent, int gravity, int x, int y) {
+        showAtLocation(parent.getWindowToken(), gravity, x, y);
+    }
+
+    /**
+     * Display the content view in a popup window at the specified location.
+     *
+     * @param token Window token to use for creating the new window
+     * @param gravity the gravity which controls the placement of the popup window
+     * @param x the popup's x location offset
+     * @param y the popup's y location offset
+     *
+     * @hide Internal use only. Applications should use
+     *       {@link #showAtLocation(View, int, int, int)} instead.
+     */
+    public void showAtLocation(IBinder token, int gravity, int x, int y) {
         if (isShowing() || mContentView == null) {
             return;
         }
@@ -805,7 +820,7 @@ public class PopupWindow {
         mIsShowing = true;
         mIsDropdown = false;
 
-        WindowManager.LayoutParams p = createPopupLayout(parent.getWindowToken());
+        WindowManager.LayoutParams p = createPopupLayout(token);
         p.windowAnimations = computeAnimationResource();
        
         preparePopup(p);
index 2cdb605..65d3496 100644 (file)
@@ -14,9 +14,8 @@
      limitations under the License.
 -->
 
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_window_focused="false" android:state_enabled="true"
-        android:drawable="@drawable/btn_cab_done_default_holo_dark" />
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          android:exitFadeDuration="@android:integer/config_mediumAnimTime">
     <item android:state_pressed="true"
         android:drawable="@drawable/btn_cab_done_pressed_holo_dark" />
     <item android:state_focused="true" android:state_enabled="true"
index 81add4c..f6a63f4 100644 (file)
@@ -14,9 +14,8 @@
      limitations under the License.
 -->
 
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_window_focused="false" android:state_enabled="true"
-        android:drawable="@drawable/btn_cab_done_default_holo_light" />
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+          android:exitFadeDuration="@android:integer/config_mediumAnimTime">
     <item android:state_pressed="true"
         android:drawable="@drawable/btn_cab_done_pressed_holo_light" />
     <item android:state_focused="true" android:state_enabled="true"
index 2d4f20a..f188df7 100644 (file)
@@ -17,8 +17,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android"
           android:exitFadeDuration="@android:integer/config_mediumAnimTime">
 
-    <item android:state_window_focused="false" android:drawable="@color/transparent" />
-
     <!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
     <item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_dark" />
     <item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@drawable/list_selector_disabled_holo_dark" />
index c616d86..ee3f4d8 100644 (file)
@@ -17,8 +17,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android"
           android:exitFadeDuration="@android:integer/config_mediumAnimTime">
 
-    <item android:state_window_focused="false" android:drawable="@color/transparent" />
-
     <!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
     <item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_light" />
     <item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@drawable/list_selector_disabled_holo_light" />
index 903b405..1b7271d 100644 (file)
@@ -2135,7 +2135,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
                                 com.android.internal.R.attr.actionModePopupWindowStyle);
                         mActionModePopup.setLayoutInScreenEnabled(true);
                         mActionModePopup.setLayoutInsetDecor(true);
-                        mActionModePopup.setClippingEnabled(false);
+                        mActionModePopup.setWindowLayoutType(
+                                WindowManager.LayoutParams.TYPE_APPLICATION);
                         mActionModePopup.setContentView(mActionModeView);
                         mActionModePopup.setWidth(MATCH_PARENT);
 
@@ -2144,10 +2145,12 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
                                 com.android.internal.R.attr.actionBarSize, heightValue, true);
                         final int height = TypedValue.complexToDimensionPixelSize(heightValue.data,
                                 mContext.getResources().getDisplayMetrics());
-                        mActionModePopup.setHeight(height);
+                        mActionModeView.setContentHeight(height);
+                        mActionModePopup.setHeight(WRAP_CONTENT);
                         mShowActionModePopup = new Runnable() {
                             public void run() {
-                                mActionModePopup.showAtLocation(PhoneWindow.DecorView.this,
+                                mActionModePopup.showAtLocation(
+                                        mActionModeView.getApplicationWindowToken(),
                                         Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
                             }
                         };