diff options
12 files changed, 65 insertions, 26 deletions
diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index 31d1ab7b92ac..5e8ad68957b2 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -90,6 +90,9 @@ public class StatusBarManager { public static final int WINDOW_STATE_HIDING = 1; public static final int WINDOW_STATE_HIDDEN = 2; + public static final int CAMERA_LAUNCH_SOURCE_WIGGLE = 0; + public static final int CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP = 1; + private Context mContext; private IStatusBarService mService; private IBinder mToken = new Binder(); diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl index ab3ec985d688..11ef18b4d5c0 100644 --- a/core/java/com/android/internal/statusbar/IStatusBar.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl @@ -74,7 +74,9 @@ oneway interface IStatusBar /** * Notifies the status bar that a camera launch gesture has been detected. + * + * @param source the identifier for the gesture, see {@link StatusBarManager} */ - void onCameraLaunchGestureDetected(); + void onCameraLaunchGestureDetected(int source); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java index b01a2a8a2c2f..10d4a965852f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java @@ -112,7 +112,7 @@ public class CommandQueue extends IStatusBar.Stub { public void appTransitionStarting(long startTime, long duration); public void showAssistDisclosure(); public void startAssist(Bundle args); - public void onCameraLaunchGestureDetected(); + public void onCameraLaunchGestureDetected(int source); } public CommandQueue(Callbacks callbacks, StatusBarIconList list) { @@ -306,10 +306,10 @@ public class CommandQueue extends IStatusBar.Stub { } @Override - public void onCameraLaunchGestureDetected() { + public void onCameraLaunchGestureDetected(int source) { synchronized (mList) { mHandler.removeMessages(MSG_CAMERA_LAUNCH_GESTURE); - mHandler.obtainMessage(MSG_CAMERA_LAUNCH_GESTURE).sendToTarget(); + mHandler.obtainMessage(MSG_CAMERA_LAUNCH_GESTURE, source, 0).sendToTarget(); } } @@ -415,7 +415,7 @@ public class CommandQueue extends IStatusBar.Stub { mCallbacks.startAssist((Bundle) msg.obj); break; case MSG_CAMERA_LAUNCH_GESTURE: - mCallbacks.onCameraLaunchGestureDetected(); + mCallbacks.onCameraLaunchGestureDetected(msg.arg1); break; } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java index 012dc9c53207..14176a6f5b3c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java @@ -77,6 +77,13 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL final static String TAG = "PhoneStatusBar/KeyguardBottomAreaView"; + public static final String CAMERA_LAUNCH_SOURCE_AFFORDANCE = "lockscreen_affordance"; + public static final String CAMERA_LAUNCH_SOURCE_WIGGLE = "wiggle_gesture"; + public static final String CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP = "power_double_tap"; + + public static final String EXTRA_CAMERA_LAUNCH_SOURCE + = "com.android.systemui.camera_launch_source"; + private static final Intent SECURE_CAMERA_INTENT = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE) .addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); @@ -170,7 +177,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL, true /* force */); return true; } else if (host == mCameraImageView) { - launchCamera(); + launchCamera(CAMERA_LAUNCH_SOURCE_AFFORDANCE); return true; } else if (host == mLeftAffordanceView) { launchLeftAffordance(); @@ -349,7 +356,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL @Override public void onClick(View v) { if (v == mCameraImageView) { - launchCamera(); + launchCamera(CAMERA_LAUNCH_SOURCE_AFFORDANCE); } else if (v == mLeftAffordanceView) { launchLeftAffordance(); } if (v == mLockIcon) { @@ -417,8 +424,9 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL } } - public void launchCamera() { + public void launchCamera(String source) { final Intent intent = getCameraIntent(); + intent.putExtra(EXTRA_CAMERA_LAUNCH_SOURCE, source); boolean wouldLaunchResolverActivity = PreviewInflater.wouldLaunchResolverActivity( mContext, intent, KeyguardUpdateMonitor.getCurrentUser()); if (intent == SECURE_CAMERA_INTENT && !wouldLaunchResolverActivity) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index 980527b82666..5f11ba556d2b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -22,6 +22,7 @@ import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.animation.ValueAnimator; import android.app.ActivityManager; +import android.app.StatusBarManager; import android.content.Context; import android.content.pm.ResolveInfo; import android.content.res.Configuration; @@ -204,6 +205,7 @@ public class NotificationPanelView extends PanelView implements private boolean mHeadsUpAnimatingAway; private boolean mLaunchingAffordance; private FalsingManager mFalsingManager; + private String mLastCameraLaunchSource = KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_AFFORDANCE; private Runnable mHeadsUpExistenceChangedRunnable = new Runnable() { @Override @@ -480,6 +482,7 @@ public class NotificationPanelView extends PanelView implements mUnlockIconActive = false; if (!mLaunchingAffordance) { mAfforanceHelper.reset(false); + mLastCameraLaunchSource = KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_AFFORDANCE; } closeQs(); mStatusBar.dismissPopups(); @@ -1965,20 +1968,23 @@ public class NotificationPanelView extends PanelView implements mKeyguardBottomArea.launchLeftAffordance(); } } else { - EventLogTags.writeSysuiLockscreenGesture( - EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_CAMERA, lengthDp, velocityDp); - + if (KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_AFFORDANCE.equals( + mLastCameraLaunchSource)) { + EventLogTags.writeSysuiLockscreenGesture( + EventLogConstants.SYSUI_LOCKSCREEN_GESTURE_SWIPE_CAMERA, + lengthDp, velocityDp); + } mFalsingManager.onCameraOn(); if (mFalsingManager.shouldEnforceBouncer()) { mStatusBar.executeRunnableDismissingKeyguard(new Runnable() { @Override public void run() { - mKeyguardBottomArea.launchCamera(); + mKeyguardBottomArea.launchCamera(mLastCameraLaunchSource); } }, null, true /* dismissShade */, false /* afterKeyguardGone */); } else { - mKeyguardBottomArea.launchCamera(); + mKeyguardBottomArea.launchCamera(mLastCameraLaunchSource); } } mStatusBar.startLaunchTransitionTimeout(); @@ -2419,7 +2425,17 @@ public class NotificationPanelView extends PanelView implements return !mDozing; } - public void launchCamera(boolean animate) { + public void launchCamera(boolean animate, int source) { + if (source == StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP) { + mLastCameraLaunchSource = KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP; + } else if (source == StatusBarManager.CAMERA_LAUNCH_SOURCE_WIGGLE) { + mLastCameraLaunchSource = KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_WIGGLE; + } else { + + // Default. + mLastCameraLaunchSource = KeyguardBottomAreaView.CAMERA_LAUNCH_SOURCE_AFFORDANCE; + } + // If we are launching it when we are occluded already we don't want it to animate, // nor setting these flags, since the occluded state doesn't change anymore, hence it's // never reset. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 151fa3c5a033..98f5444b16d8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -492,6 +492,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, private ExpandableNotificationRow mDraggedDownRow; private boolean mLaunchCameraOnScreenTurningOn; private boolean mLaunchCameraOnFinishedGoingToSleep; + private int mLastCameraLaunchSource; private PowerManager.WakeLock mGestureWakeLock; private Vibrator mVibrator; @@ -3992,7 +3993,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mHandler.post(new Runnable() { @Override public void run() { - onCameraLaunchGestureDetected(); + onCameraLaunchGestureDetected(mLastCameraLaunchSource); } }); } @@ -4010,7 +4011,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mFalsingManager.onScreenTurningOn(); mNotificationPanel.onScreenTurningOn(); if (mLaunchCameraOnScreenTurningOn) { - mNotificationPanel.launchCamera(false); + mNotificationPanel.launchCamera(false, mLastCameraLaunchSource); mLaunchCameraOnScreenTurningOn = false; } } @@ -4175,7 +4176,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } @Override - public void onCameraLaunchGestureDetected() { + public void onCameraLaunchGestureDetected(int source) { + mLastCameraLaunchSource = source; if (mStartedGoingToSleep) { mLaunchCameraOnFinishedGoingToSleep = true; return; @@ -4201,7 +4203,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mGestureWakeLock.acquire(LAUNCH_TRANSITION_TIMEOUT_MS + 1000L); } if (mScreenTurningOn || mStatusBarKeyguardViewManager.isScreenTurnedOn()) { - mNotificationPanel.launchCamera(mDeviceInteractive /* animate */); + 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 diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java index 2587b9f237c8..bbe5dd90d11f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java @@ -171,7 +171,7 @@ public class TvStatusBar extends BaseStatusBar { } @Override - public void onCameraLaunchGestureDetected() { + public void onCameraLaunchGestureDetected(int source) { } @Override diff --git a/services/core/java/com/android/server/GestureLauncherService.java b/services/core/java/com/android/server/GestureLauncherService.java index 7c85001c9175..f2459852d706 100644 --- a/services/core/java/com/android/server/GestureLauncherService.java +++ b/services/core/java/com/android/server/GestureLauncherService.java @@ -17,6 +17,7 @@ package com.android.server; import android.app.ActivityManager; +import android.app.StatusBarManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -263,7 +264,8 @@ public class GestureLauncherService extends SystemService { } if (launched) { Slog.i(TAG, "Power button double tap gesture detected, launching camera."); - launched = handleCameraLaunchGesture(false /* useWakelock */); + launched = handleCameraLaunchGesture(false /* useWakelock */, + StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP); if (launched) { MetricsLogger.action(mContext, MetricsLogger.ACTION_DOUBLE_TAP_POWER_CAMERA_GESTURE, (int) doubleTapInterval); @@ -276,7 +278,7 @@ public class GestureLauncherService extends SystemService { /** * @return true if camera was launched, false otherwise. */ - private boolean handleCameraLaunchGesture(boolean useWakelock) { + private boolean handleCameraLaunchGesture(boolean useWakelock, int source) { boolean userSetupComplete = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 0) != 0; if (!userSetupComplete) { @@ -295,7 +297,7 @@ public class GestureLauncherService extends SystemService { } StatusBarManagerInternal service = LocalServices.getService( StatusBarManagerInternal.class); - service.onCameraLaunchGestureDetected(); + service.onCameraLaunchGestureDetected(source); return true; } @@ -334,7 +336,8 @@ public class GestureLauncherService extends SystemService { Slog.d(TAG, String.format("Received a camera launch event: " + "values=[%.4f, %.4f, %.4f].", values[0], values[1], values[2])); } - if (handleCameraLaunchGesture(true /* useWakelock */)) { + if (handleCameraLaunchGesture(true /* useWakelock */, + StatusBarManager.CAMERA_LAUNCH_SOURCE_WIGGLE)) { MetricsLogger.action(mContext, MetricsLogger.ACTION_WIGGLE_CAMERA_GESTURE); trackCameraLaunchEvent(event); } diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java index 5d0193108891..25d646d2bb3b 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerInternal.java @@ -28,5 +28,5 @@ public interface StatusBarManagerInternal { void showScreenPinningRequest(); void showAssistDisclosure(); void startAssist(Bundle args); - void onCameraLaunchGestureDetected(); + void onCameraLaunchGestureDetected(int source); } diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index 11a16394a502..19b03d5e56cd 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -178,10 +178,10 @@ public class StatusBarManagerService extends IStatusBarService.Stub { } @Override - public void onCameraLaunchGestureDetected() { + public void onCameraLaunchGestureDetected(int source) { if (mBar != null) { try { - mBar.onCameraLaunchGestureDetected(); + mBar.onCameraLaunchGestureDetected(source); } catch (RemoteException e) { } } diff --git a/tests/CameraPrewarmTest/src/com/google/android/test/cameraprewarm/CameraActivity.java b/tests/CameraPrewarmTest/src/com/google/android/test/cameraprewarm/CameraActivity.java index 0b43666a5453..8085db72fba5 100644 --- a/tests/CameraPrewarmTest/src/com/google/android/test/cameraprewarm/CameraActivity.java +++ b/tests/CameraPrewarmTest/src/com/google/android/test/cameraprewarm/CameraActivity.java @@ -31,5 +31,7 @@ public class CameraActivity extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.camera_activity); Log.i(TAG, "Activity created"); + Log.i(TAG, "Source: " + + getIntent().getStringExtra("com.android.systemui.camera_launch_source")); } } diff --git a/tests/CameraPrewarmTest/src/com/google/android/test/cameraprewarm/SecureCameraActivity.java b/tests/CameraPrewarmTest/src/com/google/android/test/cameraprewarm/SecureCameraActivity.java index 530fe0063954..242d3b2c2a98 100644 --- a/tests/CameraPrewarmTest/src/com/google/android/test/cameraprewarm/SecureCameraActivity.java +++ b/tests/CameraPrewarmTest/src/com/google/android/test/cameraprewarm/SecureCameraActivity.java @@ -17,6 +17,7 @@ package com.google.android.test.cameraprewarm; import android.app.Activity; +import android.graphics.Camera; import android.os.Bundle; import android.util.Log; import android.view.WindowManager; @@ -31,5 +32,7 @@ public class SecureCameraActivity extends Activity { setContentView(R.layout.camera_activity); getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); Log.i(CameraActivity.TAG, "Activity created"); + Log.i(CameraActivity.TAG, "Source: " + + getIntent().getStringExtra("com.android.systemui.camera_launch_source")); } } |