summaryrefslogtreecommitdiffstats
path: root/services/core/java/com/android/server/policy
diff options
context:
space:
mode:
Diffstat (limited to 'services/core/java/com/android/server/policy')
-rw-r--r--services/core/java/com/android/server/policy/BurnInProtectionHelper.java9
-rw-r--r--services/core/java/com/android/server/policy/GlobalActions.java160
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java145
-rw-r--r--services/core/java/com/android/server/policy/WindowOrientationListener.java7
4 files changed, 183 insertions, 138 deletions
diff --git a/services/core/java/com/android/server/policy/BurnInProtectionHelper.java b/services/core/java/com/android/server/policy/BurnInProtectionHelper.java
index fef1e57..e6ec6a6 100644
--- a/services/core/java/com/android/server/policy/BurnInProtectionHelper.java
+++ b/services/core/java/com/android/server/policy/BurnInProtectionHelper.java
@@ -72,6 +72,9 @@ public class BurnInProtectionHelper implements DisplayManager.DisplayListener,
/* 1 means increasing, -1 means decreasing */
private int mYOffsetDirection = 1;
+ private int mAppliedBurnInXOffset = 0;
+ private int mAppliedBurnInYOffset = 0;
+
private final AlarmManager mAlarmManager;
private final PendingIntent mBurnInProtectionIntent;
private final DisplayManagerInternal mDisplayManagerInternal;
@@ -139,6 +142,8 @@ public class BurnInProtectionHelper implements DisplayManager.DisplayListener,
mFirstUpdate = false;
} else {
adjustOffsets();
+ mAppliedBurnInXOffset = mLastBurnInXOffset;
+ mAppliedBurnInYOffset = mLastBurnInYOffset;
mDisplayManagerInternal.setDisplayOffsets(mDisplay.getDisplayId(),
mLastBurnInXOffset, mLastBurnInYOffset);
}
@@ -258,6 +263,8 @@ public class BurnInProtectionHelper implements DisplayManager.DisplayListener,
@Override
public void onAnimationEnd(Animator animator) {
if (animator == mCenteringAnimator && !mBurnInProtectionActive) {
+ mAppliedBurnInXOffset = 0;
+ mAppliedBurnInYOffset = 0;
// No matter how the animation finishes, we want to zero the offsets.
mDisplayManagerInternal.setDisplayOffsets(mDisplay.getDisplayId(), 0, 0);
}
@@ -276,7 +283,7 @@ public class BurnInProtectionHelper implements DisplayManager.DisplayListener,
if (!mBurnInProtectionActive) {
final float value = (Float) valueAnimator.getAnimatedValue();
mDisplayManagerInternal.setDisplayOffsets(mDisplay.getDisplayId(),
- (int) (mLastBurnInXOffset * value), (int) (mLastBurnInYOffset * value));
+ (int) (mAppliedBurnInXOffset * value), (int) (mAppliedBurnInYOffset * value));
}
}
}
diff --git a/services/core/java/com/android/server/policy/GlobalActions.java b/services/core/java/com/android/server/policy/GlobalActions.java
index 8c42917..9b5f5d0 100644
--- a/services/core/java/com/android/server/policy/GlobalActions.java
+++ b/services/core/java/com/android/server/policy/GlobalActions.java
@@ -22,12 +22,14 @@ import com.android.internal.app.AlertController.AlertParams;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyProperties;
import com.android.internal.R;
+import com.android.internal.util.UserIcons;
import com.android.internal.widget.LockPatternUtils;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.INotificationManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -35,10 +37,17 @@ import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.pm.ThemeUtils;
import android.content.pm.UserInfo;
import android.content.ServiceConnection;
import android.database.ContentObserver;
+import android.graphics.Bitmap;
+import android.graphics.BitmapShader;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.graphics.Shader;
+import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.Manifest;
import android.media.AudioManager;
@@ -58,6 +67,7 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.os.Vibrator;
import android.provider.Settings;
+import android.provider.Settings.Global;
import android.service.dreams.DreamService;
import android.service.dreams.IDreamManager;
import android.telephony.PhoneStateListener;
@@ -84,12 +94,15 @@ import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.ListView;
import android.widget.TextView;
+
import cyanogenmod.providers.CMSettings;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
+import org.cyanogenmod.internal.util.ThemeUtils;
+
import static com.android.internal.util.cm.PowerMenuConstants.*;
/**
@@ -163,6 +176,9 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
mShowSilentToggle = SHOW_SILENT_TOGGLE && !mContext.getResources().getBoolean(
com.android.internal.R.bool.config_useFixedVolume);
+ // Set the initial status of airplane mode toggle
+ mAirplaneState = getUpdatedAirplaneToggleState();
+
updatePowerMenuActions();
}
@@ -612,16 +628,24 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
if (um.isUserSwitcherEnabled()) {
List<UserInfo> users = um.getUsers();
UserInfo currentUser = getCurrentUser();
+ final int avatarSize = mContext.getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.global_actions_avatar_size);
for (final UserInfo user : users) {
if (user.supportsSwitchTo()) {
boolean isCurrentUser = currentUser == null
? user.id == 0 : (currentUser.id == user.id);
- Drawable icon = user.iconPath != null ? Drawable.createFromPath(user.iconPath)
- : null;
+ Drawable avatar = null;
+ Bitmap rawAvatar = um.getUserIcon(user.id);
+ if (rawAvatar == null) {
+ rawAvatar = UserIcons.convertToBitmap(UserIcons.getDefaultUserIcon(
+ user.isGuest() ? UserHandle.USER_NULL : user.id, /*light=*/ false));
+ }
+ avatar = new BitmapDrawable(mContext.getResources(),
+ createCircularClip(rawAvatar, avatarSize, avatarSize));
+
SinglePressAction switchToUser = new SinglePressAction(
- com.android.internal.R.drawable.ic_lock_user, icon,
- (user.name != null ? user.name : "Primary")
- + (isCurrentUser ? " \u2714" : "")) {
+ com.android.internal.R.drawable.ic_lock_user, avatar,
+ (user.name != null ? user.name : "Primary")) {
public void onPress() {
try {
ActivityManagerNative.getDefault().switchUser(user.id);
@@ -638,6 +662,10 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
return false;
}
};
+ if (isCurrentUser) {
+ switchToUser.setStatus(mContext.getString(
+ R.string.global_action_current_user));
+ }
items.add(switchToUser);
}
}
@@ -721,7 +749,8 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
@Override
public void onServiceDisconnected(ComponentName name) {}
};
- if (mContext.bindService(intent, conn, Context.BIND_AUTO_CREATE)) {
+ if (mContext.bindServiceAsUser(
+ intent, conn, Context.BIND_AUTO_CREATE, UserHandle.CURRENT)) {
mScreenshotConnection = conn;
mHandler.postDelayed(mScreenshotTimeout, 10000);
}
@@ -890,6 +919,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
private final Drawable mIcon;
private final int mMessageResId;
private final CharSequence mMessage;
+ private CharSequence mStatusMessage;
protected SinglePressAction(int iconResId, int messageResId) {
mIconResId = iconResId;
@@ -916,8 +946,12 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
return true;
}
- public String getStatus() {
- return null;
+ public CharSequence getStatus() {
+ return mStatusMessage;
+ }
+
+ public void setStatus(CharSequence status) {
+ mStatusMessage = status;
}
abstract public void onPress();
@@ -938,7 +972,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
TextView messageView = (TextView) v.findViewById(R.id.message);
TextView statusView = (TextView) v.findViewById(R.id.status);
- final String status = getStatus();
+ final CharSequence status = getStatus();
if (!TextUtils.isEmpty(status)) {
statusView.setText(status);
} else {
@@ -946,7 +980,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
}
if (mIcon != null) {
icon.setImageDrawable(mIcon);
- icon.setScaleType(ScaleType.CENTER_CROP);
+ icon.setScaleType(ScaleType.CENTER);
} else if (mIconResId != 0) {
icon.setImageDrawable(context.getDrawable(mIconResId));
}
@@ -1116,9 +1150,9 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
}
}
- private static class SilentModeTriStateAction implements Action, View.OnClickListener {
+ private final class SilentModeTriStateAction implements Action, View.OnClickListener {
- private final int[] ITEM_IDS = { R.id.option1, R.id.option2, R.id.option3 };
+ private final int[] ITEM_IDS = { R.id.option1, R.id.option2, R.id.option3, R.id.option4 };
private final AudioManager mAudioManager;
private final Handler mHandler;
@@ -1130,14 +1164,15 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
mContext = context;
}
- private int ringerModeToIndex(int ringerMode) {
- // They just happen to coincide
- return ringerMode;
- }
-
private int indexToRingerMode(int index) {
- // They just happen to coincide
- return index;
+ if (index == 2) {
+ if (mHasVibrator) {
+ return AudioManager.RINGER_MODE_VIBRATE;
+ } else {
+ return AudioManager.RINGER_MODE_NORMAL;
+ }
+ }
+ return AudioManager.RINGER_MODE_NORMAL;
}
@Override
@@ -1149,9 +1184,28 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
LayoutInflater inflater) {
View v = inflater.inflate(R.layout.global_actions_silent_mode, parent, false);
- int selectedIndex = ringerModeToIndex(mAudioManager.getRingerMode());
- for (int i = 0; i < 3; i++) {
+ int ringerMode = mAudioManager.getRingerModeInternal();
+ int zenMode = Global.getInt(mContext.getContentResolver(), Global.ZEN_MODE,
+ Global.ZEN_MODE_OFF);
+ int selectedIndex = 0;
+ if (zenMode != Global.ZEN_MODE_OFF) {
+ if (zenMode == Global.ZEN_MODE_NO_INTERRUPTIONS) {
+ selectedIndex = 0;
+ } else if (zenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS) {
+ selectedIndex = 1;
+ }
+ } else if (ringerMode == AudioManager.RINGER_MODE_VIBRATE) {
+ selectedIndex = 2;
+ } else if (ringerMode == AudioManager.RINGER_MODE_NORMAL) {
+ selectedIndex = 3;
+ }
+
+ for (int i = 0; i < ITEM_IDS.length; i++) {
View itemView = v.findViewById(ITEM_IDS[i]);
+ if (!mHasVibrator && i == 2) {
+ itemView.setVisibility(View.GONE);
+ continue;
+ }
itemView.setSelected(selectedIndex == i);
// Set up click handler
itemView.setTag(i);
@@ -1182,7 +1236,28 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
if (!(v.getTag() instanceof Integer)) return;
int index = (Integer) v.getTag();
- mAudioManager.setRingerMode(indexToRingerMode(index));
+ if (index == 0 || index == 1) {
+ int zenMode = index == 0
+ ? Global.ZEN_MODE_NO_INTERRUPTIONS
+ : Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
+ // ZenModeHelper will revert zen mode back to the previous value if we just
+ // put the value into the Settings db, so use INotificationManager instead
+ INotificationManager noMan = INotificationManager.Stub.asInterface(
+ ServiceManager.getService(Context.NOTIFICATION_SERVICE));
+ try {
+ noMan.setZenMode(zenMode, null, TAG);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Unable to set zen mode", e);
+ }
+ } else {
+ Global.putInt(mContext.getContentResolver(), Global.ZEN_MODE, Global.ZEN_MODE_OFF);
+ }
+
+ if (index == 2 || index == 3) {
+ int ringerMode = indexToRingerMode(index);
+ mAudioManager.setRingerModeInternal(ringerMode);
+ }
+ mAdapter.notifyDataSetChanged();
mHandler.sendEmptyMessageDelayed(MESSAGE_DISMISS, DIALOG_DISMISS_DELAY);
}
}
@@ -1274,15 +1349,17 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
}
};
+ private ToggleAction.State getUpdatedAirplaneToggleState() {
+ return (Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.AIRPLANE_MODE_ON, 0) == 1) ?
+ ToggleAction.State.On : ToggleAction.State.Off;
+ }
+
private void onAirplaneModeChanged() {
// Let the service state callbacks handle the state.
if (mHasTelephony) return;
- boolean airplaneModeOn = Settings.Global.getInt(
- mContext.getContentResolver(),
- Settings.Global.AIRPLANE_MODE_ON,
- 0) == 1;
- mAirplaneState = airplaneModeOn ? ToggleAction.State.On : ToggleAction.State.Off;
+ mAirplaneState = getUpdatedAirplaneToggleState();
mAirplaneModeOn.updateState(mAirplaneState);
}
@@ -1303,6 +1380,33 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
}
}
+ /**
+ * Generate a new bitmap (width x height pixels, ARGB_8888) with the input bitmap scaled
+ * to fit and clipped to an inscribed circle.
+ * @param input Bitmap to resize and clip
+ * @param width Width of output bitmap (and diameter of circle)
+ * @param height Height of output bitmap
+ * @return A shiny new bitmap for you to use
+ */
+ private static Bitmap createCircularClip(Bitmap input, int width, int height) {
+ if (input == null) return null;
+
+ final int inWidth = input.getWidth();
+ final int inHeight = input.getHeight();
+ final Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ final Canvas canvas = new Canvas(output);
+ final Paint paint = new Paint();
+ paint.setShader(new BitmapShader(input, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
+ paint.setAntiAlias(true);
+ final RectF srcRect = new RectF(0, 0, inWidth, inHeight);
+ final RectF dstRect = new RectF(0, 0, width, height);
+ final Matrix m = new Matrix();
+ m.setRectToRect(srcRect, dstRect, Matrix.ScaleToFit.CENTER);
+ canvas.setMatrix(m);
+ canvas.drawCircle(inWidth / 2, inHeight / 2, inWidth / 2, paint);
+ return output;
+ }
+
private static final class GlobalActionsDialog extends Dialog implements DialogInterface {
private final Context mContext;
private final int mWindowTouchSlop;
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 58f26fa..9cb969c 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -83,10 +83,11 @@ import android.service.dreams.DreamService;
import android.service.dreams.IDreamManager;
import android.speech.RecognizerIntent;
import android.telecom.TelecomManager;
-import android.service.gesture.EdgeGestureManager;
import com.android.internal.os.DeviceKeyHandler;
import com.android.internal.util.cm.ActionUtils;
+
+import cyanogenmod.hardware.CMHardwareManager;
import cyanogenmod.providers.CMSettings;
import dalvik.system.DexClassLoader;
import android.util.DisplayMetrics;
@@ -129,8 +130,6 @@ import com.android.internal.R;
import com.android.internal.policy.IKeyguardService;
import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.util.ScreenShapeHelper;
-import com.android.internal.util.gesture.EdgeGesturePosition;
-import com.android.internal.util.gesture.EdgeServiceConstants;
import com.android.internal.view.RotationPolicy;
import com.android.internal.widget.PointerLocationView;
import com.android.server.GestureLauncherService;
@@ -749,6 +748,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private boolean mHasPermanentMenuKey;
private boolean mClearedBecauseOfForceShow;
private boolean mTopWindowIsKeyguard;
+ private CMHardwareManager mCMHardware;
private class PolicyHandler extends Handler {
@Override
@@ -899,9 +899,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
CMSettings.System.VOLBTN_MUSIC_CONTROLS), false, this,
UserHandle.USER_ALL);
resolver.registerContentObserver(CMSettings.System.getUriFor(
- CMSettings.System.USE_EDGE_SERVICE_FOR_GESTURES), false, this,
- UserHandle.USER_ALL);
- resolver.registerContentObserver(CMSettings.System.getUriFor(
CMSettings.System.BACK_WAKE_SCREEN), false, this,
UserHandle.USER_ALL);
resolver.registerContentObserver(CMSettings.System.getUriFor(
@@ -995,67 +992,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private SystemGesturesPointerEventListener mSystemGestures;
- private EdgeGestureManager.EdgeGestureActivationListener mEdgeGestureActivationListener
- = new EdgeGestureManager.EdgeGestureActivationListener() {
-
- @Override
- public void onEdgeGestureActivation(int touchX, int touchY,
- EdgeGesturePosition position, int flags) {
- WindowState target = null;
-
- if (position == EdgeGesturePosition.TOP) {
- target = mStatusBar;
- } else if (position == EdgeGesturePosition.BOTTOM && mNavigationBarOnBottom) {
- target = mNavigationBar;
- } else if (position == EdgeGesturePosition.LEFT
- && !mNavigationBarOnBottom && mNavigationBarLeftInLandscape) {
- target = mNavigationBar;
- } else if (position == EdgeGesturePosition.RIGHT && !mNavigationBarOnBottom) {
- target = mNavigationBar;
- }
-
- if (target != null) {
- requestTransientBars(target);
- dropEventsUntilLift();
- mEdgeListenerActivated = true;
- } else {
- restoreListenerState();
- }
- }
- };
- private EdgeGestureManager mEdgeGestureManager = null;
- private int mLastEdgePositions = 0;
- private boolean mEdgeListenerActivated = false;
- private boolean mUsingEdgeGestureServiceForGestures = false;
-
- private void updateEdgeGestureListenerState() {
- int flags = 0;
- if (mUsingEdgeGestureServiceForGestures) {
- flags = EdgeServiceConstants.LONG_LIVING | EdgeServiceConstants.UNRESTRICTED;
- if (mStatusBar != null && !mStatusBar.isVisibleLw()) {
- flags |= EdgeGesturePosition.TOP.FLAG;
- }
- if (mNavigationBar != null && !mNavigationBar.isVisibleLw() && !isStatusBarKeyguard()) {
- if (mNavigationBarOnBottom) {
- flags |= EdgeGesturePosition.BOTTOM.FLAG;
- } else if (mNavigationBarLeftInLandscape) {
- flags |= EdgeGesturePosition.LEFT.FLAG;
- } else {
- flags |= EdgeGesturePosition.RIGHT.FLAG;
- }
- }
- }
- if (mEdgeListenerActivated) {
- mEdgeGestureActivationListener.restoreListenerState();
- mEdgeListenerActivated = false;
- }
- if (flags != mLastEdgePositions) {
- mEdgeGestureManager.updateEdgeGestureActivationListener(mEdgeGestureActivationListener,
- flags);
- mLastEdgePositions = flags;
- }
- }
-
IStatusBarService getStatusBarService() {
synchronized (mServiceAquireLock) {
if (mStatusBarService == null) {
@@ -1634,6 +1570,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mDreamManagerInternal = LocalServices.getService(DreamManagerInternal.class);
mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class);
mAppOpsManager = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
+ mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class);
// Init display burn-in protection
boolean burnInProtectionEnabled = context.getResources().getBoolean(
@@ -1677,7 +1614,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mOrientationListener.setCurrentRotation(windowManager.getRotation());
} catch (RemoteException ex) { }
mSettingsObserver = new SettingsObserver(mHandler);
- mSettingsObserver.observe();
mShortcutManager = new ShortcutManager(context);
mUiMode = context.getResources().getInteger(
com.android.internal.R.integer.config_defaultUiModeType);
@@ -2186,23 +2122,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
updateWakeGestureListenerLp();
}
- final boolean useEdgeService = CMSettings.System.getIntForUser(resolver,
- CMSettings.System.USE_EDGE_SERVICE_FOR_GESTURES, 0, UserHandle.USER_CURRENT) == 1;
- if (useEdgeService ^ mUsingEdgeGestureServiceForGestures && mSystemReady) {
- if (!mUsingEdgeGestureServiceForGestures && useEdgeService) {
- mUsingEdgeGestureServiceForGestures = true;
- mWindowManagerFuncs.unregisterPointerEventListener(mSystemGestures);
- } else if (mUsingEdgeGestureServiceForGestures && !useEdgeService) {
- mUsingEdgeGestureServiceForGestures = false;
- mWindowManagerFuncs.registerPointerEventListener(mSystemGestures);
- }
- updateEdgeGestureListenerState();
- }
-
boolean devForceNavbar = CMSettings.Secure.getIntForUser(resolver,
CMSettings.Secure.DEV_FORCE_SHOW_NAVBAR, 0, UserHandle.USER_CURRENT) == 1;
if (devForceNavbar != mDevForceNavbar) {
mDevForceNavbar = devForceNavbar;
+ if (mCMHardware.isSupported(CMHardwareManager.FEATURE_KEY_DISABLE)) {
+ mCMHardware.set(CMHardwareManager.FEATURE_KEY_DISABLE, mDevForceNavbar);
+ }
}
mNavigationBarLeftInLandscape = CMSettings.System.getIntForUser(resolver,
@@ -3167,19 +3093,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
+ " canceled=" + canceled);
}
- // If the boot mode is power off alarm, we should not dispatch the several physical keys
- // in power off alarm UI to avoid pausing power off alarm UI.
- int isPowerOffAlarmMode = Settings.System.getInt(mContext.getContentResolver(),
- Settings.System.POWER_OFF_ALARM_MODE, 0);
- if (DEBUG_INPUT) { Log.d(TAG, "intercept Dispatching isPowerOffAlarmMode = " +
- isPowerOffAlarmMode); }
-
- if (isPowerOffAlarmMode == 1 && (keyCode == KeyEvent.KEYCODE_HOME
- || keyCode == KeyEvent.KEYCODE_SEARCH
- || keyCode == KeyEvent.KEYCODE_MENU)) {
- return -1; // ignore the physical key here
- }
-
// If we think we might have a volume down & power key chord on the way
// but we're not sure, then tell the dispatcher to wait a little while and
// try again later before dispatching.
@@ -4042,8 +3955,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mNavigationBarController.adjustSystemUiVisibilityLw(mLastSystemUiFlags, visibility);
mRecentsVisible = (visibility & View.RECENT_APPS_VISIBLE) > 0;
- updateEdgeGestureListenerState();
-
// Reset any bits in mForceClearingStatusBarVisibility that
// are now clear.
mResettingSystemUiFlags &= visibility;
@@ -5372,7 +5283,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// update since mAllowLockscreenWhenOn might have changed
updateLockScreenTimeout();
- updateEdgeGestureListenerState();
return changes;
}
@@ -5661,7 +5571,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
if (isValidGlobalKey(keyCode)
&& mGlobalKeyManager.shouldHandleGlobalKey(keyCode, event)) {
if (isWakeKey) {
- wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey, "android.policy:KEY");
+ wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey,
+ "android.policy:KEY", true);
}
return result;
}
@@ -5924,6 +5835,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
break;
}
+ case KeyEvent.KEYCODE_SOFT_SLEEP: {
+ result &= ~ACTION_PASS_TO_USER;
+ isWakeKey = false;
+ if (!down) {
+ mPowerManagerInternal.setUserInactiveOverrideFromWindowManager();
+ }
+ break;
+ }
+
case KeyEvent.KEYCODE_WAKEUP: {
result &= ~ACTION_PASS_TO_USER;
isWakeKey = true;
@@ -5999,7 +5919,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
if (isWakeKey) {
- wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey, "android.policy:KEY");
+ wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey, "android.policy:KEY", true);
}
return result;
@@ -6136,11 +6056,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
private boolean shouldDispatchInputWhenNonInteractive() {
- if (mDisplay == null || mDisplay.getState() == Display.STATE_OFF) {
- return false;
- }
- // Send events to keyguard while the screen is on and it's showing.
- if (isKeyguardShowingAndNotOccluded()) {
+ // Send events to keyguard while the screen is on.
+ if (isKeyguardShowingAndNotOccluded() && mDisplay != null
+ && mDisplay.getState() != Display.STATE_OFF) {
return true;
}
@@ -6439,10 +6357,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
private void wakeUpFromPowerKey(long eventTime) {
- wakeUp(eventTime, mAllowTheaterModeWakeFromPowerKey, "android.policy:POWER");
+ wakeUp(eventTime, mAllowTheaterModeWakeFromPowerKey, "android.policy:POWER", true);
}
private boolean wakeUp(long wakeTime, boolean wakeInTheaterMode, String reason) {
+ return wakeUp(wakeTime, wakeInTheaterMode, reason, false);
+ }
+
+ private boolean wakeUp(long wakeTime, boolean wakeInTheaterMode, String reason,
+ boolean withProximityCheck) {
final boolean theaterModeEnabled = isTheaterModeEnabled();
if (!wakeInTheaterMode && theaterModeEnabled) {
return false;
@@ -6453,7 +6376,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
Settings.Global.THEATER_MODE_ON, 0);
}
- mPowerManager.wakeUp(wakeTime, reason);
+ if (withProximityCheck) {
+ mPowerManager.wakeUpWithProximityCheck(wakeTime, reason);
+ } else {
+ mPowerManager.wakeUp(wakeTime, reason);
+ }
return true;
}
@@ -6968,8 +6895,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mKeyguardDelegate = new KeyguardServiceDelegate(mContext);
mKeyguardDelegate.onSystemReady();
- mEdgeGestureManager = EdgeGestureManager.getInstance();
- mEdgeGestureManager.setEdgeGestureActivationListener(mEdgeGestureActivationListener);
+ mCMHardware = CMHardwareManager.getInstance(mContext);
+ // Ensure observe happens in systemReady() since we need
+ // CMHardwareService to be up and running
+ mSettingsObserver.observe();
readCameraLensCoverState();
updateUiMode();
diff --git a/services/core/java/com/android/server/policy/WindowOrientationListener.java b/services/core/java/com/android/server/policy/WindowOrientationListener.java
index 9916223..651ee22 100644
--- a/services/core/java/com/android/server/policy/WindowOrientationListener.java
+++ b/services/core/java/com/android/server/policy/WindowOrientationListener.java
@@ -55,6 +55,7 @@ public abstract class WindowOrientationListener {
private boolean mEnabled;
private int mRate;
private String mSensorType;
+ private boolean mUseSystemClockforRotationSensor;
private Sensor mSensor;
private OrientationJudge mOrientationJudge;
private int mCurrentRotation = -1;
@@ -90,6 +91,9 @@ public abstract class WindowOrientationListener {
mSensorType = context.getResources().getString(
com.android.internal.R.string.config_orientationSensorType);
+ mUseSystemClockforRotationSensor = context.getResources().getBoolean(
+ com.android.internal.R.bool.config_useSystemClockforRotationSensor);
+
if (!TextUtils.isEmpty(mSensorType)) {
List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
final int N = sensors.size();
@@ -598,7 +602,8 @@ public abstract class WindowOrientationListener {
// Reset the orientation listener state if the samples are too far apart in time
// or when we see values of (0, 0, 0) which indicates that we polled the
// accelerometer too soon after turning it on and we don't have any data yet.
- final long now = event.timestamp;
+ final long now = mUseSystemClockforRotationSensor
+ ? SystemClock.elapsedRealtimeNanos() : event.timestamp;
final long then = mLastFilteredTimestampNanos;
final float timeDeltaMS = (now - then) * 0.000001f;
final boolean skipSample;