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

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

Merge "Remove ContentCaptureServerSession when app died." into qt-dev am: 094b9acb

am: 11c6dfd0

Change-Id: I4963ae27992e59b801c51304a181093d2a1b9735
parents 91a108b9 11c6dfd0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -313,7 +313,7 @@ final class ContentCapturePerUserService
        // Make sure service is bound, just in case the initial connection failed somehow
        mRemoteService.ensureBoundLocked();

        final ContentCaptureServerSession newSession = new ContentCaptureServerSession(
        final ContentCaptureServerSession newSession = new ContentCaptureServerSession(mLock,
                activityToken, this, componentName, clientReceiver, taskId, displayId, sessionId,
                uid, flags);
        if (mMaster.verbose) {
+22 −1
Original line number Diff line number Diff line
@@ -65,11 +65,14 @@ final class ContentCaptureServerSession {
     */
    private final int mUid;

    ContentCaptureServerSession(@NonNull IBinder activityToken,
    private final Object mLock;

    ContentCaptureServerSession(@NonNull Object lock, @NonNull IBinder activityToken,
            @NonNull ContentCapturePerUserService service, @NonNull ComponentName appComponentName,
            @NonNull IResultReceiver sessionStateReceiver, int taskId, int displayId, int sessionId,
            int uid, int flags) {
        Preconditions.checkArgument(sessionId != NO_SESSION_ID);
        mLock = lock;
        mActivityToken = activityToken;
        mService = service;
        mId = sessionId;
@@ -77,6 +80,11 @@ final class ContentCaptureServerSession {
        mContentCaptureContext = new ContentCaptureContext(/* clientContext= */ null,
                appComponentName, taskId, displayId, flags);
        mSessionStateReceiver = sessionStateReceiver;
        try {
            sessionStateReceiver.asBinder().linkToDeath(() -> onClientDeath(), 0);
        } catch (Exception e) {
            Slog.w(TAG, "could not register DeathRecipient for " + activityToken);
        }
    }

    /**
@@ -182,6 +190,19 @@ final class ContentCaptureServerSession {
                /* binder= */ null);
    }

    /**
     * Called when the session client binder object died - typically when its process was killed
     * and the activity was not properly destroyed.
     */
    private void onClientDeath() {
        if (mService.isVerbose()) {
            Slog.v(TAG, "onClientDeath(" + mActivityToken + "): removing session " + mId);
        }
        synchronized (mLock) {
            removeSelfLocked(/* notifyRemoteService= */ true);
        }
    }

    @GuardedBy("mLock")
    public void dumpLocked(@NonNull String prefix, @NonNull PrintWriter pw) {
        pw.print(prefix); pw.print("id: ");  pw.print(mId); pw.println();