Use the text classifier in the right user

Bug: 180577441

Test: Copy something from the work profile, verify that the text
classifier service running in the work profile is invoked.
Test: Repeat that in the personal profile

Change-Id: Id9df958b576ee48bc346a65905d960daa09b307f
This commit is contained in:
Tony Mak
2021-03-31 20:51:07 +01:00
parent 2e6c469012
commit 6ba2c55825

View File

@@ -209,7 +209,6 @@ public class ClipboardService extends SystemService {
private final AppOpsManager mAppOps;
private final ContentCaptureManagerInternal mContentCaptureInternal;
private final AutofillManagerInternal mAutofillInternal;
private final TextClassificationManager mTextClassificationManager;
private final IBinder mPermissionOwner;
private final HostClipboardMonitor mHostClipboardMonitor;
private final Handler mWorkerHandler;
@@ -240,8 +239,6 @@ public class ClipboardService extends SystemService {
mAppOps = (AppOpsManager) getContext().getSystemService(Context.APP_OPS_SERVICE);
mContentCaptureInternal = LocalServices.getService(ContentCaptureManagerInternal.class);
mAutofillInternal = LocalServices.getService(AutofillManagerInternal.class);
mTextClassificationManager = (TextClassificationManager)
getContext().getSystemService(Context.TEXT_CLASSIFICATION_SERVICE);
final IBinder permOwner = mUgmInternal.newUriPermissionOwner("clipboard");
mPermissionOwner = permOwner;
if (IS_EMULATOR) {
@@ -634,12 +631,12 @@ public class ClipboardService extends SystemService {
}
}
final int userId = UserHandle.getUserId(uid);
if (clip != null) {
startClassificationLocked(clip);
startClassificationLocked(clip, userId);
}
// Update this user
final int userId = UserHandle.getUserId(uid);
setPrimaryClipInternalLocked(getClipboardLocked(userId), clip, uid, sourcePackage);
// Update related users
@@ -738,14 +735,15 @@ public class ClipboardService extends SystemService {
}
@GuardedBy("mLock")
private void startClassificationLocked(@NonNull ClipData clip) {
private void startClassificationLocked(@NonNull ClipData clip, @UserIdInt int userId) {
TextClassifier classifier;
final long ident = Binder.clearCallingIdentity();
try {
classifier = mTextClassificationManager.createTextClassificationSession(
new TextClassificationContext.Builder(
getContext().getPackageName(),
TextClassifier.WIDGET_TYPE_CLIPBOARD
classifier = createTextClassificationManagerAsUser(userId)
.createTextClassificationSession(
new TextClassificationContext.Builder(
getContext().getPackageName(),
TextClassifier.WIDGET_TYPE_CLIPBOARD
).build()
);
} finally {
@@ -1100,4 +1098,8 @@ public class ClipboardService extends SystemService {
&& item.getIntent() == null;
}
private TextClassificationManager createTextClassificationManagerAsUser(@UserIdInt int userId) {
Context context = getContext().createContextAsUser(UserHandle.of(userId), /* flags= */ 0);
return context.getSystemService(TextClassificationManager.class);
}
}