diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java | 7 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/tv/pip/PipOverlayActivity.java | 38 |
2 files changed, 37 insertions, 8 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 8db75344e483..451203dd513a 100644 --- a/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java @@ -152,6 +152,7 @@ public class PipManager { private final Runnable mOnPinnedActivityRestartAttempt = new Runnable() { @Override public void run() { + // If PIPed activity is launched again by Launcher or intent, make it fullscreen. movePipToFullscreen(); } }; @@ -315,11 +316,7 @@ public class PipManager { private void showPipOverlay() { if (DEBUG) Log.d(TAG, "showPipOverlay()"); mState = STATE_PIP_OVERLAY; - Intent intent = new Intent(mContext, PipOverlayActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - final ActivityOptions options = ActivityOptions.makeBasic(); - options.setLaunchStackId(PINNED_STACK_ID); - mContext.startActivity(intent, options.toBundle()); + PipOverlayActivity.showPipOverlay(mContext); } /** diff --git a/packages/SystemUI/src/com/android/systemui/tv/pip/PipOverlayActivity.java b/packages/SystemUI/src/com/android/systemui/tv/pip/PipOverlayActivity.java index 95d655c2f320..4bd3f49e1fc8 100644 --- a/packages/SystemUI/src/com/android/systemui/tv/pip/PipOverlayActivity.java +++ b/packages/SystemUI/src/com/android/systemui/tv/pip/PipOverlayActivity.java @@ -17,21 +17,31 @@ package com.android.systemui.tv.pip; import android.app.Activity; +import android.app.ActivityOptions; +import android.content.Context; +import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.view.View; import com.android.systemui.R; +import static android.app.ActivityManager.StackId.PINNED_STACK_ID; + /** * Activity to show an overlay on top of PIP activity to show how to pop up PIP menu. */ public class PipOverlayActivity extends Activity implements PipManager.Listener { - private static final String TAG = "PipOverlayActivity"; - private static final boolean DEBUG = false; - private static final long SHOW_GUIDE_OVERLAY_VIEW_DURATION_MS = 4000; + /** + * The single instance of PipOverlayActivity to prevent it from restarting. + * Note that {@link PipManager} moves the PIPed activity to fullscreen if the activity is + * restarted. It's because the activity may be started by the Launcher or an intent again, + * but we don't want do so for the PipOverlayActivity. + */ + private static PipOverlayActivity sPipOverlayActivity; + private final PipManager mPipManager = PipManager.getInstance(); private final Handler mHandler = new Handler(); private View mGuideOverlayView; @@ -42,6 +52,19 @@ public class PipOverlayActivity extends Activity implements PipManager.Listener } }; + /** + * Launches the PIP overlay. This should be only called on the main thread. + */ + public static void showPipOverlay(Context context) { + if (sPipOverlayActivity == null) { + Intent intent = new Intent(context, PipOverlayActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + final ActivityOptions options = ActivityOptions.makeBasic(); + options.setLaunchStackId(PINNED_STACK_ID); + context.startActivity(intent, options.toBundle()); + } + } + @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); @@ -49,6 +72,8 @@ public class PipOverlayActivity extends Activity implements PipManager.Listener mGuideOverlayView = findViewById(R.id.guide_overlay); mGuideButtonsView = findViewById(R.id.guide_buttons); mPipManager.addListener(this); + + sPipOverlayActivity = this; } @Override @@ -76,6 +101,7 @@ public class PipOverlayActivity extends Activity implements PipManager.Listener @Override protected void onDestroy() { super.onDestroy(); + sPipOverlayActivity = null; mHandler.removeCallbacksAndMessages(null); mPipManager.removeListener(this); mPipManager.resumePipResizing( @@ -107,4 +133,10 @@ public class PipOverlayActivity extends Activity implements PipManager.Listener @Override public void onMediaControllerChanged() { } + + @Override + public void finish() { + sPipOverlayActivity = null; + super.finish(); + } } |