From bcb4ea4f703e667e910d8b4016ddab67d11af2eb Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Mon, 12 Oct 2015 12:15:13 +0100 Subject: [PATCH] Allow launching of ExoPlayer demo app via adb shell. For example: adb shell am start -a com.google.android.exoplayer.demo.action.VIEW -d http://... --- demo/src/main/AndroidManifest.xml | 15 +++++- .../exoplayer/demo/PlayerActivity.java | 51 ++++++++++++++++--- 2 files changed, 57 insertions(+), 9 deletions(-) diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml index 1575a1e6b7..230fd31a93 100644 --- a/demo/src/main/AndroidManifest.xml +++ b/demo/src/main/AndroidManifest.xml @@ -41,9 +41,20 @@ + android:theme="@style/PlayerTheme"> + + + + + + + + + + diff --git a/demo/src/main/java/com/google/android/exoplayer/demo/PlayerActivity.java b/demo/src/main/java/com/google/android/exoplayer/demo/PlayerActivity.java index 8f4d3e16cc..f9932579f6 100644 --- a/demo/src/main/java/com/google/android/exoplayer/demo/PlayerActivity.java +++ b/demo/src/main/java/com/google/android/exoplayer/demo/PlayerActivity.java @@ -78,13 +78,19 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback, DemoPlayer.Listener, DemoPlayer.CaptionListener, DemoPlayer.Id3MetadataListener, AudioCapabilitiesReceiver.Listener { + // For use within demo app code. + public static final String CONTENT_ID_EXTRA = "content_id"; + public static final String CONTENT_TYPE_EXTRA = "content_type"; public static final int TYPE_DASH = 0; public static final int TYPE_SS = 1; public static final int TYPE_HLS = 2; public static final int TYPE_OTHER = 3; - public static final String CONTENT_TYPE_EXTRA = "content_type"; - public static final String CONTENT_ID_EXTRA = "content_id"; + // For use when launching the demo app using adb. + private static final String CONTENT_EXT_EXTRA = "type"; + private static final String EXT_DASH = ".mpd"; + private static final String EXT_SS = ".ism"; + private static final String EXT_HLS = ".m3u8"; private static final String TAG = "PlayerActivity"; private static final int MENU_GROUP_TRACKS = 1; @@ -129,11 +135,6 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback, public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Intent intent = getIntent(); - contentUri = intent.getData(); - contentType = intent.getIntExtra(CONTENT_TYPE_EXTRA, -1); - contentId = intent.getStringExtra(CONTENT_ID_EXTRA); - setContentView(R.layout.player_activity); View root = findViewById(R.id.root); root.setOnTouchListener(new OnTouchListener() { @@ -185,9 +186,21 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback, audioCapabilitiesReceiver.register(); } + @Override + public void onNewIntent(Intent intent) { + releasePlayer(); + playerPosition = 0; + setIntent(intent); + } + @Override public void onResume() { super.onResume(); + Intent intent = getIntent(); + contentUri = intent.getData(); + contentType = intent.getIntExtra(CONTENT_TYPE_EXTRA, + inferContentType(contentUri, intent.getStringExtra(CONTENT_EXT_EXTRA))); + contentId = intent.getStringExtra(CONTENT_ID_EXTRA); configureSubtitleView(); if (player == null) { preparePlayer(true); @@ -597,4 +610,28 @@ public class PlayerActivity extends Activity implements SurfaceHolder.Callback, return CaptionStyleCompat.createFromCaptionStyle(captioningManager.getUserStyle()); } + /** + * Makes a best guess to infer the type from a media {@link Uri} and an optional overriding file + * extension. + * + * @param uri The {@link Uri} of the media. + * @param fileExtension An overriding file extension. + * @return The inferred type. + */ + private static int inferContentType(Uri uri, String fileExtension) { + String lastPathSegment = !TextUtils.isEmpty(fileExtension) ? "." + fileExtension + : uri.getLastPathSegment(); + if (lastPathSegment == null) { + return TYPE_OTHER; + } else if (lastPathSegment.endsWith(EXT_DASH)) { + return TYPE_DASH; + } else if (lastPathSegment.endsWith(EXT_SS)) { + return TYPE_SS; + } else if (lastPathSegment.endsWith(EXT_HLS)) { + return TYPE_HLS; + } else { + return TYPE_OTHER; + } + } + }