summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Himanshu Gupta <himanshuz@google.com> 2023-02-06 16:51:03 +0000
committer Himanshu Gupta <himanshuz@google.com> 2023-02-18 00:25:32 +0000
commit14dd80579a7b6cbe3f3425b259afe6dee4ad2f76 (patch)
treee83bfe4ff155c01b36a064264f99ce1b0639e41b
parent3cc5ce80ae4ebe71cb87127de0769fb5f7dca095 (diff)
Fixing tabOwnerUserHandle population.
b/266175872 points out the case where personal handle may be populated differently than the callingUserId. In such cases tabOwnerUserHandle should be in sync with the current process' userHandle rather than the callingUserId. Bug: b/266175872 Test: atest ResolverActivityTest Change-Id: Ia3521a8878d6e7b7de891ef4f4b09c5766d12a74
-rw-r--r--core/java/com/android/internal/app/ResolverActivity.java14
1 files changed, 10 insertions, 4 deletions
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index d6a515ae2da2..73c5207e6238 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -739,6 +739,11 @@ public class ResolverActivity extends Activity implements
}
protected UserHandle fetchPersonalProfileUserHandle() {
+ // ActivityManager.getCurrentUser() refers to the current Foreground user. When clone/work
+ // profile is active, we always make the personal tab from the foreground user.
+ // Outside profiles, current foreground user is potentially the same as the sharesheet
+ // process's user (UserHandle.myUserId()), so we continue to create personal tab with the
+ // current foreground user.
mPersonalProfileUserHandle = UserHandle.of(ActivityManager.getCurrentUser());
return mPersonalProfileUserHandle;
}
@@ -768,10 +773,11 @@ public class ResolverActivity extends Activity implements
}
private UserHandle fetchTabOwnerUserHandleForLaunch() {
- if (isLaunchedAsCloneProfile()) {
- return getPersonalProfileUserHandle();
- }
- return mLaunchedFromUserHandle;
+ // If we are in work profile's process, return WorkProfile user as owner, otherwise we
+ // always return PersonalProfile user as owner
+ return UserHandle.of(UserHandle.myUserId()).equals(getWorkProfileUserHandle())
+ ? getWorkProfileUserHandle()
+ : getPersonalProfileUserHandle();
}
private boolean hasWorkProfile() {