From 3e98ab61ea50b320989c26f6548303fd91447073 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 22 Apr 2018 22:21:46 +0200 Subject: Start PlaybackService lazily to allow using ForegroundService --- .../antennapod/activity/AudioplayerActivity.java | 3 ++- .../danoeh/antennapod/activity/MainActivity.java | 10 +++++++++ .../antennapod/activity/MediaplayerActivity.java | 24 ++++++++++++++++++++-- .../antennapod/activity/VideoplayerActivity.java | 4 +++- .../adapter/DefaultActionButtonCallback.java | 6 ++++++ .../fragment/ExternalPlayerFragment.java | 17 ++++++++++----- .../danoeh/antennapod/fragment/ItemFragment.java | 4 ++++ .../danoeh/antennapod/receiver/PlayerWidget.java | 3 ++- 8 files changed, 61 insertions(+), 10 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java index 123f66661..3ddf3ed74 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -1,6 +1,7 @@ package de.danoeh.antennapod.activity; import android.content.Intent; +import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewCompat; import android.text.TextUtils; import android.util.Log; @@ -41,7 +42,7 @@ public class AudioplayerActivity extends MediaplayerInfoActivity { launchIntent.putExtra(PlaybackService.EXTRA_SHOULD_STREAM, false); launchIntent.putExtra(PlaybackService.EXTRA_PREPARE_IMMEDIATELY, true); - startService(launchIntent); + ContextCompat.startForegroundService(this, launchIntent); } else if (PlaybackService.isCasting()) { Intent intent = PlaybackService.getPlayerActivityIntent(this); if (intent.getComponent() != null && diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index cb4dae942..c2ea7fc12 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -30,6 +30,7 @@ import android.widget.ListView; import com.bumptech.glide.Glide; +import de.danoeh.antennapod.core.event.ServiceEvent; import de.danoeh.antennapod.core.util.NotificationUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.Validate; @@ -741,6 +742,15 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi loadData(); } + public void onEventMainThread(ServiceEvent event) { + Log.d(TAG, "onEvent(" + event + ")"); + switch(event.action) { + case SERVICE_STARTED: + externalPlayerFragment.connectToPlaybackService(); + break; + } + } + public void onEventMainThread(ProgressEvent event) { Log.d(TAG, "onEvent(" + event + ")"); switch(event.action) { diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java index 21e375435..116709587 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -34,6 +34,7 @@ import com.joanzapata.iconify.fonts.FontAwesomeIcons; import java.util.Locale; import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.event.ServiceEvent; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.preferences.UserPreferences; @@ -270,6 +271,9 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements controller.release(); } controller = newPlaybackController(); + setupGUI(); + loadMediaInfo(); + onPositionObserverUpdate(); } @Override @@ -608,8 +612,23 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements super.onResume(); Log.d(TAG, "onResume()"); StorageUtils.checkStorageAvailability(this); - if(controller != null) { - controller.init(); + if (controller != null) { + if (PlaybackService.isRunning) { + controller.init(); + } else { + controller.resumeServiceNotRunning(); + } + } + } + + public void onEventMainThread(ServiceEvent event) { + Log.d(TAG, "onEvent(" + event + ")"); + switch(event.action) { + case SERVICE_STARTED: + if (controller != null) { + controller.init(); + } + break; } } @@ -853,6 +872,7 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements if(controller == null) { return; } + controller.init(); controller.playPause(); } diff --git a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java index 733f39b63..e91e96a13 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java @@ -6,6 +6,7 @@ import android.graphics.drawable.ColorDrawable; import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.support.v4.content.ContextCompat; import android.support.v4.view.WindowCompat; import android.support.v7.app.ActionBar; import android.util.Log; @@ -30,6 +31,7 @@ import de.danoeh.antennapod.core.service.playback.PlayerStatus; import de.danoeh.antennapod.core.util.gui.PictureInPictureUtil; import de.danoeh.antennapod.core.util.playback.ExternalMedia; import de.danoeh.antennapod.core.util.playback.Playable; +import de.danoeh.antennapod.service.PlayerWidgetService; import de.danoeh.antennapod.view.AspectRatioVideoView; import java.lang.ref.WeakReference; @@ -89,7 +91,7 @@ public class VideoplayerActivity extends MediaplayerActivity { launchIntent.putExtra(PlaybackService.EXTRA_SHOULD_STREAM, false); launchIntent.putExtra(PlaybackService.EXTRA_PREPARE_IMMEDIATELY, true); - startService(launchIntent); + ContextCompat.startForegroundService(this, launchIntent); } else if (PlaybackService.isCasting()) { Intent intent = PlaybackService.getPlayerActivityIntent(this); if (!intent.getComponent().getClassName().equals(VideoplayerActivity.class.getName())) { diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java index 4a53be9dc..31b0ce333 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java @@ -81,9 +81,15 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { } } else { // media is downloaded if (item.hasMedia() && item.getMedia().isCurrentlyPlaying()) { + if (!PlaybackService.isRunning) { + PlaybackService.startService(context, media, true, false); + } context.sendBroadcast(new Intent(PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE)); } else if (item.hasMedia() && item.getMedia().isCurrentlyPaused()) { + if (!PlaybackService.isRunning) { + PlaybackService.startService(context, media, true, false); + } context.sendBroadcast(new Intent(PlaybackService.ACTION_RESUME_PLAY_CURRENT_EPISODE)); } else { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java index 2705e7402..e75f312d3 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java @@ -37,7 +37,6 @@ public class ExternalPlayerFragment extends Fragment { private ImageButton butPlay; private TextView mFeedName; private ProgressBar mProgressBar; - private PlaybackController controller; public ExternalPlayerFragment() { @@ -83,6 +82,11 @@ public class ExternalPlayerFragment extends Fragment { controller.playPause(); } }); + loadMediaInfo(); + } + + public void connectToPlaybackService() { + controller.init(); } private PlaybackController setupPlaybackController() { @@ -123,7 +127,11 @@ public class ExternalPlayerFragment extends Fragment { @Override public void onResume() { super.onResume(); - controller.init(); + if (PlaybackService.isRunning) { + controller.init(); + } else { + controller.resumeServiceNotRunning(); + } onPositionObserverUpdate(); } @@ -164,13 +172,12 @@ public class ExternalPlayerFragment extends Fragment { private boolean loadMediaInfo() { Log.d(TAG, "Loading media info"); - if (controller != null && controller.serviceAvailable()) { + if (controller != null) { Playable media = controller.getMedia(); if (media != null) { txtvTitle.setText(media.getEpisodeTitle()); mFeedName.setText(media.getFeedTitle()); - mProgressBar.setProgress((int) - ((double) controller.getPosition() / controller.getDuration() * 100)); + onPositionObserverUpdate(); Glide.with(getActivity()) .load(media.getImageLocation()) diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java index 2d11e9f71..7078eeb63 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java @@ -34,6 +34,7 @@ import com.bumptech.glide.Glide; import com.joanzapata.iconify.Iconify; import com.joanzapata.iconify.widget.IconButton; +import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.util.NetworkUtils; import org.apache.commons.lang3.ArrayUtils; @@ -243,6 +244,9 @@ public class ItemFragment extends Fragment implements OnSwipeGesture { if (item.hasMedia()) { FeedMedia media = item.getMedia(); if (!media.isDownloaded()) { + if (!PlaybackService.isRunning) { + PlaybackService.startService(getActivity(), media, true, false); + } DBTasks.playMedia(getActivity(), media, true, true, true); ((MainActivity) getActivity()).dismissChildFragment(); } else { diff --git a/app/src/main/java/de/danoeh/antennapod/receiver/PlayerWidget.java b/app/src/main/java/de/danoeh/antennapod/receiver/PlayerWidget.java index a90f0f706..31242f1fd 100644 --- a/app/src/main/java/de/danoeh/antennapod/receiver/PlayerWidget.java +++ b/app/src/main/java/de/danoeh/antennapod/receiver/PlayerWidget.java @@ -5,6 +5,7 @@ import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.util.Log; @@ -60,7 +61,7 @@ public class PlayerWidget extends AppWidgetProvider { private void startUpdate(Context context) { Log.d(TAG, "startUpdate() called with: " + "context = [" + context + "]"); - context.startService(new Intent(context, PlayerWidgetService.class)); + ContextCompat.startForegroundService(context, new Intent(context, PlayerWidgetService.class)); } private void stopUpdate(Context context) { -- cgit v1.2.3