diff options
author | Utkarsh Gupta <utkarsh.eminem@gmail.com> | 2015-07-07 14:17:12 +0530 |
---|---|---|
committer | Utkarsh Gupta <utkarsh.eminem@gmail.com> | 2015-07-07 14:20:30 +0530 |
commit | 7441c5d47497d62a90f7c09597a8363516a74c07 (patch) | |
tree | e15507a918a064ce5972dac49dd44858d5ce8333 /src | |
parent | 3acc66196b8aa68bbb33890975806ad8a11dc16a (diff) | |
download | android_packages_apps_Eleven-7441c5d47497d62a90f7c09597a8363516a74c07.tar.gz android_packages_apps_Eleven-7441c5d47497d62a90f7c09597a8363516a74c07.tar.bz2 android_packages_apps_Eleven-7441c5d47497d62a90f7c09597a8363516a74c07.zip |
Dynamically generate visualizer color
* Set visualizer color along with status bar
* Fix visualizer not showing up after window focus lost
* Cache visualizer parameters
Change-Id: I915e91f485b6e8b8600dad8d9ce304089ba53003
Signed-off-by: Utkarsh Gupta <utkarsh.eminem@gmail.com>
Diffstat (limited to 'src')
3 files changed, 84 insertions, 62 deletions
diff --git a/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java b/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java index 406018e..775fe55 100644 --- a/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java +++ b/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java @@ -180,31 +180,49 @@ public class HomeActivity extends SlidingPanelActivity implements } } + @Override + public void onWindowFocusChanged(boolean hasFocus) { + getAudioPlayerFragment().onWindowFocusChanged(hasFocus + && (getCurrentPanel() == Panel.MusicPlayer)); + + super.onWindowFocusChanged(hasFocus); + } + private void updateStatusBarColor() { if (mBrowsePanelActive || MusicUtils.getCurrentAlbumId() < 0) { - updateStatusBarColor(getResources().getColor(R.color.primary_dark)); + updateStatusBarColor(Color.TRANSPARENT); } else { - new AsyncTask<Void, Void, Integer>() { + new AsyncTask<Void, Void, BitmapWithColors>() { @Override - protected Integer doInBackground(Void... params) { + protected BitmapWithColors doInBackground(Void... params) { ImageFetcher imageFetcher = ImageFetcher.getInstance(HomeActivity.this); final BitmapWithColors bitmap = imageFetcher.getArtwork( MusicUtils.getAlbumName(), MusicUtils.getCurrentAlbumId(), MusicUtils.getArtistName(), true); - return bitmap != null ? bitmap.getVibrantDarkColor() : Color.TRANSPARENT; + return bitmap; } @Override - protected void onPostExecute(Integer color) { - if (color == Color.TRANSPARENT) { - color = getResources().getColor(R.color.primary_dark); - } - updateStatusBarColor(color); + protected void onPostExecute(BitmapWithColors bmc) { + updateEqualizerColor(bmc != null + ? bmc.getVibrantColor() : Color.TRANSPARENT); + updateStatusBarColor(bmc != null + ? bmc.getVibrantDarkColor() : Color.TRANSPARENT); } }.execute(); } } + private void updateEqualizerColor(int color) { + if (color == Color.TRANSPARENT) { + color = getResources().getColor(R.color.equalizer_fill_color); + } + getAudioPlayerFragment().updateVisualizerColor(color); + } + private void updateStatusBarColor(int color) { + if (color == Color.TRANSPARENT) { + color = getResources().getColor(R.color.primary_dark); + } final Window window = getWindow(); ObjectAnimator animator = ObjectAnimator.ofInt(window, "statusBarColor", window.getStatusBarColor(), color); diff --git a/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java b/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java index 2e102d4..3b87698 100644 --- a/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java +++ b/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java @@ -180,9 +180,6 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, // add a listener for the sliding ((SlidingPanelActivity)getActivity()).addSlidingPanelListener(this); - - // check equalizer view - checkEqualizerView(); } /** @@ -251,8 +248,6 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, // resumes the update callback for the play pause progress button mPlayPauseProgressButton.resume(); - - mEqualizerView.onStart(); } @Override @@ -263,8 +258,6 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, mPlayPauseProgressButton.pause(); mImageFetcher.flush(); - - mEqualizerView.onStop(); } @Override @@ -483,17 +476,17 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, 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); + mEqualizerView.setEnabled(true); } else { mEqualizerGradient.setVisibility(View.GONE); + mEqualizerView.setEnabled(false); } - mEqualizerView.checkStateChanged(); mAddToPlaylistButton.setVisibility(View.VISIBLE); } } @@ -744,22 +737,20 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, @Override public void onBeginSlide() { - mEqualizerView.setPanelVisible(false); + mEqualizerView.setVisible(false); } @Override public void onFinishSlide(SlidingPanelActivity.Panel visiblePanel) { - checkEqualizerView(visiblePanel); + mEqualizerView.setVisible(visiblePanel == SlidingPanelActivity.Panel.MusicPlayer); } - private void checkEqualizerView() { - checkEqualizerView(((HomeActivity)getActivity()).getCurrentPanel()); + public void onWindowFocusChanged(boolean hasFocus) { + mEqualizerView.setVisible(hasFocus); } - private void checkEqualizerView(SlidingPanelActivity.Panel visiblePanel) { - if (visiblePanel == SlidingPanelActivity.Panel.MusicPlayer) { - mEqualizerView.setPanelVisible(true); - } + public void updateVisualizerColor(int color) { + mEqualizerView.setColor(color); } /** @@ -820,6 +811,7 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection, audioPlayerFragment.updateNowPlayingInfo(); audioPlayerFragment.dismissPopupMenu(); } else if (action.equals(MusicPlaybackService.PLAYSTATE_CHANGED)) { + audioPlayerFragment.mEqualizerView.setPlaying(MusicUtils.isPlaying()); // Set the play and pause image audioPlayerFragment.mPlayPauseProgressButton.getPlayPauseButton().updateState(); } else if (action.equals(MusicPlaybackService.REPEATMODE_CHANGED) diff --git a/src/com/cyanogenmod/eleven/widgets/EqualizerView.java b/src/com/cyanogenmod/eleven/widgets/EqualizerView.java index 147fbcf..58a178e 100644 --- a/src/com/cyanogenmod/eleven/widgets/EqualizerView.java +++ b/src/com/cyanogenmod/eleven/widgets/EqualizerView.java @@ -15,6 +15,7 @@ */ package com.cyanogenmod.eleven.widgets; +import android.animation.ObjectAnimator; import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; @@ -22,11 +23,8 @@ import android.graphics.DashPathEffect; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; -import android.util.Log; import com.cyanogenmod.eleven.R; -import com.cyanogenmod.eleven.utils.MusicUtils; -import com.cyanogenmod.eleven.utils.PreferenceUtils; import com.pheelicks.visualizer.AudioData; import com.pheelicks.visualizer.FFTData; import com.pheelicks.visualizer.VisualizerView; @@ -34,15 +32,20 @@ import com.pheelicks.visualizer.renderer.Renderer; public class EqualizerView extends VisualizerView { private boolean mLinked = false; - private boolean mStarted = false; - private boolean mPanelVisible = false; + private boolean mVisible = false; + private boolean mPlaying = false; + private boolean mEnabled = false; + private int mColor; + + private TileBarGraphRenderer mBarRenderer; + private ObjectAnimator mVisualizerColorAnimator; private final Runnable mLinkVisualizer = new Runnable() { @Override public void run() { if (!mLinked) { - animate().alpha(1).setDuration(300); link(0); + animate().alpha(1f).setDuration(300); mLinked = true; } } @@ -52,7 +55,7 @@ public class EqualizerView extends VisualizerView { @Override public void run() { if (mLinked) { - animate().alpha(0).setDuration(300); + animate().alpha(0f).setDuration(300); unlink(); mLinked = false; } @@ -120,55 +123,64 @@ public class EqualizerView extends VisualizerView { setEnabled(false); Resources res = mContext.getResources(); + mColor = res.getColor(R.color.equalizer_fill_color); Paint paint = new Paint(); paint.setStrokeWidth(res.getDimensionPixelSize(R.dimen.eqalizer_path_stroke_width)); paint.setAntiAlias(true); - paint.setColor(res.getColor(R.color.equalizer_fill_color)); + paint.setColor(mColor); paint.setPathEffect(new DashPathEffect(new float[]{ res.getDimensionPixelSize(R.dimen.eqalizer_path_effect_1), res.getDimensionPixelSize(R.dimen.eqalizer_path_effect_2) }, 0)); int bars = res.getInteger(R.integer.equalizer_divisions); - addRenderer(new TileBarGraphRenderer(bars, paint, + mBarRenderer = new TileBarGraphRenderer(bars, paint, res.getInteger(R.integer.equalizer_db_fuzz), - res.getInteger(R.integer.equalizer_db_fuzz_factor))); + res.getInteger(R.integer.equalizer_db_fuzz_factor)); + addRenderer(mBarRenderer); } - /** - * Follows Fragment onStart to determine if the containing fragment/activity is started - */ - public void onStart() { - mStarted = true; - checkStateChanged(); + public void setVisible(boolean visible) { + if (mVisible != visible) { + mVisible = visible; + checkStateChanged(); + } } - /** - * Follows Fragment onStop to determine if the containing fragment/activity is stopped - */ - public void onStop() { - mStarted = false; - checkStateChanged(); + public void setPlaying(boolean playing) { + if (mPlaying != playing) { + mPlaying = playing; + checkStateChanged(); + } } - /** - * Separate method to toggle panel visibility - currently used when the user slides to - * improve performance of the sliding panel - */ - public void setPanelVisible(boolean panelVisible) { - if (mPanelVisible != panelVisible) { - mPanelVisible = panelVisible; + public void setEnabled(boolean enabled) { + if (mEnabled != enabled) { + mEnabled = enabled; checkStateChanged(); } } - /** - * Checks the state of the EqualizerView to determine whether we want to link up the equalizer - */ - public void checkStateChanged() { - if (mPanelVisible && mStarted - && PreferenceUtils.getInstance(mContext).getShowVisualizer() - && MusicUtils.getQueueSize() > 0) { + public void setColor(int color) { + if (mColor != color) { + mColor = color; + if (mLinked) { + if (mVisualizerColorAnimator != null) { + mVisualizerColorAnimator.cancel(); + } + mVisualizerColorAnimator = ObjectAnimator.ofArgb(mBarRenderer.mPaint, "color", + mBarRenderer.mPaint.getColor(), mColor); + mVisualizerColorAnimator.setStartDelay(900); + mVisualizerColorAnimator.setDuration(1200); + mVisualizerColorAnimator.start(); + } else { + mBarRenderer.mPaint.setColor(mColor); + } + } + } + + private void checkStateChanged() { + if (mVisible && mPlaying && mEnabled) { mLinkVisualizer.run(); } else { mUnlinkVisualizer.run(); |