diff options
-rw-r--r-- | src/java/com/android/ims/ImsManager.java | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java index 6f38a62e..080c372c 100644 --- a/src/java/com/android/ims/ImsManager.java +++ b/src/java/com/android/ims/ImsManager.java @@ -1442,7 +1442,17 @@ public class ImsManager { mImsConfigListener = listener; } - public void addNotifyStatusChangedCallback(ImsServiceProxy.INotifyStatusChanged c) { + + /** + * Adds a callback for status changed events if the binder is already available. If it is not, + * this method will throw an ImsException. + */ + public void addNotifyStatusChangedCallbackIfAvailable(ImsServiceProxy.INotifyStatusChanged c) + throws ImsException { + if (!mImsServiceProxy.isBinderAlive()) { + throw new ImsException("Binder is not active!", + ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN); + } if (c != null) { mStatusCallbacks.add(c); } @@ -1853,8 +1863,6 @@ public class ImsManager { } public int getImsServiceStatus() throws ImsException { - checkAndThrowExceptionIfServiceUnavailable(); - return mImsServiceProxy.getFeatureStatus(); } @@ -1986,7 +1994,8 @@ public class ImsManager { } /** - * Binds the IMS service only if the service is not created. + * Checks to see if the ImsService Binder is connected. If it is not, we try to create the + * connection again. */ private void checkAndThrowExceptionIfServiceUnavailable() throws ImsException { @@ -2036,13 +2045,13 @@ public class ImsManager { TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); ImsServiceProxy serviceProxy = new ImsServiceProxy(mPhoneId, ImsFeature.MMTEL); + serviceProxy.setStatusCallback(() -> mStatusCallbacks.forEach( + ImsServiceProxy.INotifyStatusChanged::notifyStatusChanged)); // Returns null if the service is not available. IImsServiceController b = tm.getImsServiceControllerAndListen(mPhoneId, ImsFeature.MMTEL, serviceProxy.getListener()); if (b != null) { serviceProxy.setBinder(b.asBinder()); - serviceProxy.setStatusCallback(() -> mStatusCallbacks.forEach( - ImsServiceProxy.INotifyStatusChanged::notifyStatusChanged)); // Trigger the cache to be updated for feature status. serviceProxy.getFeatureStatus(); } else { @@ -2062,9 +2071,13 @@ public class ImsManager { private ImsCallSession createCallSession(int serviceId, ImsCallProfile profile) throws ImsException { try { + // Throws an exception if the ImsService Feature is not ready to accept commands. return new ImsCallSession(mImsServiceProxy.createCallSession(serviceId, profile, null)); } catch (RemoteException e) { - return null; + Rlog.w(TAG, "CreateCallSession: Error, remote exception: " + e.getMessage()); + throw new ImsException("createCallSession()", e, + ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN); + } } |