Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6ba2c558 authored by Tony Mak's avatar Tony Mak
Browse files

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
parent 2e6c4690
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -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,11 +735,12 @@ 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(
            classifier = createTextClassificationManagerAsUser(userId)
                    .createTextClassificationSession(
                            new TextClassificationContext.Builder(
                                    getContext().getPackageName(),
                                    TextClassifier.WIDGET_TYPE_CLIPBOARD
@@ -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);
    }
}