diff options
author | Utkarsh Gupta <utkarsh.eminem@gmail.com> | 2015-07-23 11:23:46 +0530 |
---|---|---|
committer | Utkarsh Gupta <utkarsh.eminem@gmail.com> | 2015-08-08 12:16:39 +0530 |
commit | ff5b09da8fc2efc447bd06bb279ac041ca4c5ec7 (patch) | |
tree | a896005f53a4579f5d4df2bb4b9fcdf149482aaf | |
parent | a0c8e3ecdd31fa4742d62391cd3fde212390d2fd (diff) | |
download | android_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>
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); |