diff options
-rw-r--r-- | app/src/main/java/github/daneren2005/dsub/service/DownloadService.java | 11 | ||||
-rw-r--r-- | app/src/main/java/github/daneren2005/dsub/util/Notifications.java | 28 |
2 files changed, 29 insertions, 10 deletions
diff --git a/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java b/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java index 88c631f5..0fb5e9e5 100644 --- a/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java +++ b/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java @@ -170,6 +170,7 @@ public class DownloadService extends Service { private boolean downloadOngoing = false; private float volume = 1.0f; private long delayUpdateProgress = DEFAULT_DELAY_UPDATE_PROGRESS; + private boolean foregroundService = false; private AudioEffectsController effectsController; private RemoteControlState remoteState = LOCAL; @@ -309,7 +310,7 @@ public class DownloadService extends Service { public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); lifecycleSupport.onStart(intent); - if(Build.VERSION.SDK_INT >= 26) { + if(Build.VERSION.SDK_INT >= 26 && !this.isForeground()) { Notifications.shutGoogleUpNotification(this); } return START_NOT_STICKY; @@ -1063,6 +1064,14 @@ public class DownloadService extends Service { return size() == 1 || (currentPlaying != null && !currentPlaying.isSong()); } + public synchronized boolean isForeground() { + return this.foregroundService; + } + + public synchronized void setIsForeground(boolean foreground) { + this.foregroundService = foreground; + } + public synchronized List<DownloadFile> getDownloads() { List<DownloadFile> temp = new ArrayList<DownloadFile>(); temp.addAll(downloadList); diff --git a/app/src/main/java/github/daneren2005/dsub/util/Notifications.java b/app/src/main/java/github/daneren2005/dsub/util/Notifications.java index 59341ebf..a8f7add0 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/Notifications.java +++ b/app/src/main/java/github/daneren2005/dsub/util/Notifications.java @@ -114,11 +114,11 @@ public final class Notifications { handler.post(new Runnable() { @Override public void run() { - downloadService.stopForeground(true); + stopForeground(downloadService, true); showDownloadingNotification(context, downloadService, handler, downloadService.getCurrentDownloading(), downloadService.getBackgroundDownloads().size()); try { - downloadService.startForeground(NOTIFICATION_ID_PLAYING, notification); + startForeground(downloadService, NOTIFICATION_ID_PLAYING, notification); } catch(Exception e) { Log.e(TAG, "Failed to start notifications after stopping foreground download"); } @@ -130,7 +130,7 @@ public final class Notifications { public void run() { if (playing) { try { - downloadService.startForeground(NOTIFICATION_ID_PLAYING, notification); + startForeground(downloadService, NOTIFICATION_ID_PLAYING, notification); } catch(Exception e) { Log.e(TAG, "Failed to start notifications while playing"); } @@ -138,7 +138,7 @@ public final class Notifications { playShowing = false; persistentPlayingShowing = true; NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - downloadService.stopForeground(false); + stopForeground(downloadService, false); try { notificationManager.notify(NOTIFICATION_ID_PLAYING, notification); @@ -334,7 +334,7 @@ public final class Notifications { handler.post(new Runnable() { @Override public void run() { - downloadService.stopForeground(true); + stopForeground(downloadService, true); if(persistentPlayingShowing) { NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); @@ -413,7 +413,7 @@ public final class Notifications { handler.post(new Runnable() { @Override public void run() { - downloadService.startForeground(NOTIFICATION_ID_DOWNLOADING, notification); + startForeground(downloadService, NOTIFICATION_ID_DOWNLOADING, notification); } }); } @@ -429,7 +429,7 @@ public final class Notifications { handler.post(new Runnable() { @Override public void run() { - downloadService.stopForeground(true); + stopForeground(downloadService, true); } }); } @@ -461,8 +461,8 @@ public final class Notifications { .setChannelId("downloading-channel"); final Notification notification = builder.build(); - downloadService.startForeground(NOTIFICATION_ID_SHUT_GOOGLE_UP, notification); - downloadService.stopForeground(true); + startForeground(downloadService, NOTIFICATION_ID_SHUT_GOOGLE_UP, notification); + stopForeground(downloadService, true); } public static void showSyncNotification(final Context context, int stringId, String extra) { @@ -537,4 +537,14 @@ public final class Notifications { return syncChannel; } + + private static void startForeground(DownloadService downloadService, int notificationId, Notification notification) { + downloadService.startForeground(notificationId, notification); + downloadService.setIsForeground(true); + } + + private static void stopForeground(DownloadService downloadService, boolean removeNotification) { + downloadService.stopForeground(removeNotification); + downloadService.setIsForeground(false); + } } |