Merge "PIP: Prevent PipOverlayActivity from restarting" into nyc-dev
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user