diff options
author | Brad Ebinger <breadley@google.com> | 2017-04-27 16:54:28 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-04-27 16:54:28 +0000 |
commit | 3dd83d98a32c69770fd9595d4833002bf313450d (patch) | |
tree | b6b68aea5a8262f0e75328d24a3cd04d02260818 /src | |
parent | b779bd7c9f87d2832722e7740c74431a70aaefa6 (diff) | |
parent | 0872c3abe8f34bb4f53ad730e65a0ccd3e1adcbb (diff) | |
download | ims-3dd83d98a32c69770fd9595d4833002bf313450d.tar.gz |
Better handle MSIM DDS changed event am: b10b61e109
am: 0872c3abe8
Change-Id: I87412c87ecdca3cec22fe42422b604af9e089f42
Diffstat (limited to 'src')
-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 3f2d0418..d10691dd 100644 --- a/src/java/com/android/ims/ImsManager.java +++ b/src/java/com/android/ims/ImsManager.java @@ -1441,7 +1441,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); } @@ -1852,8 +1862,6 @@ public class ImsManager { } public int getImsServiceStatus() throws ImsException { - checkAndThrowExceptionIfServiceUnavailable(); - return mImsServiceProxy.getFeatureStatus(); } @@ -1985,7 +1993,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 { @@ -2035,13 +2044,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 { @@ -2061,9 +2070,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); + } } |