diff options
author | Mikalacki Sava <mikalackis@gmail.com> | 2015-01-13 17:37:46 +0100 |
---|---|---|
committer | Mikalacki Sava <mikalackis@gmail.com> | 2015-02-23 17:35:42 +0100 |
commit | 758ec43f27e07c329578e606db079dd56e9d4c2e (patch) | |
tree | 957456570b434b81ad99ae17704d684cc472fafe /src/com/cyanogenmod/eleven/MusicPlaybackService.java | |
parent | fd06a775bb1668dc0df4de96f3c84ad1e9b5a459 (diff) | |
download | android_packages_apps_Eleven-758ec43f27e07c329578e606db079dd56e9d4c2e.tar.gz android_packages_apps_Eleven-758ec43f27e07c329578e606db079dd56e9d4c2e.tar.bz2 android_packages_apps_Eleven-758ec43f27e07c329578e606db079dd56e9d4c2e.zip |
Eleven: shake to play next song, only available while music is playing.stable/cm-12.0-YNG1I
Allows user to shake his device to switch to next song.
This feature is available through settings and is invoked
only while music is playing.
Change-Id: Ifb0866565d49443af7f3ac679e80601660506515
Diffstat (limited to 'src/com/cyanogenmod/eleven/MusicPlaybackService.java')
-rw-r--r-- | src/com/cyanogenmod/eleven/MusicPlaybackService.java | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/com/cyanogenmod/eleven/MusicPlaybackService.java b/src/com/cyanogenmod/eleven/MusicPlaybackService.java index 73c3694..6703dbf 100644 --- a/src/com/cyanogenmod/eleven/MusicPlaybackService.java +++ b/src/com/cyanogenmod/eleven/MusicPlaybackService.java @@ -31,6 +31,7 @@ import android.database.ContentObserver; import android.database.Cursor; import android.database.MatrixCursor; import android.graphics.Bitmap; +import android.hardware.SensorManager; import android.media.AudioManager; import android.media.AudioManager.OnAudioFocusChangeListener; import android.media.MediaMetadata; @@ -66,6 +67,8 @@ import com.cyanogenmod.eleven.provider.SongPlayCount; import com.cyanogenmod.eleven.service.MusicPlaybackTrack; import com.cyanogenmod.eleven.utils.BitmapWithColors; import com.cyanogenmod.eleven.utils.Lists; +import com.cyanogenmod.eleven.utils.PreferenceUtils; +import com.cyanogenmod.eleven.utils.ShakeDetector; import com.cyanogenmod.eleven.utils.SrtManager; import java.io.File; @@ -517,6 +520,25 @@ public class MusicPlaybackService extends Service { private MusicPlaybackState mPlaybackStateStore; /** + * Shake detector class used for shake to switch song feature + */ + private ShakeDetector mShakeDetector; + + private ShakeDetector.Listener mShakeDetectorListener=new ShakeDetector.Listener() { + + @Override + public void hearShake() { + /* + * on shake detect, play next song + */ + if (D) { + Log.d(TAG,"Shake detected!!!"); + } + gotoNext(true); + } + }; + + /** * {@inheritDoc} */ @Override @@ -551,6 +573,7 @@ public class MusicPlaybackService extends Service { return true; } stopSelf(mServiceStartId); + return true; } @@ -738,6 +761,9 @@ public class MusicPlaybackService extends Service { mUnmountReceiver = null; } + // deinitialize shake detector + stopShakeDetector(true); + // Release the wake lock mWakeLock.release(); } @@ -2337,6 +2363,7 @@ public class MusicPlaybackService extends Service { * Stops playback. */ public void stop() { + stopShakeDetector(false); stop(true); } @@ -2344,6 +2371,7 @@ public class MusicPlaybackService extends Service { * Resumes or starts playback. */ public void play() { + startShakeDetector(); play(true); } @@ -2402,6 +2430,7 @@ public class MusicPlaybackService extends Service { if (mIsSupposedToBePlaying) { mPlayer.pause(); setIsSupposedToBePlaying(false, true); + stopShakeDetector(false); } } } @@ -2718,6 +2747,51 @@ public class MusicPlaybackService extends Service { notifyChange(PLAYLIST_CHANGED); } + /** + * Called to set the status of shake to play feature + */ + public void setShakeToPlayEnabled(boolean enabled) { + if (D) { + Log.d(TAG, "ShakeToPlay status: " + enabled); + } + if (enabled) { + if (mShakeDetector == null) { + mShakeDetector = new ShakeDetector(mShakeDetectorListener); + } + // if song is already playing, start listening immediately + if (isPlaying()) { + startShakeDetector(); + } + } + else { + stopShakeDetector(true); + } + } + + /** + * Called to start listening to shakes + */ + private void startShakeDetector() { + if (mShakeDetector != null) { + mShakeDetector.start((SensorManager)getSystemService(SENSOR_SERVICE)); + } + } + + /** + * Called to stop listening to shakes + */ + private void stopShakeDetector(final boolean destroyShakeDetector) { + if (mShakeDetector != null) { + mShakeDetector.stop(); + } + if(destroyShakeDetector){ + mShakeDetector = null; + if (D) { + Log.d(TAG, "ShakeToPlay destroyed!!!"); + } + } + } + private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { /** * {@inheritDoc} @@ -3625,6 +3699,14 @@ public class MusicPlaybackService extends Service { return mService.get().getAudioSessionId(); } + /** + * {@inheritDoc} + */ + @Override + public void setShakeToPlayEnabled(boolean enabled) { + mService.get().setShakeToPlayEnabled(enabled); + } + } } |