package pontezit.android.tilos.com.fragment;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.drawable.AnimationDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.RemoteException;
import android.os.SystemClock;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import pontezit.android.tilos.com.R;
import pontezit.android.tilos.com.activity.MediaPlayerActivity;
import pontezit.android.tilos.com.button.RepeatingImageButton;
import pontezit.android.tilos.com.modell.Episode;
import pontezit.android.tilos.com.utils.Finals;
import pontezit.android.tilos.com.utils.LogHelper;
import pontezit.android.tilos.com.utils.MusicUtils;
public class MediaPlayerFragment extends Fragment implements MusicUtils.Defs{
private RepeatingImageButton mPrevButton;
public ImageView mPauseButton;
private RepeatingImageButton mNextButton;
private TextView mTotalTime;
private long mDuration;
private long mPosOverride = -1;
private ProgressBar mProgress;
private LinearLayout mSeekBarContainer;
private long mLastSeekEventTime;
private boolean mFromTouch = false;
private TextView mCurrentTime;
public TextView mListeningText;
private ArrayList<Episode> episodeList = null;
private static final int REFRESH = 1;
private static final int QUIT = 2;
private ImageView bg;
public AnimationDrawable frameAnimation;
private MediaPlayerActivity activity;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
LogHelper.Log("MediaPlayerFragment; onCreate run", 1);
activity = (MediaPlayerActivity) getActivity();
activity.supportInvalidateOptionsMenu();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
LogHelper.Log("MediaPlayerFragment; onCreateView running", 1);
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(false);
View view = inflater.inflate(R.layout.fragment_media_player, container, false);
mSeekBarContainer = (LinearLayout) view.findViewById(R.id.seekBarContainer);
mPrevButton = (RepeatingImageButton) view.findViewById(R.id.previous_button);
mPrevButton.setOnClickListener(mPrevListener);
mPauseButton = (ImageView) view.findViewById(R.id.buttonPlayPause);
mPauseButton.setOnClickListener(mPauseListener);
mNextButton = (RepeatingImageButton) view.findViewById(R.id.next_button);
mNextButton.setOnClickListener(mNextListener);
mTotalTime = (TextView) view.findViewById(R.id.duration_text);
mCurrentTime = (TextView) view.findViewById(R.id.position_text);
mProgress = (ProgressBar) view.findViewById(R.id.seek_bar);
mListeningText = (TextView) view.findViewById(R.id.listening_now);
bg = (ImageView) view.findViewById(R.id.bg);
if(getActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE && !activity.isTabletView())
Picasso.with(getActivity()).load("file:///android_asset/bg.jpg").fit().rotate(90).into(bg);
else
Picasso.with(getActivity()).load("file:///android_asset/bg.jpg").fit().into(bg);
//Picasso.with(getActivity()).load(R.drawable.bg).fit().into(bg);
if (mProgress instanceof SeekBar) {
SeekBar seeker = (SeekBar) mProgress;
seeker.setOnSeekBarChangeListener(mSeekListener);
}
mProgress.setMax(1000);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setViews();
LogHelper.Log("MediaPlayerFragment; onActivityCreated run", 1);
if(!activity.isConnecting())
updateTrackInfo();
//getShowDetails();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.navigation, menu);
if(activity.isTabletView())
menu.findItem(R.id.menu_item_shows).setVisible(false);
return;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.fragment_in, R.anim.fragment_out);
switch(item.getItemId()) {
case R.id.menu_item_alarm:
LogHelper.Log("menuItem, alarm selected", 1);
showAlarmDialog();
return true;
case (R.id.menu_item_live):
activity.stop();
mSeekBarContainer.setVisibility(View.GONE);
activity.processUri(Finals.getLiveHiUrl());
return true;
case (R.id.menu_item_shows):
LogHelper.Log("menuItem, showList selected", 1);
Fragment showsFragment = new ShowListFragment();
transaction.replace(R.id.mediaPlayerContainer, showsFragment, "showList");
transaction.addToBackStack(null);
transaction.commit();
return true;
case (R.id.menu_item_archive):
LogHelper.Log("menuItem, archive selected", 1);
Fragment archiveFragment = new ArchiveFragment();
transaction.replace(R.id.mediaPlayerContainer, archiveFragment, "archive");
transaction.addToBackStack(null);
transaction.commit();
return true;
case (R.id.menu_item_call):
showCallDialog();
return true;
case (R.id.menu_item_equalizer):
LogHelper.Log("menuItem equalizer selected", 1);
try {
if (activity.mService != null) {
Intent i = new Intent("android.media.action.DISPLAY_AUDIO_EFFECT_CONTROL_PANEL");
i.putExtra("android.media.extra.AUDIO_SESSION", activity.mService.getAudioSessionId());
startActivityForResult(i, EFFECTS_PANEL);
}else{
Toast.makeText(getActivity(), getResources().getString(R.string.notSupported), Toast.LENGTH_LONG).show();
}
return true;
} catch (RemoteException e) {
e.printStackTrace();
}
return true;
case (R.id.menu_item_exit):
activity.killActivity();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onStart() {
super.onStart();
LogHelper.Log("MediaPlayerFragment; onStart running", 1);
}
@Override
public void onResume() {
super.onResume();
LogHelper.Log("MediaPlayerFragment; onResume running;", 1);
long next = refreshNow();
queueNextRefresh(next);
if(!activity.isConnecting()){
updateTrackInfo();
mListeningText.setText(activity.getInfo());
}
setPauseButtonImage();
}
@Override
public void onStop() {
super.onStop();
LogHelper.Log("MediaPlayerFragment; onStop running", 1);
}
@Override
public void onDestroy() {
super.onDestroy();
activity = null;
frameAnimation = null;
LogHelper.Log("MediaPlayerFragment; onDestroy running", 1);
}
public void updateTrackInfo(){
LogHelper.Log("MediaPlayerFragment; updateTrackInfo running", 1);
//Régi:
if (activity == null || activity.mService == null)
return;
mDuration = activity.getDuration();
mTotalTime.setText(MusicUtils.makeTimeString(getActivity(), mDuration / 1000));
}
private void queueNextRefresh(long delay) {
Message msg = mHandler.obtainMessage(REFRESH);
mHandler.removeMessages(REFRESH);
mHandler.sendMessageDelayed(msg, delay);
}
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case REFRESH:
LogHelper.Log("MediaPlayerFragment; mHandler running; CASE: REFRESH", 3);
long next = refreshNow();
queueNextRefresh(next);
break;
case QUIT:
LogHelper.Log("MediaPlayerFragment; mHandler running; CASE: QUIT", 1);
// This can be moved back to onCreate once the bug that prevents
// Dialogs from being started from onCreate/onResume is fixed.
/*new AlertDialog.Builder(getActivity())
.setTitle(R.string.service_start_error_title)
.setMessage(R.string.service_start_error_msg)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
getActivity().finish();
}
})
.setCancelable(false)
.show();
*/
break;
default:
LogHelper.Log("MediaPlayerFragment; mHandler running; CASE: default; msg:" + msg, 1);
break;
}
}
};
public void setViews(){
LogHelper.Log("setViews run;", 1);
try{
if(activity.getPath() != Finals.getLiveHiUrl()){
mSeekBarContainer.setVisibility(View.VISIBLE);
LogHelper.Log("setViews run; mService.getPath() = "+ activity.getPath(), 1);
}else{
LogHelper.Log("setViews; else tree", 1);
mSeekBarContainer.setVisibility(View.GONE);
}
}catch(NullPointerException e){
}
}
private long refreshNow() {
if(activity == null || !activity.isPlaying())
return 500;
long pos = mPosOverride < 0 ? activity.getPosition() : mPosOverride;
if ((pos >= 0)) {
mCurrentTime.setText(MusicUtils.makeTimeString(getActivity(), pos / 1000));
if (mDuration > 0) {
mProgress.setProgress((int) (1000 * pos / mDuration));
} else {
mProgress.setProgress(1000);
}
if (activity.isPlaying()) {
mCurrentTime.setVisibility(View.VISIBLE);
} else {
// blink the counter
int vis = mCurrentTime.getVisibility();
mCurrentTime.setVisibility(vis == View.INVISIBLE ? View.VISIBLE : View.INVISIBLE);
return 500;
}
} else {
mCurrentTime.setText("--:--");
mProgress.setProgress(1000);
}
// calculate the number of milliseconds until the next full second, so
// the counter can be updated at just the right time
long remaining = 1000 - (pos % 1000);
// approximate how often we would need to refresh the slider to
// move it smoothly
int width = mProgress.getWidth();
if (width == 0) width = 320;
long smoothrefreshtime = mDuration / width;
if (smoothrefreshtime > remaining) return remaining;
if (smoothrefreshtime < 20) return 20;
return smoothrefreshtime;
}
private View.OnClickListener mPauseListener = new View.OnClickListener() {
public void onClick(View v) {
activity.doPauseResume();
}
};
private View.OnClickListener mPrevListener = new View.OnClickListener() {
public void onClick(View v) {
activity.setPrev();
}
};
private View.OnClickListener mNextListener = new View.OnClickListener() {
public void onClick(View v) {
activity.setNext();
}
};
private SeekBar.OnSeekBarChangeListener mSeekListener = new SeekBar.OnSeekBarChangeListener() {
public void onStartTrackingTouch(SeekBar bar) {
LogHelper.Log("MediaPlayerFragment; mSeekListener run; onStartTrackingTouch", 1);
mLastSeekEventTime = 0;
mFromTouch = true;
}
public void onProgressChanged(SeekBar bar, int progress, boolean fromuser) {
LogHelper.Log("MediaPlayerFragment; mSeekListener run; onProgressChanged", 3);
if (!fromuser || !activity.hasService()) return;
long now = SystemClock.elapsedRealtime();
if ((now - mLastSeekEventTime) > 250) {
mLastSeekEventTime = now;
mPosOverride = mDuration * progress / 1000;
activity.seek(mPosOverride);
// trackball event, allow progress updates
if (!mFromTouch) {
refreshNow();
mPosOverride = -1;
}
}
}
public void onStopTrackingTouch(SeekBar bar) {
mPosOverride = -1;
mFromTouch = false;
}
};
public void setPauseButtonImage() {
LogHelper.Log("setPauseButtonImage run", 1);
try{
if(!activity.isConnecting()){
if (activity.isPlaying()) {
mPauseButton.setImageResource(R.drawable.on);
} else {
mPauseButton.setImageResource(R.drawable.off);
}
}
}catch(NullPointerException e){
}
}
public void setSeekControls() {
if (activity.hasService()) {
return;
}
if (activity.getDuration() > 0) {
mProgress.setEnabled(true);
//mPrevButton.setRepeatListener(mRewListener, 260);
//mNextButton.setRepeatListener(mFfwdListener, 260);
} else {
mProgress.setEnabled(false);
mPrevButton.setRepeatListener(null, -1);
mNextButton.setRepeatListener(null, -1);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
public void showCallDialog(){
SharedPreferences sharedPreferences = getActivity().getSharedPreferences(Finals.PREFS_SHARED, 0);
boolean showCallDialog = sharedPreferences.getBoolean("showCallDialog", true);
if(showCallDialog){
final LayoutInflater factory = LayoutInflater.from(getActivity());
final View textEntryView = factory.inflate(R.layout.dialog_remember, null);
LinearLayout View = (LinearLayout) textEntryView.findViewById(R.id.LL);
CheckBox checkBoxCall =( CheckBox ) textEntryView.findViewById( R.id.checkBoxRemember );
checkBoxCall.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
if(isChecked){
SharedPreferences settings = getActivity().getSharedPreferences(Finals.PREFS_SHARED, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("showCallDialog", false);
editor.commit();
}
if(!isChecked){
SharedPreferences settings = getActivity().getSharedPreferences(Finals.PREFS_SHARED, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("showCallDialog", true);
editor.commit();
}
}
});
new AlertDialog.Builder(getActivity())
.setTitle(R.string.dialogCallTitle)
.setView(View)
.setPositiveButton(R.string.call, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(Finals.CALL_NO));
getActivity().startActivity(intent);
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
}
}).create().show();
}else{
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(Finals.CALL_NO));
getActivity().startActivity(intent);
}
}
public void showAlarmDialog(){
SharedPreferences sharedPreferences = getActivity().getSharedPreferences(Finals.PREFS_SHARED, 0);
boolean showCallDialog = sharedPreferences.getBoolean("showAlarmDialog", true);
if(showCallDialog){
final LayoutInflater factory = LayoutInflater.from(getActivity());
final View textEntryView = factory.inflate(R.layout.dialog_remember, null);
LinearLayout View = (LinearLayout) textEntryView.findViewById(R.id.LL);
CheckBox checkBoxCall = (CheckBox) textEntryView.findViewById( R.id.checkBoxRemember );
checkBoxCall.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
if(isChecked){
SharedPreferences settings = getActivity().getSharedPreferences(Finals.PREFS_SHARED, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("showAlarmDialog", false);
editor.commit();
}
if(!isChecked){
SharedPreferences settings = getActivity().getSharedPreferences(Finals.PREFS_SHARED, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("showAlarmDialog", true);
editor.commit();
}
}
});
TextView longText = (TextView) textEntryView.findViewById(R.id.message);
longText.setText(getResources().getString(R.string.alarm_alarm));
new AlertDialog.Builder(getActivity())
.setTitle(R.string.alarm_alar_title)
.setView(View)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.fragment_in, R.anim.fragment_out);
Fragment alarmFragment = new AlarmClockFragment();
if(activity.isTabletView())
transaction.replace(R.id.detailsContainer, alarmFragment);
else
transaction.replace(R.id.mediaPlayerContainer, alarmFragment);
transaction.addToBackStack(null);
transaction.commit();
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
}
}).create().show();
}else{
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.fragment_in, R.anim.fragment_out);
Fragment alarmFragment = new AlarmClockFragment();
if(activity.isTabletView())
transaction.replace(R.id.detailsContainer, alarmFragment);
else
transaction.replace(R.id.mediaPlayerContainer, alarmFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
}