Synchronize voice note queue reads and writes.

fork-5.53.8
Alex Hart 2020-11-17 14:42:01 -04:00 zatwierdzone przez GitHub
rodzic 907e8d93a3
commit 2290a6c0df
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 50 dodań i 48 usunięć

Wyświetl plik

@ -140,6 +140,7 @@ final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackP
}
private void applyDescriptionsToQueue(@NonNull List<MediaDescriptionCompat> descriptions) {
synchronized (queueDataAdapter) {
for (MediaDescriptionCompat description : descriptions) {
int holderIndex = queueDataAdapter.indexOf(description.getMediaUri());
MediaDescriptionCompat next = createNextClone(description);
@ -193,6 +194,7 @@ final class VoiceNotePlaybackPreparer implements MediaSessionConnector.PlaybackP
}
}
}
}
private @NonNull MediaDescriptionCompat createEndClone(@NonNull MediaDescriptionCompat source) {
return buildUpon(source).setMediaId("end").setMediaUri(END_URI).build();

Wyświetl plik

@ -20,31 +20,31 @@ final class VoiceNoteQueueDataAdapter implements TimelineQueueEditor.QueueDataAd
private final List<MediaDescriptionCompat> descriptions = new LinkedList<>();
@Override
public MediaDescriptionCompat getMediaDescription(int position) {
public synchronized MediaDescriptionCompat getMediaDescription(int position) {
return descriptions.get(position);
}
@Override
public void add(int position, MediaDescriptionCompat description) {
public synchronized void add(int position, MediaDescriptionCompat description) {
descriptions.add(position, description);
}
@Override
public void remove(int position) {
public synchronized void remove(int position) {
descriptions.remove(position);
}
@Override
public void move(int from, int to) {
public synchronized void move(int from, int to) {
MediaDescriptionCompat description = descriptions.remove(from);
descriptions.add(to, description);
}
int size() {
synchronized int size() {
return descriptions.size();
}
int indexOf(@NonNull Uri uri) {
synchronized int indexOf(@NonNull Uri uri) {
for (int i = 0; i < descriptions.size(); i++) {
if (Objects.equals(uri, descriptions.get(i).getMediaUri())) {
return i;
@ -54,7 +54,7 @@ final class VoiceNoteQueueDataAdapter implements TimelineQueueEditor.QueueDataAd
return -1;
}
int indexAfter(@NonNull MediaDescriptionCompat target) {
synchronized int indexAfter(@NonNull MediaDescriptionCompat target) {
if (isEmpty()) {
return 0;
}
@ -71,11 +71,11 @@ final class VoiceNoteQueueDataAdapter implements TimelineQueueEditor.QueueDataAd
return descriptions.size();
}
boolean isEmpty() {
synchronized boolean isEmpty() {
return descriptions.isEmpty();
}
void clear() {
synchronized void clear() {
descriptions.clear();
}
}