auto import from //depot/cupcake/@136745

This commit is contained in:
The Android Open Source Project
2009-03-05 20:00:44 -08:00
parent 919607c9e5
commit bc8d29f857
2 changed files with 106 additions and 79 deletions

View File

@@ -19,6 +19,7 @@ package com.android.internal.policy.impl;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.telephony.TelephonyManager;
import android.view.KeyEvent;
import android.view.View;
import android.widget.FrameLayout;
@@ -36,6 +37,7 @@ public abstract class KeyguardViewBase extends FrameLayout {
private KeyguardViewCallback mCallback;
private AudioManager mAudioManager;
private TelephonyManager mTelephonyManager = null;
public KeyguardViewBase(Context context) {
super(context);
@@ -131,8 +133,18 @@ public abstract class KeyguardViewBase extends FrameLayout {
final int keyCode = event.getKeyCode();
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_PLAYPAUSE:
/* Suppress PLAYPAUSE toggle when phone is ringing or
* in-call to avoid music playback */
if (mTelephonyManager == null) {
mTelephonyManager = (TelephonyManager) getContext().getSystemService(
Context.TELEPHONY_SERVICE);
}
if (mTelephonyManager != null &&
mTelephonyManager.getCallState() != TelephonyManager.CALL_STATE_IDLE) {
return true; // suppress key event
}
case KeyEvent.KEYCODE_HEADSETHOOK:
case KeyEvent.KEYCODE_PLAYPAUSE:
case KeyEvent.KEYCODE_STOP:
case KeyEvent.KEYCODE_NEXTSONG:
case KeyEvent.KEYCODE_PREVIOUSSONG:

View File

@@ -40,6 +40,7 @@ import android.os.Message;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
import android.telephony.TelephonyManager;
import android.util.AndroidRuntimeException;
import android.util.Config;
import android.util.EventLog;
@@ -142,14 +143,16 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
private ContextMenuBuilder mContextMenu;
private MenuDialogHelper mContextMenuHelper;
private int mVolumeControlStreamType = AudioManager.USE_DEFAULT_STREAM_TYPE;
private long mVolumeKeyUpTime;
private KeyguardManager mKeyguardManager = null;
private TelephonyManager mTelephonyManager = null;
private boolean mSearchKeyDownReceived;
private boolean mKeycodeCallTimeoutActive = false;
private boolean mKeycodeCameraTimeoutActive = false;
@@ -160,7 +163,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
static final int MSG_CALL_LONG_PRESS_COMPLETE = 4;
static final int MSG_CAMERA_LONG_PRESS = 5;
static final int MSG_CAMERA_LONG_PRESS_COMPLETE = 6;
private final Handler mKeycodeMenuTimeoutHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
@@ -189,8 +192,9 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
case MSG_CAMERA_LONG_PRESS: {
if (!mKeycodeCameraTimeoutActive) return;
// See above.
mKeycodeMenuTimeoutHandler.sendEmptyMessage(
MSG_CAMERA_LONG_PRESS_COMPLETE);
Message newMessage = Message.obtain(msg);
newMessage.what = MSG_CAMERA_LONG_PRESS_COMPLETE;
mKeycodeMenuTimeoutHandler.sendMessage(newMessage);
break;
}
case MSG_MENU_LONG_PRESS_COMPLETE: {
@@ -230,7 +234,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
}
};
public PhoneWindow(Context context) {
super(context);
mLayoutInflater = LayoutInflater.from(context);
@@ -371,7 +375,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
if (cb != null) {
st.createdPanelView = cb.onCreatePanelView(st.featureId);
}
if (st.createdPanelView == null) {
// Init the panel state's menu--return false if init failed
if (st.menu == null) {
@@ -382,16 +386,16 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
if ((cb == null) || !cb.onCreatePanelMenu(st.featureId, st.menu)) {
// Ditch the menu created above
st.menu = null;
return false;
}
}
// Callback and return if the callback does not want to show the menu
if (!cb.onPreparePanel(st.featureId, st.createdPanelView, st.menu)) {
return false;
}
// Set the proper keymap
KeyCharacterMap kmap = KeyCharacterMap.load(event != null ? event.getDeviceId() : 0);
st.qwertyMode = kmap.getKeyboardType() != KeyCharacterMap.NUMERIC;
@@ -411,7 +415,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
PanelFeatureState st = getPanelState(FEATURE_OPTIONS_PANEL, false);
if ((st != null) && (st.menu != null)) {
final MenuBuilder menuBuilder = (MenuBuilder) st.menu;
if (st.isOpen) {
// Freeze state
final Bundle state = new Bundle();
@@ -420,7 +424,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
// Remove the menu views since they need to be recreated
// according to the new configuration
clearMenuViews(st);
// Re-open the same menu
reopenMenu(false);
@@ -433,23 +437,23 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
clearMenuViews(st);
}
}
}
private static void clearMenuViews(PanelFeatureState st) {
// This can be called on config changes, so we should make sure
// the views will be reconstructed based on the new orientation, etc.
// Allow the callback to create a new panel view
st.createdPanelView = null;
// Causes the decor view to be recreated
// Causes the decor view to be recreated
st.refreshDecorView = true;
((MenuBuilder) st.menu).clearMenuViews();
}
@Override
public final void openPanel(int featureId, KeyEvent event) {
openPanel(getPanelState(featureId, true), event);
@@ -469,7 +473,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
closePanel(st, true);
return;
}
final WindowManager wm = getWindowManager();
if (wm == null) {
return;
@@ -500,7 +504,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
lp = new ViewGroup.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
}
int backgroundResId;
int backgroundResId;
if (lp.width == ViewGroup.LayoutParams.FILL_PARENT) {
// If the contents is fill parent for the width, set the
// corresponding background
@@ -511,10 +515,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
st.decorView.setWindowBackground(getContext().getResources().getDrawable(
backgroundResId));
st.decorView.addView(st.shownPanelView, lp);
/*
* Give focus to the view, if it or one of its children does not
* already have it.
@@ -579,7 +583,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
// This view is no longer shown, so null it out
st.shownPanelView = null;
if (st.isInExpandedMode) {
// Next time the menu opens, it should not be in expanded mode, so
// force a refresh of the decor
@@ -638,29 +642,29 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
if (mPanelChordingKey != 0) {
mPanelChordingKey = 0;
mKeycodeMenuTimeoutHandler.removeMessages(MSG_MENU_LONG_PRESS);
boolean playSoundEffect = false;
PanelFeatureState st = getPanelState(featureId, true);
if (st.isOpen || st.isHandled) {
// Play the sound effect if the user closed an open menu (and not if
// they just released a menu shortcut)
playSoundEffect = st.isOpen;
// Close menu
closePanel(st, true);
} else if (st.isPrepared) {
// Write 'menu opened' to event log
EventLog.writeEvent(50001, 0);
// Show menu
openPanel(st, event);
playSoundEffect = true;
}
if (playSoundEffect) {
AudioManager audioManager = (AudioManager) getContext().getSystemService(
Context.AUDIO_SERVICE);
@@ -709,7 +713,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
*/
private synchronized void dismissContextMenu() {
mContextMenu = null;
if (mContextMenuHelper != null) {
mContextMenuHelper.dismiss();
mContextMenuHelper = null;
@@ -882,12 +886,12 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
* @return Whether the initialization was successful.
*/
protected boolean initializePanelContent(PanelFeatureState st) {
if (st.createdPanelView != null) {
st.shownPanelView = st.createdPanelView;
return true;
}
final MenuBuilder menu = (MenuBuilder)st.menu;
if (menu == null) {
return false;
@@ -1195,9 +1199,20 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
return true;
}
case KeyEvent.KEYCODE_PLAYPAUSE:
/* Suppress PLAYPAUSE toggle when phone is ringing or in-call
* to avoid music playback */
if (mTelephonyManager == null) {
mTelephonyManager = (TelephonyManager) getContext().getSystemService(
Context.TELEPHONY_SERVICE);
}
if (mTelephonyManager != null &&
mTelephonyManager.getCallState() != TelephonyManager.CALL_STATE_IDLE) {
return true; // suppress key event
}
case KeyEvent.KEYCODE_MUTE:
case KeyEvent.KEYCODE_HEADSETHOOK:
case KeyEvent.KEYCODE_PLAYPAUSE:
case KeyEvent.KEYCODE_STOP:
case KeyEvent.KEYCODE_NEXTSONG:
case KeyEvent.KEYCODE_PREVIOUSSONG:
@@ -1257,7 +1272,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
ViewConfiguration.getLongPressTimeout());
return true;
}
case KeyEvent.KEYCODE_SEARCH: {
if (event.getRepeatCount() == 0) {
mSearchKeyDownReceived = true;
@@ -1311,12 +1326,12 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
return true;
}
case KeyEvent.KEYCODE_HEADSETHOOK:
case KeyEvent.KEYCODE_PLAYPAUSE:
case KeyEvent.KEYCODE_STOP:
case KeyEvent.KEYCODE_NEXTSONG:
case KeyEvent.KEYCODE_PREVIOUSSONG:
case KeyEvent.KEYCODE_REWIND:
case KeyEvent.KEYCODE_HEADSETHOOK:
case KeyEvent.KEYCODE_PLAYPAUSE:
case KeyEvent.KEYCODE_STOP:
case KeyEvent.KEYCODE_NEXTSONG:
case KeyEvent.KEYCODE_PREVIOUSSONG:
case KeyEvent.KEYCODE_REWIND:
case KeyEvent.KEYCODE_FORWARD: {
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);
intent.putExtra(Intent.EXTRA_KEY_EVENT, event);
@@ -1495,7 +1510,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
// The panel must not have been required, and is currently not around, skip it
continue;
}
st.onRestoreInstanceState(icicles.get(curFeatureId));
}
@@ -1579,7 +1594,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
mVolumeControlStreamType, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}
}
if (isDown && (event.getRepeatCount() == 0)) {
// First handle chording of panel key: if a panel key is held
// but not released, try to execute a shortcut in it.
@@ -1589,7 +1604,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
// 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
@@ -1625,7 +1640,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
return isDown ? PhoneWindow.this.onKeyDown(mFeatureId, event.getKeyCode(), event)
: PhoneWindow.this.onKeyUp(mFeatureId, event.getKeyCode(), event);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
final Callback cb = getCallback();
@@ -1792,7 +1807,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
}
@Override
public boolean showContextMenuForChild(View originalView) {
// Reuse the context menu builder
@@ -1839,7 +1854,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
drawableChanged();
}
}
@Override
protected boolean fitSystemWindows(Rect insets) {
mFrameOffsets.set(insets);
@@ -1913,7 +1928,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
super.onWindowFocusChanged(hasWindowFocus);
// no KEYCODE_CALL events active across focus changes
mKeycodeMenuTimeoutHandler.removeMessages(MSG_MENU_LONG_PRESS);
mKeycodeMenuTimeoutHandler.removeMessages(MSG_CALL_LONG_PRESS);
@@ -1926,7 +1941,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
if (!hasWindowFocus && mPanelChordingKey > 0) {
closePanel(FEATURE_OPTIONS_PANEL);
}
final Callback cb = getCallback();
if (cb != null && mFeatureId < 0) {
cb.onWindowFocusChanged(hasWindowFocus);
@@ -1993,7 +2008,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
} else {
setFlags(FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR, flagsToUpdate);
}
if (a.getBoolean(com.android.internal.R.styleable.Window_windowNoTitle, false)) {
requestFeature(FEATURE_NO_TITLE);
}
@@ -2003,13 +2018,13 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
WindowManager.LayoutParams params = getAttributes();
if (!hasSoftInputMode()) {
params.softInputMode = a.getInt(
com.android.internal.R.styleable.Window_windowSoftInputMode,
params.softInputMode);
}
if (a.getBoolean(com.android.internal.R.styleable.Window_backgroundDimEnabled,
mIsFloating)) {
/* All dialogs should have the window dimmed */
@@ -2024,7 +2039,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
params.windowAnimations = a.getResourceId(
com.android.internal.R.styleable.Window_windowAnimationStyle, 0);
}
// The rest are only done if this window is not embedded; otherwise,
// the values are inherited from our container.
if (getContainer() == null) {
@@ -2198,7 +2213,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
/**
* Gets a panel's state based on its feature ID.
*
*
* @param featureId The feature ID of the panel.
* @param required Whether the panel is required (if it is required and it
* isn't in our features, this throws an exception).
@@ -2207,10 +2222,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
private PanelFeatureState getPanelState(int featureId, boolean required) {
return getPanelState(featureId, required, null);
}
/**
* Gets a panel's state based on its feature ID.
*
*
* @param featureId The feature ID of the panel.
* @param required Whether the panel is required (if it is required and it
* isn't in our features, this throws an exception).
@@ -2300,7 +2315,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
private void updateInt(int featureId, int value, boolean fromResume) {
// Do nothing if the decor is not yet installed... an update will
// need to be forced when we eventually become active.
if (mContentParent == null) {
@@ -2371,7 +2386,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
* callback. This method will grab whatever extra state is needed for the
* callback that isn't given in the parameters. If the panel is not open,
* this will not perform the callback.
*
*
* @param featureId Feature ID of the panel that was closed. Must be given.
* @param panel Panel that was closed. Optional but useful if there is no
* menu given.
@@ -2407,7 +2422,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
/**
* Helper method for adding launch-search to most applications. Opens the
* search window using default settings.
*
*
* @return true if search window opened
*/
private boolean launchDefaultSearch() {
@@ -2418,7 +2433,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
return cb.onSearchRequested();
}
}
@Override
public void setVolumeControlStream(int streamType) {
mVolumeControlStreamType = streamType;
@@ -2454,7 +2469,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
private static final class PanelFeatureState {
/** Feature ID for this panel. */
int featureId;
@@ -2478,11 +2493,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
/** The panel that was returned by onCreatePanelView(). */
View createdPanelView;
/** The panel that we are actually showing. */
View shownPanelView;
/** Use {@link #setMenu} to set this. */
/** Use {@link #setMenu} to set this. */
Menu menu;
/**
@@ -2514,7 +2529,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
* Contains the state of the menu when told to freeze.
*/
Bundle frozenMenuState;
PanelFeatureState(int featureId) {
this.featureId = featureId;
@@ -2534,7 +2549,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
void setMenu(Menu menu) {
this.menu = menu;
if (frozenMenuState != null) {
((MenuBuilder) menu).restoreHierarchyState(frozenMenuState);
frozenMenuState = null;
@@ -2551,7 +2566,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
savedState.menuState = new Bundle();
((MenuBuilder) menu).saveHierarchyState(savedState.menuState);
}
return savedState;
}
@@ -2574,13 +2589,13 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
shownPanelView = null;
decorView = null;
}
private static class SavedState implements Parcelable {
int featureId;
boolean isOpen;
boolean isInExpandedMode;
Bundle menuState;
public int describeContents() {
return 0;
}
@@ -2594,20 +2609,20 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
dest.writeBundle(menuState);
}
}
private static SavedState readFromParcel(Parcel source) {
SavedState savedState = new SavedState();
savedState.featureId = source.readInt();
savedState.isOpen = source.readInt() == 1;
savedState.isInExpandedMode = source.readInt() == 1;
if (savedState.isOpen) {
savedState.menuState = source.readBundle();
}
return savedState;
}
public static final Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
public SavedState createFromParcel(Parcel in) {
@@ -2619,7 +2634,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
};
}
}
/**
@@ -2631,7 +2646,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
private final class ContextMenuCallback implements MenuBuilder.Callback {
private int mFeatureId;
private MenuDialogHelper mSubMenuHelper;
public ContextMenuCallback(int featureId) {
mFeatureId = featureId;
}
@@ -2640,11 +2655,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
if (allMenusAreClosing) {
Callback callback = getCallback();
if (callback != null) callback.onPanelClosed(mFeatureId, menu);
if (menu == mContextMenu) {
dismissContextMenu();
}
// Dismiss the submenu, if it is showing
if (mSubMenuHelper != null) {
mSubMenuHelper.dismiss();
@@ -2673,7 +2688,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
// The window manager will give us a valid window token
mSubMenuHelper = new MenuDialogHelper(subMenu);
mSubMenuHelper.show(null);
return true;
}
}