diff options
| author | 2017-08-03 01:03:46 +0000 | |
|---|---|---|
| committer | 2017-08-03 01:03:46 +0000 | |
| commit | 0553f96c0a477f16e4daab7c7b51d8904cbec0bf (patch) | |
| tree | fde1809d83100d826065bc7f92e6df346f72c557 | |
| parent | 7eed96cc1c477a6672bc877a7f5645e4e780e66b (diff) | |
| parent | 6a2ee3b1804f6df19c0b22203f2149b365659339 (diff) | |
Merge "Check CookieHandler in setDataSource with cookies" into oc-dr1-dev
am: 6a2ee3b180
Change-Id: I28f5b461d1c0e7f25868af780125c2f8ba356a89
| -rw-r--r-- | media/java/android/media/MediaPlayer.java | 51 |
1 files changed, 35 insertions, 16 deletions
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index 849bd019739d..5a16c36545c8 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -73,6 +73,8 @@ import java.lang.Runnable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.ref.WeakReference; +import java.net.CookieHandler; +import java.net.CookieManager; import java.net.HttpCookie; import java.net.HttpURLConnection; import java.net.InetSocketAddress; @@ -1004,19 +1006,28 @@ public class MediaPlayer extends PlayerBase /** * Sets the data source as a content Uri. * - * @param context the Context to use when resolving the Uri - * @param uri the Content URI of the data you want to play - * @param headers the headers to be sent together with the request for the data - * The headers must not include cookies. Instead, use the cookies param. - * @param cookies the cookies to be sent together with the request - * @throws IllegalStateException if it is called in an invalid state - * @throws NullPointerException if context or uri is null - * @throws IOException if uri has a file scheme and an I/O error occurs + * To provide cookies for the subsequent HTTP requests, you can install your own default cookie + * handler and use other variants of setDataSource APIs instead. Alternatively, you can use + * this API to pass the cookies as a list of HttpCookie. If the app has not installed + * a CookieHandler already, this API creates a CookieManager and populates its CookieStore with + * the provided cookies. If the app has installed its own handler already, this API requires the + * handler to be of CookieManager type such that the API can update the manager’s CookieStore. * * <p><strong>Note</strong> that the cross domain redirection is allowed by default, * but that can be changed with key/value pairs through the headers parameter with * "android-allow-cross-domain-redirect" as the key and "0" or "1" as the value to * disallow or allow cross domain redirection. + * + * @param context the Context to use when resolving the Uri + * @param uri the Content URI of the data you want to play + * @param headers the headers to be sent together with the request for the data + * The headers must not include cookies. Instead, use the cookies param. + * @param cookies the cookies to be sent together with the request + * @throws IllegalArgumentException if cookies are provided and the installed handler is not + * a CookieManager + * @throws IllegalStateException if it is called in an invalid state + * @throws NullPointerException if context or uri is null + * @throws IOException if uri has a file scheme and an I/O error occurs */ public void setDataSource(@NonNull Context context, @NonNull Uri uri, @Nullable Map<String, String> headers, @Nullable List<HttpCookie> cookies) @@ -1029,6 +1040,14 @@ public class MediaPlayer extends PlayerBase throw new NullPointerException("uri param can not be null."); } + if (cookies != null) { + CookieHandler cookieHandler = CookieHandler.getDefault(); + if (cookieHandler != null && !(cookieHandler instanceof CookieManager)) { + throw new IllegalArgumentException("The cookie handler has to be of CookieManager " + + "type when cookies are provided."); + } + } + // The context and URI usually belong to the calling user. Get a resolver for that user // and strip out the userId from the URI if present. final ContentResolver resolver = context.getContentResolver(); @@ -1064,15 +1083,15 @@ public class MediaPlayer extends PlayerBase /** * Sets the data source as a content Uri. * - * @param context the Context to use when resolving the Uri - * @param uri the Content URI of the data you want to play - * @param headers the headers to be sent together with the request for the data - * @throws IllegalStateException if it is called in an invalid state - * * <p><strong>Note</strong> that the cross domain redirection is allowed by default, * but that can be changed with key/value pairs through the headers parameter with * "android-allow-cross-domain-redirect" as the key and "0" or "1" as the value to * disallow or allow cross domain redirection. + * + * @param context the Context to use when resolving the Uri + * @param uri the Content URI of the data you want to play + * @param headers the headers to be sent together with the request for the data + * @throws IllegalStateException if it is called in an invalid state */ public void setDataSource(@NonNull Context context, @NonNull Uri uri, @Nullable Map<String, String> headers) @@ -1093,15 +1112,15 @@ public class MediaPlayer extends PlayerBase /** * Sets the data source (file-path or http/rtsp URL) to use. * - * @param path the path of the file, or the http/rtsp URL of the stream you want to play - * @throws IllegalStateException if it is called in an invalid state - * * <p>When <code>path</code> refers to a local file, the file may actually be opened by a * process other than the calling application. This implies that the pathname * should be an absolute path (as any other process runs with unspecified current working * directory), and that the pathname should reference a world-readable file. * As an alternative, the application could first open the file for reading, * and then use the file descriptor form {@link #setDataSource(FileDescriptor)}. + * + * @param path the path of the file, or the http/rtsp URL of the stream you want to play + * @throws IllegalStateException if it is called in an invalid state */ public void setDataSource(String path) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException { |