From a4d4186ffbb06078d2a2544bd0772556128c4932 Mon Sep 17 00:00:00 2001 From: Sergey Nikolaienkov Date: Mon, 10 Jan 2022 08:58:39 +0100 Subject: [PATCH] postAtFrontOfQueue() in ICompanionDeviceService.Stub postAtFrontOfQueue() instead of post()-ing at the back of the queue in ICompanionDeviceService.Stub to prevent "posted" methods are invoked *before* onUnbind()/onDestroy(). Add missing @Override annotation to onDispatchMessage method. Clean up dispatchMessage() which is not a part of ICompanionDeviceService interface. Make the Stub implementation class private. Bug: 198485833 Bug: 200940347 Test: atest CtsCompanionDeviceManagerCoreTestCases Test: atest CtsCompanionDeviceManagerUiAutomationTestCases Test: atest CtsOsTestCases:CompanionDeviceManagerTest Change-Id: Ic44e7968b1cef42355631151aa6958fe1ec7dd6e --- .../companion/CompanionDeviceService.java | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/core/java/android/companion/CompanionDeviceService.java b/core/java/android/companion/CompanionDeviceService.java index 3237f7ca340a7..12ced96a0ffb5 100644 --- a/core/java/android/companion/CompanionDeviceService.java +++ b/core/java/android/companion/CompanionDeviceService.java @@ -28,9 +28,6 @@ import android.os.Handler; import android.os.IBinder; import android.util.Log; - -import com.android.internal.util.function.pooled.PooledLambda; - import java.util.Objects; /** @@ -185,31 +182,24 @@ public abstract class CompanionDeviceService extends Service { public void onBindCompanionDeviceService(@NonNull Intent intent) { } - class Stub extends ICompanionDeviceService.Stub { + private class Stub extends ICompanionDeviceService.Stub { + final Handler mMainHandler = Handler.getMain(); + final CompanionDeviceService mService = CompanionDeviceService.this; @Override public void onDeviceAppeared(AssociationInfo associationInfo) { - Handler.getMain().post( - () -> CompanionDeviceService.this.onDeviceAppeared(associationInfo)); + mMainHandler.postAtFrontOfQueue(() -> mService.onDeviceAppeared(associationInfo)); } @Override public void onDeviceDisappeared(AssociationInfo associationInfo) { - Handler.getMain().post( - () -> CompanionDeviceService.this.onDeviceDisappeared(associationInfo)); + mMainHandler.postAtFrontOfQueue(() -> mService.onDeviceDisappeared(associationInfo)); } + @Override public void onDispatchMessage(int messageId, int associationId, @NonNull byte[] message) { - Handler.getMain().sendMessage(PooledLambda.obtainMessage( - CompanionDeviceService::onDispatchMessage, - CompanionDeviceService.this, messageId, associationId, message)); - } - - public final void dispatchMessage(int messageId, int associationId, - @NonNull byte[] message) { - Handler.getMain().sendMessage(PooledLambda.obtainMessage( - CompanionDeviceService::dispatchMessage, - CompanionDeviceService.this, messageId, associationId, message)); + mMainHandler.postAtFrontOfQueue( + () -> mService.onDispatchMessage(messageId, associationId, message)); } } }