aboutsummaryrefslogtreecommitdiff
path: root/src/github/daneren2005/dsub/service/DownloadServiceImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/github/daneren2005/dsub/service/DownloadServiceImpl.java')
-rw-r--r--src/github/daneren2005/dsub/service/DownloadServiceImpl.java44
1 files changed, 40 insertions, 4 deletions
diff --git a/src/github/daneren2005/dsub/service/DownloadServiceImpl.java b/src/github/daneren2005/dsub/service/DownloadServiceImpl.java
index 6ea98302..d28c5abf 100644
--- a/src/github/daneren2005/dsub/service/DownloadServiceImpl.java
+++ b/src/github/daneren2005/dsub/service/DownloadServiceImpl.java
@@ -18,6 +18,7 @@
*/
package github.daneren2005.dsub.service;
+import static android.support.v7.media.MediaRouter.RouteInfo;
import static github.daneren2005.dsub.domain.PlayerState.COMPLETED;
import static github.daneren2005.dsub.domain.PlayerState.DOWNLOADING;
import static github.daneren2005.dsub.domain.PlayerState.IDLE;
@@ -65,6 +66,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.PowerManager;
import android.support.v7.media.MediaRouteSelector;
+import android.support.v7.media.MediaRouter;
import android.util.Log;
import android.support.v4.util.LruCache;
import java.net.URLEncoder;
@@ -204,6 +206,8 @@ public class DownloadServiceImpl extends Service implements DownloadService {
keepScreenOn = prefs.getBoolean(Constants.PREFERENCES_KEY_KEEP_SCREEN_ON, false);
+ mediaRouter = new MediaRouteManager(this);
+
instance = this;
lifecycleSupport.onCreate();
@@ -214,8 +218,6 @@ public class DownloadServiceImpl extends Service implements DownloadService {
getVisualizerController();
showVisualization = true;
}
-
- mediaRouter = new MediaRouteManager(this);
}
@Override
@@ -373,7 +375,8 @@ public class DownloadServiceImpl extends Service implements DownloadService {
SharedPreferences prefs = Util.getPreferences(this);
remoteState = RemoteControlState.values()[prefs.getInt(Constants.PREFERENCES_KEY_CONTROL_MODE, 0)];
if(remoteState != RemoteControlState.LOCAL) {
- setRemoteState(remoteState, null);
+ String id = prefs.getString(Constants.PREFERENCES_KEY_CONTROL_ID, null);
+ setRemoteState(remoteState, null, id);
}
boolean startShufflePlay = prefs.getBoolean(Constants.PREFERENCES_KEY_SHUFFLE_MODE, false);
download(songs, false, false, false, false);
@@ -936,7 +939,10 @@ public class DownloadServiceImpl extends Service implements DownloadService {
bufferTask.cancel();
}
try {
- setPlayerState(IDLE);
+ // Only set to idle if it's not being killed to start RemoteController
+ if(remoteState == RemoteControlState.LOCAL) {
+ setPlayerState(IDLE);
+ }
mediaPlayer.setOnErrorListener(null);
mediaPlayer.setOnCompletionListener(null);
mediaPlayer.reset();
@@ -1143,11 +1149,18 @@ public class DownloadServiceImpl extends Service implements DownloadService {
public void setRemoteEnabled(RemoteControlState newState, Object ref) {
setRemoteState(newState, ref);
+ RouteInfo info = mediaRouter.getSelectedRoute();
+ String routeId = info.getId();
+
SharedPreferences.Editor editor = Util.getPreferences(this).edit();
editor.putInt(Constants.PREFERENCES_KEY_CONTROL_MODE, newState.getValue());
+ editor.putString(Constants.PREFERENCES_KEY_CONTROL_ID, routeId);
editor.commit();
}
private void setRemoteState(RemoteControlState newState, Object ref) {
+ setRemoteState(newState, ref, null);
+ }
+ private void setRemoteState(final RemoteControlState newState, final Object ref, final String routeId) {
if(remoteController != null) {
remoteController.stop();
setPlayerState(PlayerState.IDLE);
@@ -1187,6 +1200,23 @@ public class DownloadServiceImpl extends Service implements DownloadService {
} else {
Util.hidePlayingNotification(this, this, handler);
}
+
+ if(routeId != null) {
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ RouteInfo info = mediaRouter.getRouteForId(routeId);
+ if(info == null) {
+ setRemoteState(RemoteControlState.LOCAL, null);
+ } else if(newState == RemoteControlState.CHROMECAST) {
+ RemoteController controller = mediaRouter.getRemoteController(info);
+ if(controller != null) {
+ setRemoteState(RemoteControlState.CHROMECAST, controller);
+ }
+ }
+ }
+ });
+ }
}
@Override
@@ -1301,6 +1331,12 @@ public class DownloadServiceImpl extends Service implements DownloadService {
nextMediaPlayer.release();
nextMediaPlayer = null;
}
+
+ // Exit when using remote controllers
+ if(remoteState != RemoteControlState.LOCAL) {
+ return;
+ }
+
nextMediaPlayer = new MediaPlayer();
nextMediaPlayer.setWakeMode(DownloadServiceImpl.this, PowerManager.PARTIAL_WAKE_LOCK);
try {