Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 5th, 2012  |  syntax: None  |  size: 8.17 KB  |  hits: 7  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. package com.jeff.voixmusic;
  2.  
  3. import android.app.Activity;
  4. import android.content.BroadcastReceiver;
  5. import android.content.ComponentName;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.content.IntentFilter;
  9. import android.content.ServiceConnection;
  10. import android.graphics.Bitmap;
  11. import android.os.Bundle;
  12. import android.os.IBinder;
  13. import android.os.RemoteException;
  14. import android.view.MotionEvent;
  15. import android.view.View;
  16. import android.view.Window;
  17. import android.view.WindowManager;
  18. import android.view.View.OnClickListener;
  19. import android.view.View.OnTouchListener;
  20. import android.widget.ImageButton;
  21. import android.widget.ImageView;
  22. import android.widget.SeekBar;
  23. import android.widget.TextView;
  24. import android.widget.Toast;
  25. import android.widget.SeekBar.OnSeekBarChangeListener;
  26.  
  27. public class Player extends Activity {
  28.         private static MusicHelper musicHelper = new MusicHelper();
  29.         private IMusic mMusic = null;
  30.  
  31.         private String title_key;
  32.         private String title;
  33.         private String path;
  34.         private String album_id;
  35.         private String album;
  36.         private String artist_id;
  37.         private String artist;
  38.         private String duration;
  39.  
  40.         ImageButton btnPausePlay;
  41.         ImageButton btnForward;
  42.         ImageButton btnRewind;
  43.         ImageButton btnNext;
  44.         ImageButton btnPrev;
  45.  
  46.         TextView remaining;
  47.         TextView toFinish;
  48.  
  49.         SeekBar nowPlayingTimeline;
  50.        
  51.         DbAdapterBasic dbAdapter;
  52.         @Override
  53.         public void onCreate(Bundle savedInstanceState) {
  54.                 super.onCreate(savedInstanceState);
  55.                 requestWindowFeature(Window.FEATURE_NO_TITLE);
  56.                 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
  57.                 setContentView(R.layout.player);
  58.                
  59.                 //DB connection
  60.                 dbAdapter = new DbAdapterBasic(getApplicationContext());
  61.  
  62.                 //Get bundles first
  63.                 Bundle attached = getIntent().getExtras();
  64.                 title_key = attached.getString("_title_key");
  65.                 title = attached.getString("_title");
  66.                 artist_id = attached.getString("_artist_id");
  67.                 artist = attached.getString("_artist");
  68.                 album_id = attached.getString("_album_id");
  69.                 album = attached.getString("_album");
  70.                 path = attached.getString("_path");
  71.                 duration = attached.getString("_duration");
  72.  
  73.                 Song insertSong = new Song(title_key,title,artist_id,artist,album_id,album,null,duration,path);
  74.                 addToDb(insertSong);
  75.  
  76.                 //Widget initialisation
  77.                 TextView nowPlayingTitle = (TextView)findViewById(R.id.nowPlayingTitle);
  78.                 TextView nowPlayingArtist = (TextView)findViewById(R.id.nowPlayingArtist);
  79.                 TextView nowPlayingAlbum = (TextView)findViewById(R.id.nowPlayingAlbum);
  80.                 ImageView nowPlayingArtwork = (ImageView)findViewById(R.id.nowPlayingArt);
  81.                 remaining = (TextView)findViewById(R.id.remaining);
  82.                 toFinish = (TextView)findViewById(R.id.time);
  83.  
  84.                 nowPlayingTimeline = (SeekBar)findViewById(R.id.SeekBar01);
  85.  
  86.                 btnPausePlay = (ImageButton)findViewById(R.id.play);
  87.                 btnNext = (ImageButton)findViewById(R.id.next);
  88.                 btnPrev = (ImageButton)findViewById(R.id.prev);
  89.                 btnForward = (ImageButton)findViewById(R.id.forward);
  90.                 btnRewind = (ImageButton)findViewById(R.id.rewind);
  91.  
  92.                 toFinish.setText("00:00");
  93.                 remaining.setText("00:00");
  94.                 nowPlayingTimeline.setProgress(0);
  95.  
  96.                 //Button actions
  97.                 btnPausePlay.setOnClickListener(pausePlayListener);
  98.                 btnNext.setOnClickListener(nextListener);
  99.                 btnPrev.setOnClickListener(prevListener);
  100.                 btnForward.setOnTouchListener(forwardListener);
  101.                 btnRewind.setOnTouchListener(rewindListener);
  102.  
  103.                 nowPlayingTimeline.setOnSeekBarChangeListener(timelineListener);
  104.  
  105.                 //Put it into respective widgets
  106.                 Bitmap artwork = musicHelper.getCachedAlbumArtwork(this, album_id);
  107.                 nowPlayingTitle.setText(title);
  108.                 nowPlayingArtist.setText(artist);
  109.                 nowPlayingAlbum.setText(album);
  110.                 nowPlayingArtwork.setImageBitmap(artwork);     
  111.                
  112.                 getApplicationContext().bindService(new Intent(this,Music.class),
  113.                                 mConnection, getBaseContext().BIND_AUTO_CREATE);
  114.         }
  115.  
  116.         @Override
  117.         public void onResume() {
  118.                 super.onResume();
  119.                 IntentFilter myFilter = new IntentFilter("currentPosition");
  120.                 TimeReceiver myReceiver = new TimeReceiver();
  121.                 registerReceiver(myReceiver, myFilter);
  122.                 toFinish.setText("00:00");
  123.                 remaining.setText("00:00");
  124.                 nowPlayingTimeline.setProgress(0);
  125.         }
  126.  
  127.         @Override
  128.         public void onPause() {
  129.                 super.onPause();
  130.  
  131.         }
  132.  
  133.         private OnTouchListener forwardListener = new OnTouchListener() {
  134.                 @Override
  135.                 public boolean onTouch(View v, MotionEvent event) {
  136.                         try {
  137.                                 mMusic.forwardSong();
  138.                         } catch (RemoteException e) {
  139.                                 // TODO Auto-generated catch block
  140.                                 e.printStackTrace();
  141.                         }
  142.                         return false;
  143.                 }
  144.         };
  145.  
  146.         private OnTouchListener rewindListener = new OnTouchListener() {
  147.                 @Override
  148.                 public boolean onTouch(View v, MotionEvent event) {
  149.                         try {
  150.                                 mMusic.rewindSong();
  151.                         } catch (RemoteException e) {
  152.                                 // TODO Auto-generated catch block
  153.                                 e.printStackTrace();
  154.                         }
  155.                         return false;
  156.                 }
  157.         };
  158.  
  159.         private OnClickListener pausePlayListener = new OnClickListener() {
  160.                 @Override
  161.                 public void onClick(View v) {
  162.                         try {
  163.                                 if(mMusic.isPlaying()) {
  164.                                         btnPausePlay.setImageDrawable(getResources().getDrawable(R.drawable.play_normal));
  165.                                         mMusic.pauseSong();
  166.                                 } else {
  167.                                         btnPausePlay.setImageDrawable(getResources().getDrawable(R.drawable.pause_normal));
  168.                                         mMusic.resumeSong();
  169.                                 }
  170.                         } catch (RemoteException e) {
  171.                                 // TODO Auto-generated catch block
  172.                                 e.printStackTrace();
  173.                         }
  174.                 }      
  175.         };
  176.  
  177.         private OnClickListener nextListener = new OnClickListener() {
  178.                 @Override
  179.                 public void onClick(View v) {
  180.                         try {
  181.                                 mMusic.nextSong();
  182.                         } catch (RemoteException e) {
  183.                                 // TODO Auto-generated catch block
  184.                                 e.printStackTrace();
  185.                         }
  186.                 }      
  187.         };
  188.  
  189.  
  190.         private OnClickListener prevListener = new OnClickListener() {
  191.                 @Override
  192.                 public void onClick(View v) {
  193.                         try {
  194.                                 mMusic.prevSong();
  195.                         } catch (RemoteException e) {
  196.                                 // TODO Auto-generated catch block
  197.                                 e.printStackTrace();
  198.                         }
  199.                 }      
  200.         };
  201.  
  202.         private OnSeekBarChangeListener timelineListener = new OnSeekBarChangeListener() {
  203.                 @Override
  204.                 public void onProgressChanged(SeekBar seekBar, int progress,
  205.                                 boolean fromUser) {
  206.  
  207.                 }
  208.                 @Override
  209.                 public void onStartTrackingTouch(SeekBar seekBar) {
  210.                         // TODO Auto-generated method stub
  211.  
  212.                 }
  213.                 @Override
  214.                 public void onStopTrackingTouch(SeekBar seekBar) {
  215.                         try {
  216.                                 mMusic.playAtPosition(seekBar.getProgress());
  217.                         } catch (RemoteException e) {
  218.                                 // TODO Auto-generated catch block
  219.                                 e.printStackTrace();
  220.                         }
  221.  
  222.                 }
  223.         };
  224.  
  225.  
  226.         private ServiceConnection mConnection = new ServiceConnection()
  227.         {
  228.                 @Override
  229.                 public void onServiceConnected(ComponentName name, IBinder service) {
  230.                         mMusic = IMusic.Stub.asInterface((IBinder)service);
  231.                         try {
  232.                                 mMusic.playSong(title,path);
  233.                         } catch (RemoteException e) {
  234.                                 // TODO Auto-generated catch block
  235.                                 e.printStackTrace();
  236.                         }
  237.                 }
  238.  
  239.                 @Override
  240.                 public void onServiceDisconnected(ComponentName name) {
  241.                         mMusic = null;
  242.                 }
  243.         };
  244.  
  245.         private class TimeReceiver extends BroadcastReceiver {
  246.  
  247.                 @Override
  248.                 public void onReceive(Context context, Intent intent) {
  249.                         int currentPosition = intent.getIntExtra("currentPosition", 1);
  250.                         int max = intent.getIntExtra("total",1);
  251.                         nowPlayingTimeline.setProgress(currentPosition);
  252.                         nowPlayingTimeline.setMax(max);
  253.                         toFinish.setText(convertTime(String.valueOf(currentPosition)));
  254.                         remaining.setText(convertTime(String.valueOf(max-currentPosition)));
  255.                 }
  256.  
  257.         };
  258.  
  259.         private String convertTime(String millisec) {
  260.                 long timeMillis = Long.parseLong(millisec);
  261.                 long time = timeMillis / 1000;  
  262.                 String seconds = Integer.toString((int)(time % 60));  
  263.                 String minutes = Integer.toString((int)((time % 3600) / 60));  
  264.                 String hours = Integer.toString((int)(time / 3600));  
  265.                 for (int i = 0; i < 2; i++) {  
  266.                         if (seconds.length() < 2) {  
  267.                                 seconds = "0" + seconds;  
  268.                         }  
  269.                         if (minutes.length() < 2) {  
  270.                                 minutes = "0" + minutes;  
  271.                         }  
  272.                         if (hours.length() < 2) {  
  273.                                 hours = "0" + hours;  
  274.                         }  
  275.                 }
  276.                 if(!hours.equals("00")){
  277.                         return hours+":"+minutes+":"+seconds;
  278.                 }
  279.                 return minutes+":"+seconds;
  280.         }
  281.  
  282.         private void addToDb(Song newSong) {
  283.                 dbAdapter.open();
  284.                 dbAdapter.insertSong(newSong);
  285.                 dbAdapter.close();
  286.         }
  287.  
  288.  
  289. }