summaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/eleven/MusicPlaybackService.java
diff options
context:
space:
mode:
authorMikalacki Sava <mikalackis@gmail.com>2015-01-13 17:37:46 +0100
committerMikalacki Sava <mikalackis@gmail.com>2015-02-23 17:35:42 +0100
commit758ec43f27e07c329578e606db079dd56e9d4c2e (patch)
tree957456570b434b81ad99ae17704d684cc472fafe /src/com/cyanogenmod/eleven/MusicPlaybackService.java
parentfd06a775bb1668dc0df4de96f3c84ad1e9b5a459 (diff)
downloadandroid_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.java82
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);
+ }
+
}
}