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

Commit 6669dac3 authored by Santiago Seifert's avatar Santiago Seifert Committed by Android (Google) Code Review
Browse files

Merge changes I5d275d88,If9bcb9f6 into main

* changes:
  Post ServiceConnection operations to handler
  Refactor ServiceConnection impl into inner class
parents b746374d c723c2c2
Loading
Loading
Loading
Loading
+44 −15
Original line number Original line Diff line number Diff line
@@ -57,11 +57,8 @@ import java.util.Map;
import java.util.Objects;
import java.util.Objects;
import java.util.Set;
import java.util.Set;


/**
/** Maintains a connection to a particular {@link MediaRoute2ProviderService}. */
 * Maintains a connection to a particular {@link MediaRoute2ProviderService}.
final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider {
 */
final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider
        implements ServiceConnection {
    private static final String TAG = "MR2ProviderSvcProxy";
    private static final String TAG = "MR2ProviderSvcProxy";
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);


@@ -69,6 +66,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider
    private final int mUserId;
    private final int mUserId;
    private final Handler mHandler;
    private final Handler mHandler;
    private final boolean mIsSelfScanOnlyProvider;
    private final boolean mIsSelfScanOnlyProvider;
    private final ServiceConnection mServiceConnection = new ServiceConnectionImpl();


    // Connection state
    // Connection state
    private boolean mRunning;
    private boolean mRunning;
@@ -303,7 +301,10 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider
            Intent service = new Intent(MediaRoute2ProviderService.SERVICE_INTERFACE);
            Intent service = new Intent(MediaRoute2ProviderService.SERVICE_INTERFACE);
            service.setComponent(mComponentName);
            service.setComponent(mComponentName);
            try {
            try {
                mBound = mContext.bindServiceAsUser(service, this,
                mBound =
                        mContext.bindServiceAsUser(
                                service,
                                mServiceConnection,
                                Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE,
                                Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE,
                                new UserHandle(mUserId));
                                new UserHandle(mUserId));
                if (!mBound && DEBUG) {
                if (!mBound && DEBUG) {
@@ -325,12 +326,11 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider


            mBound = false;
            mBound = false;
            disconnect();
            disconnect();
            mContext.unbindService(this);
            mContext.unbindService(mServiceConnection);
        }
        }
    }
    }


    @Override
    private void onServiceConnectedInternal(IBinder service) {
    public void onServiceConnected(ComponentName name, IBinder service) {
        if (DEBUG) {
        if (DEBUG) {
            Slog.d(TAG, this + ": Connected");
            Slog.d(TAG, this + ": Connected");
        }
        }
@@ -354,16 +354,14 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider
        }
        }
    }
    }


    @Override
    private void onServiceDisconnectedInternal() {
    public void onServiceDisconnected(ComponentName name) {
        if (DEBUG) {
        if (DEBUG) {
            Slog.d(TAG, this + ": Service disconnected");
            Slog.d(TAG, this + ": Service disconnected");
        }
        }
        disconnect();
        disconnect();
    }
    }


    @Override
    private void onBindingDiedInternal(ComponentName name) {
    public void onBindingDied(ComponentName name) {
        unbind();
        unbind();
        if (Flags.enablePreventionOfKeepAliveRouteProviders()) {
        if (Flags.enablePreventionOfKeepAliveRouteProviders()) {
            Slog.w(
            Slog.w(
@@ -662,6 +660,37 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider
                pendingTransferCount);
                pendingTransferCount);
    }
    }


    // All methods in this class are called on the main thread.
    private final class ServiceConnectionImpl implements ServiceConnection {

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            if (Flags.enableMr2ServiceNonMainBgThread()) {
                mHandler.post(() -> onServiceConnectedInternal(service));
            } else {
                onServiceConnectedInternal(service);
            }
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            if (Flags.enableMr2ServiceNonMainBgThread()) {
                mHandler.post(() -> onServiceDisconnectedInternal());
            } else {
                onServiceDisconnectedInternal();
            }
        }

        @Override
        public void onBindingDied(ComponentName name) {
            if (Flags.enableMr2ServiceNonMainBgThread()) {
                mHandler.post(() -> onBindingDiedInternal(name));
            } else {
                onBindingDiedInternal(name);
            }
        }
    }

    private final class Connection implements DeathRecipient {
    private final class Connection implements DeathRecipient {
        private final IMediaRoute2ProviderService mService;
        private final IMediaRoute2ProviderService mService;
        private final ServiceCallbackStub mCallbackStub;
        private final ServiceCallbackStub mCallbackStub;