From be8e7c32f138bab841d3b040dad0c85ee54875ac Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Thu, 25 Jul 2019 01:08:16 +0200 Subject: Display notification when trying to stream --- .../core/service/playback/PlaybackService.java | 37 ++++++++++++++++++++-- core/src/main/res/values/arrays.xml | 4 +++ core/src/main/res/values/strings.xml | 4 +-- 3 files changed, 40 insertions(+), 5 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 d4be0013f..6707d10f4 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 @@ -25,6 +25,7 @@ import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.annotation.StringRes; import android.support.v4.app.NotificationCompat; +import android.support.v4.app.NotificationManagerCompat; import android.support.v4.media.MediaBrowserCompat; import android.support.v4.media.MediaBrowserServiceCompat; import android.support.v4.media.MediaDescriptionCompat; @@ -67,6 +68,7 @@ import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.FeedSearcher; import de.danoeh.antennapod.core.util.IntList; import de.danoeh.antennapod.core.util.IntentUtils; +import de.danoeh.antennapod.core.util.NetworkUtils; import de.danoeh.antennapod.core.util.QueueAccess; import de.danoeh.antennapod.core.util.gui.NotificationUtils; import de.danoeh.antennapod.core.util.playback.ExternalMedia; @@ -94,6 +96,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { * True if media should be streamed. */ public static final String EXTRA_SHOULD_STREAM = "extra.de.danoeh.antennapod.core.service.shouldStream"; + public static final String EXTRA_ALLOW_STREAM_THIS_TIME = "extra.de.danoeh.antennapod.core.service.allowStream"; /** * True if playback should be started immediately after media has been * prepared. @@ -103,7 +106,6 @@ public class PlaybackService extends MediaBrowserServiceCompat { public static final String EXTRA_PREPARE_IMMEDIATELY = "extra.de.danoeh.antennapod.core.service.prepareImmediately"; public static final String ACTION_PLAYER_STATUS_CHANGED = "action.de.danoeh.antennapod.core.service.playerStatusChanged"; - public static final String EXTRA_NEW_PLAYER_STATUS = "extra.de.danoeh.antennapod.service.playerStatusChanged.newStatus"; private static final String AVRCP_ACTION_PLAYER_STATUS_CHANGED = "com.android.music.playstatechanged"; private static final String AVRCP_ACTION_META_CHANGED = "com.android.music.metachanged"; @@ -206,6 +208,7 @@ public class PlaybackService extends MediaBrowserServiceCompat { private static volatile boolean isCasting = false; private static final int NOTIFICATION_ID = 1; + private static final int NOTIFICATION_ID_STREAMING = 2; private PlaybackServiceMediaPlayer mediaPlayer; private PlaybackServiceTaskManager taskManager; @@ -467,8 +470,8 @@ public class PlaybackService extends MediaBrowserServiceCompat { } } else if (!flavorHelper.castDisconnect(castDisconnect) && playable != null) { started = true; - boolean stream = intent.getBooleanExtra(EXTRA_SHOULD_STREAM, - true); + boolean stream = intent.getBooleanExtra(EXTRA_SHOULD_STREAM, true); + boolean allowStreamThisTime = intent.getBooleanExtra(EXTRA_ALLOW_STREAM_THIS_TIME, false); boolean startWhenPrepared = intent.getBooleanExtra(EXTRA_START_WHEN_PREPARED, false); boolean prepareImmediately = intent.getBooleanExtra(EXTRA_PREPARE_IMMEDIATELY, false); sendNotificationBroadcast(NOTIFICATION_TYPE_RELOAD, 0); @@ -477,6 +480,11 @@ public class PlaybackService extends MediaBrowserServiceCompat { if (playable instanceof FeedMedia) { playable = DBReader.getFeedMedia(((FeedMedia) playable).getId()); } + if (stream && !NetworkUtils.isStreamingAllowed() && !allowStreamThisTime) { + displayStreamingNotAllowedNotification(intent); + stopService(); + return Service.START_NOT_STICKY; + } mediaPlayer.playMediaObject(playable, stream, startWhenPrepared, prepareImmediately); } else { Log.d(TAG, "Did not handle intent to PlaybackService: " + intent); @@ -487,6 +495,29 @@ public class PlaybackService extends MediaBrowserServiceCompat { return Service.START_NOT_STICKY; } + private void displayStreamingNotAllowedNotification(Intent originalIntent) { + Intent intent = new Intent(originalIntent); + intent.putExtra(EXTRA_ALLOW_STREAM_THIS_TIME, true); + PendingIntent pendingIntent; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + pendingIntent = PendingIntent.getForegroundService(this, 0, intent, 0); + } else { + pendingIntent = PendingIntent.getService(this, 0, intent, 0); + } + + NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NotificationUtils.CHANNEL_ID_USER_ACTION) + .setSmallIcon(R.drawable.stat_notify_sync_error) + .setContentTitle(getString(R.string.confirm_mobile_streaming_notification_title)) + .setContentText(getString(R.string.confirm_mobile_streaming_notification_message)) + .setStyle(new NotificationCompat.BigTextStyle() + .bigText(getString(R.string.confirm_mobile_streaming_notification_message))) + .setPriority(NotificationCompat.PRIORITY_DEFAULT) + .setContentIntent(pendingIntent) + .setAutoCancel(true); + NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); + notificationManager.notify(NOTIFICATION_ID_STREAMING, builder.build()); + } + /** * Handles media button events * return: keycode was handled diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml index d5f1c30b1..49ebb7416 100644 --- a/core/src/main/res/values/arrays.xml +++ b/core/src/main/res/values/arrays.xml @@ -77,6 +77,10 @@ images + + images + + @string/episode_cleanup_queue_removal 0 diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 82a56cf88..a6ba0740e 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -265,8 +265,8 @@ Confirm Mobile Download Downloading over mobile data connection is disabled in the settings.\n\nYou can choose to either only add the episode to the queue or you can allow downloading temporarily.\n\nYour choice will be remembered for 10 minutes. Downloading over mobile data connection is disabled in the settings.\n\nDo you want to allow downloading temporarily?\n\nYour choice will be remembered for 10 minutes. - Confirm Mobile streaming - Streaming over mobile data connection is disabled in the settings. Do you want to stream anyway? + Confirm Mobile streaming + Streaming over mobile data connection is disabled in the settings. Tap to stream anyway. Enqueue Allow temporarily -- cgit v1.2.3