diff options
Diffstat (limited to 'src/com/android/server/telecom/ServiceBinder.java')
-rw-r--r-- | src/com/android/server/telecom/ServiceBinder.java | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/com/android/server/telecom/ServiceBinder.java b/src/com/android/server/telecom/ServiceBinder.java index 7274993e7..77f7b2e65 100644 --- a/src/com/android/server/telecom/ServiceBinder.java +++ b/src/com/android/server/telecom/ServiceBinder.java @@ -29,6 +29,7 @@ import android.util.ArraySet; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.Preconditions; +import com.android.server.telecom.flags.FeatureFlags; import java.util.Collections; import java.util.Set; @@ -240,6 +241,8 @@ public abstract class ServiceBinder { * Abbreviated form of the package name from {@link #mComponentName}; used for session logging. */ protected final String mPackageAbbreviation; + private final FeatureFlags mFlags; + /** The set of callbacks waiting for notification of the binding's success or failure. */ private final Set<BindCallback> mCallbacks = new ArraySet<>(); @@ -282,7 +285,7 @@ public abstract class ServiceBinder { * @param userHandle The {@link UserHandle} to use for binding. */ protected ServiceBinder(String serviceAction, ComponentName componentName, Context context, - TelecomSystem.SyncRoot lock, UserHandle userHandle) { + TelecomSystem.SyncRoot lock, UserHandle userHandle, FeatureFlags featureFlags) { Preconditions.checkState(!TextUtils.isEmpty(serviceAction)); Preconditions.checkNotNull(componentName); @@ -292,6 +295,7 @@ public abstract class ServiceBinder { mComponentName = componentName; mPackageAbbreviation = Log.getPackageAbbreviation(componentName); mUserHandle = userHandle; + mFlags = featureFlags; } final UserHandle getUserHandle() { @@ -305,10 +309,16 @@ public abstract class ServiceBinder { } final void decrementAssociatedCallCount() { - decrementAssociatedCallCount(false /*isSuppressingUnbind*/); + if (mFlags.updatedRcsCallCountTracking()) { + decrementAssociatedCallCountUpdated(); + } else { + decrementAssociatedCallCount(false /*isSuppressingUnbind*/); + } } final void decrementAssociatedCallCount(boolean isSuppressingUnbind) { + // This is the legacy method - will be removed after the Flags.updatedRcsCallCountTracking + // mendel study completes. if (mAssociatedCallCount > 0) { mAssociatedCallCount--; Log.v(this, "Call count decrement %d, %s", mAssociatedCallCount, @@ -323,6 +333,21 @@ public abstract class ServiceBinder { } } + final void decrementAssociatedCallCountUpdated() { + if (mAssociatedCallCount > 0) { + mAssociatedCallCount--; + Log.i(this, "Call count decrement %d, %s", mAssociatedCallCount, + mComponentName.flattenToShortString()); + + if (mAssociatedCallCount == 0) { + unbind(); + } + } else { + Log.wtf(this, "%s: ignoring a request to decrement mAssociatedCallCount below zero", + mComponentName.getClassName()); + } + } + final int getAssociatedCallCount() { return mAssociatedCallCount; } |