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

Commit aa6bb0ad authored by Joanne Chung's avatar Joanne Chung Committed by Android (Google) Code Review
Browse files

Merge "Revert "Rebind ContentCaptureService when the binderDied."" into tm-dev

parents a143492a fa414929
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:");