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

Commit fa414929 authored by Joanne Chung's avatar Joanne Chung
Browse files

Revert "Rebind ContentCaptureService when the binderDied."

This reverts commit 4fc5c86b.

We introduce a rebind mechanism to rebind died ContentCaptureService
because the apps tht has dependency with ContentCaptureService. But
it looks like the rate is raised for app to get the null content
capture manager.

Because the underlying issue is fixed, we don't need this workaround
now. We can also monitor if the null content capture sympton is
resolved.

Bug: 227353916
Test: manual. Add dependency and update the app, the ContentCapture
can be rebind without the this fix.
Reason for revert: To monitor if the null content capture issue
caused by this change.

Change-Id: Ibe5d6e2b5f1434243b655289fdc60174ff33a5c0
parent c003cb87
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -223,7 +223,7 @@ public final class ContentCaptureManagerService extends
    @Override // from AbstractMasterSystemService
    protected ContentCapturePerUserService newServiceLocked(@UserIdInt int resolvedUserId,
            boolean disabled) {
        return new ContentCapturePerUserService(this, mLock, disabled, resolvedUserId, mHandler);
        return new ContentCapturePerUserService(this, mLock, disabled, resolvedUserId);
    }

    @Override // from SystemService
+6 −55
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ServiceInfo;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.UserHandle;
import android.provider.Settings;
@@ -76,7 +75,6 @@ import com.android.server.contentcapture.RemoteContentCaptureService.ContentCapt
import com.android.server.infra.AbstractPerUserSystemService;

import java.io.PrintWriter;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;

@@ -90,10 +88,6 @@ final class ContentCapturePerUserService

    private static final String TAG = ContentCapturePerUserService.class.getSimpleName();

    private static final int MAX_REBIND_COUNTS = 5;
    // 5 minutes
    private static final long REBIND_DURATION_MS = 5 * 60 * 1_000;

    @GuardedBy("mLock")
    private final SparseArray<ContentCaptureServerSession> mSessions = new SparseArray<>();

@@ -127,18 +121,11 @@ final class ContentCapturePerUserService
    @GuardedBy("mLock")
    private ContentCaptureServiceInfo mInfo;

    private Instant mLastRebindTime;
    private int mRebindCount;
    private final Handler mHandler;

    private final Runnable mReBindServiceRunnable = new RebindServiceRunnable();

    // TODO(b/111276913): add mechanism to prune stale sessions, similar to Autofill's

    ContentCapturePerUserService(@NonNull ContentCaptureManagerService master,
            @NonNull Object lock, boolean disabled, @UserIdInt int userId, Handler handler) {
            @NonNull Object lock, boolean disabled, @UserIdInt int userId) {
        super(master, lock, userId);
        mHandler = handler;
        updateRemoteServiceLocked(disabled);
    }

@@ -203,44 +190,10 @@ final class ContentCapturePerUserService
        Slog.w(TAG, "remote service died: " + service);
        synchronized (mLock) {
            mZombie = true;
            // Reset rebindCount if over 12 hours mLastRebindTime
            if (mLastRebindTime != null && Instant.now().isAfter(
                    mLastRebindTime.plusMillis(12 * 60 * 60 * 1000))) {
                if (mMaster.debug) {
                    Slog.i(TAG, "The current rebind count " + mRebindCount + " is reset.");
                }
                mRebindCount = 0;
            }
            if (mRebindCount >= MAX_REBIND_COUNTS) {
            writeServiceEvent(
                    FrameworkStatsLog.CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__ON_REMOTE_SERVICE_DIED,
                    getServiceComponentName());
        }
            if (mRebindCount < MAX_REBIND_COUNTS) {
                mHandler.removeCallbacks(mReBindServiceRunnable);
                mHandler.postDelayed(mReBindServiceRunnable, REBIND_DURATION_MS);
            }
        }
    }

    private void updateRemoteServiceAndResurrectSessionsLocked() {
        boolean disabled = !isEnabledLocked();
        updateRemoteServiceLocked(disabled);
        resurrectSessionsLocked();
    }

    private final class RebindServiceRunnable implements Runnable{

        @Override
        public void run() {
            synchronized (mLock) {
                if (mZombie) {
                    mLastRebindTime = Instant.now();
                    mRebindCount++;
                    updateRemoteServiceAndResurrectSessionsLocked();
                }
            }
        }
    }

    /**
@@ -287,8 +240,8 @@ final class ContentCapturePerUserService
    }

    void onPackageUpdatedLocked() {
        mRebindCount = 0;
        updateRemoteServiceAndResurrectSessionsLocked();
        updateRemoteServiceLocked(!isEnabledLocked());
        resurrectSessionsLocked();
    }

    @GuardedBy("mLock")
@@ -602,8 +555,6 @@ final class ContentCapturePerUserService
            mInfo.dump(prefix2, pw);
        }
        pw.print(prefix); pw.print("Zombie: "); pw.println(mZombie);
        pw.print(prefix); pw.print("Rebind count: "); pw.println(mRebindCount);
        pw.print(prefix); pw.print("Last rebind: "); pw.println(mLastRebindTime);

        if (mRemoteService != null) {
            pw.print(prefix); pw.println("remote service:");