diff options
| author | 2017-06-20 16:36:49 +0000 | |
|---|---|---|
| committer | 2017-06-20 16:36:49 +0000 | |
| commit | 30f4c97aaaf966422729f5eba53adfea3a9280b4 (patch) | |
| tree | bd7d1409c5893e2e6430acbd47ae49821f834c22 | |
| parent | 784989f06db21017502e605cc229a49c1e0acb20 (diff) | |
| parent | 9a0894b930033892ee6a2b66c0845ffe580336b8 (diff) | |
Merge "Check for keyguard occlusion on camera lift" into oc-dr1-dev am: e07567cc0b
am: 9a0894b930
Change-Id: I1e4a944ff83e46978cc4d15175347d0a44019ae5
4 files changed, 43 insertions, 15 deletions
diff --git a/core/java/android/view/WindowManagerInternal.java b/core/java/android/view/WindowManagerInternal.java index 55aed529037d..4c9cf40beb8d 100644 --- a/core/java/android/view/WindowManagerInternal.java +++ b/core/java/android/view/WindowManagerInternal.java @@ -229,6 +229,11 @@ public abstract class WindowManagerInternal { public abstract boolean isKeyguardGoingAway(); /** + * @return Whether the keyguard is showing and not occluded. + */ + public abstract boolean isKeyguardShowingAndNotOccluded(); + + /** * Gets the frame of a window given its token. * * @param token The token. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index bfe155ad7106..b1975e237795 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -309,6 +309,7 @@ public class StatusBar extends SystemUI implements DemoMode, public static final boolean DEBUG_GESTURES = false; public static final boolean DEBUG_MEDIA = false; public static final boolean DEBUG_MEDIA_FAKE_ARTWORK = false; + public static final boolean DEBUG_CAMERA_LIFT = true; // false once b/62623620 is fixed public static final boolean DEBUG_WINDOW_STATE = false; @@ -5172,11 +5173,14 @@ public class StatusBar extends SystemUI implements DemoMode, public void onCameraLaunchGestureDetected(int source) { mLastCameraLaunchSource = source; if (mStartedGoingToSleep) { + if (DEBUG_CAMERA_LIFT) Slog.d(TAG, "Finish going to sleep before launching camera"); mLaunchCameraOnFinishedGoingToSleep = true; return; } if (!mNotificationPanel.canCameraGestureBeLaunched( mStatusBarKeyguardViewManager.isShowing() && mExpandedVisible)) { + if (DEBUG_CAMERA_LIFT) Slog.d(TAG, "Can't launch camera right now, mExpandedVisible: " + + mExpandedVisible); return; } if (!mDeviceInteractive) { @@ -5196,12 +5200,14 @@ public class StatusBar extends SystemUI implements DemoMode, mGestureWakeLock.acquire(LAUNCH_TRANSITION_TIMEOUT_MS + 1000L); } if (mScreenTurningOn || mStatusBarKeyguardViewManager.isScreenTurnedOn()) { + if (DEBUG_CAMERA_LIFT) Slog.d(TAG, "Launching camera"); mNotificationPanel.launchCamera(mDeviceInteractive /* animate */, source); } else { // We need to defer the camera launch until the screen comes on, since otherwise // we will dismiss us too early since we are waiting on an activity to be drawn and // incorrectly get notified because of the screen on event (which resumes and pauses // some activities) + if (DEBUG_CAMERA_LIFT) Slog.d(TAG, "Deferring until screen turns on"); mLaunchCameraOnScreenTurningOn = true; } } diff --git a/services/core/java/com/android/server/GestureLauncherService.java b/services/core/java/com/android/server/GestureLauncherService.java index b408da85425d..4c9495a786c3 100644 --- a/services/core/java/com/android/server/GestureLauncherService.java +++ b/services/core/java/com/android/server/GestureLauncherService.java @@ -17,7 +17,6 @@ package com.android.server; import android.app.ActivityManager; -import android.app.KeyguardManager; import android.app.StatusBarManager; import android.content.BroadcastReceiver; import android.content.Context; @@ -41,10 +40,12 @@ import android.provider.Settings; import android.util.MutableBoolean; import android.util.Slog; import android.view.KeyEvent; +import android.view.WindowManagerInternal; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.server.LocalServices; import com.android.server.statusbar.StatusBarManagerInternal; /** @@ -56,6 +57,7 @@ import com.android.server.statusbar.StatusBarManagerInternal; */ public class GestureLauncherService extends SystemService { private static final boolean DBG = false; + private static final boolean DBG_CAMERA_LIFT = true; // false once b/62623620 is fixed private static final String TAG = "GestureLauncherService"; /** @@ -82,7 +84,7 @@ public class GestureLauncherService extends SystemService { private Context mContext; private final MetricsLogger mMetricsLogger; private PowerManager mPowerManager; - private KeyguardManager mKeyguardManager; + private WindowManagerInternal mWindowManagerInternal; /** The wake lock held when a gesture is detected. */ private WakeLock mWakeLock; @@ -150,8 +152,7 @@ public class GestureLauncherService extends SystemService { return; } - mKeyguardManager = (KeyguardManager) mContext.getSystemService( - Context.KEYGUARD_SERVICE); + mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class); mPowerManager = (PowerManager) mContext.getSystemService( Context.POWER_SERVICE); mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, @@ -517,33 +518,40 @@ public class GestureLauncherService extends SystemService { private final class CameraLiftTriggerEventListener extends TriggerEventListener { @Override public void onTrigger(TriggerEvent event) { + if (DBG_CAMERA_LIFT) Slog.d(TAG, String.format("onTrigger event - time: %d, name: %s", + event.timestamp, event.sensor.getName())); if (!mCameraLiftRegistered) { - if (DBG) Slog.d(TAG, "Ignoring camera lift event because it's unregistered."); + if (DBG_CAMERA_LIFT) Slog.d(TAG, "Ignoring camera lift event because it's " + + "unregistered."); return; } if (event.sensor == mCameraLiftTriggerSensor) { Resources resources = mContext.getResources(); SensorManager sensorManager = (SensorManager) mContext.getSystemService( Context.SENSOR_SERVICE); - - if (DBG) { + boolean keyguardShowingAndNotOccluded = + mWindowManagerInternal.isKeyguardShowingAndNotOccluded(); + boolean interactive = mPowerManager.isInteractive(); + if (DBG_CAMERA_LIFT) { float[] values = event.values; - Slog.d(TAG, String.format("Received a camera lift trigger event: " + - "values=[%.4f].", values[0])); + Slog.d(TAG, String.format("Received a camera lift trigger " + + "event: values=[%.4f], keyguard showing: %b, interactive: %b", values[0], + keyguardShowingAndNotOccluded, interactive)); } - if (mKeyguardManager.isKeyguardLocked() || !mPowerManager.isInteractive()) { + if (keyguardShowingAndNotOccluded || !interactive) { if (handleCameraGesture(true /* useWakelock */, StatusBarManager.CAMERA_LAUNCH_SOURCE_LIFT_TRIGGER)) { MetricsLogger.action(mContext, MetricsEvent.ACTION_CAMERA_LIFT_TRIGGER); } - } else if (DBG) { - Slog.d(TAG, "Ignoring lift event because device is awake"); + } else { + if (DBG_CAMERA_LIFT) Slog.d(TAG, "Ignoring lift event"); } - mCameraLiftRegistered = sensorManager.requestTriggerSensor(mCameraLiftTriggerListener, - mCameraLiftTriggerSensor); + mCameraLiftRegistered = sensorManager.requestTriggerSensor( + mCameraLiftTriggerListener, mCameraLiftTriggerSensor); - if (DBG) Slog.d(TAG, "Camera lift trigger sensor re-registered: " + mCameraLiftRegistered); + if (DBG_CAMERA_LIFT) Slog.d(TAG, "Camera lift trigger sensor re-registered: " + + mCameraLiftRegistered); return; } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index f86534b03da8..7944e68259bb 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3040,6 +3040,10 @@ public class WindowManagerService extends IWindowManager.Stub return mPolicy.isKeyguardLocked(); } + public boolean isKeyguardShowingAndNotOccluded() { + return mPolicy.isKeyguardShowingAndNotOccluded(); + } + @Override public boolean isKeyguardSecure() { int userId = UserHandle.getCallingUserId(); @@ -7291,6 +7295,11 @@ public class WindowManagerService extends IWindowManager.Stub } @Override + public boolean isKeyguardShowingAndNotOccluded() { + return WindowManagerService.this.isKeyguardShowingAndNotOccluded(); + } + + @Override public void showGlobalActions() { WindowManagerService.this.showGlobalActions(); } |