Add ImsManager.addRegistrationListener function
Switch RcsService from using open() to addRegistrationListener()
Bug: 28150730
Change-Id: If13c610ed1b3a3cb5e36721fab69d72c6cddda62
diff --git a/rcs/rcsservice/src/com/android/service/ims/RcsService.java b/rcs/rcsservice/src/com/android/service/ims/RcsService.java
index fa23603..d5ce570 100644
--- a/rcs/rcsservice/src/com/android/service/ims/RcsService.java
+++ b/rcs/rcsservice/src/com/android/service/ims/RcsService.java
@@ -72,11 +72,6 @@
*/
private Logger logger = Logger.getLogger(this.getClass().getName());
- final static String ACTION_IMS_FEATURE_STATUS_CHANGED =
- "com.android.service.ims.presence.ims-feature-changed";
- private static final int INVALID_SERVICE_ID = -1;
- int mServiceId = INVALID_SERVICE_ID;
-
private RcsStackAdaptor mRcsStackAdaptor = null;
private PresencePublication mPublication = null;
private PresenceSubscriber mSubscriber = null;
@@ -143,10 +138,6 @@
}
public void handleImsServiceUp() {
- // Don't check mServiceId since it wasn't reset to INVALID_SERVICE_ID when
- // got ACTION_IMS_SERVICE_DOWN
- // This is phone crash case. Reset mServiceId to INVALID_SERVICE_ID
- mServiceId = INVALID_SERVICE_ID;
if(mPublication != null) {
mPublication.handleImsServiceUp();
}
@@ -155,11 +146,6 @@
}
public void handleImsServiceDown() {
- // Don't close since it could close the wrong one when phone crashed and restarted.
- //if((mImsManager != null) && (mServiceId != INVALID_SERVICE_ID)) {
- // mImsManager.close(mServiceId);
- // mServiceId = INVALID_SERVICE_ID;
- //}
if(mPublication != null) {
mPublication.handleImsServiceDown();
}
@@ -370,45 +356,16 @@
};
void registerImsConnectionStateListener() {
- final Context context = this;
- Thread t = new Thread() {
- @Override
- public void run() {
- while (mServiceId == INVALID_SERVICE_ID) {
- try {
- ImsManager imsManager = ImsManager.getInstance(context,
- SubscriptionManager.getDefaultVoicePhoneId());
- if (imsManager != null) {
- mServiceId = imsManager.open(ImsServiceClass.RCS,
- createIncomingCallPendingIntent(),
- mImsConnectionStateListener);
- }
- } catch (ImsException e) {
- logger.error("register exception=", e);
- }
-
- if (mServiceId == INVALID_SERVICE_ID) {
- try {
- logger.print("register wait for imsservice");
- sleep(300);
- } catch (InterruptedException e) {
- logger.error("register exception=", e);
- }
- } else {
- logger.print("register imsservice ready mServiceId="+mServiceId);
- }
- }
+ try {
+ ImsManager imsManager = ImsManager.getInstance(this,
+ SubscriptionManager.getDefaultVoicePhoneId());
+ if (imsManager != null) {
+ imsManager.addRegistrationListener(ImsServiceClass.MMTEL,
+ mImsConnectionStateListener);
}
- };
-
- t.start();
- }
-
- private PendingIntent createIncomingCallPendingIntent() {
- Intent intent = new Intent(ACTION_IMS_FEATURE_STATUS_CHANGED);
- intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
- return PendingIntent.getBroadcast(this, 0, intent,
- PendingIntent.FLAG_UPDATE_CURRENT);
+ } catch (ImsException e) {
+ logger.error("addRegistrationListener exception=", e);
+ }
}
private ImsConnectionStateListener mImsConnectionStateListener =
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index 43fdae9..ec70757 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -749,6 +749,32 @@
}
/**
+ * Adds registration listener to the IMS service.
+ *
+ * @param serviceClass a service class specified in {@link ImsServiceClass}
+ * For VoLTE service, it MUST be a {@link ImsServiceClass#MMTEL}.
+ * @param listener To listen to IMS registration events; It cannot be null
+ * @throws NullPointerException if {@code listener} is null
+ * @throws ImsException if calling the IMS service results in an error
+ */
+ public void addRegistrationListener(int serviceClass, ImsConnectionStateListener listener)
+ throws ImsException {
+ checkAndThrowExceptionIfServiceUnavailable();
+
+ if (listener == null) {
+ throw new NullPointerException("listener can't be null");
+ }
+
+ try {
+ mImsService.addRegistrationListener(mPhoneId, serviceClass,
+ createRegistrationListenerProxy(serviceClass, listener));
+ } catch (RemoteException e) {
+ throw new ImsException("addRegistrationListener()", e,
+ ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN);
+ }
+ }
+
+ /**
* Closes the specified service ({@link ImsServiceClass}) not to make/receive calls.
* All the resources that were allocated to the service are also released.
*
diff --git a/src/java/com/android/ims/ImsServiceBase.java b/src/java/com/android/ims/ImsServiceBase.java
index 69364e3..66122df 100644
--- a/src/java/com/android/ims/ImsServiceBase.java
+++ b/src/java/com/android/ims/ImsServiceBase.java
@@ -67,6 +67,12 @@
}
@Override
+ public void addRegistrationListener(int serviceId, int serviceType, IImsRegistrationListener listener) {
+ onAddRegistrationListener(serviceId, serviceType, listener);
+ }
+
+
+ @Override
public ImsCallProfile createCallProfile(int serviceId, int serviceType, int callType) {
return onCreateCallProfile(serviceId, serviceType, callType);
}
@@ -155,6 +161,10 @@
// no-op
}
+ protected void onAddRegistrationListener(int serviceId, int serviceType, IImsRegistrationListener listener) {
+ // no-op
+ }
+
protected ImsCallProfile onCreateCallProfile(int serviceId, int serviceType, int callType) {
// no-op