package com.integreight.onesheeld.shields.fragments;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import com.integreight.onesheeld.R;
import com.integreight.onesheeld.shields.ShieldFragmentParent;
import com.integreight.onesheeld.shields.controller.MusicShield;
import com.integreight.onesheeld.shields.controller.MusicShield.MusicEventHandler;
import com.integreight.onesheeld.shields.fragments.sub.MusicShieldSettings;
import com.integreight.onesheeld.utils.Log;
public class MusicPlayerFragment extends
ShieldFragmentParent<MusicPlayerFragment> {
SeekBar seekBar;
TextView musicFileName, playingStatus;
ImageView playingBtn;
Thread seekBarTracker;
private boolean isTracking = false;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
hasSettings = true;
return inflater.inflate(R.layout.musicplayer_shield_fragment_layout,
container, false);
}
@Override
public void doOnStart() {
activity.getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settingsViewContainer,
MusicShieldSettings.getInstance()).commit();
startTracking();
}
private void stopTracking() {
if (seekBarTracker != null && seekBarTracker.isAlive()) {
isTracking = false;
seekBarTracker.interrupt();
seekBarTracker = null;
}
}
private void startTracking() {
stopTracking();
isTracking = true;
seekBarTracker = new Thread(new Runnable() {
@Override
public void run() {
while (isTracking) {
if ((MusicShield) getApplication().getRunningShields().get(
getControllerTag()) != null
&& ((MusicShield) getApplication()
.getRunningShields()
.get(getControllerTag())).mediaPlayer != null) {
seekBar.setMax(((MusicShield) getApplication()
.getRunningShields().get(getControllerTag())).mediaDuration);
try {
seekBar.setProgress(((MusicShield) getApplication()
.getRunningShields()
.get(getControllerTag())).mediaPlayer
.getCurrentPosition());
} catch (IllegalStateException e) {
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Log.e("TAG", "MusicPlayer::seekBarTracker", e);
break;
}
}
}
});
seekBarTracker.start();
}
@Override
public void doOnResume() {
MusicShield control = (MusicShield) getApplication()
.getRunningShields().get(getControllerTag());
if (control != null) {
((MusicShield) getApplication().getRunningShields().get(
getControllerTag())).setEventHandler(eventHandler);
control = (MusicShield) getApplication().getRunningShields().get(
getControllerTag());
if (control.mediaPlayer != null && control.mediaDuration > 0) {
eventHandler.seekTo(control.mediaPlayer.getCurrentPosition()
* 100 / control.mediaDuration);
eventHandler.setMusicName(control.musicFileName);
if (control.mediaPlayer.isPlaying())
eventHandler.play();
else
eventHandler.pause();
} else {
eventHandler.seekTo(0);
eventHandler.pause();
eventHandler.setMusicName("");
}
}
}
@Override
public void doOnStop() {
stopTracking();
}
MusicEventHandler eventHandler = new MusicEventHandler() {
@Override
public void setMusicName(final String name) {
uiHandler.post(new Runnable() {
@Override
public void run() {
if (canChangeUI())
musicFileName.setText(name);
}
});
}
@Override
public void seekTo(final int pos) {
uiHandler.post(new Runnable() {
@Override
public void run() {
if (canChangeUI()) {
seekBar.setMax(((MusicShield) getApplication()
.getRunningShields().get(getControllerTag())).mediaDuration);
seekBar.setProgress(pos);
}
}
});
}
@Override
public void play() {
uiHandler.post(new Runnable() {
@Override
public void run() {
if (canChangeUI()) {
playingBtn
.setBackgroundResource(R.drawable.musicplayer_play_symbol);
playingStatus.setText(R.string.music_player_playing);
}
}
});
}
@Override
public void pause() {
uiHandler.post(new Runnable() {
@Override
public void run() {
if (canChangeUI()) {
playingBtn
.setBackgroundResource(R.drawable.musicplayer_pause_symbol);
playingStatus.setText(R.string.music_player_paused);
}
}
});
}
};
@Override
public void doOnViewCreated(View v, @Nullable Bundle savedInstanceState) {
musicFileName = (TextView) v.findViewById(R.id.playingMusic);
seekBar = (SeekBar) v.findViewById(R.id.seekBar);
playingBtn = (ImageView) v.findViewById(R.id.playingBtn);
playingStatus = (TextView) v.findViewById(R.id.playingStatus);
hasSettings = true;
}
}