Fix NPE when device do NOT has FEATURE_PICTURE_IN_PICTURE

Some project may be config FEATURE_PICTURE_IN_PICTURE = false
If device not support PIP, components in PipController won't initialized,
but OverviewProxyService PipController APIs will lead NPE

Solution: Check if device has system PIP feature before calling

Bug: 161118569
Fixes: 167390795
Test: make SystemUI
Test: make ArcSystemUI
Test: lunch aosp_tv_arm-userdebug & make
Test: atest WindowManagerShellTests
Test: atest SystemUITests
Test: adb shell input keyevent 171(KEYCODE_WINDOW)
Test: manual test Pip demo AP
Change-Id: I0ac17901f31623f04ad5e6787be0f4f25e6066c5
This commit is contained in:
Bill Lin
2020-09-02 00:56:18 +08:00
parent 8f36c6e55a
commit e78dd5f068
2 changed files with 13 additions and 3 deletions

View File

@@ -280,6 +280,7 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac
PackageManager pm = context.getPackageManager();
boolean supportsPip = pm.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE);
if (!supportsPip) {
Log.w(TAG, "Device not support PIP feature");
return;
}

View File

@@ -16,6 +16,7 @@
package com.android.systemui.recents;
import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE;
import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY;
import static android.view.MotionEvent.ACTION_CANCEL;
import static android.view.MotionEvent.ACTION_DOWN;
@@ -143,6 +144,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
private int mConnectionBackoffAttempts;
private boolean mBound;
private boolean mIsEnabled;
private boolean mHasPipFeature;
private int mCurrentBoundedUserId = -1;
private float mNavBarButtonAlpha;
private boolean mInputFocusTransferStarted;
@@ -383,7 +385,9 @@ public class OverviewProxyService extends CurrentUserTracker implements
@Override
public void setShelfHeight(boolean visible, int shelfHeight) {
if (!verifyCaller("setShelfHeight")) {
if (!verifyCaller("setShelfHeight") || !mHasPipFeature) {
Log.w(TAG_OPS,
"ByPass setShelfHeight, FEATURE_PICTURE_IN_PICTURE:" + mHasPipFeature);
return;
}
long token = Binder.clearCallingIdentity();
@@ -409,7 +413,9 @@ public class OverviewProxyService extends CurrentUserTracker implements
@Override
public void notifySwipeToHomeFinished() {
if (!verifyCaller("notifySwipeToHomeFinished")) {
if (!verifyCaller("notifySwipeToHomeFinished") || !mHasPipFeature) {
Log.w(TAG_OPS, "ByPass notifySwipeToHomeFinished, FEATURE_PICTURE_IN_PICTURE:"
+ mHasPipFeature);
return;
}
long token = Binder.clearCallingIdentity();
@@ -424,7 +430,9 @@ public class OverviewProxyService extends CurrentUserTracker implements
@Override
public void setPinnedStackAnimationListener(IPinnedStackAnimationListener listener) {
if (!verifyCaller("setPinnedStackAnimationListener")) {
if (!verifyCaller("setPinnedStackAnimationListener") || !mHasPipFeature) {
Log.w(TAG_OPS, "ByPass setPinnedStackAnimationListener, FEATURE_PICTURE_IN_PICTURE:"
+ mHasPipFeature);
return;
}
long token = Binder.clearCallingIdentity();
@@ -617,6 +625,7 @@ public class OverviewProxyService extends CurrentUserTracker implements
super(broadcastDispatcher);
mContext = context;
mPipOptional = pipOptional;
mHasPipFeature = mContext.getPackageManager().hasSystemFeature(FEATURE_PICTURE_IN_PICTURE);
mStatusBarOptionalLazy = statusBarOptionalLazy;
mHandler = new Handler();
mNavBarControllerLazy = navBarControllerLazy;