aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrad Ebinger <breadley@google.com>2017-04-27 16:54:28 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-04-27 16:54:28 +0000
commit3dd83d98a32c69770fd9595d4833002bf313450d (patch)
treeb6b68aea5a8262f0e75328d24a3cd04d02260818 /src
parentb779bd7c9f87d2832722e7740c74431a70aaefa6 (diff)
parent0872c3abe8f34bb4f53ad730e65a0ccd3e1adcbb (diff)
downloadims-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.java27
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);
+
}
}