summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java36
1 files changed, 35 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
index 894bc539ed6f..2ec22b720233 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java
@@ -34,6 +34,7 @@ import android.os.Debug;
import android.os.Handler;
import android.os.RemoteException;
import android.os.SystemProperties;
+import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
@@ -55,7 +56,7 @@ import static com.android.systemui.Prefs.Key.TV_PICTURE_IN_PICTURE_ONBOARDING_SH
*/
public class PipManager {
private static final String TAG = "PipManager";
- private static final boolean DEBUG = false;
+ private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private static final boolean DEBUG_FORCE_ONBOARDING =
SystemProperties.getBoolean("debug.tv.pip_force_onboarding", false);
@@ -584,6 +585,10 @@ public class PipManager {
private TaskStackListener mTaskStackListener = new TaskStackListener() {
@Override
public void onTaskStackChanged() {
+ if (DEBUG) Log.d(TAG, "onTaskStackChanged()");
+ if (!checkCurrentUserId()) {
+ return;
+ }
if (mState != STATE_NO_PIP) {
boolean hasPip = false;
@@ -618,6 +623,9 @@ public class PipManager {
@Override
public void onActivityPinned() {
if (DEBUG) Log.d(TAG, "onActivityPinned()");
+ if (!checkCurrentUserId()) {
+ return;
+ }
StackInfo stackInfo = getPinnedStackInfo();
if (stackInfo == null) {
Log.w(TAG, "Cannot find pinned stack");
@@ -648,6 +656,9 @@ public class PipManager {
@Override
public void onPinnedActivityRestartAttempt() {
if (DEBUG) Log.d(TAG, "onPinnedActivityRestartAttempt()");
+ if (!checkCurrentUserId()) {
+ return;
+ }
// If PIPed activity is launched again by Launcher or intent, make it fullscreen.
movePipToFullscreen();
}
@@ -655,6 +666,9 @@ public class PipManager {
@Override
public void onPinnedStackAnimationEnded() {
if (DEBUG) Log.d(TAG, "onPinnedStackAnimationEnded()");
+ if (!checkCurrentUserId()) {
+ return;
+ }
switch (mState) {
case STATE_PIP_OVERLAY:
if (!mPipRecentsOverlayManager.isRecentsShown()) {
@@ -675,6 +689,26 @@ public class PipManager {
break;
}
}
+
+ // {@link android.app.ITaskStackListener} isn't multi-user aware.
+ // Check the current uid and current SystemUI's running uid
+ // so we can handle the PIP status change only once.
+ private boolean checkCurrentUserId() {
+ try {
+ int processUserId = UserHandle.myUserId();
+ int currentUserId = mActivityManager.getCurrentUser().id;
+ if (processUserId != currentUserId) {
+ if (DEBUG) {
+ Log.d(TAG, "UID mismatch. SystemUI is running uid=" + processUserId
+ + " and the current user is uid=" + currentUserId);
+ }
+ return false;
+ }
+ } catch (RemoteException e) {
+ Log.w(TAG, "Unable to get current user.");
+ }
+ return true;
+ }
};
/**