summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Brown <jeffbrown@google.com> 2011-01-14 17:36:55 -0800
committer Jeff Brown <jeffbrown@google.com> 2011-01-14 17:36:55 -0800
commit4aed78b5056560f499e5953f659fa90a06ecc38a (patch)
tree7a8e6e73657ae10b2369253dc2d658e4454c9823
parent1c9d06e0470c41e2720c65be076b6080bf8595c0 (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
-rw-r--r--core/java/com/android/internal/view/menu/MenuBuilder.java17
-rw-r--r--core/res/res/values/config.xml4
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java32
-rwxr-xr-xpolicy/src/com/android/internal/policy/impl/PhoneWindowManager.java52
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;