added white play button icon for notification controls; pause button soon to follow.

Some checks for audioStreams being null added, along with minor semnatic restructuring of parseDashManifest()
This commit is contained in:
Adam Howard 2015-12-20 00:08:12 +00:00
parent f2e761c07c
commit 25c5f95ad9
8 changed files with 34 additions and 31 deletions

View File

@ -120,6 +120,9 @@ class ActionBarHandler {
} }
} }
} }
else {
Log.e(TAG, "FAILED to set audioStream value!");
}
} }
private void selectFormatItem(int i) { private void selectFormatItem(int i) {
@ -301,6 +304,8 @@ class ActionBarHandler {
intent = new Intent(activity, BackgroundPlayer.class); intent = new Intent(activity, BackgroundPlayer.class);
intent.setAction(Intent.ACTION_VIEW); intent.setAction(Intent.ACTION_VIEW);
Log.i(TAG, "audioStream is null:" + (audioStream == null));
Log.i(TAG, "audioStream.url is null:"+(audioStream.url==null));
intent.setDataAndType(Uri.parse(audioStream.url), intent.setDataAndType(Uri.parse(audioStream.url),
MediaFormat.getMimeById(audioStream.format)); MediaFormat.getMimeById(audioStream.format));
intent.putExtra(Intent.EXTRA_TITLE, videoTitle); intent.putExtra(Intent.EXTRA_TITLE, videoTitle);

View File

@ -45,8 +45,6 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
private static final String TAG = BackgroundPlayer.class.toString(); private static final String TAG = BackgroundPlayer.class.toString();
private static final String ACTION_STOP = TAG+".STOP"; private static final String ACTION_STOP = TAG+".STOP";
private static final String ACTION_PLAYPAUSE = TAG+".PLAYPAUSE"; private static final String ACTION_PLAYPAUSE = TAG+".PLAYPAUSE";
//private Looper mServiceLooper;
//private ServiceHandler mServiceHandler;
public BackgroundPlayer() { public BackgroundPlayer() {
super(); super();
@ -138,29 +136,23 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
wifiLock.acquire(); wifiLock.acquire();
mediaPlayer.start(); mediaPlayer.start();
//mediaPlayer.getCurrentPosition()
int vidLength = mediaPlayer.getDuration();
//Intent genericIntent = new Intent(owner, owner.getClass());
//PendingIntent playPI = PendingIntent.getService(owner, noteID, genericIntent, 0);
PendingIntent playPI = PendingIntent.getBroadcast(owner, noteID, new Intent(ACTION_PLAYPAUSE), PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Action.Builder buttonBuilder =
new NotificationCompat.Action.Builder(R.drawable.ic_play_arrow_black,
"Play", playPI);//todo:translatable string
NotificationCompat.Action playButton = buttonBuilder.build();
PendingIntent stopPI = PendingIntent.getBroadcast(owner, noteID,
new Intent(ACTION_STOP), PendingIntent.FLAG_UPDATE_CURRENT);
IntentFilter filter = new IntentFilter(); IntentFilter filter = new IntentFilter();
filter.setPriority(Integer.MAX_VALUE); filter.setPriority(Integer.MAX_VALUE);
filter.addAction(ACTION_PLAYPAUSE); filter.addAction(ACTION_PLAYPAUSE);
filter.addAction(ACTION_STOP); filter.addAction(ACTION_STOP);
registerReceiver(broadcastReceiver, filter); registerReceiver(broadcastReceiver, filter);
//playPauseButton PendingIntent playPI = PendingIntent.getBroadcast(owner, noteID, new Intent(ACTION_PLAYPAUSE), PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Action playButton = new NotificationCompat.Action.Builder
(R.drawable.ic_play_arrow_white_48dp, "Play", playPI).build();
NotificationCompat.Action pauseButton = new NotificationCompat.Action.Builder
(R.drawable.ic_play_arrow_white_48dp, "Pause", playPI).build();
PendingIntent stopPI = PendingIntent.getBroadcast(owner, noteID,
new Intent(ACTION_STOP), PendingIntent.FLAG_UPDATE_CURRENT);
//todo: make it so that tapping the notification brings you back to the Video's DetailActivity //todo: make it so that tapping the notification brings you back to the Video's DetailActivity
//using setContentIntent //using setContentIntent
noteBuilder = new NotificationCompat.Builder(owner); noteBuilder = new NotificationCompat.Builder(owner);
@ -232,7 +224,7 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
//noteBuilder.setProgress(0, 0, false);//remove progress bar //noteBuilder.setProgress(0, 0, false);//remove progress bar
noteMgr.cancel(noteID);//remove notification noteMgr.cancel(noteID);//remove notification
unregisterReceiver(broadcastReceiver); unregisterReceiver(broadcastReceiver);
mediaPlayer.release();//release system resources mediaPlayer.release();//release mediaPlayer's system resources
wifiLock.release();//release wifilock wifiLock.release();//release wifilock

View File

@ -371,6 +371,16 @@ public class YoutubeVideoExtractor extends VideoExtractor {
//todo: replace this with a call to getVideoId, if possible //todo: replace this with a call to getVideoId, if possible
videoInfo.id = matchGroup1("v=([0-9a-zA-Z_-]{11})", pageUrl); videoInfo.id = matchGroup1("v=([0-9a-zA-Z_-]{11})", pageUrl);
if(videoInfo.audioStreams == null
|| videoInfo.audioStreams.length == 0) {
Log.e(TAG, "uninitialised audio streams!");
}
if(videoInfo.videoStreams == null
|| videoInfo.videoStreams.length == 0) {
Log.e(TAG, "uninitialised video streams!");
}
videoInfo.age_limit = 0; videoInfo.age_limit = 0;
//average rating //average rating
@ -445,13 +455,14 @@ public class YoutubeVideoExtractor extends VideoExtractor {
try { try {
XmlPullParser parser = Xml.newPullParser(); XmlPullParser parser = Xml.newPullParser();
parser.setInput(new StringReader(dashDoc)); parser.setInput(new StringReader(dashDoc));
int eventType = parser.getEventType();
String tagName = ""; String tagName = "";
String currentMimeType = ""; String currentMimeType = "";
int currentBandwidth = -1; int currentBandwidth = -1;
int currentSamplingRate = -1; int currentSamplingRate = -1;
boolean currentTagIsBaseUrl = false; boolean currentTagIsBaseUrl = false;
while(eventType != XmlPullParser.END_DOCUMENT) { for(int eventType = parser.getEventType();
eventType != XmlPullParser.END_DOCUMENT;
eventType = parser.next() ) {
switch(eventType) { switch(eventType) {
case XmlPullParser.START_TAG: case XmlPullParser.START_TAG:
tagName = parser.getName(); tagName = parser.getName();
@ -465,8 +476,8 @@ public class YoutubeVideoExtractor extends VideoExtractor {
} else if(tagName.equals("BaseURL")) { } else if(tagName.equals("BaseURL")) {
currentTagIsBaseUrl = true; currentTagIsBaseUrl = true;
} }
break; break;
case XmlPullParser.TEXT: case XmlPullParser.TEXT:
if(currentTagIsBaseUrl && if(currentTagIsBaseUrl &&
(currentMimeType.contains("audio"))) { (currentMimeType.contains("audio"))) {
@ -479,16 +490,14 @@ public class YoutubeVideoExtractor extends VideoExtractor {
audioStreams.add(new VideoInfo.AudioStream(parser.getText(), audioStreams.add(new VideoInfo.AudioStream(parser.getText(),
format, currentBandwidth, currentSamplingRate)); format, currentBandwidth, currentSamplingRate));
} }
//missing break here?
case XmlPullParser.END_TAG: case XmlPullParser.END_TAG:
if(tagName.equals("AdaptationSet")) { if(tagName.equals("AdaptationSet")) {
currentMimeType = ""; currentMimeType = "";
} else if(tagName.equals("BaseURL")) { } else if(tagName.equals("BaseURL")) {
currentTagIsBaseUrl = false; currentTagIsBaseUrl = false;
}//no break needed here
} }
break;
default:
}
eventType = parser.next();
} }
} catch(Exception e) { } catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -583,10 +592,7 @@ public class YoutubeVideoExtractor extends VideoExtractor {
e.printStackTrace(); e.printStackTrace();
} }
Context.exit(); Context.exit();
if(result != null) return (result == null ? "" : result.toString());
return result.toString();
else
return "";
} }
private String cleanUrl(String complexUrl) { private String cleanUrl(String complexUrl) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B