Merge "Show alternate menu panel on devices with menu key" into klp-dev

This commit is contained in:
Adam Powell
2013-09-12 18:12:05 +00:00
committed by Android (Google) Code Review
3 changed files with 22 additions and 5 deletions

View File

@@ -375,6 +375,10 @@ public class ActionMenuPresenter extends BaseMenuPresenter
return mOverflowPopup != null && mOverflowPopup.isShowing(); return mOverflowPopup != null && mOverflowPopup.isShowing();
} }
public boolean isOverflowMenuShowPending() {
return mPostedOpenRunnable != null || isOverflowMenuShowing();
}
/** /**
* @return true if space has been reserved in the action menu for an overflow item. * @return true if space has been reserved in the action menu for an overflow item.
*/ */

View File

@@ -201,6 +201,13 @@ public abstract class AbsActionBarView extends ViewGroup {
return false; return false;
} }
public boolean isOverflowMenuShowPending() {
if (mActionMenuPresenter != null) {
return mActionMenuPresenter.isOverflowMenuShowPending();
}
return false;
}
public boolean isOverflowReserved() { public boolean isOverflowReserved() {
return mActionMenuPresenter != null && mActionMenuPresenter.isOverflowReserved(); return mActionMenuPresenter != null && mActionMenuPresenter.isOverflowReserved();
} }

View File

@@ -22,6 +22,7 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static android.view.WindowManager.LayoutParams.*; import static android.view.WindowManager.LayoutParams.*;
import android.view.ViewConfiguration;
import com.android.internal.view.RootViewSurfaceTaker; import com.android.internal.view.RootViewSurfaceTaker;
import com.android.internal.view.StandaloneActionMode; import com.android.internal.view.StandaloneActionMode;
import com.android.internal.view.menu.ContextMenuBuilder; import com.android.internal.view.menu.ContextMenuBuilder;
@@ -540,7 +541,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
@Override @Override
public final void openPanel(int featureId, KeyEvent event) { public final void openPanel(int featureId, KeyEvent event) {
if (featureId == FEATURE_OPTIONS_PANEL && mActionBar != null && if (featureId == FEATURE_OPTIONS_PANEL && mActionBar != null &&
mActionBar.isOverflowReserved()) { mActionBar.isOverflowReserved() &&
!ViewConfiguration.get(getContext()).hasPermanentMenuKey()) {
if (mActionBar.getVisibility() == View.VISIBLE) { if (mActionBar.getVisibility() == View.VISIBLE) {
mActionBar.showOverflowMenu(); mActionBar.showOverflowMenu();
} }
@@ -549,7 +551,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
} }
} }
private void openPanel(PanelFeatureState st, KeyEvent event) { private void openPanel(final PanelFeatureState st, KeyEvent event) {
// System.out.println("Open panel: isOpen=" + st.isOpen); // System.out.println("Open panel: isOpen=" + st.isOpen);
// Already open, return // Already open, return
@@ -673,7 +675,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
@Override @Override
public final void closePanel(int featureId) { public final void closePanel(int featureId) {
if (featureId == FEATURE_OPTIONS_PANEL && mActionBar != null && if (featureId == FEATURE_OPTIONS_PANEL && mActionBar != null &&
mActionBar.isOverflowReserved()) { mActionBar.isOverflowReserved() &&
!ViewConfiguration.get(getContext()).hasPermanentMenuKey()) {
mActionBar.hideOverflowMenu(); mActionBar.hideOverflowMenu();
} else if (featureId == FEATURE_CONTEXT_MENU) { } else if (featureId == FEATURE_CONTEXT_MENU) {
closeContextMenu(); closeContextMenu();
@@ -836,7 +839,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
boolean playSoundEffect = false; boolean playSoundEffect = false;
final PanelFeatureState st = getPanelState(featureId, true); final PanelFeatureState st = getPanelState(featureId, true);
if (featureId == FEATURE_OPTIONS_PANEL && mActionBar != null && if (featureId == FEATURE_OPTIONS_PANEL && mActionBar != null &&
mActionBar.isOverflowReserved()) { mActionBar.isOverflowReserved() &&
!ViewConfiguration.get(getContext()).hasPermanentMenuKey()) {
if (mActionBar.getVisibility() == View.VISIBLE) { if (mActionBar.getVisibility() == View.VISIBLE) {
if (!mActionBar.isOverflowMenuShowing()) { if (!mActionBar.isOverflowMenuShowing()) {
if (!isDestroyed() && preparePanel(st, event)) { if (!isDestroyed() && preparePanel(st, event)) {
@@ -1014,7 +1018,9 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
} }
private void reopenMenu(boolean toggleMenuMode) { private void reopenMenu(boolean toggleMenuMode) {
if (mActionBar != null && mActionBar.isOverflowReserved()) { if (mActionBar != null && mActionBar.isOverflowReserved() &&
(!ViewConfiguration.get(getContext()).hasPermanentMenuKey() ||
mActionBar.isOverflowMenuShowPending())) {
final Callback cb = getCallback(); final Callback cb = getCallback();
if (!mActionBar.isOverflowMenuShowing() || !toggleMenuMode) { if (!mActionBar.isOverflowMenuShowing() || !toggleMenuMode) {
if (cb != null && !isDestroyed() && mActionBar.getVisibility() == View.VISIBLE) { if (cb != null && !isDestroyed() && mActionBar.getVisibility() == View.VISIBLE) {