diff options
author | Zhentao Sun <robinvane@google.com> | 2015-08-26 17:37:30 -0700 |
---|---|---|
committer | Zhentao Sun <robinvane@google.com> | 2015-08-28 17:43:46 -0700 |
commit | 04f974082e4faca48409c84aa12ed96baf47b4b5 (patch) | |
tree | 90741731967ef2b967047385904b6b3c9b1d8266 /packages/SystemUI | |
parent | 575b6fd9d10534a61ef229d59f4a57bcfcf73cac (diff) | |
download | frameworks_base-04f974082e4faca48409c84aa12ed96baf47b4b5.zip frameworks_base-04f974082e4faca48409c84aa12ed96baf47b4b5.tar.gz frameworks_base-04f974082e4faca48409c84aa12ed96baf47b4b5.tar.bz2 |
Don't launch the camera if it already in foreground.
b/23431496. This change will not launch the Intent if the target app of
this Intent is already running in the foreground.
Change-Id: Ic8c99cf3312a2ead12dbdb94825181aed934e9f0
Diffstat (limited to 'packages/SystemUI')
3 files changed, 40 insertions, 6 deletions
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 d30411a..f4439bf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java @@ -262,14 +262,21 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL return (secure && !canSkipBouncer) ? SECURE_CAMERA_INTENT : INSECURE_CAMERA_INTENT; } + /** + * Resolves the intent to launch the camera application. + */ + public ResolveInfo resolveCameraIntent() { + return mContext.getPackageManager().resolveActivityAsUser(getCameraIntent(), + PackageManager.MATCH_DEFAULT_ONLY, + KeyguardUpdateMonitor.getCurrentUser()); + } + private void updateCameraVisibility() { if (mCameraImageView == null) { // Things are not set up yet; reply hazy, ask again later return; } - ResolveInfo resolved = mContext.getPackageManager().resolveActivityAsUser(getCameraIntent(), - PackageManager.MATCH_DEFAULT_ONLY, - KeyguardUpdateMonitor.getCurrentUser()); + ResolveInfo resolved = resolveCameraIntent(); boolean visible = !isCameraDisabledByDpm() && resolved != null && getResources().getBoolean(R.bool.config_keyguardShowCameraAffordance) && mUserSetupComplete; 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 5557f9c..b93586e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -21,7 +21,10 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.animation.ValueAnimator; +import android.app.ActivityManager; +import android.app.ActivityManager.RunningTaskInfo; import android.content.Context; +import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.graphics.Canvas; import android.graphics.Color; @@ -61,6 +64,8 @@ import com.android.systemui.statusbar.policy.KeyguardUserSwitcher; import com.android.systemui.statusbar.stack.NotificationStackScrollLayout; import com.android.systemui.statusbar.stack.StackStateAnimator; +import java.util.List; + public class NotificationPanelView extends PanelView implements ExpandableView.OnHeightChangedListener, ObservableScrollView.Listener, View.OnClickListener, NotificationStackScrollLayout.OnOverscrollTopChangedListener, @@ -2425,7 +2430,28 @@ public class NotificationPanelView extends PanelView implements getCenterIcon().setLaunchingAffordance(launchingAffordance); } - public boolean canCameraGestureBeLaunched() { - return !mAfforanceHelper.isSwipingInProgress(); + /** + * Whether the camera application can be launched for the camera launch gesture. + * + * @param keyguardIsShowing whether keyguard is being shown + */ + public boolean canCameraGestureBeLaunched(boolean keyguardIsShowing) { + ResolveInfo resolveInfo = mKeyguardBottomArea.resolveCameraIntent(); + String packageToLaunch = (resolveInfo == null || resolveInfo.activityInfo == null) + ? null : resolveInfo.activityInfo.packageName; + return packageToLaunch != null && + (keyguardIsShowing || !isForegroundApp(packageToLaunch)) && + !mAfforanceHelper.isSwipingInProgress(); + } + + /** + * Return true if the applications with the package name is running in foreground. + * + * @param pkgName application package name. + */ + private boolean isForegroundApp(String pkgName) { + ActivityManager am = getContext().getSystemService(ActivityManager.class); + List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); + return !tasks.isEmpty() && pkgName.equals(tasks.get(0).topActivity.getPackageName()); } } 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 8063bbe..28d65c3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -4090,7 +4090,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, @Override public void onCameraLaunchGestureDetected() { - if (!mNotificationPanel.canCameraGestureBeLaunched()) { + if (!mNotificationPanel.canCameraGestureBeLaunched( + mStatusBarKeyguardViewManager.isShowing() && mExpandedVisible)) { return; } if (!mDeviceInteractive) { |