summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUtkarsh Gupta <utkarsh.eminem@gmail.com>2015-07-23 11:23:46 +0530
committerUtkarsh Gupta <utkarsh.eminem@gmail.com>2015-08-08 12:16:39 +0530
commitff5b09da8fc2efc447bd06bb279ac041ca4c5ec7 (patch)
treea896005f53a4579f5d4df2bb4b9fcdf149482aaf
parenta0c8e3ecdd31fa4742d62391cd3fde212390d2fd (diff)
downloadandroid_packages_apps_Eleven-ff5b09da8fc2efc447bd06bb279ac041ca4c5ec7.tar.gz
android_packages_apps_Eleven-ff5b09da8fc2efc447bd06bb279ac041ca4c5ec7.tar.bz2
android_packages_apps_Eleven-ff5b09da8fc2efc447bd06bb279ac041ca4c5ec7.zip
Visualizer tweaks
- Show visualizer even when sliding panels - Hide visualizer in power save mode - Ignore first 2 bytes of FFT Data - they are quite random - Hide visualizer in landscape mode - Reduce color update delay Change-Id: I90f1a442db2f56f0e4075ff096711c163626731b Signed-off-by: Utkarsh Gupta <utkarsh.eminem@gmail.com>
-rw-r--r--src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java2
-rw-r--r--src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java33
-rw-r--r--src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java33
-rw-r--r--src/com/cyanogenmod/eleven/widgets/VisualizerView.java38
4 files changed, 42 insertions, 64 deletions
diff --git a/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java b/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java
index 68819b1..d946039 100644
--- a/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java
+++ b/src/com/cyanogenmod/eleven/ui/activities/HomeActivity.java
@@ -171,8 +171,6 @@ public class HomeActivity extends SlidingPanelActivity implements
@Override
protected void onSlide(float slideOffset) {
- super.onSlide(slideOffset);
-
boolean isInBrowser = getCurrentPanel() == Panel.Browse && slideOffset < 0.7f;
if (isInBrowser != mBrowsePanelActive) {
mBrowsePanelActive = isInBrowser;
diff --git a/src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java b/src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java
index ace0947..b0bedf1 100644
--- a/src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java
+++ b/src/com/cyanogenmod/eleven/ui/activities/SlidingPanelActivity.java
@@ -30,8 +30,6 @@ import com.cyanogenmod.eleven.utils.ApolloUtils;
import com.cyanogenmod.eleven.utils.MusicUtils;
import com.cyanogenmod.eleven.widgets.BlurScrimImage;
-import java.util.HashSet;
-
/**
* This class is used to display the {@link ViewPager} used to swipe between the
* main {@link Fragment}s used to browse the user's music.
@@ -47,18 +45,11 @@ public abstract class SlidingPanelActivity extends BaseActivity {
None,
}
- public static interface ISlidingPanelListener {
- public void onBeginSlide();
- public void onFinishSlide(SlidingPanelActivity.Panel visiblePanel);
- }
-
private static final String STATE_KEY_CURRENT_PANEL = "CurrentPanel";
private SlidingUpPanelLayout mFirstPanel;
private SlidingUpPanelLayout mSecondPanel;
protected Panel mTargetNavigatePanel;
- private HashSet<ISlidingPanelListener> mSlidingPanelListeners
- = new HashSet<ISlidingPanelListener>();
private final ShowPanelClickListener mShowBrowse = new ShowPanelClickListener(Panel.Browse);
private final ShowPanelClickListener mShowMusicPlayer = new ShowPanelClickListener(Panel.MusicPlayer);
@@ -141,11 +132,13 @@ public abstract class SlidingPanelActivity extends BaseActivity {
@Override
public void onPanelExpanded(View panel) {
checkTargetNavigation();
+ getAudioPlayerFragment().setVisualizerVisible(true);
}
@Override
public void onPanelCollapsed(View panel) {
checkTargetNavigation();
+ getAudioPlayerFragment().setVisualizerVisible(false);
}
});
}
@@ -252,27 +245,15 @@ public abstract class SlidingPanelActivity extends BaseActivity {
}
protected void onSlide(float slideOffset) {
- for (ISlidingPanelListener listener : mSlidingPanelListeners) {
- listener.onBeginSlide();
- }
}
/**
* This checks if we are at our target panel and resets our flag if we are there
*/
protected void checkTargetNavigation() {
- final Panel currentPanel = getCurrentPanel();
- // This checks if we are at our target panel and resets our flag if we are there
- if (mTargetNavigatePanel == currentPanel) {
+ if (mTargetNavigatePanel == getCurrentPanel()) {
mTargetNavigatePanel = Panel.None;
}
-
- // if we are at the target panel
- if (mTargetNavigatePanel == Panel.None) {
- for (ISlidingPanelListener listener : mSlidingPanelListeners) {
- listener.onFinishSlide(currentPanel);
- }
- }
}
public Panel getCurrentPanel() {
@@ -339,12 +320,4 @@ public abstract class SlidingPanelActivity extends BaseActivity {
showPanel(mTargetPanel);
}
}
-
- public void addSlidingPanelListener(final ISlidingPanelListener listener) {
- mSlidingPanelListeners.add(listener);
- }
-
- public void removeSlidingPanelListener(final ISlidingPanelListener listener) {
- mSlidingPanelListeners.remove(listener);
- }
}
diff --git a/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java b/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java
index 4ecce67..efeaa62 100644
--- a/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java
+++ b/src/com/cyanogenmod/eleven/ui/fragments/AudioPlayerFragment.java
@@ -27,6 +27,7 @@ import android.os.Bundle;
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;
@@ -55,7 +56,6 @@ import com.cyanogenmod.eleven.menu.CreateNewPlaylist;
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;
@@ -74,8 +74,7 @@ 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();
/**
@@ -177,9 +176,6 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection,
// Initialize the broadcast receiver
mPlaybackStatus = new PlaybackStatus(this);
-
- // add a listener for the sliding
- ((SlidingPanelActivity)getActivity()).addSlidingPanelListener(this);
}
/**
@@ -198,6 +194,8 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection,
mVisualizerView = (VisualizerView) mRootView.findViewById(R.id.visualizerView);
mVisualizerView.initialize(getActivity());
+ updateVisualizerPowerSaveMode();
+
mEqualizerGradient = mRootView.findViewById(R.id.equalizerGradient);
mLyricsText = (TextView) mRootView.findViewById(R.id.audio_player_lyrics);
@@ -240,6 +238,8 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection,
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
@@ -272,8 +272,6 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection,
mToken = null;
}
- ((SlidingPanelActivity)getActivity()).removeSlidingPanelListener(this);
-
// Unregister the receiver
try {
getActivity().unregisterReceiver(mPlaybackStatus);
@@ -733,16 +731,6 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection,
}
}
- @Override
- public void onBeginSlide() {
- mVisualizerView.setVisible(false);
- }
-
- @Override
- public void onFinishSlide(SlidingPanelActivity.Panel visiblePanel) {
- setVisualizerVisible(visiblePanel == SlidingPanelActivity.Panel.MusicPlayer);
- }
-
public void setVisualizerVisible(boolean visible) {
if (visible && PreferenceUtils.getInstance(getActivity()).getShowVisualizer()) {
mVisualizerView.setVisible(true);
@@ -751,6 +739,11 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection,
}
}
+ public void updateVisualizerPowerSaveMode() {
+ PowerManager pm = (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE);
+ mVisualizerView.setPowerSaveMode(pm.isPowerSaveMode());
+ }
+
public void setVisualizerColor(int color) {
mVisualizerView.setColor(color);
}
@@ -813,9 +806,9 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection,
audioPlayerFragment.updateNowPlayingInfo();
audioPlayerFragment.dismissPopupMenu();
} else if (action.equals(MusicPlaybackService.PLAYSTATE_CHANGED)) {
- audioPlayerFragment.mVisualizerView.setPlaying(MusicUtils.isPlaying());
// 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
@@ -829,6 +822,8 @@ public class AudioPlayerFragment extends Fragment implements ServiceConnection,
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();
}
}
}
diff --git a/src/com/cyanogenmod/eleven/widgets/VisualizerView.java b/src/com/cyanogenmod/eleven/widgets/VisualizerView.java
index a176bda..0c8a979 100644
--- a/src/com/cyanogenmod/eleven/widgets/VisualizerView.java
+++ b/src/com/cyanogenmod/eleven/widgets/VisualizerView.java
@@ -38,6 +38,7 @@ public class VisualizerView extends View {
private boolean mVisible = false;
private boolean mPlaying = false;
+ private boolean mPowerSaveMode = false;
private int mColor;
private Visualizer.OnDataCaptureListener mVisualizerListener =
@@ -55,13 +56,13 @@ public class VisualizerView extends View {
for (int i = 0; i < 32; i++) {
mValueAnimators[i].cancel();
- rfk = fft[i * 2];
- ifk = fft[i * 2 + 1];
+ rfk = fft[i * 2 + 2];
+ ifk = fft[i * 2 + 3];
magnitude = rfk * rfk + ifk * ifk;
dbValue = magnitude > 0 ? (int) (10 * Math.log10(magnitude)) : 0;
mValueAnimators[i].setFloatValues(mFFTPoints[i * 4 + 1],
- mFFTPoints[i * 4 + 3] - (dbValue * 16f));
+ mFFTPoints[3] - (dbValue * 16f));
mValueAnimators[i].start();
}
}
@@ -77,7 +78,7 @@ public class VisualizerView extends View {
}
mVisualizer.setEnabled(false);
- mVisualizer.setCaptureSize(64);
+ mVisualizer.setCaptureSize(66);
mVisualizer.setDataCaptureListener(mVisualizerListener, Visualizer.getMaxCaptureRate(),
false, true);
mVisualizer.setEnabled(true);
@@ -109,14 +110,18 @@ public class VisualizerView extends View {
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
- float barUnit = w / 32f;
- float barWidth = barUnit * 8f / 9f;
- barUnit = barWidth + (barUnit - barWidth) * 32f / 31f;
- mPaint.setStrokeWidth(barWidth);
+ if (h > w) {
+ float barUnit = w / 32f;
+ float barWidth = barUnit * 8f / 9f;
+ barUnit = barWidth + (barUnit - barWidth) * 32f / 31f;
+ mPaint.setStrokeWidth(barWidth);
- for (int i = 0; i < 32; i++) {
- mFFTPoints[i * 4] = mFFTPoints[i * 4 + 2] = i * barUnit + (barWidth / 2);
- mFFTPoints[i * 4 + 3] = h;
+ for (int i = 0; i < 32; i++) {
+ mFFTPoints[i * 4] = mFFTPoints[i * 4 + 2] = i * barUnit + (barWidth / 2);
+ mFFTPoints[i * 4 + 3] = h;
+ }
+ } else {
+ setVisible(false);
}
}
@@ -170,6 +175,13 @@ public class VisualizerView extends View {
}
}
+ public void setPowerSaveMode(boolean powerSaveMode) {
+ if (mPowerSaveMode != powerSaveMode) {
+ mPowerSaveMode = powerSaveMode;
+ checkStateChanged();
+ }
+ }
+
public void setColor(int color) {
color = Color.argb(191, Color.red(color), Color.green(color), Color.blue(color));
@@ -183,7 +195,7 @@ public class VisualizerView extends View {
mVisualizerColorAnimator = ObjectAnimator.ofArgb(mPaint, "color",
mPaint.getColor(), mColor);
- mVisualizerColorAnimator.setStartDelay(900);
+ mVisualizerColorAnimator.setStartDelay(600);
mVisualizerColorAnimator.setDuration(1200);
mVisualizerColorAnimator.start();
} else {
@@ -193,7 +205,7 @@ public class VisualizerView extends View {
}
private void checkStateChanged() {
- if (mVisible && mPlaying) {
+ if (mVisible && mPlaying && !mPowerSaveMode) {
if (mVisualizer == null) {
AsyncTask.execute(mLinkVisualizer);
animate().alpha(1f).setDuration(300);