From be00a83ae2fff92adaa368ec29125db0b545f6dc Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Tue, 10 Mar 2020 11:08:35 -0700 Subject: Fix NPE when logging already removed pip activity Bug: 148943800 Test: Manual --- .../src/com/android/systemui/pip/phone/PipAppOpsListener.java | 2 +- .../src/com/android/systemui/pip/phone/PipManager.java | 2 +- .../src/com/android/systemui/pip/phone/PipMediaController.java | 2 +- .../src/com/android/systemui/pip/phone/PipMenuActivity.java | 2 +- .../src/com/android/systemui/pip/phone/PipTouchHandler.java | 10 +++++++--- .../SystemUI/src/com/android/systemui/pip/phone/PipUtils.java | 2 +- 6 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipAppOpsListener.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipAppOpsListener.java index b09d6e163b77..7dfd99c2110d 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipAppOpsListener.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipAppOpsListener.java @@ -44,7 +44,7 @@ public class PipAppOpsListener { try { // Dismiss the PiP once the user disables the app ops setting for that package final Pair topPipActivityInfo = - PipUtils.getTopPinnedActivity(mContext, mActivityManager); + PipUtils.getTopPipActivity(mContext, mActivityManager); if (topPipActivityInfo.first != null) { final ApplicationInfo appInfo = mContext.getPackageManager() .getApplicationInfoAsUser(packageName, 0, topPipActivityInfo.second); diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java index 1fdf92ee3832..32e9a03dfac9 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java @@ -115,7 +115,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio @Override public void onActivityUnpinned() { - final Pair topPipActivityInfo = PipUtils.getTopPinnedActivity( + final Pair topPipActivityInfo = PipUtils.getTopPipActivity( mContext, mActivityManager); final ComponentName topActivity = topPipActivityInfo.first; mMenuController.onActivityUnpinned(); diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java index e57b4166937f..849a62add80f 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMediaController.java @@ -231,7 +231,7 @@ public class PipMediaController { */ private void resolveActiveMediaController(List controllers) { if (controllers != null) { - final ComponentName topActivity = PipUtils.getTopPinnedActivity(mContext, + final ComponentName topActivity = PipUtils.getTopPipActivity(mContext, mActivityManager).first; if (topActivity != null) { for (int i = 0; i < controllers.size(); i++) { diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java index fc04f795c056..2b9b1716cb18 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipMenuActivity.java @@ -569,7 +569,7 @@ public class PipMenuActivity extends Activity { private void showSettings() { final Pair topPipActivityInfo = - PipUtils.getTopPinnedActivity(this, ActivityManager.getService()); + PipUtils.getTopPipActivity(this, ActivityManager.getService()); if (topPipActivityInfo.first != null) { final UserHandle user = UserHandle.of(topPipActivityInfo.second); final Intent settingsIntent = new Intent(ACTION_PICTURE_IN_PICTURE_SETTINGS, diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java index 90db91a7a29e..b5fb1a9dba9a 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java @@ -31,6 +31,7 @@ import android.graphics.Rect; import android.os.Handler; import android.os.RemoteException; import android.util.Log; +import android.util.Pair; import android.util.Size; import android.view.IPinnedStackController; import android.view.InputEvent; @@ -148,8 +149,11 @@ public class PipTouchHandler { @Override public void onPipDismiss() { - MetricsLoggerWrapper.logPictureInPictureDismissByTap(mContext, - PipUtils.getTopPinnedActivity(mContext, mActivityManager)); + Pair topPipActivity = PipUtils.getTopPipActivity(mContext, + mActivityManager); + if (topPipActivity.first != null) { + MetricsLoggerWrapper.logPictureInPictureDismissByTap(mContext, topPipActivity); + } mMotionHelper.dismissPip(); } @@ -653,7 +657,7 @@ public class PipTouchHandler { // Check if the user dragged or flung the PiP offscreen to dismiss it if (mMotionHelper.shouldDismissPip() || isFlingToBot) { MetricsLoggerWrapper.logPictureInPictureDismissByDrag(mContext, - PipUtils.getTopPinnedActivity(mContext, mActivityManager)); + PipUtils.getTopPipActivity(mContext, mActivityManager)); mMotionHelper.animateDismiss( vel.x, vel.y, PipTouchHandler.this::updateDismissFraction /* updateAction */); diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipUtils.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipUtils.java index 1ed1904d30fb..4cfec0193b54 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipUtils.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipUtils.java @@ -36,7 +36,7 @@ public class PipUtils { * @return the ComponentName and user id of the top non-SystemUI activity in the pinned stack. * The component name may be null if no such activity exists. */ - public static Pair getTopPinnedActivity(Context context, + public static Pair getTopPipActivity(Context context, IActivityManager activityManager) { try { final String sysUiPackageName = context.getPackageName(); -- cgit v1.2.3-59-g8ed1b