Make slight API and doc adjustments
* Fix a compile error on Java 7
* Update initialization mechanism to allow exceptions and return codes
* App-facing api for StreamingService#dispose no longer throws an
IllegalArgumentException
* Add REASON_NONE to stream state change reasons
Change-Id: I4710c6e56b35f74188f5877f0cf74b7773c1e9b7
diff --git a/telephony/java/android/telephony/MbmsDownloadManager.java b/telephony/java/android/telephony/MbmsDownloadManager.java
index 4eeabb0..990ebe6 100644
--- a/telephony/java/android/telephony/MbmsDownloadManager.java
+++ b/telephony/java/android/telephony/MbmsDownloadManager.java
@@ -211,9 +211,9 @@
private int mSubscriptionId = INVALID_SUBSCRIPTION_ID;
private AtomicReference<IMbmsDownloadService> mService = new AtomicReference<>(null);
- private final IMbmsDownloadManagerCallback mCallback;
+ private final MbmsDownloadManagerCallback mCallback;
- private MbmsDownloadManager(Context context, IMbmsDownloadManagerCallback callback, int subId) {
+ private MbmsDownloadManager(Context context, MbmsDownloadManagerCallback callback, int subId) {
mContext = context;
mCallback = callback;
mSubscriptionId = subId;
@@ -221,12 +221,12 @@
/**
* Create a new MbmsDownloadManager using the system default data subscription ID.
- * See {@link #create(Context, IMbmsDownloadManagerCallback, int)}
+ * See {@link #create(Context, MbmsDownloadManagerCallback, int)}
*
* @hide
*/
public static MbmsDownloadManager create(Context context,
- IMbmsDownloadManagerCallback listener)
+ MbmsDownloadManagerCallback listener)
throws MbmsException {
return create(context, listener, SubscriptionManager.getDefaultSubscriptionId());
}
@@ -247,7 +247,7 @@
* @hide
*/
public static MbmsDownloadManager create(Context context,
- IMbmsDownloadManagerCallback listener, int subscriptionId)
+ MbmsDownloadManagerCallback listener, int subscriptionId)
throws MbmsException {
MbmsDownloadManager mdm = new MbmsDownloadManager(context, listener, subscriptionId);
mdm.bindAndInitialize();
@@ -261,11 +261,22 @@
public void onServiceConnected(ComponentName name, IBinder service) {
IMbmsDownloadService downloadService =
IMbmsDownloadService.Stub.asInterface(service);
+ int result;
try {
- downloadService.initialize(mSubscriptionId, mCallback);
+ result = downloadService.initialize(mSubscriptionId, mCallback);
} catch (RemoteException e) {
Log.e(LOG_TAG, "Service died before initialization");
return;
+ } catch (RuntimeException e) {
+ Log.e(LOG_TAG, "Runtime exception during initialization");
+ mCallback.error(
+ MbmsException.InitializationErrors.ERROR_UNABLE_TO_INITIALIZE,
+ e.toString());
+ return;
+ }
+ if (result != MbmsException.SUCCESS) {
+ mCallback.error(result, "Error returned during initialization");
+ return;
}
mService.set(downloadService);
}
diff --git a/telephony/java/android/telephony/MbmsStreamingManager.java b/telephony/java/android/telephony/MbmsStreamingManager.java
index 5b3503a..911f83f 100644
--- a/telephony/java/android/telephony/MbmsStreamingManager.java
+++ b/telephony/java/android/telephony/MbmsStreamingManager.java
@@ -51,10 +51,10 @@
private int mSubscriptionId = INVALID_SUBSCRIPTION_ID;
/** @hide */
- private MbmsStreamingManager(Context context, MbmsStreamingManagerCallback listener,
+ private MbmsStreamingManager(Context context, MbmsStreamingManagerCallback callback,
int subscriptionId) {
mContext = context;
- mCallbackToApp = listener;
+ mCallbackToApp = callback;
mSubscriptionId = subscriptionId;
}
@@ -66,14 +66,14 @@
* during the initialization or binding process.
*
* @param context The {@link Context} to use.
- * @param listener A callback object on which you wish to receive results of asynchronous
+ * @param callback A callback object on which you wish to receive results of asynchronous
* operations.
* @param subscriptionId The subscription ID to use.
*/
public static MbmsStreamingManager create(Context context,
- MbmsStreamingManagerCallback listener, int subscriptionId)
+ MbmsStreamingManagerCallback callback, int subscriptionId)
throws MbmsException {
- MbmsStreamingManager manager = new MbmsStreamingManager(context, listener, subscriptionId);
+ MbmsStreamingManager manager = new MbmsStreamingManager(context, callback, subscriptionId);
manager.bindAndInitialize();
return manager;
}
@@ -83,9 +83,9 @@
* See {@link #create(Context, MbmsStreamingManagerCallback, int)}.
*/
public static MbmsStreamingManager create(Context context,
- MbmsStreamingManagerCallback listener)
+ MbmsStreamingManagerCallback callback)
throws MbmsException {
- return create(context, listener, SubscriptionManager.getDefaultSubscriptionId());
+ return create(context, callback, SubscriptionManager.getDefaultSubscriptionId());
}
/**
@@ -195,11 +195,22 @@
public void onServiceConnected(ComponentName name, IBinder service) {
IMbmsStreamingService streamingService =
IMbmsStreamingService.Stub.asInterface(service);
+ int result;
try {
- streamingService.initialize(mCallbackToApp, mSubscriptionId);
+ result = streamingService.initialize(mCallbackToApp, mSubscriptionId);
} catch (RemoteException e) {
Log.e(LOG_TAG, "Service died before initialization");
return;
+ } catch (RuntimeException e) {
+ Log.e(LOG_TAG, "Runtime exception during initialization");
+ mCallbackToApp.error(
+ MbmsException.InitializationErrors.ERROR_UNABLE_TO_INITIALIZE,
+ e.toString());
+ return;
+ }
+ if (result != MbmsException.SUCCESS) {
+ mCallbackToApp.error(result, "Error returned during initialization");
+ return;
}
mService.set(streamingService);
}
diff --git a/telephony/java/android/telephony/mbms/MbmsDownloadReceiver.java b/telephony/java/android/telephony/mbms/MbmsDownloadReceiver.java
index 3617165..339ff39 100644
--- a/telephony/java/android/telephony/mbms/MbmsDownloadReceiver.java
+++ b/telephony/java/android/telephony/mbms/MbmsDownloadReceiver.java
@@ -356,7 +356,7 @@
intent.getParcelableExtra(MbmsDownloadManager.EXTRA_SERVICE_INFO);
File tempFileDir = MbmsUtils.getEmbmsTempFileDirForService(context,
serviceInfo.getServiceId());
- List<Uri> filesInUse =
+ final List<Uri> filesInUse =
intent.getParcelableArrayListExtra(MbmsDownloadManager.EXTRA_TEMP_FILES_IN_USE);
File[] filesToDelete = tempFileDir.listFiles(new FileFilter() {
@Override
diff --git a/telephony/java/android/telephony/mbms/StreamingService.java b/telephony/java/android/telephony/mbms/StreamingService.java
index 1a64189..c49f8a9 100644
--- a/telephony/java/android/telephony/mbms/StreamingService.java
+++ b/telephony/java/android/telephony/mbms/StreamingService.java
@@ -50,10 +50,15 @@
@Retention(RetentionPolicy.SOURCE)
@IntDef({REASON_BY_USER_REQUEST, REASON_END_OF_SESSION, REASON_FREQUENCY_CONFLICT,
REASON_OUT_OF_MEMORY, REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE,
- REASON_LEFT_MBMS_BROADCAST_AREA})
+ REASON_LEFT_MBMS_BROADCAST_AREA, REASON_NONE})
public @interface StreamingStateChangeReason {}
/**
+ * Indicates that the middleware does not have a reason to provide for the state change.
+ */
+ public static final int REASON_NONE = 0;
+
+ /**
* State changed due to a call to {@link #stopStreaming()} or
* {@link android.telephony.MbmsStreamingManager#startStreaming(StreamingServiceInfo, StreamingServiceCallback)}
*/
@@ -167,7 +172,7 @@
*
* This may throw a {@link MbmsException} with the error code
* {@link MbmsException#ERROR_MIDDLEWARE_LOST}
- * May also throw an {@link IllegalArgumentException} or an {@link IllegalStateException}
+ * May also throw an {@link IllegalStateException}
*/
public void dispose() throws MbmsException {
if (mService == null) {
@@ -179,6 +184,8 @@
} catch (RemoteException e) {
Log.w(LOG_TAG, "Remote process died");
throw new MbmsException(MbmsException.ERROR_MIDDLEWARE_LOST);
+ } catch (IllegalArgumentException e) {
+ throw new IllegalStateException("StreamingService state inconsistent with middleware");
} finally {
mService = null;
}
diff --git a/telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl b/telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl
index 725d11c..f2336d3 100755
--- a/telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl
+++ b/telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl
@@ -28,7 +28,7 @@
*/
interface IMbmsDownloadService
{
- void initialize(int subId, IMbmsDownloadManagerCallback listener);
+ int initialize(int subId, IMbmsDownloadManagerCallback listener);
int getFileServices(int subId, in List<String> serviceClasses);
diff --git a/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl b/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl
index 04a53cb..4dd4292 100755
--- a/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl
+++ b/telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl
@@ -26,7 +26,7 @@
*/
interface IMbmsStreamingService
{
- void initialize(IMbmsStreamingManagerCallback listener, int subId);
+ int initialize(IMbmsStreamingManagerCallback listener, int subId);
int getStreamingServices(int subId, in List<String> serviceClasses);
diff --git a/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java b/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
index 8fbd448..18e31288 100644
--- a/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
+++ b/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
@@ -36,16 +36,21 @@
/**
* Initialize the download service for this app and subId, registering the listener.
*
- * Exceptions should not be thrown through this method -- this method is called from within a
- * {@link android.content.ServiceConnection} defined by the framework, so apps have no way of
- * catching them. Call {@link IMbmsDownloadManagerCallback#error(int, String)} instead.
+ * May throw an {@link IllegalArgumentException} or an {@link IllegalStateException}, which
+ * will be intercepted and passed to the app as
+ * {@link android.telephony.mbms.MbmsException.InitializationErrors#ERROR_UNABLE_TO_INITIALIZE}
+ *
+ * May return any value from {@link android.telephony.mbms.MbmsException.InitializationErrors}
+ * or {@link MbmsException#SUCCESS}. Non-successful error codes will be passed to the app via
+ * {@link IMbmsDownloadManagerCallback#error(int, String)}.
*
* @param listener The callback to use to communicate with the app.
* @param subscriptionId The subscription ID to use.
*/
@Override
- public void initialize(int subscriptionId,
+ public int initialize(int subscriptionId,
IMbmsDownloadManagerCallback listener) throws RemoteException {
+ return 0;
}
/**
diff --git a/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java b/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java
index f072c46..585d5b9 100644
--- a/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java
+++ b/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java
@@ -33,17 +33,21 @@
/**
* Initialize streaming service for this app and subId, registering the listener.
*
- * Exceptions should not be thrown through this method -- this method is called from within a
- * {@link android.content.ServiceConnection} defined by the framework, so apps have no way of
- * catching them. Call {@link IMbmsStreamingManagerCallback#error(int, String)} instead.
+ * May throw an {@link IllegalArgumentException} or an {@link IllegalStateException}, which
+ * will be intercepted and passed to the app as
+ * {@link android.telephony.mbms.MbmsException.InitializationErrors#ERROR_UNABLE_TO_INITIALIZE}
+ *
+ * May return any value from {@link android.telephony.mbms.MbmsException.InitializationErrors}
+ * or {@link MbmsException#SUCCESS}. Non-successful error codes will be passed to the app via
+ * {@link IMbmsStreamingManagerCallback#error(int, String)}.
*
* @param listener The callback to use to communicate with the app.
* @param subscriptionId The subscription ID to use.
*/
@Override
- public void initialize(IMbmsStreamingManagerCallback listener, int subscriptionId)
+ public int initialize(IMbmsStreamingManagerCallback listener, int subscriptionId)
throws RemoteException {
- return;
+ return 0;
}
/**