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;
+ }
+ }
+
}