From b1f5aafc91a0a22d09d20286b6cc7dea2a9b1f29 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Wed, 5 Jun 2019 08:44:36 -0400 Subject: Use connected boolean as NLS does vs IBinder To determine if the CPS can get/send messages. Apparently the IBinder can be cached in ActivityManager and onBind() is not always called when a service is connected the second time. Test: manual; ensure a service recieves an onsubscribe for an active rule post requestUnbind/requestRebind Fixes: 62584038 Change-Id: Iffe37242509f3bf26e609e6b423f3928c00156ad (cherry picked from commit 265d093cd93099300df671f9a625b1c6985651c1) --- .../service/notification/ConditionProviderService.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/java/android/service/notification/ConditionProviderService.java b/core/java/android/service/notification/ConditionProviderService.java index 45480cb5acb7..7d3b13bec2f6 100644 --- a/core/java/android/service/notification/ConditionProviderService.java +++ b/core/java/android/service/notification/ConditionProviderService.java @@ -77,6 +77,7 @@ public abstract class ConditionProviderService extends Service { private Provider mProvider; private INotificationManager mNoMan; + boolean mIsConnected; /** * The {@link Intent} that must be declared as handled by the service. @@ -179,7 +180,7 @@ public abstract class ConditionProviderService extends Service { try { noMan.requestUnbindProvider(mProvider); // Disable future messages. - mProvider = null; + mIsConnected = false; } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -233,16 +234,16 @@ public abstract class ConditionProviderService extends Service { */ @TestApi public boolean isBound() { - if (mProvider == null) { + if (!mIsConnected) { Log.w(TAG, "Condition provider service not yet bound."); - return false; } - return true; + return mIsConnected; } private final class Provider extends IConditionProvider.Stub { @Override public void onConnected() { + mIsConnected = true; mHandler.obtainMessage(H.ON_CONNECTED).sendToTarget(); } @@ -265,7 +266,7 @@ public abstract class ConditionProviderService extends Service { @Override public void handleMessage(Message msg) { String name = null; - if (!isBound()) { + if (!mIsConnected) { return; } try { -- cgit v1.2.3-59-g8ed1b