Remove look-behind and ding for single voice notes.

fork-5.53.8
Alex Hart 2020-11-02 11:50:37 -04:00 zatwierdzone przez GitHub
rodzic 49e1ccea28
commit ed17701a0a
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
5 zmienionych plików z 21 dodań i 70 usunięć

Wyświetl plik

@ -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();
}
}

Wyświetl plik

@ -145,7 +145,6 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
abstract void deleteAllThreads();
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 SQLiteDatabase beginTransaction();

Wyświetl plik

@ -1618,23 +1618,6 @@ public class MmsDatabase extends MessageDatabase {
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
public List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit) {
String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " +

Wyświetl plik

@ -162,18 +162,6 @@ public class MmsSmsDatabase extends Database {
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 {
MessageRecord origin = DatabaseFactory.getMmsDatabase(context).getMessageRecord(messageId);
List<MessageRecord> mms = DatabaseFactory.getMmsDatabase(context).getMessagesInThreadAfterInclusive(origin.getThreadId(), origin.getDateReceived(), limit);

Wyświetl plik

@ -985,23 +985,6 @@ public class SmsDatabase extends MessageDatabase {
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
public List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit) {
String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " +