OSDN Git Service

eMBMS API update
authorHall Liu <hallliu@google.com>
Tue, 25 Apr 2017 22:04:26 +0000 (15:04 -0700)
committerHall Liu <hallliu@google.com>
Fri, 28 Apr 2017 02:43:11 +0000 (19:43 -0700)
Brings eMBMS APIs into alignment with the architecture doc.
All APIs are hidden for now.

Test: builds
Change-Id: I6e692bd363f998d1cd8f80faa72bde71ffe8fd2e

20 files changed:
Android.mk
telephony/java/android/telephony/MbmsDownloadManager.java
telephony/java/android/telephony/MbmsStreamingManager.java
telephony/java/android/telephony/mbms/DownloadCallback.java [moved from telephony/java/android/telephony/mbms/DownloadListener.java with 96% similarity]
telephony/java/android/telephony/mbms/DownloadRequest.java
telephony/java/android/telephony/mbms/IDownloadCallback.aidl [moved from telephony/java/android/telephony/mbms/IDownloadListener.aidl with 97% similarity]
telephony/java/android/telephony/mbms/IMbmsDownloadManagerCallback.aidl [moved from telephony/java/android/telephony/mbms/IMbmsDownloadManagerListener.aidl with 97% similarity]
telephony/java/android/telephony/mbms/IMbmsStreamingManagerCallback.aidl [moved from telephony/java/android/telephony/mbms/IMbmsStreamingManagerListener.aidl with 97% similarity]
telephony/java/android/telephony/mbms/IStreamingServiceCallback.aidl [moved from telephony/java/android/telephony/mbms/IStreamingServiceListener.aidl with 84% similarity]
telephony/java/android/telephony/mbms/MbmsDownloadManagerCallback.java [moved from telephony/java/android/telephony/mbms/MbmsDownloadManagerListener.java with 95% similarity]
telephony/java/android/telephony/mbms/MbmsInitializationException.java [new file with mode: 0644]
telephony/java/android/telephony/mbms/MbmsStreamingManagerCallback.java [moved from telephony/java/android/telephony/mbms/MbmsStreamingManagerListener.java with 96% similarity]
telephony/java/android/telephony/mbms/StreamingService.java
telephony/java/android/telephony/mbms/StreamingServiceCallback.java [moved from telephony/java/android/telephony/mbms/StreamingServiceListener.java with 93% similarity]
telephony/java/android/telephony/mbms/UriPathPair.aidl [new file with mode: 0755]
telephony/java/android/telephony/mbms/UriPathPair.java [new file with mode: 0644]
telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl
telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl
telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java [new file with mode: 0644]
telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java [new file with mode: 0644]

index 623ceba..620b7a5 100644 (file)
@@ -432,10 +432,10 @@ LOCAL_SRC_FILES += \
        telecomm/java/com/android/internal/telecom/IInCallService.aidl \
        telecomm/java/com/android/internal/telecom/ITelecomService.aidl \
        telecomm/java/com/android/internal/telecom/RemoteServiceCallback.aidl \
-        telephony/java/android/telephony/mbms/IMbmsDownloadManagerListener.aidl \
-       telephony/java/android/telephony/mbms/IMbmsStreamingManagerListener.aidl \
-       telephony/java/android/telephony/mbms/IDownloadListener.aidl \
-        telephony/java/android/telephony/mbms/IStreamingServiceListener.aidl \
+        telephony/java/android/telephony/mbms/IMbmsDownloadManagerCallback.aidl \
+       telephony/java/android/telephony/mbms/IMbmsStreamingManagerCallback.aidl \
+       telephony/java/android/telephony/mbms/IDownloadCallback.aidl \
+        telephony/java/android/telephony/mbms/IStreamingServiceCallback.aidl \
        telephony/java/android/telephony/mbms/vendor/IMbmsDownloadService.aidl \
        telephony/java/android/telephony/mbms/vendor/IMbmsStreamingService.aidl \
        telephony/java/com/android/ims/internal/IImsCallSession.aidl \
index bb4bf1e..862c919 100644 (file)
 
 package android.telephony;
 
-import android.app.PendingIntent;
 import android.content.Context;
 import android.net.Uri;
-import android.telephony.mbms.DownloadListener;
+import android.os.RemoteException;
+import android.telephony.mbms.DownloadCallback;
 import android.telephony.mbms.DownloadRequest;
 import android.telephony.mbms.DownloadStatus;
-import android.telephony.mbms.FileServiceInfo;
-import android.telephony.mbms.IMbmsDownloadManagerListener;
+import android.telephony.mbms.IMbmsDownloadManagerCallback;
+import android.telephony.mbms.MbmsInitializationException;
+import android.telephony.mbms.vendor.IMbmsDownloadService;
+import android.util.Log;
 
 import java.util.List;
 
@@ -31,9 +33,135 @@ import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
 
 /** @hide */
 public class MbmsDownloadManager {
+    private static final String LOG_TAG = MbmsDownloadManager.class.getSimpleName();
+
+    /**
+     * The MBMS middleware should send this when a download of single file has completed or
+     * failed. Mandatory extras are
+     * {@link #EXTRA_RESULT}
+     * {@link #EXTRA_INFO}
+     * {@link #EXTRA_REQUEST}
+     * {@link #EXTRA_TEMP_LIST}
+     * {@link #EXTRA_FINAL_URI}
+     *
+     * TODO: future systemapi
+     */
+    public static final String ACTION_DOWNLOAD_RESULT_INTERNAL =
+            "android.telephony.mbms.action.DOWNLOAD_RESULT_INTERNAL";
+
+    /**
+     * The MBMS middleware should send this when it wishes to request {@code content://} URIs to
+     * serve as temp files for downloads or when it wishes to resume paused downloads. Mandatory
+     * extras are
+     * {@link #EXTRA_REQUEST}
+     *
+     * Optional extras are
+     * {@link #EXTRA_FD_COUNT} (0 if not present)
+     * {@link #EXTRA_PAUSED_LIST} (empty if not present)
+     *
+     * TODO: future systemapi
+     */
+    public static final String ACTION_FILE_DESCRIPTOR_REQUEST =
+            "android.telephony.mbms.action.FILE_DESCRIPTOR_REQUEST";
+
+    /**
+     * The MBMS middleware should send this when it wishes to clean up temp  files in the app's
+     * filesystem. Mandatory extras are:
+     * {@link #EXTRA_TEMP_FILES_IN_USE}
+     *
+     * TODO: future systemapi
+     */
+    public static final String ACTION_CLEANUP =
+            "android.telephony.mbms.action.CLEANUP";
+
+    /**
+     * Integer extra indicating the result code of the download.
+     * TODO: put in link to error list
+     * TODO: future systemapi (here and and all extras)
+     */
+    public static final String EXTRA_RESULT = "android.telephony.mbms.extra.RESULT";
+
+    /**
+     * Extra containing the {@link android.telephony.mbms.FileInfo} for which the download result
+     * is for. Must not be null.
+     */
+    public static final String EXTRA_INFO = "android.telephony.mbms.extra.INFO";
+
+    /**
+     * Extra containing the {@link DownloadRequest} for which the download result or file
+     * descriptor request is for. Must not be null.
+     */
+    public static final String EXTRA_REQUEST = "android.telephony.mbms.extra.REQUEST";
+
+    /**
+     * Extra containing a {@link List} of {@link Uri}s that were used as temp files for this
+     * completed file. These {@link Uri}s should have scheme {@code file://}, and the temp
+     * files will be deleted upon receipt of the intent.
+     * May be null.
+     */
+    public static final String EXTRA_TEMP_LIST = "android.telephony.mbms.extra.TEMP_LIST";
+
+    /**
+     * Extra containing a single {@link Uri} indicating the path to the temp file in which the
+     * decoded downloaded file resides. Must not be null.
+     */
+    public static final String EXTRA_FINAL_URI = "android.telephony.mbms.extra.FINAL_URI";
+
+    /**
+     * Extra containing an integer indicating the number of temp files requested.
+     */
+    public static final String EXTRA_FD_COUNT = "android.telephony.mbms.extra.FD_COUNT";
+
+    /**
+     * Extra containing a list of {@link Uri}s that the middleware is requesting access to via
+     * {@link #ACTION_FILE_DESCRIPTOR_REQUEST} in order to resume downloading. These {@link Uri}s
+     * should have scheme {@code file://}.
+     */
+    public static final String EXTRA_PAUSED_LIST = "android.telephony.mbms.extra.PAUSED_LIST";
+
+    /**
+     * Extra containing a list of {@link android.telephony.mbms.UriPathPair}s, used in the
+     * response to {@link #ACTION_FILE_DESCRIPTOR_REQUEST}. These are temp files that are meant
+     * to be used for new file downloads.
+     */
+    public static final String EXTRA_FREE_URI_LIST = "android.telephony.mbms.extra.FREE_URI_LIST";
+
+    /**
+     * Extra containing a list of {@link android.telephony.mbms.UriPathPair}s, used in the
+     * response to {@link #ACTION_FILE_DESCRIPTOR_REQUEST}. These
+     * {@link android.telephony.mbms.UriPathPair}s contain {@code content://} URIs that provide
+     * access to previously paused downloads.
+     */
+    public static final String EXTRA_PAUSED_URI_LIST =
+            "android.telephony.mbms.extra.PAUSED_URI_LIST";
+
+    /**
+     * Extra containing a list of {@link Uri}s indicating temp files which the middleware is
+     * still using.
+     */
+    public static final String EXTRA_TEMP_FILES_IN_USE =
+            "android.telephony.mbms.extra.TEMP_FILES_IN_USE";
+
+    public static final int RESULT_SUCCESSFUL = 1;
+    public static final int RESULT_CANCELLED  = 2;
+    public static final int RESULT_EXPIRED    = 3;
+    // TODO - more results!
+
     private final Context mContext;
     private int mSubId = INVALID_SUBSCRIPTION_ID;
 
+    private IMbmsDownloadService mService;
+    private final IMbmsDownloadManagerCallback mCallback;
+    private final String mDownloadAppName;
+
+    private MbmsDownloadManager(Context context, IMbmsDownloadManagerCallback callback,
+            String downloadAppName, int subId) {
+        mContext = context;
+        mCallback = callback;
+        mDownloadAppName = downloadAppName;
+        mSubId = subId;
+    }
+
     /**
      * Create a new MbmsDownloadManager using the system default data subscription ID.
      *
@@ -42,9 +170,13 @@ public class MbmsDownloadManager {
      *
      * @hide
      */
-    public MbmsDownloadManager(Context context, IMbmsDownloadManagerListener listener,
-            String downloadAppName) {
-        mContext = context;
+    public static MbmsDownloadManager createManager(Context context,
+            IMbmsDownloadManagerCallback listener, String downloadAppName)
+            throws MbmsInitializationException{
+        MbmsDownloadManager mdm = new MbmsDownloadManager(context, listener, downloadAppName,
+                SubscriptionManager.getDefaultSubscriptionId());
+        mdm.bindAndInitialize();
+        return mdm;
     }
 
     /**
@@ -55,9 +187,23 @@ public class MbmsDownloadManager {
      *
      * @hide
      */
-    public MbmsDownloadManager(Context context, IMbmsDownloadManagerListener listener,
-            String downloadAppName, int subId) {
-        mContext = context;
+
+    public static MbmsDownloadManager createManager(Context context,
+            IMbmsDownloadManagerCallback listener, String downloadAppName, int subId)
+            throws MbmsInitializationException {
+        MbmsDownloadManager mdm = new MbmsDownloadManager(context, listener, downloadAppName,
+                subId);
+        mdm.bindAndInitialize();
+        return mdm;
+    }
+
+    private void bindAndInitialize() throws MbmsInitializationException {
+        // TODO: bind
+        try {
+            mService.initialize(mDownloadAppName, mSubId, mCallback);
+        } catch (RemoteException e) {
+            throw new MbmsInitializationException(0); // TODO: proper error code
+        }
     }
 
     /**
@@ -84,31 +230,9 @@ public class MbmsDownloadManager {
     }
 
 
-    public static final String EXTRA_REQUEST         = "extraRequest";
-
-    public static final int RESULT_SUCCESSFUL = 1;
-    public static final int RESULT_CANCELLED  = 2;
-    public static final int RESULT_EXPIRED    = 3;
-    // TODO - more results!
-
-    public static final String EXTRA_RESULT          = "extraResult";
-    public static final String EXTRA_URI             = "extraDownloadedUri";
-
     /**
      * Requests a future download.
      * returns a token which may be used to cancel a download.
-     * fileServiceInfo indicates what FileService to download from
-     * source indicates which file to download from the given FileService.  This is
-     *     an optional field - it may be null or empty to indicate download everything from
-     *     the FileService.
-     * destination is a file URI for where in the apps accessible storage locations to write
-     *     the content.  This URI may be used to store temporary data and should not be
-     *     accessed until the PendingIntent is called indicating success.
-     * resultIntent is sent when each file is completed and when the request is concluded
-     *     either via TTL expiration, cancel or error.
-     *     This intent is sent with three extras: a {@link DownloadRequest} typed extra called
-     *     {@link #EXTRA_REQUEST}, an Integer called {@link #EXTRA_RESULT} for the result code
-     *     and a {@link Uri} called {@link #EXTRA_URI} to the resulting file (if successful).
      * downloadListener is an optional callback object which can be used to get progress reports
      *     of a currently occuring download.  Note this can only run while the calling app
      *     is running, so future downloads will simply result in resultIntents being sent
@@ -118,7 +242,7 @@ public class MbmsDownloadManager {
      *
      * Asynchronous errors through the listener include any of the errors
      */
-    public DownloadRequest download(DownloadRequest downloadRequest, DownloadListener listener) {
+    public DownloadRequest download(DownloadRequest downloadRequest, DownloadCallback listener) {
         return null;
     }
 
@@ -168,7 +292,7 @@ public class MbmsDownloadManager {
     }
 
     /**
-     * Resets middleware knowldge regarding this download request.
+     * Resets middleware knowledge regarding this download request.
      *
      * This state consists of knowledge of what files have already been downloaded.
      * Normally the middleware won't download files who's hash matches previously downloaded
@@ -187,5 +311,15 @@ public class MbmsDownloadManager {
     }
 
     public void dispose() {
+        try {
+            if (mService != null) {
+                mService.dispose(mDownloadAppName, mSubId);
+            } else {
+                Log.i(LOG_TAG, "Service already dead");
+            }
+        } catch (RemoteException e) {
+            // Ignore
+            Log.i(LOG_TAG, "Remote exception while disposing of service");
+        }
     }
 }
index 9a2ba6d..770a04a 100644 (file)
 package android.telephony;
 
 import android.content.Context;
-import android.telephony.mbms.IMbmsStreamingManagerListener;
-import android.telephony.mbms.IStreamingServiceListener;
+import android.os.RemoteException;
+import android.telephony.mbms.IMbmsStreamingManagerCallback;
+import android.telephony.mbms.IStreamingServiceCallback;
+import android.telephony.mbms.MbmsInitializationException;
 import android.telephony.mbms.StreamingService;
 import android.telephony.mbms.StreamingServiceInfo;
+import android.telephony.mbms.vendor.IMbmsStreamingService;
 import android.util.Log;
 
 import java.util.List;
@@ -31,30 +34,60 @@ import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
 public class MbmsStreamingManager {
     private static final String LOG_TAG = "MbmsStreamingManager";
     private static final boolean DEBUG = true;
+    private IMbmsStreamingService mService;
+    private IMbmsStreamingManagerCallback mCallbackToApp;
+    private final String mAppName;
 
     private final Context mContext;
-    private int mSubId = INVALID_SUBSCRIPTION_ID;
+    private int mSubscriptionId = INVALID_SUBSCRIPTION_ID;
+
+    /** @hide */
+    private MbmsStreamingManager(Context context, IMbmsStreamingManagerCallback listener,
+                    String streamingAppName, int subscriptionId) {
+        mContext = context;
+        mAppName = streamingAppName;
+        mCallbackToApp = listener;
+        mSubscriptionId = subscriptionId;
+    }
 
     /**
-     * Create a new MbmsStreamingManager using the system default data subscription ID.
+     * Create a new MbmsStreamingManager using the given subscription ID.
      *
      * Note that this call will bind a remote service and that may take a bit.  This
      * may throw an IllegalArgumentException or RemoteException.
+     * TODO: document this and add exceptions that can be thrown for synchronous
+     * initialization/bind errors
+     *
+     * @param context
+     * @param listener
+     * @param streamingAppName
+     * @param subscriptionId
+     * @return
      */
-    public MbmsStreamingManager(Context context, IMbmsStreamingManagerListener listener,
-            String streamingAppName) {
-        mContext = context;
+    public static MbmsStreamingManager create(Context context,
+            IMbmsStreamingManagerCallback listener, String streamingAppName, int subscriptionId)
+            throws MbmsInitializationException {
+        MbmsStreamingManager manager = new MbmsStreamingManager(context, listener,
+                streamingAppName, subscriptionId);
+        manager.bindAndInitialize();
+        return manager;
     }
 
     /**
-     * Create a new MbmsStreamingManager using the given subscription ID.
+     * Create a new MbmsStreamingManager using the system default data subscription ID.
      *
      * Note that this call will bind a remote service and that may take a bit.  This
      * may throw an IllegalArgumentException or RemoteException.
      */
-    public MbmsStreamingManager(Context context, IMbmsStreamingManagerListener listener,
-                    String streamingAppName, int subId) {
-        mContext = context;
+    public static MbmsStreamingManager create(Context context,
+            IMbmsStreamingManagerCallback listener, String streamingAppName)
+            throws MbmsInitializationException {
+        // TODO: get default sub id
+        int subId = INVALID_SUBSCRIPTION_ID;
+        MbmsStreamingManager manager = new MbmsStreamingManager(context, listener,
+                streamingAppName, subId);
+        manager.bindAndInitialize();
+        return manager;
     }
 
     /**
@@ -97,7 +130,7 @@ public class MbmsStreamingManager {
      * Asynchronous errors through the listener include any of the errors
      */
     public StreamingService startStreaming(StreamingServiceInfo serviceInfo,
-            IStreamingServiceListener listener) {
+            IStreamingServiceCallback listener) {
         return null;
     }
 
@@ -125,4 +158,20 @@ public class MbmsStreamingManager {
     private void logd(String str) {
         Log.d(LOG_TAG, str);
     }
+
+    private boolean isServiceConnected() {
+        return mService != null;
+    }
+
+    private void bindAndInitialize() throws MbmsInitializationException {
+        // TODO: bind to the service
+        try {
+            int returnCode = mService.initialize(mCallbackToApp, mAppName, mSubscriptionId);
+            if (returnCode != 0) {
+                throw new MbmsInitializationException(returnCode);
+            }
+        } catch (RemoteException e) {
+            throw new MbmsInitializationException(/* some error */ 0);
+        }
+    }
 }
@@ -20,7 +20,7 @@ package android.telephony.mbms;
  * A optional listener class used by download clients to track progress.
  * @hide
  */
-public class DownloadListener extends IDownloadListener.Stub {
+public class DownloadCallback extends IDownloadCallback.Stub {
     /**
      * Gives process callbacks for a given DownloadRequest.
      * request indicates which download is being referenced.
index 42a82da..dbaf10b 100644 (file)
 
 package android.telephony.mbms;
 
-import android.app.PendingIntent;
+import android.content.Intent;
 import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
 
+import java.net.URISyntaxException;
+
 /**
  * A Parcelable class describing a pending Cell-Broadcast download request
  * @hide
  */
 public class DownloadRequest implements Parcelable {
-    public DownloadRequest(int id, FileServiceInfo serviceInfo, Uri source, Uri dest,
-            PendingIntent resultPI, int sub) {
+    /** @hide */
+    public static class Builder {
+        private int id;
+        private FileServiceInfo serviceInfo;
+        private Uri source;
+        private Uri dest;
+        private int sub;
+        private String appIntent;
+
+        public Builder setId(int id) {
+            this.id = id;
+            return this;
+        }
+
+        public Builder setServiceInfo(FileServiceInfo serviceInfo) {
+            this.serviceInfo = serviceInfo;
+            return this;
+        }
+
+        public Builder setSource(Uri source) {
+            this.source = source;
+            return this;
+        }
+
+        public Builder setDest(Uri dest) {
+            this.dest = dest;
+            return this;
+        }
+
+        public Builder setSub(int sub) {
+            this.sub = sub;
+            return this;
+        }
+
+        public Builder setAppIntent(Intent intent) {
+            this.appIntent = intent.toUri(0);
+            return this;
+        }
+
+        public DownloadRequest build() {
+            return new DownloadRequest(id, serviceInfo, source, dest, sub, appIntent);
+        }
+    }
+
+    private final int downloadId;
+    private final FileServiceInfo fileServiceInfo;
+    private final Uri sourceUri;
+    private final Uri destinationUri;
+    private final int subId;
+    private final String serializedResultIntentForApp;
+
+    private DownloadRequest(int id, FileServiceInfo serviceInfo,
+            Uri source, Uri dest,
+            int sub, String appIntent) {
         downloadId = id;
         fileServiceInfo = serviceInfo;
         sourceUri = source;
         destinationUri = dest;
         subId = sub;
+        serializedResultIntentForApp = appIntent;
     }
 
-    /** @hide */
-    public DownloadRequest(DownloadRequest dr, PendingIntent fdRequestPI, PendingIntent cleanupPI) {
+    public static DownloadRequest copy(DownloadRequest other) {
+        return new DownloadRequest(other);
+    }
+
+    private DownloadRequest(DownloadRequest dr) {
         downloadId = dr.downloadId;
         fileServiceInfo = dr.fileServiceInfo;
         sourceUri = dr.sourceUri;
         destinationUri = dr.destinationUri;
         subId = dr.subId;
-        /*
-         * resultPI = new PI
-         * fileDescriptorRequstPI = fdRequestPI;
-         * this.cleanupPI = cleanupPI;
-         */
+        serializedResultIntentForApp = dr.serializedResultIntentForApp;
     }
 
-    public final int downloadId;
-    public final FileServiceInfo fileServiceInfo;
-    public final Uri sourceUri;
-    public final Uri destinationUri;
-    public final int subId;
+    private DownloadRequest(Parcel in) {
+        downloadId = in.readInt();
+        fileServiceInfo = in.readParcelable(getClass().getClassLoader());
+        sourceUri = in.readParcelable(getClass().getClassLoader());
+        destinationUri = in.readParcelable(getClass().getClassLoader());
+        subId = in.readInt();
+        serializedResultIntentForApp = in.readString();
+    }
 
     public int describeContents() {
         return 0;
@@ -65,14 +122,35 @@ public class DownloadRequest implements Parcelable {
         out.writeParcelable(sourceUri, flags);
         out.writeParcelable(destinationUri, flags);
         out.writeInt(subId);
+        out.writeString(serializedResultIntentForApp);
     }
 
-    private DownloadRequest(Parcel in) {
-        downloadId = in.readInt();
-        fileServiceInfo = in.readParcelable(null);
-        sourceUri = in.readParcelable(null);
-        destinationUri = in.readParcelable(null);
-        subId = in.readInt();
+    public int getDownloadId() {
+        return downloadId;
+    }
+
+    public FileServiceInfo getFileServiceInfo() {
+        return fileServiceInfo;
+    }
+
+    public Uri getSourceUri() {
+        return sourceUri;
+    }
+
+    public Uri getDestinationUri() {
+        return destinationUri;
+    }
+
+    public int getSubId() {
+        return subId;
+    }
+
+    public Intent getIntentForApp() {
+        try {
+            return Intent.parseUri(serializedResultIntentForApp, 0);
+        } catch (URISyntaxException e) {
+            return null;
+        }
     }
 
     public static final Parcelable.Creator<DownloadRequest> CREATOR =
@@ -23,7 +23,7 @@ import android.telephony.mbms.FileInfo;
  * The optional interface used by download clients to track progress.
  * @hide
  */
-interface IDownloadListener
+interface IDownloadCallback
 {
     /**
      * Gives progress callbacks for a given DownloadRequest.  Includes a FileInfo
@@ -24,7 +24,7 @@ import java.util.List;
  * The interface the clients top-level file download listener will satisfy.
  * @hide
  */
-interface IMbmsDownloadManagerListener
+interface IMbmsDownloadManagerCallback
 {
     void error(int errorCode, String message);
 
@@ -24,7 +24,7 @@ import java.util.List;
  * The interface the clients top-level streaming listener will satisfy.
  * @hide
  */
-interface IMbmsStreamingManagerListener
+interface IMbmsStreamingManagerCallback
 {
     void error(int errorCode, String message);
 
@@ -18,13 +18,14 @@ package android.telephony.mbms;
 
 import android.net.Uri;
 import android.telephony.SignalStrength;
+import android.telephony.mbms.StreamingService;
 
 /**
  * @hide
  */
-oneway interface IStreamingServiceListener {
+oneway interface IStreamingServiceCallback {
     void error(int errorCode, String message);
-    void stateUpdated(int state);
+    void streamStateChanged(in StreamingService service, int state);
     void uriUpdated(in Uri uri);
     void signalStrengthUpdated(in SignalStrength signalStrength);
 }
@@ -22,7 +22,7 @@ import java.util.List;
  * A Parcelable class with Cell-Broadcast service information.
  * @hide
  */
-public class MbmsDownloadManagerListener extends IMbmsDownloadManagerListener.Stub {
+public class MbmsDownloadManagerCallback extends IMbmsDownloadManagerCallback.Stub {
 
     public final static int ERROR_CARRIER_NOT_SUPPORTED      = 1;
     public final static int ERROR_UNABLE_TO_INITIALIZE       = 2;
diff --git a/telephony/java/android/telephony/mbms/MbmsInitializationException.java b/telephony/java/android/telephony/mbms/MbmsInitializationException.java
new file mode 100644 (file)
index 0000000..1612bc9
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.telephony.mbms;
+
+/** @hide */
+public class MbmsInitializationException extends Exception {
+    private final int mErrorCode;
+
+    /** @hide */
+    public MbmsInitializationException(int errorCode) {
+        super();
+        mErrorCode = errorCode;
+    }
+
+    public int getErrorCode() {
+        return mErrorCode;
+    }
+}
@@ -22,7 +22,7 @@ import java.util.List;
  * A Parcelable class with Cell-Broadcast service information.
  * @hide
  */
-public class MbmsStreamingManagerListener extends IMbmsStreamingManagerListener.Stub {
+public class MbmsStreamingManagerCallback extends IMbmsStreamingManagerCallback.Stub {
 
     public final static int ERROR_CARRIER_NOT_SUPPORTED      = 1;
     public final static int ERROR_UNABLE_TO_INITIALIZE       = 2;
index ee0d894..8cc6043 100644 (file)
@@ -33,7 +33,7 @@ public class StreamingService {
     /**
      */
     StreamingService(StreamingServiceInfo streamingServiceInfo,
-            IStreamingServiceListener listener) {
+            IStreamingServiceCallback listener) {
     }
 
     /**
@@ -23,7 +23,7 @@ import android.telephony.SignalStrength;
  * A Callback class for use when the applicaiton is actively streaming content.
  * @hide
  */
-public class StreamingServiceListener extends IStreamingServiceListener.Stub {
+public class StreamingServiceCallback extends IStreamingServiceCallback.Stub {
 
 
     public void error(int errorCode, String message) {
@@ -36,7 +36,7 @@ public class StreamingServiceListener extends IStreamingServiceListener.Stub {
      * See {@link StreamingService#STATE_STOPPED}, {@link StreamingService#STATE_STARTED}
      * and {@link StreamingService#STATE_STALLED}.
      */
-    public void stateUpdated(int state) {
+    public void streamStateChanged(StreamingService service, int state) {
         // default implementation empty
     }
 
diff --git a/telephony/java/android/telephony/mbms/UriPathPair.aidl b/telephony/java/android/telephony/mbms/UriPathPair.aidl
new file mode 100755 (executable)
index 0000000..8bf7682
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+**
+** Copyright 2016, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+package android.telephony.mbms;
+
+parcelable UriPathPair;
diff --git a/telephony/java/android/telephony/mbms/UriPathPair.java b/telephony/java/android/telephony/mbms/UriPathPair.java
new file mode 100644 (file)
index 0000000..7acc270
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.telephony.mbms;
+
+import android.content.ContentResolver;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/** @hide */
+public class UriPathPair implements Parcelable {
+    private final Uri mFilePathUri;
+    private final Uri mContentUri;
+
+    /** @hide */
+    public UriPathPair(Uri fileUri, Uri contentUri) {
+        if (fileUri == null || !ContentResolver.SCHEME_FILE.equals(fileUri.getScheme())) {
+            throw new IllegalArgumentException("File URI must have file scheme");
+        }
+        if (contentUri == null || !ContentResolver.SCHEME_CONTENT.equals(contentUri.getScheme())) {
+            throw new IllegalArgumentException("Content URI must have content scheme");
+        }
+
+        mFilePathUri = fileUri;
+        mContentUri = contentUri;
+    }
+
+    /** @hide */
+    protected UriPathPair(Parcel in) {
+        mFilePathUri = in.readParcelable(Uri.class.getClassLoader());
+        mContentUri = in.readParcelable(Uri.class.getClassLoader());
+    }
+
+    public static final Creator<UriPathPair> CREATOR = new Creator<UriPathPair>() {
+        @Override
+        public UriPathPair createFromParcel(Parcel in) {
+            return new UriPathPair(in);
+        }
+
+        @Override
+        public UriPathPair[] newArray(int size) {
+            return new UriPathPair[size];
+        }
+    };
+
+    /** future systemapi */
+    public Uri getFilePathUri() {
+        return mFilePathUri;
+    }
+
+    /** future systemapi */
+    public Uri getContentUri() {
+        return mContentUri;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeParcelable(mFilePathUri, flags);
+        dest.writeParcelable(mContentUri, flags);
+    }
+}
index 4ec40da..3090e12 100755 (executable)
@@ -20,8 +20,8 @@ import android.app.PendingIntent;
 import android.net.Uri;
 import android.telephony.mbms.DownloadRequest;
 import android.telephony.mbms.DownloadStatus;
-import android.telephony.mbms.IMbmsDownloadManagerListener;
-import android.telephony.mbms.IDownloadListener;
+import android.telephony.mbms.IMbmsDownloadManagerCallback;
+import android.telephony.mbms.IDownloadCallback;
 
 /**
  * The interface the opaque MbmsStreamingService will satisfy.
@@ -35,7 +35,7 @@ interface IMbmsDownloadService
      *
      * No return value.  Async errors may be reported, but none expected (not doing anything yet).
      */
-    void initialize(String appName, int subId, IMbmsDownloadManagerListener listener);
+    void initialize(String appName, int subId, IMbmsDownloadManagerCallback listener);
 
     /**
      * - Registers serviceClasses of interest with the uid/appName/subId key.
@@ -50,20 +50,20 @@ interface IMbmsDownloadService
     /**
      * should move the params into a DownloadRequest parcelable
      */
-    int download(in DownloadRequest downloadRequest, IDownloadListener listener);
+    int download(String appName, in DownloadRequest downloadRequest, IDownloadCallback listener);
 
-    List<DownloadRequest> listPendingDownloads();
+    List<DownloadRequest> listPendingDownloads(String appName);
 
-    int cancelDownload(in DownloadRequest downloadRequest);
+    int cancelDownload(String appName, in DownloadRequest downloadRequest);
 
-    DownloadStatus getDownloadStatus(in DownloadRequest downloadRequest);
+    DownloadStatus getDownloadStatus(String appName, in DownloadRequest downloadRequest);
 
     /*
      * named this for 2 reasons:
      *  1 don't want 'State' here as it conflicts with 'Status' of the previous function
      *  2 want to perfect typing 'Knowledge'
      */
-    void resetDownloadKnowledge(in DownloadRequest downloadRequest);
+    void resetDownloadKnowledge(String appName, in DownloadRequest downloadRequest);
 
     /**
      * End of life for this MbmsDownloadManager.
index cb83969..fbc0931 100755 (executable)
@@ -17,8 +17,8 @@
 package android.telephony.mbms.vendor;
 
 import android.net.Uri;
-import android.telephony.mbms.IMbmsStreamingManagerListener;
-import android.telephony.mbms.IStreamingServiceListener;
+import android.telephony.mbms.IMbmsStreamingManagerCallback;
+import android.telephony.mbms.IStreamingServiceCallback;
 import android.telephony.mbms.StreamingService;
 import android.telephony.mbms.StreamingServiceInfo;
 import android.telephony.SignalStrength;
@@ -34,7 +34,7 @@ interface IMbmsStreamingService
      * Registers this listener, subId with this appName
      *
      */
-    int initialize(IMbmsStreamingManagerListener listener, String appName, int subId);
+    int initialize(IMbmsStreamingManagerCallback listener, String appName, int subId);
 
 
     /**
@@ -55,7 +55,7 @@ interface IMbmsStreamingService
      *   URL-change and State-change pair.
      */
     StreamingService startStreaming(String appName, int subId, String serviceId,
-            IStreamingServiceListener listener);
+            IStreamingServiceCallback listener);
 
     /**
      * Asynchronously fetches all Services being streamed by this uid/appName/subId.
diff --git a/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java b/telephony/java/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java
new file mode 100644 (file)
index 0000000..369aef1
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.telephony.mbms.vendor;
+
+import android.os.RemoteException;
+import android.telephony.mbms.DownloadRequest;
+import android.telephony.mbms.DownloadStatus;
+import android.telephony.mbms.IDownloadCallback;
+import android.telephony.mbms.IMbmsDownloadManagerCallback;
+
+import java.util.List;
+
+/**
+ * Base class for MbmsDownloadService. The middleware should extend this base class rather than
+ * the aidl stub for compatibility
+ * @hide
+ * TODO: future systemapi
+ */
+public class MbmsDownloadServiceBase extends IMbmsDownloadService.Stub {
+    @Override
+    public void initialize(String appName, int subId, IMbmsDownloadManagerCallback listener)
+            throws RemoteException {
+    }
+
+    @Override
+    public int getFileServices(String appName, int subId, List<String> serviceClasses) throws
+            RemoteException {
+        return 0;
+    }
+
+    @Override
+    public int download(String appName, DownloadRequest downloadRequest, IDownloadCallback listener)
+            throws RemoteException {
+        return 0;
+    }
+
+    @Override
+    public List<DownloadRequest> listPendingDownloads(String appName) throws RemoteException {
+        return null;
+    }
+
+    @Override
+    public int cancelDownload(String appName, DownloadRequest downloadRequest)
+            throws RemoteException {
+        return 0;
+    }
+
+    @Override
+    public DownloadStatus getDownloadStatus(String appName, DownloadRequest downloadRequest)
+            throws RemoteException {
+        return null;
+    }
+
+    @Override
+    public void resetDownloadKnowledge(String appName, DownloadRequest downloadRequest)
+            throws RemoteException {
+    }
+
+    @Override
+    public void dispose(String appName, int subId) throws RemoteException {
+    }
+}
diff --git a/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java b/telephony/java/android/telephony/mbms/vendor/MbmsStreamingServiceBase.java
new file mode 100644 (file)
index 0000000..1c8ab7c
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.telephony.mbms.vendor;
+
+import android.net.Uri;
+import android.os.RemoteException;
+import android.telephony.mbms.IMbmsStreamingManagerCallback;
+import android.telephony.mbms.IStreamingServiceCallback;
+import android.telephony.mbms.StreamingService;
+
+import java.util.List;
+
+/**
+ * @hide
+ * TODO: future systemapi
+ */
+public class MbmsStreamingServiceBase extends IMbmsStreamingService.Stub {
+
+    @Override
+    public int initialize(IMbmsStreamingManagerCallback listener, String appName, int subId)
+            throws RemoteException {
+        return 0;
+    }
+
+    @Override
+    public int getStreamingServices(String appName, int subId, List<String> serviceClasses)
+            throws RemoteException {
+        return 0;
+    }
+
+    @Override
+    public StreamingService startStreaming(String appName, int subId,
+            String serviceId, IStreamingServiceCallback listener) throws RemoteException {
+        return null;
+    }
+
+    @Override
+    public int getActiveStreamingServices(String appName, int subId) throws RemoteException {
+        return 0;
+    }
+
+    @Override
+    public Uri getPlaybackUri(String appName, int subId, String serviceId) throws RemoteException {
+        return null;
+    }
+
+    @Override
+    public void switchStreams(String appName, int subId, String oldServiceId, String newServiceId)
+            throws RemoteException {
+    }
+
+    @Override
+    public int getState(String appName, int subId, String serviceId) throws RemoteException {
+        return 0;
+    }
+
+    @Override
+    public void stopStreaming(String appName, int subId, String serviceId) throws RemoteException {
+    }
+
+    @Override
+    public void disposeStream(String appName, int subId, String serviceId) throws RemoteException {
+    }
+
+    @Override
+    public void dispose(String appName, int subId) throws RemoteException {
+    }
+}