From 6d0debfd4d0c19ebe0287b136072b05ae6d8e65f Mon Sep 17 00:00:00 2001 From: Domingos Lopes Date: Tue, 28 Jun 2016 02:07:43 -0400 Subject: implement custom mediaroute playback controller --- .../de/danoeh/antennapod/core/CastCallbacks.java | 7 +++++ .../de/danoeh/antennapod/core/ClientConfig.java | 2 ++ .../core/service/playback/PlaybackService.java | 33 +++++++++++----------- .../de/danoeh/antennapod/core/CastCallbacks.java | 12 ++++++++ .../de/danoeh/antennapod/core/ClientConfig.java | 2 ++ .../danoeh/antennapod/core/cast/CastManager.java | 3 +- 6 files changed, 41 insertions(+), 18 deletions(-) create mode 100644 core/src/free/java/de/danoeh/antennapod/core/CastCallbacks.java create mode 100644 core/src/play/java/de/danoeh/antennapod/core/CastCallbacks.java (limited to 'core/src') diff --git a/core/src/free/java/de/danoeh/antennapod/core/CastCallbacks.java b/core/src/free/java/de/danoeh/antennapod/core/CastCallbacks.java new file mode 100644 index 000000000..2e266c736 --- /dev/null +++ b/core/src/free/java/de/danoeh/antennapod/core/CastCallbacks.java @@ -0,0 +1,7 @@ +package de.danoeh.antennapod.core; + +/** + * Callbacks for Chromecast support on the core module + */ +public interface CastCallbacks { +} diff --git a/core/src/free/java/de/danoeh/antennapod/core/ClientConfig.java b/core/src/free/java/de/danoeh/antennapod/core/ClientConfig.java index d1c93d782..eb2e6fc9e 100644 --- a/core/src/free/java/de/danoeh/antennapod/core/ClientConfig.java +++ b/core/src/free/java/de/danoeh/antennapod/core/ClientConfig.java @@ -30,6 +30,8 @@ public class ClientConfig { public static DBTasksCallbacks dbTasksCallbacks; + public static CastCallbacks castCallbacks; + private static boolean initialized = false; public static synchronized void initialize(Context context) { 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 76c960607..c79d662cb 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 @@ -28,11 +28,9 @@ import android.support.v7.app.NotificationCompat; import android.text.TextUtils; import android.util.Log; import android.util.Pair; -import android.view.Display; import android.view.InputDevice; import android.view.KeyEvent; import android.view.SurfaceHolder; -import android.view.WindowManager; import android.widget.Toast; import com.bumptech.glide.Glide; @@ -945,31 +943,32 @@ public class PlaybackService extends Service { builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, p.getEpisodeTitle()); builder.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, p.getFeedTitle()); - if (p.getImageLocation() != null && UserPreferences.setLockscreenBackground()) { - builder.putString(MediaMetadataCompat.METADATA_KEY_ART_URI, p.getImageLocation().toString()); - try { - if (isCasting) { + String imageLocation = p.getImageLocation(); + + if (!TextUtils.isEmpty(imageLocation)) { + if (isCasting || UserPreferences.setLockscreenBackground()) { + builder.putString(MediaMetadataCompat.METADATA_KEY_ART_URI, imageLocation); + builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, imageLocation); + try { Bitmap art = Glide.with(this) - .load(p.getImageLocation()) + .load(imageLocation) .asBitmap() .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY) .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) .get(); builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, art); - } else { - WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); - Display display = wm.getDefaultDisplay(); - Bitmap art = Glide.with(this) - .load(p.getImageLocation()) + // Icon is useful for MediaDescription, + Bitmap icon = Glide.with(this) + .load(imageLocation) .asBitmap() .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY) - .centerCrop() - .into(display.getWidth(), display.getHeight()) + .fitCenter() + .into(128, 128) .get(); - builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, art); + builder.putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, icon); + } catch (Throwable tr) { + Log.e(TAG, Log.getStackTraceString(tr)); } - } catch (Throwable tr) { - Log.e(TAG, Log.getStackTraceString(tr)); } } if (!Thread.currentThread().isInterrupted() && started) { diff --git a/core/src/play/java/de/danoeh/antennapod/core/CastCallbacks.java b/core/src/play/java/de/danoeh/antennapod/core/CastCallbacks.java new file mode 100644 index 000000000..770fee9b9 --- /dev/null +++ b/core/src/play/java/de/danoeh/antennapod/core/CastCallbacks.java @@ -0,0 +1,12 @@ +package de.danoeh.antennapod.core; + +import android.support.annotation.Nullable; +import android.support.v7.app.MediaRouteDialogFactory; + +/** + * Callbacks for Chromecast support on the core module + */ +public interface CastCallbacks { + + @Nullable MediaRouteDialogFactory getMediaRouterDialogFactory(); +} diff --git a/core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java b/core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java index 9bbccbb82..3dfd6ea65 100644 --- a/core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java +++ b/core/src/play/java/de/danoeh/antennapod/core/ClientConfig.java @@ -31,6 +31,8 @@ public class ClientConfig { public static DBTasksCallbacks dbTasksCallbacks; + public static CastCallbacks castCallbacks; + private static boolean initialized = false; public static synchronized void initialize(Context context) { diff --git a/core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java b/core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java index 66b4558be..0674990f1 100644 --- a/core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java +++ b/core/src/play/java/de/danoeh/antennapod/core/cast/CastManager.java @@ -62,6 +62,7 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.TimeUnit; +import de.danoeh.antennapod.core.ClientConfig; import de.danoeh.antennapod.core.R; import static com.google.android.gms.cast.RemoteMediaPlayer.RESUME_STATE_PLAY; @@ -130,12 +131,12 @@ public class CastManager extends BaseCastManager implements OnFailedListener { public static synchronized CastManager init(Context context) { if (INSTANCE == null) { - //TODO also setup dialog factory if necessary CastConfiguration castConfiguration = new CastConfiguration.Builder(CAST_APP_ID) .enableDebug() .enableAutoReconnect() .enableWifiReconnection() .setLaunchOptions(true, Locale.getDefault()) + .setMediaRouteDialogFactory(ClientConfig.castCallbacks.getMediaRouterDialogFactory()) .build(); Log.d(TAG, "New instance of CastManager is created"); if (ConnectionResult.SUCCESS != GoogleApiAvailability.getInstance() -- cgit v1.2.3 From 47015e937e31426b6b638eb4964befad27d86ca5 Mon Sep 17 00:00:00 2001 From: Domingos Lopes Date: Tue, 28 Jun 2016 15:48:51 -0400 Subject: add onClickListeners, optimize image loading --- .../core/service/playback/PlaybackService.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) (limited to 'core/src') 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 c79d662cb..88b2c70de 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 @@ -939,16 +939,16 @@ public class PlaybackService extends Service { MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, p.getFeedTitle()); builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, p.getEpisodeTitle()); + builder.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, p.getFeedTitle()); builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, p.getDuration()); builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, p.getEpisodeTitle()); - builder.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, p.getFeedTitle()); + builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, p.getFeedTitle()); String imageLocation = p.getImageLocation(); if (!TextUtils.isEmpty(imageLocation)) { - if (isCasting || UserPreferences.setLockscreenBackground()) { + if (UserPreferences.setLockscreenBackground()) { builder.putString(MediaMetadataCompat.METADATA_KEY_ART_URI, imageLocation); - builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, imageLocation); try { Bitmap art = Glide.with(this) .load(imageLocation) @@ -957,18 +957,12 @@ public class PlaybackService extends Service { .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) .get(); builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, art); - // Icon is useful for MediaDescription, - Bitmap icon = Glide.with(this) - .load(imageLocation) - .asBitmap() - .diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY) - .fitCenter() - .into(128, 128) - .get(); - builder.putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, icon); } catch (Throwable tr) { Log.e(TAG, Log.getStackTraceString(tr)); } + } else if (isCasting) { + // In the absence of metadata art, the controller dialog takes care of creating it. + builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, imageLocation); } } if (!Thread.currentThread().isInterrupted() && started) { -- cgit v1.2.3