-Fixed TransactionTooLarge due to notification being shown for too long.
-Fixed Play Queue rewinding to last played video upon removing the currently playing.
This commit is contained in:
parent
c75c2d0f21
commit
bd9ee18e56
|
@ -83,6 +83,8 @@ public final class BackgroundPlayer extends Service {
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
private static final int NOTIFICATION_ID = 123789;
|
private static final int NOTIFICATION_ID = 123789;
|
||||||
|
|
||||||
|
private boolean shouldUpdateNotification;
|
||||||
|
|
||||||
private NotificationManager notificationManager;
|
private NotificationManager notificationManager;
|
||||||
private NotificationCompat.Builder notBuilder;
|
private NotificationCompat.Builder notBuilder;
|
||||||
private RemoteViews notRemoteView;
|
private RemoteViews notRemoteView;
|
||||||
|
@ -150,16 +152,27 @@ public final class BackgroundPlayer extends Service {
|
||||||
|
|
||||||
private void onScreenOnOff(boolean on) {
|
private void onScreenOnOff(boolean on) {
|
||||||
if (DEBUG) Log.d(TAG, "onScreenOnOff() called with: on = [" + on + "]");
|
if (DEBUG) Log.d(TAG, "onScreenOnOff() called with: on = [" + on + "]");
|
||||||
if (on) {
|
shouldUpdateNotification = on;
|
||||||
if (basePlayerImpl.isPlaying() && !basePlayerImpl.isProgressLoopRunning()) basePlayerImpl.startProgressLoop();
|
|
||||||
} else basePlayerImpl.stopProgressLoop();
|
|
||||||
|
|
||||||
|
if (on) {
|
||||||
|
if (basePlayerImpl.isPlaying() && !basePlayerImpl.isProgressLoopRunning()) {
|
||||||
|
basePlayerImpl.startProgressLoop();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
basePlayerImpl.stopProgressLoop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*//////////////////////////////////////////////////////////////////////////
|
/*//////////////////////////////////////////////////////////////////////////
|
||||||
// Notification
|
// Notification
|
||||||
//////////////////////////////////////////////////////////////////////////*/
|
//////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
private void resetNotification() {
|
||||||
|
if (shouldUpdateNotification) {
|
||||||
|
notBuilder = createNotification();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private NotificationCompat.Builder createNotification() {
|
private NotificationCompat.Builder createNotification() {
|
||||||
notRemoteView = new RemoteViews(BuildConfig.APPLICATION_ID, R.layout.player_notification);
|
notRemoteView = new RemoteViews(BuildConfig.APPLICATION_ID, R.layout.player_notification);
|
||||||
bigNotRemoteView = new RemoteViews(BuildConfig.APPLICATION_ID, R.layout.player_notification_expanded);
|
bigNotRemoteView = new RemoteViews(BuildConfig.APPLICATION_ID, R.layout.player_notification_expanded);
|
||||||
|
@ -214,7 +227,7 @@ public final class BackgroundPlayer extends Service {
|
||||||
*/
|
*/
|
||||||
private synchronized void updateNotification(int drawableId) {
|
private synchronized void updateNotification(int drawableId) {
|
||||||
//if (DEBUG) Log.d(TAG, "updateNotification() called with: drawableId = [" + drawableId + "]");
|
//if (DEBUG) Log.d(TAG, "updateNotification() called with: drawableId = [" + drawableId + "]");
|
||||||
if (notBuilder == null) return;
|
if (notBuilder == null || !shouldUpdateNotification) return;
|
||||||
if (drawableId != -1) {
|
if (drawableId != -1) {
|
||||||
if (notRemoteView != null) notRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
|
if (notRemoteView != null) notRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
|
||||||
if (bigNotRemoteView != null) bigNotRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
|
if (bigNotRemoteView != null) bigNotRemoteView.setImageViewResource(R.id.notificationPlayPause, drawableId);
|
||||||
|
@ -267,6 +280,7 @@ public final class BackgroundPlayer extends Service {
|
||||||
public void handleIntent(Intent intent) {
|
public void handleIntent(Intent intent) {
|
||||||
super.handleIntent(intent);
|
super.handleIntent(intent);
|
||||||
|
|
||||||
|
shouldUpdateNotification = true;
|
||||||
notBuilder = createNotification();
|
notBuilder = createNotification();
|
||||||
startForeground(NOTIFICATION_ID, notBuilder.build());
|
startForeground(NOTIFICATION_ID, notBuilder.build());
|
||||||
|
|
||||||
|
@ -276,6 +290,7 @@ public final class BackgroundPlayer extends Service {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initThumbnail(final String url) {
|
public void initThumbnail(final String url) {
|
||||||
|
resetNotification();
|
||||||
if (notRemoteView != null) notRemoteView.setImageViewResource(R.id.notificationCover, R.drawable.dummy_thumbnail);
|
if (notRemoteView != null) notRemoteView.setImageViewResource(R.id.notificationCover, R.drawable.dummy_thumbnail);
|
||||||
if (bigNotRemoteView != null) bigNotRemoteView.setImageViewResource(R.id.notificationCover, R.drawable.dummy_thumbnail);
|
if (bigNotRemoteView != null) bigNotRemoteView.setImageViewResource(R.id.notificationCover, R.drawable.dummy_thumbnail);
|
||||||
updateNotification(-1);
|
updateNotification(-1);
|
||||||
|
@ -288,7 +303,7 @@ public final class BackgroundPlayer extends Service {
|
||||||
|
|
||||||
if (thumbnail != null) {
|
if (thumbnail != null) {
|
||||||
// rebuild notification here since remote view does not release bitmaps, causing memory leaks
|
// rebuild notification here since remote view does not release bitmaps, causing memory leaks
|
||||||
notBuilder = createNotification();
|
resetNotification();
|
||||||
|
|
||||||
if (notRemoteView != null) notRemoteView.setImageViewBitmap(R.id.notificationCover, thumbnail);
|
if (notRemoteView != null) notRemoteView.setImageViewBitmap(R.id.notificationCover, thumbnail);
|
||||||
if (bigNotRemoteView != null) bigNotRemoteView.setImageViewBitmap(R.id.notificationCover, thumbnail);
|
if (bigNotRemoteView != null) bigNotRemoteView.setImageViewBitmap(R.id.notificationCover, thumbnail);
|
||||||
|
@ -335,6 +350,7 @@ public final class BackgroundPlayer extends Service {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdateProgress(int currentProgress, int duration, int bufferPercent) {
|
public void onUpdateProgress(int currentProgress, int duration, int bufferPercent) {
|
||||||
|
resetNotification();
|
||||||
if (bigNotRemoteView != null) {
|
if (bigNotRemoteView != null) {
|
||||||
if (currentInfo != null) {
|
if (currentInfo != null) {
|
||||||
bigNotRemoteView.setTextViewText(R.id.notificationSongName, getVideoTitle());
|
bigNotRemoteView.setTextViewText(R.id.notificationSongName, getVideoTitle());
|
||||||
|
@ -400,6 +416,7 @@ public final class BackgroundPlayer extends Service {
|
||||||
public void sync(@Nullable final StreamInfo info) {
|
public void sync(@Nullable final StreamInfo info) {
|
||||||
super.sync(info);
|
super.sync(info);
|
||||||
|
|
||||||
|
resetNotification();
|
||||||
notRemoteView.setTextViewText(R.id.notificationSongName, getVideoTitle());
|
notRemoteView.setTextViewText(R.id.notificationSongName, getVideoTitle());
|
||||||
notRemoteView.setTextViewText(R.id.notificationArtist, getUploaderName());
|
notRemoteView.setTextViewText(R.id.notificationArtist, getUploaderName());
|
||||||
bigNotRemoteView.setTextViewText(R.id.notificationSongName, getVideoTitle());
|
bigNotRemoteView.setTextViewText(R.id.notificationSongName, getVideoTitle());
|
||||||
|
|
|
@ -231,7 +231,8 @@ public abstract class PlayQueue implements Serializable {
|
||||||
/**
|
/**
|
||||||
* Removes the item at the given index from the play queue.
|
* Removes the item at the given index from the play queue.
|
||||||
*
|
*
|
||||||
* The current playing index will decrement if greater than or equal to the index being removed.
|
* The current playing index will decrement if it is greater than the index being removed.
|
||||||
|
* On cases where the current playing index exceeds the playlist range, it is set to 0.
|
||||||
*
|
*
|
||||||
* Will emit a {@link RemoveEvent} if the index is within the play queue index range.
|
* Will emit a {@link RemoveEvent} if the index is within the play queue index range.
|
||||||
*
|
*
|
||||||
|
@ -239,10 +240,13 @@ public abstract class PlayQueue implements Serializable {
|
||||||
public synchronized void remove(final int index) {
|
public synchronized void remove(final int index) {
|
||||||
if (index >= streams.size() || index < 0) return;
|
if (index >= streams.size() || index < 0) return;
|
||||||
|
|
||||||
|
final int currentIndex = queueIndex.get();
|
||||||
final boolean isCurrent = index == getIndex();
|
final boolean isCurrent = index == getIndex();
|
||||||
|
|
||||||
if (queueIndex.get() >= index) {
|
if (currentIndex > index) {
|
||||||
queueIndex.decrementAndGet();
|
queueIndex.decrementAndGet();
|
||||||
|
} else if (currentIndex >= size()) {
|
||||||
|
queueIndex.set(0);
|
||||||
}
|
}
|
||||||
streams.remove(index);
|
streams.remove(index);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue