Add abstract methods in PlaylistLocalItem & rename setIsModified

This commit is contained in:
GGAutomaton 2022-06-23 19:20:16 +08:00
parent ba394a7ab4
commit 9ecef6f011
9 changed files with 38 additions and 23 deletions

View file

@ -13,6 +13,10 @@ public interface PlaylistLocalItem extends LocalItem {
long getDisplayIndex();
long getUid();
void setDisplayIndex(long displayIndex);
/**
* Merge localPlaylists and remotePlaylists by the display index.
* If two items have the same display index, sort them in {@code CASE_INSENSITIVE_ORDER}.

View file

@ -11,13 +11,13 @@ public class PlaylistMetadataEntry implements PlaylistLocalItem {
public static final String PLAYLIST_STREAM_COUNT = "streamCount";
@ColumnInfo(name = PLAYLIST_ID)
public final long uid;
private final long uid;
@ColumnInfo(name = PLAYLIST_NAME)
public final String name;
@ColumnInfo(name = PLAYLIST_THUMBNAIL_URL)
public final String thumbnailUrl;
@ColumnInfo(name = PLAYLIST_DISPLAY_INDEX)
public long displayIndex;
private long displayIndex;
@ColumnInfo(name = PLAYLIST_STREAM_COUNT)
public final long streamCount;
@ -44,4 +44,14 @@ public class PlaylistMetadataEntry implements PlaylistLocalItem {
public long getDisplayIndex() {
return displayIndex;
}
@Override
public long getUid() {
return uid;
}
@Override
public void setDisplayIndex(final long displayIndex) {
this.displayIndex = displayIndex;
}
}

View file

@ -41,10 +41,10 @@ public class PlaylistEntity {
@Ignore
public PlaylistEntity(final PlaylistMetadataEntry item) {
this.uid = item.uid;
this.uid = item.getUid();
this.name = item.name;
this.thumbnailUrl = item.thumbnailUrl;
this.displayIndex = item.displayIndex;
this.displayIndex = item.getDisplayIndex();
}
public long getUid() {

View file

@ -105,6 +105,7 @@ public class PlaylistRemoteEntity implements PlaylistLocalItem {
&& TextUtils.equals(getUploader(), info.getUploaderName());
}
@Override
public long getUid() {
return uid;
}
@ -158,6 +159,7 @@ public class PlaylistRemoteEntity implements PlaylistLocalItem {
return displayIndex;
}
@Override
public void setDisplayIndex(final long displayIndex) {
this.displayIndex = displayIndex;
}

View file

@ -139,7 +139,7 @@ public final class BookmarkFragment extends BaseLocalListFragment<List<PlaylistL
if (selectedItem instanceof PlaylistMetadataEntry) {
final PlaylistMetadataEntry entry = ((PlaylistMetadataEntry) selectedItem);
NavigationHelper.openLocalPlaylistFragment(fragmentManager, entry.uid,
NavigationHelper.openLocalPlaylistFragment(fragmentManager, entry.getUid(),
entry.name);
} else if (selectedItem instanceof PlaylistRemoteEntity) {
@ -181,7 +181,7 @@ public final class BookmarkFragment extends BaseLocalListFragment<List<PlaylistL
if (debounceSaver != null) {
disposables.add(debounceSaver.getDebouncedSaver());
debounceSaver.setIsModified(false);
debounceSaver.setNoChangesToSave();
}
isLoadingComplete.set(false);
@ -371,16 +371,15 @@ public final class BookmarkFragment extends BaseLocalListFragment<List<PlaylistL
// Save the index read from the database.
if (item instanceof PlaylistMetadataEntry) {
displayIndexInDatabase.put(new Pair<>(((PlaylistMetadataEntry) item).uid,
displayIndexInDatabase.put(new Pair<>(item.getUid(),
LocalItem.LocalItemType.PLAYLIST_LOCAL_ITEM), item.getDisplayIndex());
((PlaylistMetadataEntry) item).displayIndex = i;
item.setDisplayIndex(i);
} else if (item instanceof PlaylistRemoteEntity) {
displayIndexInDatabase.put(new Pair<>(((PlaylistRemoteEntity) item).getUid(),
LocalItem.LocalItemType.PLAYLIST_REMOTE_ITEM),
item.getDisplayIndex());
((PlaylistRemoteEntity) item).setDisplayIndex(i);
displayIndexInDatabase.put(new Pair<>(item.getUid(),
LocalItem.LocalItemType.PLAYLIST_REMOTE_ITEM), item.getDisplayIndex());
item.setDisplayIndex(i);
}
}
@ -415,9 +414,9 @@ public final class BookmarkFragment extends BaseLocalListFragment<List<PlaylistL
final LocalItem item = items.get(i);
if (item instanceof PlaylistMetadataEntry) {
((PlaylistMetadataEntry) item).displayIndex = i;
((PlaylistMetadataEntry) item).setDisplayIndex(i);
final Long uid = ((PlaylistMetadataEntry) item).uid;
final Long uid = ((PlaylistMetadataEntry) item).getUid();
final Pair<Long, LocalItem.LocalItemType> key = new Pair<>(uid,
LocalItem.LocalItemType.PLAYLIST_LOCAL_ITEM);
final Long databaseIndex = displayIndexInDatabase.remove(key);
@ -463,7 +462,7 @@ public final class BookmarkFragment extends BaseLocalListFragment<List<PlaylistL
.observeOn(AndroidSchedulers.mainThread())
.subscribe(() -> {
if (debounceSaver != null) {
debounceSaver.setIsModified(false);
debounceSaver.setNoChangesToSave();
}
},
throwable -> showError(new ErrorInfo(throwable,
@ -563,7 +562,7 @@ public final class BookmarkFragment extends BaseLocalListFragment<List<PlaylistL
builder.setView(dialogBinding.getRoot())
.setPositiveButton(R.string.rename_playlist, (dialog, which) ->
changeLocalPlaylistName(
selectedItem.uid,
selectedItem.getUid(),
dialogBinding.dialogEditText.getText().toString()))
.setNegativeButton(R.string.cancel, null)
.setNeutralButton(R.string.delete, (dialog, which) -> {

View file

@ -147,12 +147,12 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
if (playlist.thumbnailUrl.equals("drawable://" + R.drawable.dummy_thumbnail_playlist)) {
playlistDisposables.add(manager
.changePlaylistThumbnail(playlist.uid, streams.get(0).getThumbnailUrl())
.changePlaylistThumbnail(playlist.getUid(), streams.get(0).getThumbnailUrl())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(ignored -> successToast.show()));
}
playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams)
playlistDisposables.add(manager.appendToPlaylist(playlist.getUid(), streams)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(ignored -> successToast.show()));

View file

@ -221,7 +221,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
if (debounceSaver != null) {
disposables.add(debounceSaver.getDebouncedSaver());
debounceSaver.setIsModified(false);
debounceSaver.setNoChangesToSave();
}
isLoadingComplete.set(false);
@ -644,7 +644,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
.subscribe(
() -> {
if (debounceSaver != null) {
debounceSaver.setIsModified(false);
debounceSaver.setNoChangesToSave();
}
},
throwable -> showError(new ErrorInfo(throwable,

View file

@ -118,7 +118,7 @@ public class SelectPlaylistFragment extends DialogFragment {
if (selectedItem instanceof PlaylistMetadataEntry) {
final PlaylistMetadataEntry entry = ((PlaylistMetadataEntry) selectedItem);
onSelectedListener.onLocalPlaylistSelected(entry.uid, entry.name);
onSelectedListener.onLocalPlaylistSelected(entry.getUid(), entry.name);
} else if (selectedItem instanceof PlaylistRemoteEntity) {
final PlaylistRemoteEntity entry = ((PlaylistRemoteEntity) selectedItem);

View file

@ -53,8 +53,8 @@ public class DebounceSaver {
return isModified.get();
}
public void setIsModified(final boolean isModified) {
this.isModified.set(isModified);
public void setNoChangesToSave() {
isModified.set(false);
}
public PublishSubject<Long> getDebouncedSaveSignal() {