[RCS UCE] Fix the callback onRcsConnected won't be called
When the UceController is created because of the subscriptionChanged, the RcsFeatureManager was not set to the new UceController instance.
Bug: 177495626
Test: atest UceControllerManagerTest
Change-Id: Ic22bc5295289a38d3d2c44dc968656787f482991
diff --git a/src/com/android/services/telephony/rcs/UceControllerManager.java b/src/com/android/services/telephony/rcs/UceControllerManager.java
index d1f91d1..09288f1 100644
--- a/src/com/android/services/telephony/rcs/UceControllerManager.java
+++ b/src/com/android/services/telephony/rcs/UceControllerManager.java
@@ -51,6 +51,7 @@
private final ExecutorService mExecutorService;
private volatile UceController mUceController;
+ private volatile RcsFeatureManager mRcsFeatureManager;
public UceControllerManager(Context context, int slotId, int subId) {
Log.d(LOG_TAG, "create: slotId=" + slotId + ", subId=" + subId);
@@ -74,12 +75,18 @@
@Override
public void onRcsConnected(RcsFeatureManager manager) {
- mExecutorService.submit(() -> mUceController.onRcsConnected(manager));
+ mExecutorService.submit(() -> {
+ mRcsFeatureManager = manager;
+ mUceController.onRcsConnected(manager);
+ });
}
@Override
public void onRcsDisconnected() {
- mExecutorService.submit(() -> mUceController.onRcsDisconnected());
+ mExecutorService.submit(() -> {
+ mRcsFeatureManager = null;
+ mUceController.onRcsDisconnected();
+ });
}
@Override
@@ -103,6 +110,12 @@
// Destroy existing UceController and create a new one.
mUceController.onDestroy();
mUceController = new UceController(mContext, subId);
+
+ // The RCS should be connected when the mRcsFeatureManager is not null. Set it to the
+ // new UceController instance.
+ if (mRcsFeatureManager != null) {
+ mUceController.onRcsConnected(mRcsFeatureManager);
+ }
});
}