diff options
| -rw-r--r-- | services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java | 47 |
1 files changed, 32 insertions, 15 deletions
diff --git a/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java b/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java index 71cbcb91100f..31706063eb34 100644 --- a/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java +++ b/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java @@ -53,11 +53,8 @@ import java.util.List; import java.util.Objects; import java.util.Set; -/** - * Maintains a connection to a particular {@link MediaRoute2ProviderService}. - */ -final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider - implements ServiceConnection { +/** Maintains a connection to a particular {@link MediaRoute2ProviderService}. */ +final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider { private static final String TAG = "MR2ProviderSvcProxy"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); @@ -65,6 +62,7 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider private final int mUserId; private final Handler mHandler; private final boolean mIsSelfScanOnlyProvider; + private final ServiceConnection mServiceConnection = new ServiceConnectionImpl(); // Connection state private boolean mRunning; @@ -259,9 +257,12 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider Intent service = new Intent(MediaRoute2ProviderService.SERVICE_INTERFACE); service.setComponent(mComponentName); try { - mBound = mContext.bindServiceAsUser(service, this, - Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE, - new UserHandle(mUserId)); + mBound = + mContext.bindServiceAsUser( + service, + mServiceConnection, + Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE, + new UserHandle(mUserId)); if (!mBound && DEBUG) { Slog.d(TAG, this + ": Bind failed"); } @@ -281,12 +282,11 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider mBound = false; disconnect(); - mContext.unbindService(this); + mContext.unbindService(mServiceConnection); } } - @Override - public void onServiceConnected(ComponentName name, IBinder service) { + private void onServiceConnectedInternal(IBinder service) { if (DEBUG) { Slog.d(TAG, this + ": Connected"); } @@ -310,16 +310,14 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider } } - @Override - public void onServiceDisconnected(ComponentName name) { + private void onServiceDisconnectedInternal() { if (DEBUG) { Slog.d(TAG, this + ": Service disconnected"); } disconnect(); } - @Override - public void onBindingDied(ComponentName name) { + private void onBindingDiedInternal(ComponentName name) { unbind(); if (Flags.enablePreventionOfKeepAliveRouteProviders()) { Slog.w( @@ -536,6 +534,25 @@ final class MediaRoute2ProviderServiceProxy extends MediaRoute2Provider mConnectionReady); } + // 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) { + onServiceConnectedInternal(service); + } + + @Override + public void onServiceDisconnected(ComponentName name) { + onServiceDisconnectedInternal(); + } + + @Override + public void onBindingDied(ComponentName name) { + onBindingDiedInternal(name); + } + } + private final class Connection implements DeathRecipient { private final IMediaRoute2ProviderService mService; private final ServiceCallbackStub mCallbackStub; |