Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(478)

Unified Diff: media/base/android/java/src/org/chromium/media/MediaPlayerBridge.java

Issue 12625005: remove call to get android MediaPlayer class (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix findbug warning Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/history/android/sqlite_cursor.cc ('k') | media/base/android/media_player_bridge.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..7274418b09caa72a50f1ba13f45b02209130fb2c 100644
--- a/media/base/android/java/src/org/chromium/media/MediaPlayerBridge.java
+++ b/media/base/android/java/src/org/chromium/media/MediaPlayerBridge.java
@@ -8,14 +8,43 @@ 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.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.util.HashMap;
@JNINamespace("media")
class MediaPlayerBridge {
+
+ private static final String TAG = "MediaPlayerBridge";
+
+ private static class AllowedOperations {
+ private final boolean mCanPause;
+ private final boolean mCanSeekForward;
+ private final boolean mCanSeekBackward;
+
+ private AllowedOperations(boolean canPause, boolean canSeekForward,
+ boolean canSeekBackward) {
+ mCanPause = canPause;
+ mCanSeekForward = canSeekForward;
+ mCanSeekBackward = canSeekBackward;
+ }
+
+ @CalledByNative("AllowedOperations")
+ private boolean canPause() { return mCanPause; }
+
+ @CalledByNative("AllowedOperations")
+ private boolean canSeekForward() { return mCanSeekForward; }
+
+ @CalledByNative("AllowedOperations")
+ private boolean canSeekBackward() { return mCanSeekBackward; }
+ }
+
@CalledByNative
private static boolean setDataSource(MediaPlayer player, Context context, String url,
String cookies, boolean hideUrlLog) {
@@ -32,4 +61,49 @@ class MediaPlayerBridge {
return false;
}
}
+
+ /**
+ * Returns an AllowedOperations object to show all the operations that are
+ * allowed on the media player.
+ */
+ @CalledByNative
+ private static AllowedOperations getAllowedOperations(MediaPlayer player) {
+ boolean canPause = true;
+ boolean canSeekForward = true;
+ boolean canSeekBackward = 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);
+ canPause = !((Boolean) hasMethod.invoke(data, pause))
+ || ((Boolean) getBooleanMethod.invoke(data, pause));
+ canSeekForward = !((Boolean) hasMethod.invoke(data, seekForward))
+ || ((Boolean) getBooleanMethod.invoke(data, seekForward));
+ canSeekBackward = !((Boolean) hasMethod.invoke(data, seekBackward))
+ || ((Boolean) getBooleanMethod.invoke(data, seekBackward));
+ }
+ } catch (NoSuchMethodException e) {
+ Log.e(TAG, "Cannot find getMetadata() method: " + e);
+ } catch (InvocationTargetException e) {
+ Log.e(TAG, "Cannot invoke MediaPlayer.getMetadata() method: " + e);
+ } catch (IllegalAccessException e) {
+ Log.e(TAG, "Cannot access metadata: " + e);
+ } catch (NoSuchFieldException e) {
+ Log.e(TAG, "Cannot find matching fields in Metadata class: " + e);
+ }
+ return new AllowedOperations(canPause, canSeekForward, canSeekBackward);
+ }
}
« no previous file with comments | « chrome/browser/history/android/sqlite_cursor.cc ('k') | media/base/android/media_player_bridge.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698