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

Commit 8ca33285 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Prevent SystemCaptionsManagerService init from blocking unlockUser"...

Merge "Prevent SystemCaptionsManagerService init from blocking unlockUser" into rvc-dev am: ae34fd76 am: 32b618a6 am: 9fcead13

Change-Id: I8788a322b09ccde9298eb08c9e085e5c6f23033d
parents 28b6c53e 9fcead13
Loading
Loading
Loading
Loading
+28 −6
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.systemcaptions;

import static com.android.internal.util.function.pooled.PooledLambda.obtainMessage;

import android.annotation.Nullable;
import android.content.ComponentName;
import android.content.Context;
@@ -37,6 +39,8 @@ final class RemoteSystemCaptionsManagerService {
    private static final String SERVICE_INTERFACE =
            "android.service.systemcaptions.SystemCaptionsManagerService";

    private static final int MSG_BIND = 1;

    private final Object mLock = new Object();

    private final Context mContext;
@@ -71,18 +75,26 @@ final class RemoteSystemCaptionsManagerService {
        if (mVerbose) {
            Slog.v(TAG, "initialize()");
        }
        ensureBound();
        scheduleBind();
    }

    /**
     * Destroys this service.
     */
    public void destroy() {
        mHandler.sendMessage(
                obtainMessage(RemoteSystemCaptionsManagerService::handleDestroy, this));
    }

    void destroy() {
    void handleDestroy() {
        if (mVerbose) {
            Slog.v(TAG, "destroy()");
            Slog.v(TAG, "handleDestroy()");
        }

        synchronized (mLock) {
            if (mDestroyed) {
                if (mVerbose) {
                    Slog.v(TAG, "destroy(): Already destroyed");
                    Slog.v(TAG, "handleDestroy(): Already destroyed");
                }
                return;
            }
@@ -97,14 +109,24 @@ final class RemoteSystemCaptionsManagerService {
        }
    }

    private void ensureBound() {
    private void scheduleBind() {
        if (mHandler.hasMessages(MSG_BIND)) {
            if (mVerbose) Slog.v(TAG, "scheduleBind(): already scheduled");
            return;
        }
        mHandler.sendMessage(
                obtainMessage(RemoteSystemCaptionsManagerService::handleEnsureBound, this)
                .setWhat(MSG_BIND));
    }

    private void handleEnsureBound() {
        synchronized (mLock) {
            if (mService != null || mBinding) {
                return;
            }

            if (mVerbose) {
                Slog.v(TAG, "ensureBound(): binding");
                Slog.v(TAG, "handleEnsureBound(): binding");
            }
            mBinding = true;