summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jonathan Solnit <jsolnit@google.com> 2017-06-20 16:36:49 +0000
committer android-build-merger <android-build-merger@google.com> 2017-06-20 16:36:49 +0000
commit30f4c97aaaf966422729f5eba53adfea3a9280b4 (patch)
treebd7d1409c5893e2e6430acbd47ae49821f834c22
parent784989f06db21017502e605cc229a49c1e0acb20 (diff)
parent9a0894b930033892ee6a2b66c0845ffe580336b8 (diff)
Merge "Check for keyguard occlusion on camera lift" into oc-dr1-dev am: e07567cc0b
am: 9a0894b930 Change-Id: I1e4a944ff83e46978cc4d15175347d0a44019ae5
-rw-r--r--core/java/android/view/WindowManagerInternal.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java6
-rw-r--r--services/core/java/com/android/server/GestureLauncherService.java38
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java9
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();
}