Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b80d332e authored by Adam Powell's avatar Adam Powell
Browse files

Fix bug 5037642 - Refine back button behavior for action bar modes.

Action modes for the action bar used to aggressively hijack the back
button before the view hierarchy got a chance to respond to it. Loosen
this. New ordering is: view hierarchy => window feature-level modes
(action bar modes e.g. CAB/search) => Activity/window callback
behavior.

Change-Id: Iac1b22997713be968a94f77f9fa6cebaf6f923f0
parent 8eb89cc7
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -370,6 +370,19 @@ public class ActionBarView extends AbsActionBarView {
        mMenuView = menuView;
    }

    public boolean hasExpandedActionView() {
        return mExpandedMenuPresenter != null &&
                mExpandedMenuPresenter.mCurrentExpandedItem != null;
    }

    public void collapseActionView() {
        final MenuItemImpl item = mExpandedMenuPresenter == null ? null :
                mExpandedMenuPresenter.mCurrentExpandedItem;
        if (item != null) {
            item.collapseActionView();
        }
    }

    public void setCustomNavigationView(View view) {
        final boolean showCustom = (mDisplayOptions & ActionBar.DISPLAY_SHOW_CUSTOM) != 0;
        if (mCustomNavView != null && showCustom) {
+27 −9
Original line number Diff line number Diff line
@@ -1668,14 +1668,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
                }
            }

            // Back cancels action modes first.
            if (mActionMode != null && keyCode == KeyEvent.KEYCODE_BACK) {
                if (action == KeyEvent.ACTION_UP) {
                    mActionMode.finish();
                }
                return true;
            }

            if (!isDestroyed()) {
                final Callback cb = getCallback();
                final boolean handled = cb != null && mFeatureId < 0 ? cb.dispatchKeyEvent(event)
@@ -1684,6 +1676,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
                    return true;
                }
            }

            return isDown ? PhoneWindow.this.onKeyDown(mFeatureId, event.getKeyCode(), event)
                    : PhoneWindow.this.onKeyUp(mFeatureId, event.getKeyCode(), event);
        }
@@ -1730,7 +1723,32 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
        }

        public boolean superDispatchKeyEvent(KeyEvent event) {
            return super.dispatchKeyEvent(event);
            if (super.dispatchKeyEvent(event)) {
                return true;
            }

            // Not handled by the view hierarchy, does the action bar want it
            // to cancel out of something special?
            if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
                final int action = event.getAction();
                // Back cancels action modes first.
                if (mActionMode != null) {
                    if (action == KeyEvent.ACTION_UP) {
                        mActionMode.finish();
                    }
                    return true;
                }

                // Next collapse any expanded action views.
                if (mActionBar != null && mActionBar.hasExpandedActionView()) {
                    if (action == KeyEvent.ACTION_UP) {
                        mActionBar.collapseActionView();
                    }
                    return true;
                }
            }

            return false;
        }

        public boolean superDispatchKeyShortcutEvent(KeyEvent event) {