group the background service and background media player notifications #276

Merged
akinwale merged 1 commit from bg-media-notification-intent into master 2018-09-02 04:05:11 +02:00
5 changed files with 32 additions and 13 deletions

View file

@ -297,8 +297,8 @@ class AppWithNavigationState extends React.Component {
// Background media // Background media
if (backgroundPlayEnabled && NativeModules.BackgroundMedia && window.currentMediaInfo) { if (backgroundPlayEnabled && NativeModules.BackgroundMedia && window.currentMediaInfo) {
const { title, channel } = window.currentMediaInfo; const { title, channel, uri } = window.currentMediaInfo;
NativeModules.BackgroundMedia.showPlaybackNotification(title, channel, null, false); NativeModules.BackgroundMedia.showPlaybackNotification(title, channel, uri, false);
} }
}); });
} }

View file

@ -253,8 +253,8 @@ class MediaPlayer extends React.PureComponent {
const { backgroundPlayEnabled } = this.props; const { backgroundPlayEnabled } = this.props;
if (backgroundPlayEnabled) { if (backgroundPlayEnabled) {
if (NativeModules.BackgroundMedia && window.currentMediaInfo) { if (NativeModules.BackgroundMedia && window.currentMediaInfo) {
const { title, channel } = window.currentMediaInfo; const { title, channel, uri } = window.currentMediaInfo;
NativeModules.BackgroundMedia.showPlaybackNotification(title, channel, null, this.state.paused); NativeModules.BackgroundMedia.showPlaybackNotification(title, channel, uri, this.state.paused);
} }
} }
} }

View file

@ -241,12 +241,9 @@ class FilePage extends React.PureComponent {
} }
} }
onMediaLoaded = (title, channelName) => { onMediaLoaded = (channelName, title, uri) => {
this.setState({ mediaLoaded: true }); this.setState({ mediaLoaded: true });
window.currentMediaInfo = { window.currentMediaInfo = { channel: channelName, title, uri };
title: title,
channel: channelName
};
} }
onPlaybackStarted = () => { onPlaybackStarted = () => {
@ -410,7 +407,7 @@ class FilePage extends React.PureComponent {
this.setState({ playerHeight: evt.nativeEvent.layout.height }); this.setState({ playerHeight: evt.nativeEvent.layout.height });
} }
}} }}
onMediaLoaded={() => this.onMediaLoaded(title, channelName)} onMediaLoaded={() => this.onMediaLoaded(channelName, title, uri)}
onPlaybackStarted={this.onPlaybackStarted} onPlaybackStarted={this.onPlaybackStarted}
/>} />}

View file

@ -39,8 +39,12 @@ public class LbrynetService extends PythonService {
private static final String NOTIFICATION_CHANNEL_ID = "io.lbry.browser.DAEMON_NOTIFICATION_CHANNEL"; private static final String NOTIFICATION_CHANNEL_ID = "io.lbry.browser.DAEMON_NOTIFICATION_CHANNEL";
private static final int SERVICE_NOTIFICATION_GROUP_ID = -1;
public static final String ACTION_STOP_SERVICE = "io.lbry.browser.ACTION_STOP_SERVICE"; public static final String ACTION_STOP_SERVICE = "io.lbry.browser.ACTION_STOP_SERVICE";
public static final String GROUP_SERVICE = "io.lbry.browser.GROUP_SERVICE";
public static String TAG = "LbrynetService"; public static String TAG = "LbrynetService";
public static LbrynetService serviceInstance; public static LbrynetService serviceInstance;
@ -86,16 +90,27 @@ public class LbrynetService extends PythonService {
} }
Intent contextIntent = new Intent(context, MainActivity.class); Intent contextIntent = new Intent(context, MainActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(context, 0, contextIntent, PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, contextIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Intent stopIntent = new Intent(ACTION_STOP_SERVICE); Intent stopIntent = new Intent(ACTION_STOP_SERVICE);
PendingIntent stopPendingIntent = PendingIntent.getBroadcast(context, 0, stopIntent, 0); PendingIntent stopPendingIntent = PendingIntent.getBroadcast(context, 0, stopIntent, 0);
// Create the notification group
NotificationCompat.Builder groupBuilder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID);
groupBuilder.setContentTitle("LBRY Browser")
.setColor(ContextCompat.getColor(context, R.color.lbrygreen))
.setSmallIcon(R.drawable.ic_lbry)
.setPriority(NotificationCompat.PRIORITY_LOW)
.setGroup(GROUP_SERVICE)
.setGroupSummary(true);
notificationManager.notify(SERVICE_NOTIFICATION_GROUP_ID, groupBuilder.build());
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID); NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID);
Notification notification = builder.setColor(ContextCompat.getColor(context, R.color.lbrygreen)) Notification notification = builder.setColor(ContextCompat.getColor(context, R.color.lbrygreen))
.setContentIntent(pendingIntent)
.setContentTitle(serviceTitle) .setContentTitle(serviceTitle)
.setContentText(serviceDescription) .setContentText(serviceDescription)
.setContentIntent(pIntent) .setGroup(GROUP_SERVICE)
.setWhen(System.currentTimeMillis()) .setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.ic_lbry) .setSmallIcon(R.drawable.ic_lbry)
.setOngoing(true) .setOngoing(true)

View file

@ -8,6 +8,7 @@ import android.app.PendingIntent;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat; import android.support.v4.app.NotificationManagerCompat;
@ -17,12 +18,13 @@ import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReactMethod;
import io.lbry.browser.LbrynetService;
import io.lbry.browser.MainActivity; import io.lbry.browser.MainActivity;
import io.lbry.browser.R; import io.lbry.browser.R;
public class BackgroundMediaModule extends ReactContextBaseJavaModule { public class BackgroundMediaModule extends ReactContextBaseJavaModule {
private static final int NOTIFICATION_ID = 900; private static final int NOTIFICATION_ID = -2;
private static final String NOTIFICATION_CHANNEL_ID = "io.lbry.browser.MEDIA_PLAYER_NOTIFICATION_CHANNEL"; private static final String NOTIFICATION_CHANNEL_ID = "io.lbry.browser.MEDIA_PLAYER_NOTIFICATION_CHANNEL";
@ -58,6 +60,9 @@ public class BackgroundMediaModule extends ReactContextBaseJavaModule {
channelCreated = true; channelCreated = true;
} }
Intent contextIntent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, contextIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Intent playIntent = new Intent(); Intent playIntent = new Intent();
playIntent.setAction(ACTION_PLAY); playIntent.setAction(ACTION_PLAY);
PendingIntent playPendingIntent = PendingIntent.getBroadcast(context, 0, playIntent, 0); PendingIntent playPendingIntent = PendingIntent.getBroadcast(context, 0, playIntent, 0);
@ -69,8 +74,10 @@ public class BackgroundMediaModule extends ReactContextBaseJavaModule {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID); NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID);
builder.setColor(ContextCompat.getColor(context, R.color.lbrygreen)) builder.setColor(ContextCompat.getColor(context, R.color.lbrygreen))
.setContentIntent(pendingIntent)
.setContentTitle(title) .setContentTitle(title)
.setContentText(publisher) .setContentText(publisher)
.setGroup(LbrynetService.GROUP_SERVICE)
.setOngoing(!paused) .setOngoing(!paused)
.setSmallIcon(paused ? android.R.drawable.ic_media_pause : android.R.drawable.ic_media_play) .setSmallIcon(paused ? android.R.drawable.ic_media_pause : android.R.drawable.ic_media_play)
.setStyle(new android.support.v4.media.app.NotificationCompat.MediaStyle() .setStyle(new android.support.v4.media.app.NotificationCompat.MediaStyle()