summaryrefslogtreecommitdiff
path: root/core/java/android/view/ViewRootImpl.java
diff options
context:
space:
mode:
authorwilsonshih <wilsonshih@google.com>2020-03-18 22:41:55 +0800
committerwilsonshih <wilsonshih@google.com>2020-04-08 15:15:01 +0800
commitd0fc2ca51fcf74c7f0a06a7cbda59384d2b20674 (patch)
tree89b7ace3a198c5d16db2afa180d704bcd028105f /core/java/android/view/ViewRootImpl.java
parentc920673e5f971ed1e5b022697725f649c3921a42 (diff)
Support addWindow as other user
Support addWindow with the other userId which can be different from Uid. This can be used when client want to addView for secondary user. Example: 1. Create context with createContextAsUser or similar method. 2. Get WindowManager with this context. 3. WindowManager#addView Bug: 151414297 Test: atest WmTests WindowAddRemovePerfTest AddWindowAsUserTest Change-Id: I13e58d76b1f056f3829bc984c2b61496c8f8d535
Diffstat (limited to 'core/java/android/view/ViewRootImpl.java')
-rw-r--r--core/java/android/view/ViewRootImpl.java16
1 files changed, 14 insertions, 2 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 750b1eddd222..bede614b2a07 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -111,6 +111,7 @@ import android.os.RemoteException;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.Trace;
+import android.os.UserHandle;
import android.sysprop.DisplayProperties;
import android.util.AndroidRuntimeException;
import android.util.DisplayMetrics;
@@ -893,6 +894,14 @@ public final class ViewRootImpl implements ViewParent,
* We have one child
*/
public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView) {
+ setView(view, attrs, panelParentView, UserHandle.myUserId());
+ }
+
+ /**
+ * We have one child
+ */
+ public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView,
+ int userId) {
synchronized (this) {
if (mView == null) {
mView = view;
@@ -1001,8 +1010,8 @@ public final class ViewRootImpl implements ViewParent,
mAttachInfo.mRecomputeGlobalAttributes = true;
collectViewAttributes();
adjustLayoutParamsForCompatibility(mWindowAttributes);
- res = mWindowSession.addToDisplay(mWindow, mSeq, mWindowAttributes,
- getHostVisibility(), mDisplay.getDisplayId(), mTmpFrame,
+ res = mWindowSession.addToDisplayAsUser(mWindow, mSeq, mWindowAttributes,
+ getHostVisibility(), mDisplay.getDisplayId(), userId, mTmpFrame,
mAttachInfo.mContentInsets, mAttachInfo.mStableInsets,
mAttachInfo.mDisplayCutout, inputChannel,
mTempInsets, mTempControls);
@@ -1075,6 +1084,9 @@ public final class ViewRootImpl implements ViewParent,
throw new WindowManager.InvalidDisplayException("Unable to add window "
+ mWindow + " -- the specified window type "
+ mWindowAttributes.type + " is not valid");
+ case WindowManagerGlobal.ADD_INVALID_USER:
+ throw new WindowManager.BadTokenException("Unable to add Window "
+ + mWindow + " -- requested userId is not valid");
}
throw new RuntimeException(
"Unable to add window -- unknown error code " + res);