package code.name.monkey.retromusic.service.notification; import static android.content.Context.NOTIFICATION_SERVICE; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.os.Build; import android.support.annotation.RequiresApi; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.service.MusicService; public abstract class PlayingNotification { protected static final float NOTIFICATION_CONTROLS_SIZE_MULTIPLIER = 1.0f; static final String NOTIFICATION_CHANNEL_ID = "playing_notification"; private static final int NOTIFICATION_ID = 1; private static final int NOTIFY_MODE_FOREGROUND = 1; private static final int NOTIFY_MODE_BACKGROUND = 0; protected MusicService service; boolean stopped; private int notifyMode = NOTIFY_MODE_BACKGROUND; private NotificationManager notificationManager; public synchronized void init(MusicService service) { this.service = service; notificationManager = (NotificationManager) service.getSystemService(NOTIFICATION_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { createNotificationChannel(); } } public abstract void update(); public synchronized void stop() { stopped = true; service.stopForeground(true); notificationManager.cancel(NOTIFICATION_ID); } void updateNotifyModeAndPostNotification(Notification notification) { int newNotifyMode; if (service.isPlaying()) { newNotifyMode = NOTIFY_MODE_FOREGROUND; } else { newNotifyMode = NOTIFY_MODE_BACKGROUND; } if (notifyMode != newNotifyMode && newNotifyMode == NOTIFY_MODE_BACKGROUND) { service.stopForeground(false); } if (newNotifyMode == NOTIFY_MODE_FOREGROUND) { service.startForeground(NOTIFICATION_ID, notification); } else if (newNotifyMode == NOTIFY_MODE_BACKGROUND) { notificationManager.notify(NOTIFICATION_ID, notification); } notifyMode = newNotifyMode; } @RequiresApi(26) private void createNotificationChannel() { NotificationChannel notificationChannel = notificationManager .getNotificationChannel(NOTIFICATION_CHANNEL_ID); if (notificationChannel == null) { notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, service.getString(R.string.playing_notification_name), NotificationManager.IMPORTANCE_LOW); notificationChannel .setDescription(service.getString(R.string.playing_notification_description)); notificationChannel.enableLights(false); notificationChannel.enableVibration(false); notificationChannel.setShowBadge(false); notificationManager.createNotificationChannel(notificationChannel); } } }