diff options
author | 2011-01-14 17:36:55 -0800 | |
---|---|---|
committer | 2011-01-14 17:36:55 -0800 | |
commit | 4aed78b5056560f499e5953f659fa90a06ecc38a (patch) | |
tree | 7a8e6e73657ae10b2369253dc2d658e4454c9823 | |
parent | 1c9d06e0470c41e2720c65be076b6080bf8595c0 (diff) |
Disable soft keyboard when keyboard attached.
Also hide menu shortcuts everywhere until we can get around to
redesigning the menu UI to be more consistent.
Bug: 3306545
Bug: 3330748
Change-Id: I4d4e19525cdfc93d9aae0dcaa1e6266fb552c5bc
4 files changed, 61 insertions, 44 deletions
diff --git a/core/java/com/android/internal/view/menu/MenuBuilder.java b/core/java/com/android/internal/view/menu/MenuBuilder.java index d0faea6a4cbf..830c2c1f865a 100644 --- a/core/java/com/android/internal/view/menu/MenuBuilder.java +++ b/core/java/com/android/internal/view/menu/MenuBuilder.java @@ -353,8 +353,7 @@ public class MenuBuilder implements Menu { mNonActionItems = new ArrayList<MenuItemImpl>(); mIsActionItemsStale = true; - mShortcutsVisible = - (mResources.getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS); + setShortcutsVisibleInner(true); } public MenuBuilder setDefaultShowAsAction(int defaultShowAsAction) { @@ -782,14 +781,18 @@ public class MenuBuilder implements Menu { */ public void setShortcutsVisible(boolean shortcutsVisible) { if (mShortcutsVisible == shortcutsVisible) return; - - mShortcutsVisible = - (mResources.getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS) - && shortcutsVisible; - + + setShortcutsVisibleInner(shortcutsVisible); refreshShortcuts(mShortcutsVisible, isQwertyMode()); } + private void setShortcutsVisibleInner(boolean shortcutsVisible) { + mShortcutsVisible = shortcutsVisible + && mResources.getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS + && mResources.getBoolean( + com.android.internal.R.bool.config_showMenuShortcutsWhenKeyboardPresent); + } + /** * @return Whether shortcuts should be visible on menus. */ diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 590baf1f4d0c..8bb05fb2ec78 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -529,4 +529,8 @@ <!-- When a database query is executed, the results retuned are paginated in pages of size (in KB) indicated by this value --> <integer name="config_cursorWindowSize">2048</integer> + + <!-- Sets whether menu shortcuts should be displayed on panel menus when + a keyboard is present. --> + <bool name="config_showMenuShortcutsWhenKeyboardPresent">false</bool> </resources> diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java index 1fc2e6c5e4a0..d6b7366ea168 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java @@ -1624,24 +1624,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { // First handle chording of panel key: if a panel key is held // but not released, try to execute a shortcut in it. if ((mPanelChordingKey > 0) && (mPanelChordingKey != keyCode)) { - // Perform the shortcut (mPreparedPanel can be null since - // global shortcuts (such as search) don't rely on a - // prepared panel or menu). - boolean handled = performPanelShortcut(mPreparedPanel, keyCode, event, - Menu.FLAG_PERFORM_NO_CLOSE); - - if (!handled) { - /* - * If not handled, then pass it to the view hierarchy - * and anyone else that may be interested. - */ - handled = dispatchKeyShortcutEvent(event); - - if (handled && mPreparedPanel != null) { - mPreparedPanel.isHandled = true; - } - } - + boolean handled = dispatchKeyShortcutEvent(event); if (handled) { return true; } @@ -1676,6 +1659,19 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { @Override public boolean dispatchKeyShortcutEvent(KeyEvent ev) { + // Perform the shortcut (mPreparedPanel can be null since + // global shortcuts (such as search) don't rely on a + // prepared panel or menu). + boolean handled = performPanelShortcut(mPreparedPanel, ev.getKeyCode(), ev, + Menu.FLAG_PERFORM_NO_CLOSE); + if (handled) { + if (mPreparedPanel != null) { + mPreparedPanel.isHandled = true; + } + return true; + } + + // Shortcut not handled by the panel. Dispatch to the view hierarchy. final Callback cb = getCallback(); return cb != null && mFeatureId < 0 ? cb.dispatchKeyShortcutEvent(ev) : super .dispatchKeyShortcutEvent(ev); diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index a6037aa131e9..f2c2b93f30c4 100755 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -239,9 +239,14 @@ public class PhoneWindowManager implements WindowManagerPolicy { volatile boolean mPowerKeyHandled; RecentApplicationsDialog mRecentAppsDialog; Handler mHandler; - + + private static final int LID_ABSENT = -1; + private static final int LID_CLOSED = 0; + private static final int LID_OPEN = 1; + + int mLidOpen = LID_ABSENT; + boolean mSystemReady; - boolean mLidOpen; boolean mHdmiPlugged; int mUiMode = Configuration.UI_MODE_TYPE_NORMAL; int mDockMode = Intent.EXTRA_DOCK_STATE_UNDOCKED; @@ -896,21 +901,31 @@ public class PhoneWindowManager implements WindowManagerPolicy { void readLidState() { try { int sw = mWindowManager.getSwitchState(SW_LID); - if (sw >= 0) { - mLidOpen = sw == 0; + if (sw > 0) { + mLidOpen = LID_OPEN; + } else if (sw == 0) { + mLidOpen = LID_CLOSED; + } else { + mLidOpen = LID_ABSENT; } } catch (RemoteException e) { // Ignore } } - private int determineHiddenState(boolean lidOpen, - int mode, int hiddenValue, int visibleValue) { + private int determineHiddenState(int mode, int hiddenValue, int visibleValue) { + if (KEYBOARD_ALWAYS_HIDDEN) { + return hiddenValue; + } + if (mLidOpen == LID_ABSENT) { + return visibleValue; + } + switch (mode) { case 1: - return lidOpen ? visibleValue : hiddenValue; + return mLidOpen == LID_OPEN ? visibleValue : hiddenValue; case 2: - return lidOpen ? hiddenValue : visibleValue; + return mLidOpen == LID_OPEN ? hiddenValue : visibleValue; } return visibleValue; } @@ -918,12 +933,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { /** {@inheritDoc} */ public void adjustConfigurationLw(Configuration config) { readLidState(); - final boolean lidOpen = !KEYBOARD_ALWAYS_HIDDEN && mLidOpen; - mPowerManager.setKeyboardVisibility(lidOpen); - config.hardKeyboardHidden = determineHiddenState(lidOpen, + mPowerManager.setKeyboardVisibility(mLidOpen == LID_OPEN); + config.hardKeyboardHidden = determineHiddenState( mLidKeyboardAccessibility, Configuration.HARDKEYBOARDHIDDEN_YES, Configuration.HARDKEYBOARDHIDDEN_NO); - config.navigationHidden = determineHiddenState(lidOpen, + config.navigationHidden = determineHiddenState( mLidNavigationAccessibility, Configuration.NAVIGATIONHIDDEN_YES, Configuration.NAVIGATIONHIDDEN_NO); config.keyboardHidden = (config.hardKeyboardHidden @@ -1973,8 +1987,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { /** {@inheritDoc} */ public void notifyLidSwitchChanged(long whenNanos, boolean lidOpen) { // lid changed state - mLidOpen = lidOpen; - boolean awakeNow = mKeyguardMediator.doLidChangeTq(mLidOpen); + mLidOpen = lidOpen ? LID_OPEN : LID_CLOSED; + boolean awakeNow = mKeyguardMediator.doLidChangeTq(lidOpen); updateRotation(Surface.FLAGS_ORIENTATION_ANIMATION_DISABLE); if (awakeNow) { // If the lid is opening and we don't have to keep the @@ -1982,7 +1996,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // immediately. mKeyguardMediator.pokeWakelock(); } else if (keyguardIsShowingTq()) { - if (mLidOpen) { + if (lidOpen) { // If we are opening the lid and not hiding the // keyguard, then we need to have it turn on the // screen once it is shown. @@ -1991,7 +2005,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } else { // Light up the keyboard if we are sliding up. - if (mLidOpen) { + if (lidOpen) { mPowerManager.userActivity(SystemClock.uptimeMillis(), false, LocalPowerManager.BUTTON_EVENT); } else { @@ -2473,7 +2487,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { //or case.unspecified if (mHdmiPlugged) { return Surface.ROTATION_0; - } else if (mLidOpen) { + } else if (mLidOpen == LID_OPEN) { return mLidOpenRotation; } else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR && mCarDockRotation >= 0) { return mCarDockRotation; @@ -2639,11 +2653,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { } void updateRotation(int animFlags) { - mPowerManager.setKeyboardVisibility(mLidOpen); + mPowerManager.setKeyboardVisibility(mLidOpen == LID_OPEN); int rotation = Surface.ROTATION_0; if (mHdmiPlugged) { rotation = Surface.ROTATION_0; - } else if (mLidOpen) { + } else if (mLidOpen == LID_OPEN) { rotation = mLidOpenRotation; } else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR && mCarDockRotation >= 0) { rotation = mCarDockRotation; |