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

Commit a182f9c9 authored by Felipe Leme's avatar Felipe Leme Committed by android-build-merger
Browse files

Merge "Disable existing ContentCapture sessions if service changes their...

Merge "Disable existing ContentCapture sessions if service changes their whitelist status." into qt-dev
am: d97db54d

Change-Id: I2e404b24e66d02afcc9ab64f15b67d391f914997
parents e5b1bc3f d97db54d
Loading
Loading
Loading
Loading
+34 −0
Original line number Original line Diff line number Diff line
@@ -54,6 +54,7 @@ import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.ArraySet;
import android.util.Slog;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.view.contentcapture.ContentCaptureCondition;
import android.view.contentcapture.ContentCaptureCondition;
import android.view.contentcapture.DataRemovalRequest;
import android.view.contentcapture.DataRemovalRequest;


@@ -552,6 +553,39 @@ final class ContentCapturePerUserService
                        + " for user " + mUserId);
                        + " for user " + mUserId);
            }
            }
            mMaster.mGlobalContentCaptureOptions.setWhitelist(mUserId, packages, activities);
            mMaster.mGlobalContentCaptureOptions.setWhitelist(mUserId, packages, activities);

            // Must disable session that are not the whitelist anymore...
            final int numSessions = mSessions.size();
            if (numSessions <= 0) return;

            // ...but without holding the lock on mGlobalContentCaptureOptions
            final SparseBooleanArray blacklistedSessions = new SparseBooleanArray(numSessions);

            for (int i = 0; i < numSessions; i++) {
                final ContentCaptureServerSession session = mSessions.valueAt(i);
                final boolean whitelisted = mMaster.mGlobalContentCaptureOptions
                        .isWhitelisted(mUserId, session.appComponentName);
                if (!whitelisted) {
                    final int sessionId = mSessions.keyAt(i);
                    if (mMaster.debug) {
                        Slog.d(TAG, "marking session " + sessionId + " (" + session.appComponentName
                                + ") for un-whitelisting");
                    }
                    blacklistedSessions.append(sessionId, true);
                }
            }
            final int numBlacklisted = blacklistedSessions.size();

            if (numBlacklisted <= 0) return;

            synchronized (mLock) {
                for (int i = 0; i < numBlacklisted; i++) {
                    final int sessionId = blacklistedSessions.keyAt(i);
                    if (mMaster.debug) Slog.d(TAG, "un-whitelisting " + sessionId);
                    final ContentCaptureServerSession session = mSessions.get(sessionId);
                    session.setContentCaptureEnabledLocked(false);
                }
            }
        }
        }


        @Override
        @Override
+4 −0
Original line number Original line Diff line number Diff line
@@ -72,6 +72,8 @@ final class ContentCaptureServerSession {


    private final Object mLock;
    private final Object mLock;


    public final ComponentName appComponentName;

    ContentCaptureServerSession(@NonNull Object lock, @NonNull IBinder activityToken,
    ContentCaptureServerSession(@NonNull Object lock, @NonNull IBinder activityToken,
            @NonNull ContentCapturePerUserService service, @NonNull ComponentName appComponentName,
            @NonNull ContentCapturePerUserService service, @NonNull ComponentName appComponentName,
            @NonNull IResultReceiver sessionStateReceiver, int taskId, int displayId, int sessionId,
            @NonNull IResultReceiver sessionStateReceiver, int taskId, int displayId, int sessionId,
@@ -79,6 +81,7 @@ final class ContentCaptureServerSession {
        Preconditions.checkArgument(sessionId != NO_SESSION_ID);
        Preconditions.checkArgument(sessionId != NO_SESSION_ID);
        mLock = lock;
        mLock = lock;
        mActivityToken = activityToken;
        mActivityToken = activityToken;
        this.appComponentName = appComponentName;
        mService = service;
        mService = service;
        mId = sessionId;
        mId = sessionId;
        mUid = uid;
        mUid = uid;
@@ -228,6 +231,7 @@ final class ContentCaptureServerSession {
        pw.print(prefix); pw.print("uid: ");  pw.print(mUid); pw.println();
        pw.print(prefix); pw.print("uid: ");  pw.print(mUid); pw.println();
        pw.print(prefix); pw.print("context: ");  mContentCaptureContext.dump(pw); pw.println();
        pw.print(prefix); pw.print("context: ");  mContentCaptureContext.dump(pw); pw.println();
        pw.print(prefix); pw.print("activity token: "); pw.println(mActivityToken);
        pw.print(prefix); pw.print("activity token: "); pw.println(mActivityToken);
        pw.print(prefix); pw.print("app component: "); pw.println(appComponentName);
        pw.print(prefix); pw.print("has autofill callback: ");
        pw.print(prefix); pw.print("has autofill callback: ");
    }
    }