Remove look-behind and ding for single voice notes.

This commit is contained in:
Alex Hart
2020-11-02 11:50:37 -04:00
committed by GitHub
parent 49e1ccea28
commit ed17701a0a
5 changed files with 21 additions and 70 deletions

View File

@@ -147,7 +147,11 @@ final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackP
if (holderIndex != -1) {
queueDataAdapter.remove(holderIndex);
queueDataAdapter.remove(holderIndex);
if (!queueDataAdapter.isEmpty()) {
queueDataAdapter.remove(holderIndex);
}
queueDataAdapter.add(holderIndex, createNextClone(description));
queueDataAdapter.add(holderIndex, description);
@@ -157,7 +161,10 @@ final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackP
}
if (currentIndex != holderIndex + 1) {
dataSource.removeMediaSource(holderIndex + 1);
if (dataSource.getSize() > 1) {
dataSource.removeMediaSource(holderIndex + 1);
}
dataSource.addMediaSource(holderIndex + 1, mediaSourceFactory.createMediaSource(next));
}
} else {
@@ -175,12 +182,15 @@ final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackP
MediaDescriptionCompat last = queueDataAdapter.getMediaDescription(lastIndex);
if (Objects.equals(last.getMediaUri(), NEXT_URI)) {
MediaDescriptionCompat end = createEndClone(last);
queueDataAdapter.remove(lastIndex);
queueDataAdapter.add(lastIndex, end);
dataSource.removeMediaSource(lastIndex);
dataSource.addMediaSource(lastIndex, mediaSourceFactory.createMediaSource(end));
if (queueDataAdapter.size() > 1) {
MediaDescriptionCompat end = createEndClone(last);
queueDataAdapter.add(lastIndex, end);
dataSource.addMediaSource(lastIndex, mediaSourceFactory.createMediaSource(end));
}
}
}
@@ -239,10 +249,9 @@ final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackP
@WorkerThread
private @NonNull List<MediaDescriptionCompat> loadMediaDescriptionsForConsecutivePlayback(long messageId) {
try {
List<MessageRecord> recordsBefore = DatabaseFactory.getMmsSmsDatabase(context).getMessagesBeforeVoiceNoteExclusive(messageId, LIMIT);
List<MessageRecord> recordsAfter = DatabaseFactory.getMmsSmsDatabase(context).getMessagesAfterVoiceNoteInclusive(messageId, LIMIT);
return Stream.of(buildFilteredMessageRecordList(recordsBefore, recordsAfter))
return Stream.of(buildFilteredMessageRecordList(recordsAfter))
.map(record -> VoiceNoteMediaDescriptionCompatFactory.buildMediaDescription(context, record))
.toList();
} catch (NoSuchMessageException e) {
@@ -251,20 +260,9 @@ final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackP
}
}
@VisibleForTesting
static @NonNull List<MessageRecord> buildFilteredMessageRecordList(@NonNull List<MessageRecord> recordsBefore, @NonNull List<MessageRecord> recordsAfter) {
Collections.reverse(recordsBefore);
List<MessageRecord> filteredBefore = Stream.of(recordsBefore)
.takeWhile(MessageRecordUtil::hasAudio)
.toList();
Collections.reverse(filteredBefore);
List<MessageRecord> filteredAfter = Stream.of(recordsAfter)
.takeWhile(MessageRecordUtil::hasAudio)
.toList();
filteredBefore.addAll(filteredAfter);
return filteredBefore;
private static @NonNull List<MessageRecord> buildFilteredMessageRecordList(@NonNull List<MessageRecord> recordsAfter) {
return Stream.of(recordsAfter)
.takeWhile(MessageRecordUtil::hasAudio)
.toList();
}
}