diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 6ec757d1610e7..c1f97a8d8ab70 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -152,6 +152,9 @@
+
+
+
0
+ && resourceType == Intent.EXTRA_MEDIA_RESOURCE_TYPE_VIDEO_CODEC) {
+ handleMediaResourceGranted(packageNames);
+ }
}
+
}
};
@@ -125,7 +149,8 @@ public class PipManager {
}
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PICTURE_IN_PICTURE_BUTTON);
- mContext.registerReceiver(mPipButtonReceiver, intentFilter);
+ intentFilter.addAction(Intent.ACTION_MEDIA_RESOURCE_GRANTED);
+ mContext.registerReceiver(mBroadcastReceiver, intentFilter);
}
private void startPip() {
@@ -142,6 +167,7 @@ public class PipManager {
*/
public void closePip() {
mState = STATE_NO_PIP;
+ mPipTaskId = TASK_ID_NO_PIP;
StackInfo stackInfo = null;
try {
stackInfo = mActivityManager.getStackInfo(PINNED_STACK_ID);
@@ -166,6 +192,7 @@ public class PipManager {
*/
public void movePipToFullscreen() {
mState = STATE_NO_PIP;
+ mPipTaskId = TASK_ID_NO_PIP;
for (int i = mListeners.size() - 1; i >= 0; --i) {
mListeners.get(i).onMoveToFullscreen();
}
@@ -251,6 +278,45 @@ public class PipManager {
}
}
+ private void handleMediaResourceGranted(String[] packageNames) {
+ StackInfo fullscreenStack = null;
+ try {
+ fullscreenStack = mActivityManager.getStackInfo(FULLSCREEN_WORKSPACE_STACK_ID);
+ } catch (RemoteException e) {
+ Log.e(TAG, "getStackInfo failed", e);
+ }
+ if (fullscreenStack == null) {
+ return;
+ }
+ int fullscreenTopTaskId = fullscreenStack.taskIds[fullscreenStack.taskIds.length - 1];
+ List tasks = null;
+ try {
+ tasks = mActivityManager.getTasks(MAX_RUNNING_TASKS_COUNT, 0);
+ } catch (RemoteException e) {
+ Log.e(TAG, "getTasks failed", e);
+ }
+ if (tasks == null) {
+ return;
+ }
+ boolean wasGrantedInFullscreen = false;
+ boolean wasGrantedInPip = false;
+ for (int i = tasks.size() - 1; i >= 0; --i) {
+ RunningTaskInfo task = tasks.get(i);
+ for (int j = packageNames.length - 1; j >= 0; --j) {
+ if (task.topActivity.getPackageName().equals(packageNames[j])) {
+ if (task.id == fullscreenTopTaskId) {
+ wasGrantedInFullscreen = true;
+ } else if (task.id == mPipTaskId) {
+ wasGrantedInPip= true;
+ }
+ }
+ }
+ }
+ if (wasGrantedInFullscreen && !wasGrantedInPip) {
+ closePip();
+ }
+ }
+
private class TaskStackListener extends ITaskStackListener.Stub {
@Override
public void onTaskStackChanged() throws RemoteException {