summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCédric Cabessa <ced@ryick.net>2017-08-14 21:54:31 +0200
committerCédric Cabessa <ced@ryick.net>2017-08-14 23:33:25 +0200
commitf3ceccfa829402541dc7603037877f2e08efbf9b (patch)
tree9efeaefc53c11e7543bb95761265ea6148ac4d13
parent657a91b036aa86d94734f8b0ef88a036ec5a48a5 (diff)
downloadAntennaPod-f3ceccfa829402541dc7603037877f2e08efbf9b.zip
add a "rewind" and "fast forward" button for android Wear
This feature is only enabled for "play" build. It is useful to skip advertisement during a podcast. Note: I originaly tried to implement this in the "4 ways controller" managed by the mediaSession (it contains vol up / vol down / skip). This object is linked to the capabilities of the session and seems to be hard to customise without changing the capabilities. This patch simply add 2 new buttons
-rw-r--r--build.gradle1
-rw-r--r--core/build.gradle1
-rw-r--r--core/src/free/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java10
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java24
-rw-r--r--core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java21
5 files changed, 57 insertions, 0 deletions
diff --git a/build.gradle b/build.gradle
index 47a4021a4..c960e98c4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -65,6 +65,7 @@ project.ext {
castCompanionLibVer = "2.8.3"
playServicesVersion = "8.4.0"
+ wearableSupportVersion = "2.0.3"
}
task wrapper(type: Wrapper) {
diff --git a/core/build.gradle b/core/build.gradle
index c2ddd24da..f70083ec1 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -72,6 +72,7 @@ dependencies {
playCompile "com.google.android.libraries.cast.companionlibrary:ccl:$castCompanionLibVer"
compile "com.android.support:mediarouter-v7:$supportVersion"
playCompile "com.google.android.gms:play-services-cast:$playServicesVersion"
+ compile "com.google.android.support:wearable:$wearableSupportVersion"
} else {
System.out.println("core: free build hack, skipping some dependencies")
}
diff --git a/core/src/free/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java b/core/src/free/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java
index 6bc3ed7c5..4e6482fda 100644
--- a/core/src/free/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java
+++ b/core/src/free/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java
@@ -2,6 +2,8 @@ package de.danoeh.antennapod.core.service.playback;
import android.content.Context;
import android.support.annotation.StringRes;
+import android.support.v4.media.session.MediaSessionCompat;
+import android.support.v4.media.session.PlaybackStateCompat;
/**
* Class intended to work along PlaybackService and provide support for different flavors.
@@ -41,4 +43,12 @@ public class PlaybackServiceFlavorHelper {
boolean onSharedPreference(String key) {
return false;
}
+
+ void sessionStateAddActionForWear(PlaybackStateCompat.Builder sessionState, String actionName, CharSequence name, int icon) {
+ // no-op
+ }
+
+ void mediaSessionSetExtraForWear(MediaSessionCompat mediaSession) {
+ // no-op
+ }
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
index c3e6b55ba..3166dd743 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java
@@ -133,6 +133,12 @@ public class PlaybackService extends MediaBrowserServiceCompat {
*/
public static final String ACTION_RESUME_PLAY_CURRENT_EPISODE = "action.de.danoeh.antennapod.core.service.resumePlayCurrentEpisode";
+ /**
+ * Custom action used by Android Wear
+ */
+ private static final String CUSTOM_ACTION_FAST_FORWARD = "action.de.danoeh.antennapod.core.service.fastForward";
+ private static final String CUSTOM_ACTION_REWIND = "action.de.danoeh.antennapod.core.service.rewind";
+
/**
* Used in NOTIFICATION_TYPE_RELOAD.
@@ -1083,6 +1089,14 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
sessionState.setActions(capabilities);
+
+ flavorHelper.sessionStateAddActionForWear(sessionState,
+ CUSTOM_ACTION_REWIND, getString(R.string.rewind_label), android.R.drawable.ic_media_rew);
+ flavorHelper.sessionStateAddActionForWear(sessionState,
+ CUSTOM_ACTION_FAST_FORWARD, getString(R.string.fast_forward_label), android.R.drawable.ic_media_ff);
+
+ flavorHelper.mediaSessionSetExtraForWear(mediaSession);
+
mediaSession.setPlaybackState(sessionState.build());
}
@@ -1761,6 +1775,16 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
return false;
}
+
+ @Override
+ public void onCustomAction(String action, Bundle extra) {
+ Log.d(TAG, "onCustomAction(" + action + ")");
+ if (CUSTOM_ACTION_FAST_FORWARD.equals(action)) {
+ onFastForward();
+ } else if (CUSTOM_ACTION_REWIND.equals(action)) {
+ onRewind();
+ }
+ }
};
private SharedPreferences.OnSharedPreferenceChangeListener prefListener =
diff --git a/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java b/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java
index 0f493e63e..0cca2ffa4 100644
--- a/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java
+++ b/core/src/play/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceFlavorHelper.java
@@ -6,9 +6,13 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
+import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
+import android.support.v4.media.session.MediaSessionCompat;
+import android.support.v4.media.session.PlaybackStateCompat;
import android.support.v7.media.MediaRouter;
+import android.support.wearable.media.MediaControlConstants;
import android.util.Log;
import android.widget.Toast;
@@ -255,4 +259,21 @@ public class PlaybackServiceFlavorHelper {
}
return false;
}
+
+ void sessionStateAddActionForWear(PlaybackStateCompat.Builder sessionState, String actionName, CharSequence name, int icon) {
+ PlaybackStateCompat.CustomAction.Builder actionBuilder =
+ new PlaybackStateCompat.CustomAction.Builder(actionName, name, icon);
+ Bundle actionExtras = new Bundle();
+ actionExtras.putBoolean(MediaControlConstants.EXTRA_CUSTOM_ACTION_SHOW_ON_WEAR, true);
+ actionBuilder.setExtras(actionExtras);
+
+ sessionState.addCustomAction(actionBuilder.build());
+ }
+
+ void mediaSessionSetExtraForWear(MediaSessionCompat mediaSession) {
+ Bundle sessionExtras = new Bundle();
+ sessionExtras.putBoolean(MediaControlConstants.EXTRA_RESERVE_SLOT_SKIP_TO_PREVIOUS, true);
+ sessionExtras.putBoolean(MediaControlConstants.EXTRA_RESERVE_SLOT_SKIP_TO_NEXT, true);
+ mediaSession.setExtras(sessionExtras);
+ }
}