import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
+import android.os.PowerManager;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.text.Html;
import com.cyanogenmod.eleven.menu.DeleteDialog;
import com.cyanogenmod.eleven.menu.FragmentMenuItems;
import com.cyanogenmod.eleven.ui.activities.HomeActivity;
-import com.cyanogenmod.eleven.ui.activities.SlidingPanelActivity;
import com.cyanogenmod.eleven.utils.ApolloUtils;
import com.cyanogenmod.eleven.utils.MusicUtils;
import com.cyanogenmod.eleven.utils.NavUtils;
import com.cyanogenmod.eleven.utils.PreferenceUtils;
import com.cyanogenmod.eleven.widgets.BrowseButton;
-import com.cyanogenmod.eleven.widgets.EqualizerView;
import com.cyanogenmod.eleven.widgets.LoadingEmptyContainer;
import com.cyanogenmod.eleven.widgets.NoResultsContainer;
import com.cyanogenmod.eleven.widgets.PlayPauseProgressButton;
import com.cyanogenmod.eleven.widgets.RepeatButton;
import com.cyanogenmod.eleven.widgets.RepeatingImageButton;
import com.cyanogenmod.eleven.widgets.ShuffleButton;
+import com.cyanogenmod.eleven.widgets.VisualizerView;
import java.lang.ref.WeakReference;
import static com.cyanogenmod.eleven.utils.MusicUtils.mService;
-public class AudioPlayerFragment extends Fragment implements ServiceConnection,
- SlidingPanelActivity.ISlidingPanelListener {
+public class AudioPlayerFragment extends Fragment implements ServiceConnection {
private static final String TAG = AudioPlayerFragment.class.getSimpleName();
/**
// Next button
private RepeatingImageButton mNextButton;
- private BrowseButton mBrowseButton;
- private QueueButton mQueueButton;
-
// Album art ListView
private ViewPager mAlbumArtViewPager;
private LoadingEmptyContainer mQueueEmpty;
// Total time
private TextView mTotalTime;
- // Equalizer View
- private EqualizerView mEqualizerView;
-
- // Equalizer Gradient
- private View mEqualizerGradient;
+ // Visualizer View
+ private VisualizerView mVisualizerView;
// Broadcast receiver
private PlaybackStatus mPlaybackStatus;
private boolean mIsPaused = false;
- private boolean mFromTouch = false;
-
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Initialize the broadcast receiver
mPlaybackStatus = new PlaybackStatus(this);
-
- // add a listener for the sliding
- ((SlidingPanelActivity)getActivity()).addSlidingPanelListener(this);
-
- // check equalizer view
- checkEqualizerView();
}
/**
initPlaybackControls();
- mEqualizerView = (EqualizerView) mRootView.findViewById(R.id.equalizerView);
- mEqualizerView.initialize(getActivity());
- mEqualizerGradient = mRootView.findViewById(R.id.equalizerGradient);
+ mVisualizerView = (VisualizerView) mRootView.findViewById(R.id.visualizerView);
+ mVisualizerView.initialize(getActivity());
+ updateVisualizerPowerSaveMode();
mLyricsText = (TextView) mRootView.findViewById(R.id.audio_player_lyrics);
filter.addAction(MusicPlaybackService.QUEUE_CHANGED);
// Listen for lyrics text for the audio track
filter.addAction(MusicPlaybackService.NEW_LYRICS);
+ // Listen for power save mode changed
+ filter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
// Register the intent filters
getActivity().registerReceiver(mPlaybackStatus, filter);
// Refresh the current time
// resumes the update callback for the play pause progress button
mPlayPauseProgressButton.resume();
-
- mEqualizerView.onStart();
}
@Override
mPlayPauseProgressButton.pause();
mImageFetcher.flush();
-
- mEqualizerView.onStop();
}
@Override
mToken = null;
}
- ((SlidingPanelActivity)getActivity()).removeSlidingPanelListener(this);
-
// Unregister the receiver
try {
getActivity().unregisterReceiver(mPlaybackStatus);
*/
private void initPlaybackControls() {
mPlayPauseProgressButton = (PlayPauseProgressButton)mRootView.findViewById(R.id.playPauseProgressButton);
+ mPlayPauseProgressButton.setDragEnabled(true);
mShuffleButton = (ShuffleButton)mRootView.findViewById(R.id.action_button_shuffle);
mRepeatButton = (RepeatButton)mRootView.findViewById(R.id.action_button_repeat);
mPreviousButton = (RepeatingImageButton)mRootView.findViewById(R.id.action_button_previous);
mNextButton = (RepeatingImageButton)mRootView.findViewById(R.id.action_button_next);
- mBrowseButton = (BrowseButton)mRootView.findViewById(R.id.action_button_browse);
- mBrowseButton.setActivity(getActivity());
- mQueueButton = (QueueButton)mRootView.findViewById(R.id.action_button_queue);
- mQueueButton.setActivity(getActivity());
// Album art view pager
mAlbumArtViewPager = (ViewPager)mRootView.findViewById(R.id.audio_player_album_art_viewpager);
if(queueSize == 0) {
mAlbumArtViewPager.setVisibility(View.GONE);
mQueueEmpty.showNoResults();
- mEqualizerGradient.setVisibility(View.GONE);
- mEqualizerView.checkStateChanged();
mAddToPlaylistButton.setVisibility(View.GONE);
} else {
mAlbumArtViewPager.setVisibility(View.VISIBLE);
mQueueEmpty.hideAll();
- if (PreferenceUtils.getInstance(getActivity()).getShowVisualizer()) {
- mEqualizerGradient.setVisibility(View.VISIBLE);
- } else {
- mEqualizerGradient.setVisibility(View.GONE);
- }
- mEqualizerView.checkStateChanged();
mAddToPlaylistButton.setVisibility(View.VISIBLE);
}
}
}
private void refreshCurrentTimeText(final long pos) {
- mCurrentTime.setText(MusicUtils.makeShortTimeString(getActivity(), pos / 1000));
+ if (mPlayPauseProgressButton.isDragging()) {
+ mCurrentTime.setText(MusicUtils.makeShortTimeString(getActivity(),
+ mPlayPauseProgressButton.getDragProgressInMs() / 1000));
+ } else {
+ mCurrentTime.setText(MusicUtils.makeShortTimeString(getActivity(), pos / 1000));
+ }
}
/* Used to update the current time string */
private long refreshCurrentTime() {
if (mService == null) {
- return 500;
+ return MusicUtils.UPDATE_FREQUENCY_MS;
}
try {
final long pos = MusicUtils.position();
if (pos >= 0 && MusicUtils.duration() > 0) {
refreshCurrentTimeText(pos);
- if (mFromTouch) {
- return 500;
+ if (mPlayPauseProgressButton.isDragging()) {
+ mCurrentTime.setVisibility(View.VISIBLE);
+ return MusicUtils.UPDATE_FREQUENCY_FAST_MS;
} else if (MusicUtils.isPlaying()) {
mCurrentTime.setVisibility(View.VISIBLE);
+
+ // calculate the number of milliseconds until the next full second,
+ // so the counter can be updated at just the right time
+ return Math.max(20, 1000 - pos % 1000);
} else {
// blink the counter
final int vis = mCurrentTime.getVisibility();
mCurrentTime.setVisibility(vis == View.INVISIBLE ? View.VISIBLE
: View.INVISIBLE);
- return 500;
}
} else {
mCurrentTime.setText("--:--");
}
-
- // calculate the number of milliseconds until the next full second,
- // so
- // the counter can be updated at just the right time
- final long remaining = 1000 - pos % 1000;
- if (remaining < 20) {
- return 20;
- }
-
- return remaining;
} catch (final Exception ignored) {
if (ignored.getMessage() != null) {
Log.e(TAG, ignored.getMessage());
}
}
- return 500;
+ return MusicUtils.UPDATE_FREQUENCY_MS;
}
/**
}
}
- @Override
- public void onBeginSlide() {
- mEqualizerView.setPanelVisible(false);
- }
-
- @Override
- public void onFinishSlide(SlidingPanelActivity.Panel visiblePanel) {
- checkEqualizerView(visiblePanel);
+ public void setVisualizerVisible(boolean visible) {
+ if (visible && PreferenceUtils.getInstance(getActivity()).getShowVisualizer()) {
+ mVisualizerView.setVisible(true);
+ } else {
+ mVisualizerView.setVisible(false);
+ }
}
- private void checkEqualizerView() {
- checkEqualizerView(((HomeActivity)getActivity()).getCurrentPanel());
+ public void updateVisualizerPowerSaveMode() {
+ PowerManager pm = (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE);
+ mVisualizerView.setPowerSaveMode(pm.isPowerSaveMode());
}
- private void checkEqualizerView(SlidingPanelActivity.Panel visiblePanel) {
- if (visiblePanel == SlidingPanelActivity.Panel.MusicPlayer) {
- mEqualizerView.setPanelVisible(true);
- }
+ public void setVisualizerColor(int color) {
+ mVisualizerView.setColor(color);
}
/**
} else if (action.equals(MusicPlaybackService.PLAYSTATE_CHANGED)) {
// Set the play and pause image
audioPlayerFragment.mPlayPauseProgressButton.getPlayPauseButton().updateState();
+ audioPlayerFragment.mVisualizerView.setPlaying(MusicUtils.isPlaying());
} else if (action.equals(MusicPlaybackService.REPEATMODE_CHANGED)
|| action.equals(MusicPlaybackService.SHUFFLEMODE_CHANGED)) {
// Set the repeat image
audioPlayerFragment.createAndSetAdapter();
} else if (action.equals(MusicPlaybackService.NEW_LYRICS)) {
audioPlayerFragment.onLyrics(intent.getStringExtra("lyrics"));
+ } else if (action.equals(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED)) {
+ audioPlayerFragment.updateVisualizerPowerSaveMode();
}
}
}