[musikcube] r380 committed - Fixed some bug in TrackPlayer. ...

0 views
Skip to first unread message

codesite...@google.com

unread,
Aug 21, 2009, 2:39:09 AM8/21/09
to musikc...@googlegroups.com
Revision: 380
Author: onnerby
Date: Thu Aug 20 23:38:15 2009
Log: Fixed some bug in TrackPlayer.
Modified some graphics.
http://code.google.com/p/musikcube/source/detail?r=380

Modified:
/trunk/src/android/AndroidManifest.xml
/trunk/src/android/res/drawable/ic_media_next.png
/trunk/src/android/res/drawable/ic_media_pause.png
/trunk/src/android/res/drawable/ic_media_play.png
/trunk/src/android/res/drawable/ic_media_previous.png
/trunk/src/android/src/org/musikcube/PlayerControl.java
/trunk/src/android/src/org/musikcube/Service.java
/trunk/src/android/src/org/musikcube/core/Library.java
/trunk/src/android/src/org/musikcube/core/Player.java
/trunk/src/android/src/org/musikcube/core/TrackPlayer.java

=======================================
--- /trunk/src/android/AndroidManifest.xml Sun Aug 16 15:27:03 2009
+++ /trunk/src/android/AndroidManifest.xml Thu Aug 20 23:38:15 2009
@@ -3,7 +3,7 @@
package="org.musikcube"
android:versionCode="1"
android:versionName="1.0">
- <application android:icon="@drawable/icon"
android:label="@string/app_name" android:name="App"
android:debuggable="true">
+ <application android:icon="@drawable/icon"
android:label="@string/app_name" android:name="App"
android:debuggable="false">
<activity android:name=".main"
android:label="@string/app_name"
android:launchMode="singleTask">
<intent-filter>
=======================================
--- /trunk/src/android/res/drawable/ic_media_next.png Wed Jul 29 15:56:39
2009
+++ /trunk/src/android/res/drawable/ic_media_next.png Thu Aug 20 23:38:15
2009
Binary file, no diff available.
=======================================
--- /trunk/src/android/res/drawable/ic_media_pause.png Wed Jul 29 15:56:39
2009
+++ /trunk/src/android/res/drawable/ic_media_pause.png Thu Aug 20 23:38:15
2009
Binary file, no diff available.
=======================================
--- /trunk/src/android/res/drawable/ic_media_play.png Wed Jul 29 15:56:39
2009
+++ /trunk/src/android/res/drawable/ic_media_play.png Thu Aug 20 23:38:15
2009
Binary file, no diff available.
=======================================
--- /trunk/src/android/res/drawable/ic_media_previous.png Wed Jul 29
15:56:39 2009
+++ /trunk/src/android/res/drawable/ic_media_previous.png Thu Aug 20
23:38:15 2009
@@ -2,32 +2,31 @@


IHDR szzô tEXtSoftware Adobe
ImageReadyqÉe< ±IDATxÚìWoh e ¿¤—q‘ s,Ådnl‡uë B3[0q[i1™M 5¹îƒ‰ìC; $ìà d Z Cf((í
-¬¢Ä²A&®6⪠²‘2ªÍF\2 k±e\\ é\5§ÞVŸ÷š÷r¹.¶Ý>ôKßãxïž{þüžßû¼ N³°°@¬eÓ kÜÖ ¬9 òq
-„ ‡LÐ5À ÷† Z¡Í3Ðí„{Bó¨³ œ ö
-̳L»Ýfoày>Ÿ M¼ Òÿc³ ºFÐï`Yvgr,™" 18BßÄù8¿µÁê
-I‹É2
- š@ž®bó e Ü à f;cE²¹ù¹{$|x 9[)
- ßB×Òm]oty) U'
E‚(ÂUEß ÝÞ]Ö]^W›« @ ‘¾\ ´ ~×åsíA ‚òG âr Gf0l²·Øý­-­¯R$õ„@ Ò7Ôëá DAmƒjà Y73õÌ^Š 4H zÉ ! –1³õìnf s (L‚Á ¡C¡ Á¦½«³ Ñ÷ ¬lE±’ à¡ ƒeX ·ŸóQFêi
-TÙ#ÖHÉ—¸˜
-:ƒà;A=tÍìó,Çy9/EQ›°Ž@.f€û È Ux£Ëãz ŠÍ Ï ° µ þ_=A" 22¡
øVð9 ÞÍZÙf ÕT  Ë=²•œ 8³Éüvà@Àc1[ê Z
-»J Pf¥ø ; :`HÜþ þ×i ½m¹ÂÄìÙöØZÝmî×€)ƒ h¹9†j@¦
-^
-ba# ŒÛíuwB¡µCf $vÄò¸á€êgÚHoæ<\@
-*ª²­
-b/ ÀÓH ¶†Ž„<L
-Ó( Zɉ²x”™+ä$v*W¹Â 7µ ­ - kàcyªà‚
-Š` ÁU:¸à” áÀÊw¬«ÅÆ¥6
->
-îI\L| ² ä"#©r  wQñN–Þ âþ²º"Q!“ 0šŒ2=ìvö^ì|l8: ý ¤ Â\á–
-`E 2spñwø[±/bg`& «êªd¨×êI=¡ © œ ÍÞÈF޾wtp"5q
DËîXˆâøpü±ãÇNñyþ— m*h ”+˜2S q Öí £ŸE?ˆ
-Å>)
-ʇV·âÙh4 ÀÚ@øD¸'9ž¼ ßÄ%6
-}4\ZD™4n ñ Ü * F? þ ý< Ÿâ§"‘Ó‘S@sZžß%Gò& 2X| ÐÿÙ²År&y1Ù C2P
-·—œ@ðÌ2PD
-³ƒÑ$.%rcWƆ Æ œûœ¼š)§Ã9 ÿ:žK§Ò9p 1YLu:R'M; V·Èž
ÜM]K} º)¸ €ŸÉ³±³³ÙkÙùÚMµ$,h[ X
-\ø
-6{gvjÕ X'^FÛ±Ïëã`'݆g ?ÏOGNFz xOWì'G‚4dl·[í
-¶ GSôF<{2éÌw«> Âø~ [÷`ÿÉþîL63
-¬ÝGÅ«^ppë;ÑWèëí I¦’ƒ‘ÁH? èu4ä¥a'jº»»W}"rísÝN|“Ȥo¦óàp^§×‰333“¹_sCð-_Åæ·s_ž›
-O ß   H
-ùwêFêºæqÿŒ‚‡ƒO• ¥¿C¦WWhƒŽt;€‡ 5ë¿fë Ö À cÄãWà IEND®B`‚
+Ë1Y¤q(7ÓÌe›@#Û¨ µn «Ž [)f UgÆ ³OK£É²/˜Å˜Ù H — Í X SøÀ¸e%Ž,3í—IIPo®Ã›°Ù
+Õ;6´çr‚Ï{íµw·UØøÀ îzyîž{þüžßû¼ï½%–––ÐZ
+ ´ÆÇ:€5 @ ±ª ¾nßf {àJx { X¡Ïv åp «HŒÙsp1®)
+ ï¡i:awØ? “ÿã³ D
+Ø·±,[n{Í %Ÿ09Fo
+ Û£ Q ’ OƧ € ô“y|^ Dgÿ@ÿÛÜm® ëJŠKî“ðâi
+l¥ ‚} ?Çï œ ¸Ä¤¸#= Á™Ç¾ DÝxtÜÅ\bÚ D R•Mò üÇÌ
³ S Æ_ ˆïò * Gkx,Ü~eìJ‹(‰ )DÉï°LÁI‘”Þ ÷† ª®çnpu" l RöÁ@HŽåÊØ ì^î 7 †Áá! ¾
+ß«àÓ è `ú^V « "RË€¿Çï`9¶9øM°U Ä畤j‰Y#åXdº
+} þ/ý8j=;ɺƒCA—(ŠÏ(6””®@‘ *° îð f˜y šíM¸ß Ä×û¥
+SˆÄ(²È¨
+ ¯ÿ%п c½— ²õ *ÐNàœÄ¾rp —H&:ûÏõ7Ç ñŠGOüœÔ2€+Ëä?ÛwÖ Câ
+87p Oò[—kL
+½Èµˆ}äÒÈ `ªXN$-·
+Á/K;< Iã&h çÈÐÈQh´&¨lƒÌ ™ 7%¡þž ø-Áá GNJêªÍ
+r§ (ÓˆB&ßi_3w‹«É6Z&ˆºyÔ•«ô¤ 4Ûå*?åÐÇ1¨Ñ‚3 /sSEi8’Ò$Ó$×Ù(
+§fHI¬~Vl
+Šsæ˜öžðvÙ ì A÷ Ûd’˜ë üLªž¥Ì3Bÿ.kK" Nf@H
+YzØÛì}w‹{ØsØÓ R¯±ÄxW PSE–98éÍô]·Ë} fR*¯­N‡¥!%©ì3ÃëlqŽVVT N}zê+Kµå ¨–Ý·aŠ › C'Oœ<C—Ñ·Vö- Ô+˜ºR 1 ëöçž÷<Ÿ¹ »¿.¢Š„Gv·ê^ ¬õz?òvÙ¬¶ ¼“
+òQÙãá2`ÊäqCèo¸þR ô¼ï¹çi÷0Ûèm Ž£
+g€æÉìüÎ Ê~„@ ‹ ûŸãwâ l
+¶n ’^#eœÕT­ò
+ QÁ‘ö#„}Ÿ=f{Å6 4^ ] ÅõL
+FC3 û c»ªwÅ ‘L$wH’$‡‘ Ó«
+04oÙm¹
+¶Q¸ !ÎÔ¡¶CsæÝæ
+¹?æHè5 +a ‹é¸¥¥¥ÜcoH` x Ž ‡ Ýð%ÝªÌ º˜žîø°£ š·Oó=9í7BŶp4Ü ‹¸y‘ߤÌ
+s•ùÛ‚Ç Õý •ýVk­½™ü3ùÔÌìÌ è 2 n,œ¯³Ö]e.3Qµ=3ʈ ‹u~ÐÉ›+Ì<,ñFážð,0ˆ` À <ÉŽ ÎÚß²ÿTU^•€Ž_ DI2™LS;·ï< ï y|
~m=Ø:U[]{ ¦ œô ¥Òòãêv¤˜ânÿs™MéïÇŽ ›X¡ ÞÒ½ =÷=±þ×l
+ÀZ øO€ NK \ Q–0 IEND®B`‚
=======================================
--- /trunk/src/android/src/org/musikcube/PlayerControl.java Thu Aug 20
14:19:13 2009
+++ /trunk/src/android/src/org/musikcube/PlayerControl.java Thu Aug 20
23:38:15 2009
@@ -46,6 +46,8 @@
nextButton.setOnClickListener(this.onNextClick);
ImageButton pauseButton =
(ImageButton)findViewById(R.id.MediaPause);
pauseButton.setOnClickListener(this.onPauseClick);
+ ImageButton prevButton = (ImageButton)findViewById(R.id.MediaPrev);
+ prevButton.setOnClickListener(this.onPrevClick);


this.callbackTrackPositionsUpdateHandler.postDelayed(callbackTrackPositionsUpdateRunnable,500);
}
@@ -56,6 +58,13 @@
intent.putExtra("org.musikcube.Service.action", "next");
startService(intent);
}
+ };
+ private OnClickListener onPrevClick = new OnClickListener() {
+ public void onClick(View v){
+ Intent intent = new Intent(PlayerControl.this,
org.musikcube.Service.class);
+ intent.putExtra("org.musikcube.Service.action", "prev");
+ startService(intent);
+ }
};
private OnClickListener onPauseClick = new OnClickListener() {
public void onClick(View v){
=======================================
--- /trunk/src/android/src/org/musikcube/Service.java Thu Aug 20 14:19:13
2009
+++ /trunk/src/android/src/org/musikcube/Service.java Thu Aug 20 23:38:15
2009
@@ -82,6 +82,10 @@
Player player = Player.GetInstance();
player.Next();
}
+ if(action.equals("prev")){
+ Player player = Player.GetInstance();
+ player.Prev();
+ }
if(action.equals("stop")){
Player player = Player.GetInstance();
player.Stop();
=======================================
--- /trunk/src/android/src/org/musikcube/core/Library.java Sun Aug 9
15:24:12 2009
+++ /trunk/src/android/src/org/musikcube/core/Library.java Thu Aug 20
23:38:15 2009
@@ -103,6 +103,7 @@
}else{
this.shutdownCounter = -1;
}
+ this.notifier.notifyAll();
}
}
public void RemovePointer(){
@@ -113,27 +114,24 @@
}else{
this.shutdownCounter = -1;
}
+ this.notifier.notifyAll();
}
}


public void Startup(Context context){
-// if(context!=null){
- this.context = context;
-
- // Startup thread when the application sends the context for the first
time
- this.thread = new Thread(this);
- this.running = true;
- this.thread.start();
-
-// }
+ this.context = context;
+
+ // Startup thread when the application sends the context for the first
time
+ this.thread = new Thread(this);
+ this.running = true;
+ this.thread.start();
}

public void Restart(){
synchronized(this.notifier){
this.running = false;
this.restart = true;
-// this.Startup(null);
if(this.socket!=null){
try {
this.socket.shutdownInput();
@@ -175,7 +173,6 @@
private WriterThreadHelper writerThreadHelper;

protected Library(){
-// this.writerThreadHelper = new WriterThreadHelper(this);
}

public void WaitForAuthroization(){
@@ -305,26 +302,6 @@

}
}
-/*
- while(this.connections==0){
- try{
- this.notifier.wait();
- }
- catch(Exception x){
-
- }
- }*/
-/* int countDown = 10;
- while(!this.exit && !this.restart){
- try{
- this.notifier.wait(2000);
- }
- catch(Exception x){
-
- }
- }*/
-
- //Log.i("musikcube::LIB","exit? "+this.exit);

if(this.exit){
Intent intent = new Intent(this.context, org.musikcube.Service.class);
@@ -393,6 +370,11 @@
}
// Send the query
query.SendQuery(writer);
+ }else{
+ // Send a ping
+ WriterNode pingNode = writer.ChildNode("ping");
+ pingNode.End();
+
}

}
@@ -449,5 +431,15 @@
this.sendQueryQueue.notifyAll();
}
}
+
+ public String GetTrackURL(int trackId){
+ synchronized (notifier) {
+ if(this.status==STATUS_CONNECTED){
+ String trackURL
= "http://"+this.host+":"+this.httpPort+"/track/?track_id="+trackId+"&auth_key="+this.authorization;
+ return trackURL;
+ }
+ }
+ return null;
+ }

}
=======================================
--- /trunk/src/android/src/org/musikcube/core/Player.java Thu Aug 20
14:19:13 2009
+++ /trunk/src/android/src/org/musikcube/core/Player.java Thu Aug 20
23:38:15 2009
@@ -70,8 +70,8 @@
synchronized(this.lock){
if(this.nowPlaying.size()>position && position>=0){
int trackId = this.nowPlaying.get(position);
- String url
= "http://"+this.library.host+":"+this.library.httpPort+"/track/?track_id="+trackId+"&auth_key="+this.library.authorization;
- TrackPlayer player = new TrackPlayer(url,trackId);
+ //String url
= "http://"+this.library.host+":"+this.library.httpPort+"/track/?track_id="+trackId+"&auth_key="+this.library.authorization;
+ TrackPlayer player = new TrackPlayer(trackId);
return player;
}
}
@@ -164,6 +164,23 @@
}
}
}
+
+ public void Prev(){
+ synchronized(this.lock){
+ this.currentTrack = new Track();
+ this.position--;
+ if(this.position<0){
+ this.position = 0;
+ }
+
+ if(this.position>=this.nowPlaying.size()){
+ this.StopAllTracks();
+ this.End();
+ }else{
+ this.Play();
+ }
+ }
+ }

public void Stop(){
synchronized(this.lock){
=======================================
--- /trunk/src/android/src/org/musikcube/core/TrackPlayer.java Thu Aug 20
14:19:13 2009
+++ /trunk/src/android/src/org/musikcube/core/TrackPlayer.java Thu Aug 20
23:38:15 2009
@@ -7,7 +7,6 @@

public int trackId = 0;
private Thread thread;
- private String url;
private java.lang.Object lock = new java.lang.Object();
private MediaPlayer mediaPlayer;
private int buffer = 0;
@@ -21,7 +20,6 @@
public static final int STATUS_EXIT = 10;

public void run() {
- Log.v("mC2::TrackPlayer", "Thread started "+this.url);
synchronized(this.lock){
this.mediaPlayer = new MediaPlayer();
}
@@ -30,11 +28,22 @@
this.mediaPlayer.setOnCompletionListener(this);
this.mediaPlayer.setOnErrorListener(this);
this.mediaPlayer.setOnBufferingUpdateListener(this);
-
- this.mediaPlayer.setDataSource(this.url);
- Log.v("mC2::TrackPlayer", "Preparing "+this.url);
- this.mediaPlayer.prepare();
- Log.v("mC2::TrackPlayer", "Prepared "+this.url);
+
+ {
+ String url = Library.GetInstance().GetTrackURL(this.trackId);
+ while(url==null && (this.status==STATUS_PREPARED ||
this.status==STATUS_PLAYING)){
+ Log.v("mC2::TrackPlayer","Retrying "+this.trackId);
+ this.lock.wait(250);
+ url = Library.GetInstance().GetTrackURL(this.trackId);
+ }
+
+ if(url==null){
+ this.status = STATUS_EXIT;
+ }else{
+ this.mediaPlayer.setDataSource(url);
+ this.mediaPlayer.prepare();
+ }
+ }

synchronized(this.lock){
if(this.listener!=null){
@@ -49,8 +58,6 @@
synchronized(this.lock){
currentStatus = this.status;
}
-
- Log.v("mC2::TrackPlayer", "Start? "+this.url);

if(currentStatus==STATUS_PLAYING)
this.mediaPlayer.start();
@@ -64,7 +71,6 @@
// The track is almost done
this.almostDoneSend = true;
if(this.listener!=null){
- Log.v("mC2::TrackPlayer", "OnTrackAlmostDone "+this.url);
this.listener.OnTrackAlmostDone(this);
}
}
@@ -73,7 +79,6 @@

}
}
- Log.v("mC2::TrackPlayer", "Stopping "+this.url);

this.mediaPlayer.stop();
this.mediaPlayer.release();
@@ -86,29 +91,17 @@
synchronized(this.lock){
this.status = STATUS_EXIT;
}
- Log.v("mC2::TrackPlayer", "ExitCallbacks "+this.url);

this.CallListener();
- Log.v("mC2::TrackPlayer", "END "+this.url);

}

- public TrackPlayer(String url,int trackId){
+ public TrackPlayer(int trackId){
this.trackId = trackId;
- this.url = url;
this.thread = new Thread(this);
this.thread.start();
}

-/* public TrackPlayer(String url,boolean start){
- this.url = url;
- if(start==true){
- this.status = STATUS_PLAYING;
- }
- this.thread = new Thread(this);
- this.thread.start();
- }*/
-
private void Exit(){
synchronized(this.lock){
this.status = STATUS_EXIT;
Reply all
Reply to author
Forward
0 new messages