- package com.jeff.voixmusic;
- import android.app.Activity;
- import android.content.BroadcastReceiver;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.content.ServiceConnection;
- import android.graphics.Bitmap;
- import android.os.Bundle;
- import android.os.IBinder;
- import android.os.RemoteException;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.Window;
- import android.view.WindowManager;
- import android.view.View.OnClickListener;
- import android.view.View.OnTouchListener;
- import android.widget.ImageButton;
- import android.widget.ImageView;
- import android.widget.SeekBar;
- import android.widget.TextView;
- import android.widget.Toast;
- import android.widget.SeekBar.OnSeekBarChangeListener;
- public class Player extends Activity {
- private static MusicHelper musicHelper = new MusicHelper();
- private IMusic mMusic = null;
- private String title_key;
- private String title;
- private String path;
- private String album_id;
- private String album;
- private String artist_id;
- private String artist;
- private String duration;
- ImageButton btnPausePlay;
- ImageButton btnForward;
- ImageButton btnRewind;
- ImageButton btnNext;
- ImageButton btnPrev;
- TextView remaining;
- TextView toFinish;
- SeekBar nowPlayingTimeline;
- DbAdapterBasic dbAdapter;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.player);
- //DB connection
- dbAdapter = new DbAdapterBasic(getApplicationContext());
- //Get bundles first
- Bundle attached = getIntent().getExtras();
- title_key = attached.getString("_title_key");
- title = attached.getString("_title");
- artist_id = attached.getString("_artist_id");
- artist = attached.getString("_artist");
- album_id = attached.getString("_album_id");
- album = attached.getString("_album");
- path = attached.getString("_path");
- duration = attached.getString("_duration");
- Song insertSong = new Song(title_key,title,artist_id,artist,album_id,album,null,duration,path);
- addToDb(insertSong);
- //Widget initialisation
- TextView nowPlayingTitle = (TextView)findViewById(R.id.nowPlayingTitle);
- TextView nowPlayingArtist = (TextView)findViewById(R.id.nowPlayingArtist);
- TextView nowPlayingAlbum = (TextView)findViewById(R.id.nowPlayingAlbum);
- ImageView nowPlayingArtwork = (ImageView)findViewById(R.id.nowPlayingArt);
- remaining = (TextView)findViewById(R.id.remaining);
- toFinish = (TextView)findViewById(R.id.time);
- nowPlayingTimeline = (SeekBar)findViewById(R.id.SeekBar01);
- btnPausePlay = (ImageButton)findViewById(R.id.play);
- btnNext = (ImageButton)findViewById(R.id.next);
- btnPrev = (ImageButton)findViewById(R.id.prev);
- btnForward = (ImageButton)findViewById(R.id.forward);
- btnRewind = (ImageButton)findViewById(R.id.rewind);
- toFinish.setText("00:00");
- remaining.setText("00:00");
- nowPlayingTimeline.setProgress(0);
- //Button actions
- btnPausePlay.setOnClickListener(pausePlayListener);
- btnNext.setOnClickListener(nextListener);
- btnPrev.setOnClickListener(prevListener);
- btnForward.setOnTouchListener(forwardListener);
- btnRewind.setOnTouchListener(rewindListener);
- nowPlayingTimeline.setOnSeekBarChangeListener(timelineListener);
- //Put it into respective widgets
- Bitmap artwork = musicHelper.getCachedAlbumArtwork(this, album_id);
- nowPlayingTitle.setText(title);
- nowPlayingArtist.setText(artist);
- nowPlayingAlbum.setText(album);
- nowPlayingArtwork.setImageBitmap(artwork);
- getApplicationContext().bindService(new Intent(this,Music.class),
- mConnection, getBaseContext().BIND_AUTO_CREATE);
- }
- @Override
- public void onResume() {
- super.onResume();
- IntentFilter myFilter = new IntentFilter("currentPosition");
- TimeReceiver myReceiver = new TimeReceiver();
- registerReceiver(myReceiver, myFilter);
- toFinish.setText("00:00");
- remaining.setText("00:00");
- nowPlayingTimeline.setProgress(0);
- }
- @Override
- public void onPause() {
- super.onPause();
- }
- private OnTouchListener forwardListener = new OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- try {
- mMusic.forwardSong();
- } catch (RemoteException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return false;
- }
- };
- private OnTouchListener rewindListener = new OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- try {
- mMusic.rewindSong();
- } catch (RemoteException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return false;
- }
- };
- private OnClickListener pausePlayListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- if(mMusic.isPlaying()) {
- btnPausePlay.setImageDrawable(getResources().getDrawable(R.drawable.play_normal));
- mMusic.pauseSong();
- } else {
- btnPausePlay.setImageDrawable(getResources().getDrawable(R.drawable.pause_normal));
- mMusic.resumeSong();
- }
- } catch (RemoteException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- };
- private OnClickListener nextListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- mMusic.nextSong();
- } catch (RemoteException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- };
- private OnClickListener prevListener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- mMusic.prevSong();
- } catch (RemoteException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- };
- private OnSeekBarChangeListener timelineListener = new OnSeekBarChangeListener() {
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress,
- boolean fromUser) {
- }
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- try {
- mMusic.playAtPosition(seekBar.getProgress());
- } catch (RemoteException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- };
- private ServiceConnection mConnection = new ServiceConnection()
- {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- mMusic = IMusic.Stub.asInterface((IBinder)service);
- try {
- mMusic.playSong(title,path);
- } catch (RemoteException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- @Override
- public void onServiceDisconnected(ComponentName name) {
- mMusic = null;
- }
- };
- private class TimeReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- int currentPosition = intent.getIntExtra("currentPosition", 1);
- int max = intent.getIntExtra("total",1);
- nowPlayingTimeline.setProgress(currentPosition);
- nowPlayingTimeline.setMax(max);
- toFinish.setText(convertTime(String.valueOf(currentPosition)));
- remaining.setText(convertTime(String.valueOf(max-currentPosition)));
- }
- };
- private String convertTime(String millisec) {
- long timeMillis = Long.parseLong(millisec);
- long time = timeMillis / 1000;
- String seconds = Integer.toString((int)(time % 60));
- String minutes = Integer.toString((int)((time % 3600) / 60));
- String hours = Integer.toString((int)(time / 3600));
- for (int i = 0; i < 2; i++) {
- if (seconds.length() < 2) {
- seconds = "0" + seconds;
- }
- if (minutes.length() < 2) {
- minutes = "0" + minutes;
- }
- if (hours.length() < 2) {
- hours = "0" + hours;
- }
- }
- if(!hours.equals("00")){
- return hours+":"+minutes+":"+seconds;
- }
- return minutes+":"+seconds;
- }
- private void addToDb(Song newSong) {
- dbAdapter.open();
- dbAdapter.insertSong(newSong);
- dbAdapter.close();
- }
- }