summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUtkarsh Gupta <utkarsh.eminem@gmail.com>2015-07-07 14:17:12 +0530
committerUtkarsh Gupta <utkarsh.eminem@gmail.com>2015-07-07 14:20:30 +0530
commit7441c5d47497d62a90f7c09597a8363516a74c07 (patch)
treee15507a918a064ce5972dac49dd44858d5ce8333 /src
parent3acc66196b8aa68bbb33890975806ad8a11dc16a (diff)
downloadandroid_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')
-rw-r--r--src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java36
-rw-r--r--src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java26
-rw-r--r--src/com/cyanogenmod/eleven/widgets/EqualizerView.java84
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();