diff options
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java b/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java index fac6338d1505..6b943e09ad53 100644 --- a/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java @@ -101,7 +101,26 @@ public class PipManager { @Override public void run() { if (mState != STATE_NO_PIP) { - // TODO: check whether PIP task is closed. + StackInfo stackInfo = null; + try { + stackInfo = mActivityManager.getStackInfo(PINNED_STACK_ID); + if (stackInfo == null) { + Log.w(TAG, "There is no pinned stack"); + closeInternal(false); + return; + } + } catch (RemoteException e) { + Log.e(TAG, "getStackInfo failed", e); + return; + } + for (int i = stackInfo.taskIds.length - 1; i >= 0; --i) { + if (stackInfo.taskIds[i] == mPipTaskId) { + // PIP task is still alive. + return; + } + } + // PIP task doesn't exist anymore in PINNED_STACK. + closeInternal(true); } } }; @@ -203,12 +222,18 @@ public class PipManager { * Closes PIP (PIPed activity and PIP system UI). */ public void closePip() { + closeInternal(true); + } + + private void closeInternal(boolean removePipStack) { mState = STATE_NO_PIP; mPipTaskId = TASK_ID_NO_PIP; - try { - mActivityManager.removeStack(PINNED_STACK_ID); - } catch (RemoteException e) { - Log.e(TAG, "removeStack failed", e); + if (removePipStack) { + try { + mActivityManager.removeStack(PINNED_STACK_ID); + } catch (RemoteException e) { + Log.e(TAG, "removeStack failed", e); + } } } |