summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/tv/pip/PipOverlayActivity.java38
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();
+ }
}