Loading core/java/android/view/WindowManagerInternal.java +5 −0 Original line number Diff line number Diff line Loading @@ -228,6 +228,11 @@ public abstract class WindowManagerInternal { /** @return {@code true} if the keyguard is going away. */ 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. * Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +6 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -5163,11 +5164,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) { Loading @@ -5187,12 +5191,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; } } Loading services/core/java/com/android/server/GestureLauncherService.java +23 −15 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; /** Loading @@ -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"; /** Loading @@ -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; Loading Loading @@ -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, Loading Loading @@ -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; } } Loading services/core/java/com/android/server/wm/WindowManagerService.java +9 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -7290,6 +7294,11 @@ public class WindowManagerService extends IWindowManager.Stub return WindowManagerService.this.mKeyguardGoingAway; } @Override public boolean isKeyguardShowingAndNotOccluded() { return WindowManagerService.this.isKeyguardShowingAndNotOccluded(); } @Override public void showGlobalActions() { WindowManagerService.this.showGlobalActions(); Loading Loading
core/java/android/view/WindowManagerInternal.java +5 −0 Original line number Diff line number Diff line Loading @@ -228,6 +228,11 @@ public abstract class WindowManagerInternal { /** @return {@code true} if the keyguard is going away. */ 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. * Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +6 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -5163,11 +5164,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) { Loading @@ -5187,12 +5191,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; } } Loading
services/core/java/com/android/server/GestureLauncherService.java +23 −15 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; /** Loading @@ -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"; /** Loading @@ -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; Loading Loading @@ -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, Loading Loading @@ -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; } } Loading
services/core/java/com/android/server/wm/WindowManagerService.java +9 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -7290,6 +7294,11 @@ public class WindowManagerService extends IWindowManager.Stub return WindowManagerService.this.mKeyguardGoingAway; } @Override public boolean isKeyguardShowingAndNotOccluded() { return WindowManagerService.this.isKeyguardShowingAndNotOccluded(); } @Override public void showGlobalActions() { WindowManagerService.this.showGlobalActions(); Loading