Remove look-behind and ding for single voice notes.
This commit is contained in:
parent
49e1ccea28
commit
ed17701a0a
5 changed files with 21 additions and 70 deletions
|
@ -147,7 +147,11 @@ final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackP
|
||||||
|
|
||||||
if (holderIndex != -1) {
|
if (holderIndex != -1) {
|
||||||
queueDataAdapter.remove(holderIndex);
|
queueDataAdapter.remove(holderIndex);
|
||||||
queueDataAdapter.remove(holderIndex);
|
|
||||||
|
if (!queueDataAdapter.isEmpty()) {
|
||||||
|
queueDataAdapter.remove(holderIndex);
|
||||||
|
}
|
||||||
|
|
||||||
queueDataAdapter.add(holderIndex, createNextClone(description));
|
queueDataAdapter.add(holderIndex, createNextClone(description));
|
||||||
queueDataAdapter.add(holderIndex, description);
|
queueDataAdapter.add(holderIndex, description);
|
||||||
|
|
||||||
|
@ -157,7 +161,10 @@ final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackP
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentIndex != holderIndex + 1) {
|
if (currentIndex != holderIndex + 1) {
|
||||||
dataSource.removeMediaSource(holderIndex + 1);
|
if (dataSource.getSize() > 1) {
|
||||||
|
dataSource.removeMediaSource(holderIndex + 1);
|
||||||
|
}
|
||||||
|
|
||||||
dataSource.addMediaSource(holderIndex + 1, mediaSourceFactory.createMediaSource(next));
|
dataSource.addMediaSource(holderIndex + 1, mediaSourceFactory.createMediaSource(next));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -175,12 +182,15 @@ final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackP
|
||||||
MediaDescriptionCompat last = queueDataAdapter.getMediaDescription(lastIndex);
|
MediaDescriptionCompat last = queueDataAdapter.getMediaDescription(lastIndex);
|
||||||
|
|
||||||
if (Objects.equals(last.getMediaUri(), NEXT_URI)) {
|
if (Objects.equals(last.getMediaUri(), NEXT_URI)) {
|
||||||
MediaDescriptionCompat end = createEndClone(last);
|
|
||||||
|
|
||||||
queueDataAdapter.remove(lastIndex);
|
queueDataAdapter.remove(lastIndex);
|
||||||
queueDataAdapter.add(lastIndex, end);
|
|
||||||
dataSource.removeMediaSource(lastIndex);
|
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
|
@WorkerThread
|
||||||
private @NonNull List<MediaDescriptionCompat> loadMediaDescriptionsForConsecutivePlayback(long messageId) {
|
private @NonNull List<MediaDescriptionCompat> loadMediaDescriptionsForConsecutivePlayback(long messageId) {
|
||||||
try {
|
try {
|
||||||
List<MessageRecord> recordsBefore = DatabaseFactory.getMmsSmsDatabase(context).getMessagesBeforeVoiceNoteExclusive(messageId, LIMIT);
|
|
||||||
List<MessageRecord> recordsAfter = DatabaseFactory.getMmsSmsDatabase(context).getMessagesAfterVoiceNoteInclusive(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))
|
.map(record -> VoiceNoteMediaDescriptionCompatFactory.buildMediaDescription(context, record))
|
||||||
.toList();
|
.toList();
|
||||||
} catch (NoSuchMessageException e) {
|
} catch (NoSuchMessageException e) {
|
||||||
|
@ -251,20 +260,9 @@ final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackP
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
private static @NonNull List<MessageRecord> buildFilteredMessageRecordList(@NonNull List<MessageRecord> recordsAfter) {
|
||||||
static @NonNull List<MessageRecord> buildFilteredMessageRecordList(@NonNull List<MessageRecord> recordsBefore, @NonNull List<MessageRecord> recordsAfter) {
|
return Stream.of(recordsAfter)
|
||||||
Collections.reverse(recordsBefore);
|
.takeWhile(MessageRecordUtil::hasAudio)
|
||||||
List<MessageRecord> filteredBefore = Stream.of(recordsBefore)
|
.toList();
|
||||||
.takeWhile(MessageRecordUtil::hasAudio)
|
|
||||||
.toList();
|
|
||||||
Collections.reverse(filteredBefore);
|
|
||||||
|
|
||||||
List<MessageRecord> filteredAfter = Stream.of(recordsAfter)
|
|
||||||
.takeWhile(MessageRecordUtil::hasAudio)
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
filteredBefore.addAll(filteredAfter);
|
|
||||||
|
|
||||||
return filteredBefore;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,7 +145,6 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
|
||||||
abstract void deleteAllThreads();
|
abstract void deleteAllThreads();
|
||||||
abstract void deleteAbandonedMessages();
|
abstract void deleteAbandonedMessages();
|
||||||
|
|
||||||
public abstract List<MessageRecord> getMessagesInThreadBeforeExclusive(long threadId, long timestamp, long limit);
|
|
||||||
public abstract List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit);
|
public abstract List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit);
|
||||||
|
|
||||||
public abstract SQLiteDatabase beginTransaction();
|
public abstract SQLiteDatabase beginTransaction();
|
||||||
|
|
|
@ -1618,23 +1618,6 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
db.delete(TABLE_NAME, where, null);
|
db.delete(TABLE_NAME, where, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<MessageRecord> getMessagesInThreadBeforeExclusive(long threadId, long timestamp, long limit) {
|
|
||||||
String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " +
|
|
||||||
TABLE_NAME + "." + getDateReceivedColumnName() + " < ?";
|
|
||||||
String[] args = SqlUtil.buildArgs(threadId, timestamp);
|
|
||||||
|
|
||||||
try (Reader reader = readerFor(rawQuery(where, args, true, limit))) {
|
|
||||||
List<MessageRecord> results = new ArrayList<>(reader.cursor.getCount());
|
|
||||||
|
|
||||||
while (reader.getNext() != null) {
|
|
||||||
results.add(reader.getCurrent());
|
|
||||||
}
|
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit) {
|
public List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit) {
|
||||||
String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " +
|
String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " +
|
||||||
|
|
|
@ -162,18 +162,6 @@ public class MmsSmsDatabase extends Database {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public @NonNull List<MessageRecord> getMessagesBeforeVoiceNoteExclusive(long messageId, long limit) throws NoSuchMessageException {
|
|
||||||
MessageRecord origin = DatabaseFactory.getMmsDatabase(context).getMessageRecord(messageId);
|
|
||||||
List<MessageRecord> mms = DatabaseFactory.getMmsDatabase(context).getMessagesInThreadBeforeExclusive(origin.getThreadId(), origin.getDateReceived(), limit);
|
|
||||||
List<MessageRecord> sms = DatabaseFactory.getSmsDatabase(context).getMessagesInThreadBeforeExclusive(origin.getThreadId(), origin.getDateReceived(), limit);
|
|
||||||
|
|
||||||
mms.addAll(sms);
|
|
||||||
Collections.sort(mms, (a, b) -> Long.compare(a.getDateReceived(), b.getDateReceived()));
|
|
||||||
|
|
||||||
return Stream.of(mms).skip(Math.max(0, mms.size() - limit)).toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NonNull List<MessageRecord> getMessagesAfterVoiceNoteInclusive(long messageId, long limit) throws NoSuchMessageException {
|
public @NonNull List<MessageRecord> getMessagesAfterVoiceNoteInclusive(long messageId, long limit) throws NoSuchMessageException {
|
||||||
MessageRecord origin = DatabaseFactory.getMmsDatabase(context).getMessageRecord(messageId);
|
MessageRecord origin = DatabaseFactory.getMmsDatabase(context).getMessageRecord(messageId);
|
||||||
List<MessageRecord> mms = DatabaseFactory.getMmsDatabase(context).getMessagesInThreadAfterInclusive(origin.getThreadId(), origin.getDateReceived(), limit);
|
List<MessageRecord> mms = DatabaseFactory.getMmsDatabase(context).getMessagesInThreadAfterInclusive(origin.getThreadId(), origin.getDateReceived(), limit);
|
||||||
|
|
|
@ -985,23 +985,6 @@ public class SmsDatabase extends MessageDatabase {
|
||||||
db.delete(TABLE_NAME, where, null);
|
db.delete(TABLE_NAME, where, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<MessageRecord> getMessagesInThreadBeforeExclusive(long threadId, long timestamp, long limit) {
|
|
||||||
String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " +
|
|
||||||
TABLE_NAME + "." + getDateReceivedColumnName() + " < ?";
|
|
||||||
String[] args = SqlUtil.buildArgs(threadId, timestamp);
|
|
||||||
|
|
||||||
try (Reader reader = readerFor(queryMessages(where, args, true, limit))) {
|
|
||||||
List<MessageRecord> results = new ArrayList<>(reader.cursor.getCount());
|
|
||||||
|
|
||||||
while (reader.getNext() != null) {
|
|
||||||
results.add(reader.getCurrent());
|
|
||||||
}
|
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit) {
|
public List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit) {
|
||||||
String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " +
|
String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " +
|
||||||
|
|
Loading…
Add table
Reference in a new issue