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 {