Modified:
/trunk/src/android/AndroidManifest.xml
/trunk/src/android/src/org/musikcube/PlayerControl.java
/trunk/src/android/src/org/musikcube/Service.java
/trunk/src/android/src/org/musikcube/core/Player.java
=======================================
--- /trunk/src/android/AndroidManifest.xml Wed Aug 5 16:16:30 2009
+++ /trunk/src/android/AndroidManifest.xml Tue Aug 11 15:17:53 2009
@@ -24,4 +24,5 @@
+
</manifest>
=======================================
--- /trunk/src/android/src/org/musikcube/PlayerControl.java Tue Aug 11
11:57:11 2009
+++ /trunk/src/android/src/org/musikcube/PlayerControl.java Tue Aug 11
15:17:53 2009
@@ -54,7 +54,7 @@
ImageButton pauseButton =
(ImageButton)findViewById(R.id.MediaPause);
pauseButton.setOnClickListener(this.onPauseClick);
-
this.callbackTrackPositionsUpdateHandler.postDelayed(callbackTrackPositionsUpdateRunnable,100);
+
this.callbackTrackPositionsUpdateHandler.postDelayed(callbackTrackPositionsUpdateRunnable,500);
}
private OnClickListener onNextClick = new OnClickListener() {
@@ -85,7 +85,7 @@
this.callbackTrackPositionsUpdateHandler.post(this.callbackTrackPositionsUpdateRunnable);
}
public void OnTrackUpdate() {
-
+/*
synchronized(lock){
int newTrackId = Player.GetInstance().GetCurrentTrackId();
if(newTrackId!=this.trackId){
@@ -106,13 +106,13 @@
Library.GetInstance().AddQuery(query);
}
}
- }
+ }*/
this.callbackTrackUpdateHandler.post(this.callbackTrackUpdateRunnable);
}
public void OnQueryResults(IQuery query) {
- MetadataQuery mdQuery = (MetadataQuery)query;
+/* MetadataQuery mdQuery = (MetadataQuery)query;
if(!mdQuery.resultTracks.isEmpty()){
synchronized(lock){
Track newTrack = mdQuery.resultTracks.get(0);
@@ -121,7 +121,7 @@
this.callbackTrackUpdateHandler.post(this.callbackTrackUpdateRunnable);
}
}
- }
+ }*/
}
@Override
@@ -155,6 +155,12 @@
int thumbnailId = 0;
synchronized(lock){
+
+ this.track = Player.GetInstance().GetCurrentTrack();
+ if(this.track==null){
+ this.track = new Track();
+ }
+
String thumbnailString = this.track.metadata.get("thumbnail_id");
if(thumbnailString!=null){
thumbnailId = Integer.parseInt(thumbnailString);
@@ -192,7 +198,11 @@
durationText += Integer.toString(seconds);
durationView.setText(durationText);
}
-
+
+ // clear image
+ ImageView cover = (ImageView)findViewById(R.id.AlbumCover);
+ cover.setImageResource(R.drawable.album);
+
if(thumbnailId!=0){
// Load image
Library library = Library.GetInstance();
@@ -222,7 +232,6 @@
protected void onPostExecute(Bitmap result){
if(result==null){
-
}else{
ImageView cover = (ImageView)findViewById(R.id.AlbumCover);
cover.setImageBitmap(result);
=======================================
--- /trunk/src/android/src/org/musikcube/Service.java Mon Aug 10 13:37:02
2009
+++ /trunk/src/android/src/org/musikcube/Service.java Tue Aug 11 15:17:53
2009
@@ -5,6 +5,7 @@
import org.musikcube.core.Library;
import org.musikcube.core.Player;
+import org.musikcube.core.Track;
import android.app.Notification;
import android.app.NotificationManager;
@@ -21,8 +22,7 @@
Library library;
Player player;
-
- int nowPlayingPosition = 0;
+ boolean showingNotification = false;
/**
*
@@ -83,15 +83,32 @@
this.stopSelf();
}
if(action.equals("player_start")){
+ Track track = Player.GetInstance().GetCurrentTrack();
+
+ this.showingNotification = true;
+
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager)
getSystemService(ns);
int icon = R.drawable.mc_notify;
- CharSequence tickerText = "musikCube is playing";
+ CharSequence tickerText = "mC2 playing";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
Context context = getApplicationContext();
- CharSequence contentTitle = "musikCube";
- CharSequence contentText = "is playing!";
+ String contentTitle = "Playing: ";
+ if(track!=null){
+ String trackTitle = track.metadata.get("title");
+ if(trackTitle!=null){
+ contentTitle += trackTitle;
+ }
+ }
+
+ String contentText = "By: ";
+ if(track!=null){
+ String trackArtist = track.metadata.get("visual_artist");
+ if(trackArtist!=null){
+ contentText += trackArtist;
+ }
+ }
Intent notificationIntent = new Intent(this, PlayerControl.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
@@ -102,11 +119,12 @@
}
if(action.equals("player_end")){
+ this.showingNotification = false;
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager)
getSystemService(ns);
mNotificationManager.cancel(1);
}
-
+
// if(intent
getIntegerArrayListExtra("org.musikcube.Service.tracklist")!=null){
/*
if(intent.getIntegerArrayListExtra("org.musikcube.Service.tracklist")!=null){
=======================================
--- /trunk/src/android/src/org/musikcube/core/Player.java Mon Aug 10
13:37:02 2009
+++ /trunk/src/android/src/org/musikcube/core/Player.java Tue Aug 11
15:17:53 2009
@@ -6,7 +6,7 @@
import android.content.Intent;
-public class Player implements TrackPlayer.OnTrackStatusListener{
+public class Player implements TrackPlayer.OnTrackStatusListener,
OnQueryResultListener{
private ArrayList<Integer> nowPlaying = new ArrayList<Integer>();
private int position = 0;
@@ -17,6 +17,7 @@
private ArrayList<TrackPlayer> playingTracks = new
ArrayList<TrackPlayer>();
private TrackPlayer currentPlayer;
private TrackPlayer nextPlayer;
+ private Track currentTrack = new Track();
public android.app.Service service;
@@ -62,12 +63,14 @@
synchronized(this.lock){
if(this.nowPlaying.size()>position && position>=0){
int trackId = this.nowPlaying.get(position);
+
if(this.nextPlayer!=null){
if(this.nextPlayer.trackId==trackId){
newPlayer = this.nextPlayer;
this.nextPlayer = null;
}else{
// Something wrong here, not the prepared track
+ this.nextPlayer.listener = null;
this.nextPlayer.Stop();
this.nextPlayer = null;
}
@@ -85,6 +88,20 @@
this.listener.OnTrackBufferUpdate(0);
this.listener.OnTrackPositionUpdate(0);
}
+
+ // query for metadata
+ MetadataQuery query = new MetadataQuery();
+ query.requestedMetakeys.add("title");
+ query.requestedMetakeys.add("track");
+ query.requestedMetakeys.add("visual_artist");
+ query.requestedMetakeys.add("album");
+ query.requestedMetakeys.add("year");
+ query.requestedMetakeys.add("thumbnail_id");
+ query.requestedMetakeys.add("duration");
+ query.requestedTracks.add(trackId);
+ query.SetResultListener(this);
+ Library.GetInstance().AddQuery(query);
+
}
}
@@ -112,6 +129,7 @@
public void Next(){
synchronized(this.lock){
+ this.currentTrack = new Track();
this.position++;
if(this.position>=this.nowPlaying.size()){
this.StopAllTracks();
@@ -125,6 +143,11 @@
public void Stop(){
synchronized(this.lock){
this.StopAllTracks();
+ if(this.nextPlayer!=null){
+ this.nextPlayer.listener = null;
+ this.nextPlayer.Stop();
+ this.nextPlayer = null;
+ }
this.End();
}
}
@@ -156,6 +179,12 @@
private void End(){
synchronized(this.lock){
+ this.currentTrack = new Track();
+ if(this.listener!=null){
+ this.listener.OnTrackUpdate();
+ this.listener.OnTrackBufferUpdate(0);
+ this.listener.OnTrackPositionUpdate(0);
+ }
if(this.library!=null){
this.library.RemovePointer();
this.library = null;
@@ -214,5 +243,25 @@
}
}
}
+
+ public void OnQueryResults(IQuery query) {
+ MetadataQuery mdQuery = (MetadataQuery)query;
+ synchronized(this.lock){
+ this.currentTrack = mdQuery.resultTracks.get(0);
+ if(this.listener!=null){
+ this.listener.OnTrackUpdate();
+ }
+ }
+
+ Intent intent = new Intent(this.service, org.musikcube.Service.class);
+ intent.putExtra("org.musikcube.Service.action", "player_start");
+ this.service.startService(intent);
+ }
+
+ public Track GetCurrentTrack(){
+ synchronized(this.lock){
+ return this.currentTrack;
+ }
+ }
}