Merge "Disable soft keyboard when keyboard attached." into honeycomb

This commit is contained in:
Jeff Brown
2011-01-14 17:48:09 -08:00
committed by Android (Google) Code Review
4 changed files with 61 additions and 44 deletions

View File

@ -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.
*/

View File

@ -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>

View File

@ -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);

View File

@ -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;
@ -2641,11 +2655,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;