Chromium Code Reviews| Index: media/base/android/java/src/org/chromium/media/MediaPlayerBridge.java |
| diff --git a/media/base/android/java/src/org/chromium/media/MediaPlayerBridge.java b/media/base/android/java/src/org/chromium/media/MediaPlayerBridge.java |
| index 1bf800585ae85de7015d52b73ec06a4f44ace56e..902f8e59c8e490a96c49629fe9949b75e2444129 100644 |
| --- a/media/base/android/java/src/org/chromium/media/MediaPlayerBridge.java |
| +++ b/media/base/android/java/src/org/chromium/media/MediaPlayerBridge.java |
| @@ -8,10 +8,12 @@ import android.content.Context; |
| import android.media.MediaPlayer; |
| import android.net.Uri; |
| import android.text.TextUtils; |
| +import android.util.Log; |
| import org.chromium.base.CalledByNative; |
| import org.chromium.base.JNINamespace; |
| +import java.lang.reflect.Method; |
| import java.util.HashMap; |
| @JNINamespace("media") |
| @@ -32,4 +34,43 @@ class MediaPlayerBridge { |
| return false; |
| } |
| } |
| + |
| + /** |
| + * Returns an array of booleans for allowed operations on the media player. |
| + * The first boolean shows whether the player can be paused. |
| + * The 2nd boolean shows whether the player can seek forward. |
| + * The 3rd boolean shows whether the player can seek backward. |
|
bulach
2013/03/13 15:06:10
the knowledge of which boolean is what is now dist
qinmin
2013/03/13 18:26:58
Done.
|
| + */ |
| + @CalledByNative |
| + private static boolean[] getMetadata(MediaPlayer player) { |
| + boolean ret[] = { true, true, true }; |
| + try { |
| + Method getMetadata = player.getClass().getDeclaredMethod( |
| + "getMetadata", boolean.class, boolean.class); |
| + getMetadata.setAccessible(true); |
| + Object data = getMetadata.invoke(player, false, false); |
| + if (data != null) { |
| + Class<?> metadataClass = data.getClass(); |
| + Method hasMethod = metadataClass.getDeclaredMethod("has", int.class); |
| + Method getBooleanMethod = metadataClass.getDeclaredMethod("getBoolean", int.class); |
| + |
| + int pause = (Integer) metadataClass.getField("PAUSE_AVAILABLE").get(null); |
| + int seekForward = |
| + (Integer) metadataClass.getField("SEEK_FORWARD_AVAILABLE").get(null); |
| + int seekBackward = |
| + (Integer) metadataClass.getField("SEEK_BACKWARD_AVAILABLE").get(null); |
| + hasMethod.setAccessible(true); |
| + getBooleanMethod.setAccessible(true); |
| + ret[0] = !((Boolean) hasMethod.invoke(data, pause)) |
| + || ((Boolean) getBooleanMethod.invoke(data, pause)); |
| + ret[1] = !((Boolean) hasMethod.invoke(data, seekForward)) |
| + || ((Boolean) getBooleanMethod.invoke(data, seekForward)); |
| + ret[2] = !((Boolean) hasMethod.invoke(data, seekBackward)) |
| + || ((Boolean) getBooleanMethod.invoke(data, seekBackward)); |
| + } |
| + } catch (Exception e) { |
| + Log.e("MediaPlayerBridge", "Cannot get metadata from the player: " + e); |
| + } |
| + return ret; |
| + } |
| } |