/*
* Copyright (C) 2015 Naman Dwivedi
*
* Licensed under the GNU General Public License v3
*
* This is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*/
package com.naman14.timber.subfragments;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
import com.afollestad.appthemeengine.Config;
import com.naman14.timber.MusicPlayer;
import com.naman14.timber.R;
import com.naman14.timber.activities.BaseActivity;
import com.naman14.timber.listeners.MusicStateListener;
import com.naman14.timber.utils.Helpers;
import com.naman14.timber.utils.ImageUtils;
import com.naman14.timber.utils.NavigationUtils;
import com.naman14.timber.utils.PreferencesUtility;
import com.naman14.timber.utils.SlideTrackSwitcher;
import com.naman14.timber.utils.TimberUtils;
import com.naman14.timber.widgets.PlayPauseButton;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import net.steamcrafted.materialiconlib.MaterialIconView;
public class QuickControlsFragment extends Fragment implements MusicStateListener {
public static View topContainer;
private ProgressBar mProgress;
private SeekBar mSeekBar;
public Runnable mUpdateProgress = new Runnable() {
@Override
public void run() {
long position = MusicPlayer.position();
mProgress.setProgress((int) position);
mSeekBar.setProgress((int) position);
if (MusicPlayer.isPlaying()) {
mProgress.postDelayed(mUpdateProgress, 50);
} else mProgress.removeCallbacks(this);
}
};
private PlayPauseButton mPlayPause, mPlayPauseExpanded;
private TextView mTitle, mTitleExpanded;
private TextView mArtist, mArtistExpanded;
private ImageView mAlbumArt, mBlurredArt;
private View rootView;
private View playPauseWrapper, playPauseWrapperExpanded;
private MaterialIconView previous, next;
private boolean duetoplaypause = false;
private final View.OnClickListener mPlayPauseListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
duetoplaypause = true;
if (!mPlayPause.isPlayed()) {
mPlayPause.setPlayed(true);
mPlayPause.startAnimation();
} else {
mPlayPause.setPlayed(false);
mPlayPause.startAnimation();
}
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
MusicPlayer.playOrPause();
}
}, 200);
}
};
private final View.OnClickListener mPlayPauseExpandedListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
duetoplaypause = true;
if (!mPlayPauseExpanded.isPlayed()) {
mPlayPauseExpanded.setPlayed(true);
mPlayPauseExpanded.startAnimation();
} else {
mPlayPauseExpanded.setPlayed(false);
mPlayPauseExpanded.startAnimation();
}
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
MusicPlayer.playOrPause();
}
}, 200);
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_playback_controls, container, false);
this.rootView = rootView;
mPlayPause = (PlayPauseButton) rootView.findViewById(R.id.play_pause);
mPlayPauseExpanded = (PlayPauseButton) rootView.findViewById(R.id.playpause);
playPauseWrapper = rootView.findViewById(R.id.play_pause_wrapper);
playPauseWrapperExpanded = rootView.findViewById(R.id.playpausewrapper);
playPauseWrapper.setOnClickListener(mPlayPauseListener);
playPauseWrapperExpanded.setOnClickListener(mPlayPauseExpandedListener);
mProgress = (ProgressBar) rootView.findViewById(R.id.song_progress_normal);
mSeekBar = (SeekBar) rootView.findViewById(R.id.song_progress);
mTitle = (TextView) rootView.findViewById(R.id.title);
mArtist = (TextView) rootView.findViewById(R.id.artist);
mTitleExpanded = (TextView) rootView.findViewById(R.id.song_title);
mArtistExpanded = (TextView) rootView.findViewById(R.id.song_artist);
mAlbumArt = (ImageView) rootView.findViewById(R.id.album_art_nowplayingcard);
mBlurredArt = (ImageView) rootView.findViewById(R.id.blurredAlbumart);
next = (MaterialIconView) rootView.findViewById(R.id.next);
previous = (MaterialIconView) rootView.findViewById(R.id.previous);
topContainer = rootView.findViewById(R.id.topContainer);
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) mProgress.getLayoutParams();
mProgress.measure(0, 0);
layoutParams.setMargins(0, -(mProgress.getMeasuredHeight() / 2), 0, 0);
mProgress.setLayoutParams(layoutParams);
mPlayPause.setColor(Config.accentColor(getActivity(), Helpers.getATEKey(getActivity())));
mPlayPauseExpanded.setColor(Color.WHITE);
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
if (b) {
MusicPlayer.seek((long) i);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
MusicPlayer.next();
}
}, 200);
}
});
previous.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
MusicPlayer.previous(getActivity(), false);
}
}, 200);
}
});
((BaseActivity) getActivity()).setMusicStateListenerListener(this);
if (PreferencesUtility.getInstance(getActivity()).isGesturesEnabled()) {
new SlideTrackSwitcher(){
@Override
public void onClick() {
NavigationUtils.navigateToNowplaying(getActivity(),false);
}
}.attach(rootView.findViewById(R.id.root_view));
}
return rootView;
}
public void updateNowplayingCard() {
mTitle.setText(MusicPlayer.getTrackName());
mArtist.setText(MusicPlayer.getArtistName());
mTitleExpanded.setText(MusicPlayer.getTrackName());
mArtistExpanded.setText(MusicPlayer.getArtistName());
if (!duetoplaypause) {
ImageLoader.getInstance().displayImage(TimberUtils.getAlbumArtUri(MusicPlayer.getCurrentAlbumId()).toString(), mAlbumArt,
new DisplayImageOptions.Builder().cacheInMemory(true)
.showImageOnFail(R.drawable.ic_empty_music2)
.resetViewBeforeLoading(true)
.build(), new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
Bitmap failedBitmap = ImageLoader.getInstance().loadImageSync("drawable://" + R.drawable.ic_empty_music2);
if (getActivity() != null)
new setBlurredAlbumArt().execute(failedBitmap);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (getActivity() != null)
new setBlurredAlbumArt().execute(loadedImage);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
}
duetoplaypause = false;
mProgress.setMax((int) MusicPlayer.duration());
mSeekBar.setMax((int) MusicPlayer.duration());
mProgress.postDelayed(mUpdateProgress, 10);
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onStop() {
super.onStop();
}
@Override
public void onResume() {
super.onResume();
topContainer = rootView.findViewById(R.id.topContainer);
}
public void updateState() {
if (MusicPlayer.isPlaying()) {
if (!mPlayPause.isPlayed()) {
mPlayPause.setPlayed(true);
mPlayPause.startAnimation();
}
if (!mPlayPauseExpanded.isPlayed()) {
mPlayPauseExpanded.setPlayed(true);
mPlayPauseExpanded.startAnimation();
}
} else {
if (mPlayPause.isPlayed()) {
mPlayPause.setPlayed(false);
mPlayPause.startAnimation();
}
if (mPlayPauseExpanded.isPlayed()) {
mPlayPauseExpanded.setPlayed(false);
mPlayPauseExpanded.startAnimation();
}
}
}
public void restartLoader() {
}
public void onPlaylistChanged() {
}
public void onMetaChanged() {
updateNowplayingCard();
updateState();
}
private class setBlurredAlbumArt extends AsyncTask<Bitmap, Void, Drawable> {
@Override
protected Drawable doInBackground(Bitmap... loadedImage) {
Drawable drawable = null;
try {
drawable = ImageUtils.createBlurredImageFromBitmap(loadedImage[0], getActivity(), 6);
} catch (Exception e) {
e.printStackTrace();
}
return drawable;
}
@Override
protected void onPostExecute(Drawable result) {
if (result != null) {
if (mBlurredArt.getDrawable() != null) {
final TransitionDrawable td =
new TransitionDrawable(new Drawable[]{
mBlurredArt.getDrawable(),
result
});
mBlurredArt.setImageDrawable(td);
td.startTransition(400);
} else {
mBlurredArt.setImageDrawable(result);
}
}
}
@Override
protected void onPreExecute() {
}
}
}