mirror of
https://github.com/antebudimir/tempus.git
synced 2025-12-31 17:43:32 +00:00
Merge pull request #4 from typhoon2099/album-add-to-playlist-context-menu-item
367-Album add to playlist context menu item
This commit is contained in:
commit
d4aac9206d
17 changed files with 89 additions and 22 deletions
|
|
@ -57,14 +57,14 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba
|
|||
}
|
||||
|
||||
private void setSongInfo() {
|
||||
playlistChooserViewModel.setSongToAdd(requireArguments().getParcelable(Constants.TRACK_OBJECT));
|
||||
playlistChooserViewModel.setSongsToAdd(requireArguments().getParcelableArrayList(Constants.TRACKS_OBJECT));
|
||||
}
|
||||
|
||||
private void setButtonAction() {
|
||||
androidx.appcompat.app.AlertDialog alertDialog = (androidx.appcompat.app.AlertDialog) Objects.requireNonNull(getDialog());
|
||||
alertDialog.getButton(androidx.appcompat.app.AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putParcelable(Constants.TRACK_OBJECT, playlistChooserViewModel.getSongToAdd());
|
||||
bundle.putParcelableArrayList(Constants.TRACKS_OBJECT, playlistChooserViewModel.getSongsToAdd());
|
||||
|
||||
PlaylistEditorDialog dialog = new PlaylistEditorDialog(null);
|
||||
dialog.setArguments(bundle);
|
||||
|
|
@ -98,7 +98,7 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba
|
|||
@Override
|
||||
public void onPlaylistClick(Bundle bundle) {
|
||||
Playlist playlist = bundle.getParcelable(Constants.PLAYLIST_OBJECT);
|
||||
playlistChooserViewModel.addSongToPlaylist(playlist.getId());
|
||||
playlistChooserViewModel.addSongsToPlaylist(playlist.getId());
|
||||
dismiss();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,11 +74,11 @@ public class PlaylistEditorDialog extends DialogFragment {
|
|||
}
|
||||
|
||||
private void setParameterInfo() {
|
||||
if (requireArguments().getParcelable(Constants.TRACK_OBJECT) != null) {
|
||||
playlistEditorViewModel.setSongToAdd(requireArguments().getParcelable(Constants.TRACK_OBJECT));
|
||||
if (requireArguments().getParcelableArrayList(Constants.TRACKS_OBJECT) != null) {
|
||||
playlistEditorViewModel.setSongsToAdd(requireArguments().getParcelableArrayList(Constants.TRACKS_OBJECT));
|
||||
playlistEditorViewModel.setPlaylistToEdit(null);
|
||||
} else if (requireArguments().getParcelable(Constants.PLAYLIST_OBJECT) != null) {
|
||||
playlistEditorViewModel.setSongToAdd(null);
|
||||
playlistEditorViewModel.setSongsToAdd(null);
|
||||
playlistEditorViewModel.setPlaylistToEdit(requireArguments().getParcelable(Constants.PLAYLIST_OBJECT));
|
||||
|
||||
if (playlistEditorViewModel.getPlaylistToEdit() != null) {
|
||||
|
|
@ -92,7 +92,7 @@ public class PlaylistEditorDialog extends DialogFragment {
|
|||
|
||||
alertDialog.getButton(androidx.appcompat.app.AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
|
||||
if (validateInput()) {
|
||||
if (playlistEditorViewModel.getSongToAdd() != null) {
|
||||
if (playlistEditorViewModel.getSongsToAdd() != null) {
|
||||
playlistEditorViewModel.createPlaylist(playlistName);
|
||||
} else if (playlistEditorViewModel.getPlaylistToEdit() != null) {
|
||||
playlistEditorViewModel.updatePlaylist(playlistName);
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import com.cappielloantonio.tempo.service.MediaManager;
|
|||
import com.cappielloantonio.tempo.service.MediaService;
|
||||
import com.cappielloantonio.tempo.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.tempo.ui.adapter.SongHorizontalAdapter;
|
||||
import com.cappielloantonio.tempo.ui.dialog.PlaylistChooserDialog;
|
||||
import com.cappielloantonio.tempo.util.Constants;
|
||||
import com.cappielloantonio.tempo.util.DownloadUtil;
|
||||
import com.cappielloantonio.tempo.util.MappingUtil;
|
||||
|
|
@ -38,6 +39,7 @@ import com.cappielloantonio.tempo.util.MusicUtil;
|
|||
import com.cappielloantonio.tempo.viewmodel.AlbumPageViewModel;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
|
@ -108,6 +110,17 @@ public class AlbumPageFragment extends Fragment implements ClickCallback {
|
|||
});
|
||||
return true;
|
||||
}
|
||||
if (item.getItemId() == R.id.action_add_to_playlist) {
|
||||
albumPageViewModel.getAlbumSongLiveList().observe(getViewLifecycleOwner(), songs -> {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putParcelableArrayList(Constants.TRACKS_OBJECT, new ArrayList<>(songs));
|
||||
|
||||
PlaylistChooserDialog dialog = new PlaylistChooserDialog();
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(requireActivity().getSupportFragmentManager(), null);
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import com.cappielloantonio.tempo.service.MediaService;
|
|||
import com.cappielloantonio.tempo.subsonic.models.AlbumID3;
|
||||
import com.cappielloantonio.tempo.subsonic.models.Child;
|
||||
import com.cappielloantonio.tempo.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.tempo.ui.dialog.PlaylistChooserDialog;
|
||||
import com.cappielloantonio.tempo.util.Constants;
|
||||
import com.cappielloantonio.tempo.util.DownloadUtil;
|
||||
import com.cappielloantonio.tempo.util.MappingUtil;
|
||||
|
|
@ -167,6 +168,20 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
});
|
||||
});
|
||||
|
||||
TextView addToPlaylist = view.findViewById(R.id.add_to_playlist_text_view);
|
||||
addToPlaylist.setOnClickListener(v -> {
|
||||
albumBottomSheetViewModel.getAlbumTracks().observe(getViewLifecycleOwner(), songs -> {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putParcelableArrayList(Constants.TRACKS_OBJECT, new ArrayList<>(songs));
|
||||
|
||||
PlaylistChooserDialog dialog = new PlaylistChooserDialog();
|
||||
dialog.setArguments(bundle);
|
||||
dialog.show(requireActivity().getSupportFragmentManager(), null);
|
||||
|
||||
dismissBottomSheet();
|
||||
});
|
||||
});
|
||||
|
||||
TextView removeAll = view.findViewById(R.id.remove_all_text_view);
|
||||
albumBottomSheetViewModel.getAlbumTracks().observe(getViewLifecycleOwner(), songs -> {
|
||||
List<MediaItem> mediaItems = MappingUtil.mapDownloads(songs);
|
||||
|
|
|
|||
|
|
@ -39,6 +39,9 @@ import com.cappielloantonio.tempo.viewmodel.SongBottomSheetViewModel;
|
|||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
@UnstableApi
|
||||
public class SongBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
|
||||
private HomeViewModel homeViewModel;
|
||||
|
|
@ -177,7 +180,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
TextView addToPlaylist = view.findViewById(R.id.add_to_playlist_text_view);
|
||||
addToPlaylist.setOnClickListener(v -> {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putParcelable(Constants.TRACK_OBJECT, song);
|
||||
bundle.putParcelableArrayList(Constants.TRACKS_OBJECT, new ArrayList<>(Collections.singletonList(song)));
|
||||
|
||||
PlaylistChooserDialog dialog = new PlaylistChooserDialog();
|
||||
dialog.setArguments(bundle);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import androidx.lifecycle.MutableLiveData;
|
|||
import com.cappielloantonio.tempo.repository.PlaylistRepository;
|
||||
import com.cappielloantonio.tempo.subsonic.models.Child;
|
||||
import com.cappielloantonio.tempo.subsonic.models.Playlist;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
|
@ -20,7 +21,7 @@ public class PlaylistChooserViewModel extends AndroidViewModel {
|
|||
private final PlaylistRepository playlistRepository;
|
||||
|
||||
private final MutableLiveData<List<Playlist>> playlists = new MutableLiveData<>(null);
|
||||
private Child toAdd;
|
||||
private ArrayList<Child> toAdd;
|
||||
|
||||
public PlaylistChooserViewModel(@NonNull Application application) {
|
||||
super(application);
|
||||
|
|
@ -33,15 +34,15 @@ public class PlaylistChooserViewModel extends AndroidViewModel {
|
|||
return playlists;
|
||||
}
|
||||
|
||||
public void addSongToPlaylist(String playlistId) {
|
||||
playlistRepository.addSongToPlaylist(playlistId, new ArrayList(Collections.singletonList(toAdd.getId())));
|
||||
public void addSongsToPlaylist(String playlistId) {
|
||||
playlistRepository.addSongToPlaylist(playlistId, new ArrayList<>(Lists.transform(toAdd, Child::getId)));
|
||||
}
|
||||
|
||||
public void setSongToAdd(Child song) {
|
||||
toAdd = song;
|
||||
public void setSongsToAdd(ArrayList<Child> songs) {
|
||||
toAdd = songs;
|
||||
}
|
||||
|
||||
public Child getSongToAdd() {
|
||||
public ArrayList<Child> getSongsToAdd() {
|
||||
return toAdd;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import com.cappielloantonio.tempo.repository.SharingRepository;
|
|||
import com.cappielloantonio.tempo.subsonic.models.Child;
|
||||
import com.cappielloantonio.tempo.subsonic.models.Playlist;
|
||||
import com.cappielloantonio.tempo.subsonic.models.Share;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
|
@ -24,7 +25,7 @@ public class PlaylistEditorViewModel extends AndroidViewModel {
|
|||
private final PlaylistRepository playlistRepository;
|
||||
private final SharingRepository sharingRepository;
|
||||
|
||||
private Child toAdd;
|
||||
private ArrayList<Child> toAdd;
|
||||
private Playlist toEdit;
|
||||
|
||||
private MutableLiveData<List<Child>> songLiveList = new MutableLiveData<>();
|
||||
|
|
@ -37,7 +38,7 @@ public class PlaylistEditorViewModel extends AndroidViewModel {
|
|||
}
|
||||
|
||||
public void createPlaylist(String name) {
|
||||
playlistRepository.createPlaylist(null, name, new ArrayList(Collections.singletonList(toAdd.getId())));
|
||||
playlistRepository.createPlaylist(null, name, new ArrayList(Lists.transform(toAdd, Child::getId)));
|
||||
}
|
||||
|
||||
public void updatePlaylist(String name) {
|
||||
|
|
@ -48,12 +49,12 @@ public class PlaylistEditorViewModel extends AndroidViewModel {
|
|||
if (toEdit != null) playlistRepository.deletePlaylist(toEdit.getId());
|
||||
}
|
||||
|
||||
public Child getSongToAdd() {
|
||||
return toAdd;
|
||||
public void setSongsToAdd(ArrayList<Child> songs) {
|
||||
toAdd = songs;
|
||||
}
|
||||
|
||||
public void setSongToAdd(Child song) {
|
||||
this.toAdd = song;
|
||||
public ArrayList<Child> getSongsToAdd() {
|
||||
return toAdd;
|
||||
}
|
||||
|
||||
public Playlist getPlaylistToEdit() {
|
||||
|
|
|
|||
|
|
@ -146,6 +146,19 @@
|
|||
android:paddingBottom="12dp"
|
||||
android:text="@string/album_bottom_sheet_download_all" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/add_to_playlist_text_view"
|
||||
style="@style/LabelMedium"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:clickable="true"
|
||||
android:paddingStart="20dp"
|
||||
android:paddingTop="12dp"
|
||||
android:paddingEnd="20dp"
|
||||
android:paddingBottom="12dp"
|
||||
android:text="@string/album_bottom_sheet_add_to_playlist" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/remove_all_text_view"
|
||||
style="@style/LabelMedium"
|
||||
|
|
|
|||
|
|
@ -6,4 +6,9 @@
|
|||
android:icon="@drawable/ic_file_download"
|
||||
android:title="@string/menu_download_all_button"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_add_to_playlist"
|
||||
android:icon="@drawable/ic_add"
|
||||
android:title="@string/menu_add_to_playlist_button"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
<string name="activity_battery_optimizations_summary">Bitte deaktiviere die Batterieoptimierung, damit die Medienwiedergabe bei ausgeschaltetem Bildschirm richtig funktioniert.</string>
|
||||
<string name="activity_battery_optimizations_title">Batterie Optimierung</string>
|
||||
<string name="activity_info_offline_mode">Offlinebetrieb</string>
|
||||
<string name="album_bottom_sheet_add_to_playlist">Zu Playliste hinzufügen</string>
|
||||
<string name="album_bottom_sheet_add_to_queue">Zur Warteschlange hinzufügen</string>
|
||||
<string name="album_bottom_sheet_download_all">Alle herunterladen</string>
|
||||
<string name="album_bottom_sheet_go_to_artist">Gehe zu Künstler</string>
|
||||
|
|
@ -154,6 +155,7 @@
|
|||
<string name="login_title_expanded">Subsonic Server</string>
|
||||
<string name="media_route_menu_title">Cast</string>
|
||||
<string name="menu_add_button">Hinzufügen</string>
|
||||
<string name="menu_add_to_playlist_button">Zu Playliste hinzufügen</string>
|
||||
<string name="menu_download_all_button">Alle Herunterladen</string>
|
||||
<string name="menu_download_label">Downloads</string>
|
||||
<string name="menu_filter_all">Alle</string>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
<string name="activity_battery_optimizations_summary">Veuillez désactiver les optimisations de la batterie pour permettre la lecture des médias lorsque l\'écran est éteint.</string>
|
||||
<string name="activity_battery_optimizations_title">Optimisations de la batterie</string>
|
||||
<string name="activity_info_offline_mode">Mode hors-ligne</string>
|
||||
<string name="album_bottom_sheet_add_to_playlist">Ajouter à une playlist</string>
|
||||
<string name="album_bottom_sheet_add_to_queue">Ajouter à la file d\'attente</string>
|
||||
<string name="album_bottom_sheet_download_all">Télécharger tout</string>
|
||||
<string name="album_bottom_sheet_go_to_artist">Aller à l\'artiste</string>
|
||||
|
|
@ -133,6 +134,7 @@
|
|||
<string name="login_title_expanded">Serveurs Subsonic</string>
|
||||
<string name="media_route_menu_title">Cast</string>
|
||||
<string name="menu_add_button">Ajouter</string>
|
||||
<string name="menu_add_to_playlist_button">Ajouter à une playlist</string>
|
||||
<string name="menu_download_all_button">Télécharger tout</string>
|
||||
<string name="menu_download_label">Téléchargé</string>
|
||||
<string name="menu_filter_all">Tout</string>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@
|
|||
<string name="activity_battery_optimizations_summary">Per favore, disabilita le ottimizzazioni della batteria per la riproduzione multimediale quando lo schermo è spento.</string>
|
||||
<string name="activity_battery_optimizations_title">Ottimizzazioni della Batteria</string>
|
||||
<string name="activity_info_offline_mode">Modalità offline</string>
|
||||
<string name="album_bottom_sheet_add_to_queue">Aggiungi alla coda</string>
|
||||
<string name="album_bottom_sheet_add_to_playlist">Aggiungi alla playlist</string>
|
||||
<string name="album_bottom_sheet_add_to_queue">Aggiungi alla coda</string>
|
||||
<string name="album_bottom_sheet_download_all">Scarica tutto</string>
|
||||
<string name="album_bottom_sheet_go_to_artist">Vai all\'artista</string>
|
||||
<string name="album_bottom_sheet_instant_mix">Mix istantaneo</string>
|
||||
|
|
@ -156,7 +157,8 @@
|
|||
<string name="login_title_expanded">Server Subsonic</string>
|
||||
<string name="media_route_menu_title">Trasmetti</string>
|
||||
<string name="menu_add_button">Aggiungi</string>
|
||||
<string name="menu_download_all_button">Scarica tutto</string>
|
||||
<string name="menu_add_to_playlist_button">Aggiungi alla playlist</string>
|
||||
<string name="menu_download_all_button">Scarica tutto</string>
|
||||
<string name="menu_download_label">Scarica</string>
|
||||
<string name="menu_filter_all">Tutti</string>
|
||||
<string name="menu_filter_download">Scaricati</string>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
<string name="activity_battery_optimizations_summary">화면이 꺼진 상태에서 음악 재생을 하기 위해서는 배터리 최적화를 비활성화 해주세요.</string>
|
||||
<string name="activity_battery_optimizations_title">배터리 최적화</string>
|
||||
<string name="activity_info_offline_mode">오프라인 모드</string>
|
||||
<string name="album_bottom_sheet_add_to_playlist">플레이리스트에 추가</string>
|
||||
<string name="album_bottom_sheet_add_to_queue">재생목록에 추가</string>
|
||||
<string name="album_bottom_sheet_download_all">모두 다운로드</string>
|
||||
<string name="album_bottom_sheet_go_to_artist">아티스트로 이동</string>
|
||||
|
|
@ -135,6 +136,7 @@
|
|||
<string name="login_title_expanded">Subsonic 서버</string>
|
||||
<string name="media_route_menu_title">Cast</string>
|
||||
<string name="menu_add_button">추가</string>
|
||||
<string name="menu_add_to_playlist_button">플레이리스트에 추가</string>
|
||||
<string name="menu_download_all_button">모두 다운로드</string>
|
||||
<string name="menu_download_label">다운로드</string>
|
||||
<string name="menu_filter_all">모두</string>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
<string name="activity_battery_optimizations_summary">Por favor, desative as otimizações de bateria para a reprodução de mídia enquanto a tela estiver desligada.</string>
|
||||
<string name="activity_battery_optimizations_title">Otimizações de bateria</string>
|
||||
<string name="activity_info_offline_mode">Modo offline</string>
|
||||
<string name="album_bottom_sheet_add_to_playlist">Adicionar a uma playlist</string>
|
||||
<string name="album_bottom_sheet_add_to_queue">Adicionar à fila</string>
|
||||
<string name="album_bottom_sheet_download_all">Baixar todos</string>
|
||||
<string name="album_bottom_sheet_go_to_artist">Ir para o(a) artista</string>
|
||||
|
|
@ -134,6 +135,7 @@
|
|||
<string name="login_title_expanded">Servidores Subsonic</string>
|
||||
<string name="media_route_menu_title">Transmitir</string>
|
||||
<string name="menu_add_button">Adicionar</string>
|
||||
<string name="menu_add_to_playlist_button">Adicionar a uma playlist</string>
|
||||
<string name="menu_download_all_button">Baixar todos</string>
|
||||
<string name="menu_download_label">Download</string>
|
||||
<string name="menu_filter_all">Todos</string>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
<string name="activity_battery_optimizations_summary">Пожалуйста, отключите оптимизацию батареи для воспроизведения мультимедиа при выключенном экране.</string>
|
||||
<string name="activity_battery_optimizations_title">Оптимизация батареи</string>
|
||||
<string name="activity_info_offline_mode">Офлайн-режим</string>
|
||||
<string name="album_bottom_sheet_add_to_playlist">Добавить в плейлист</string>
|
||||
<string name="album_bottom_sheet_add_to_queue">Добавить в очередь</string>
|
||||
<string name="album_bottom_sheet_download_all">Скачать все</string>
|
||||
<string name="album_bottom_sheet_go_to_artist">Перейти к исполнителю</string>
|
||||
|
|
@ -153,6 +154,7 @@
|
|||
<string name="login_title_expanded">Subsonic серверы</string>
|
||||
<string name="media_route_menu_title">Cast</string>
|
||||
<string name="menu_add_button">Добавить</string>
|
||||
<string name="menu_add_to_playlist_button">Добавить в плейлист</string>
|
||||
<string name="menu_download_all_button">Скачать все</string>
|
||||
<string name="menu_download_label">Скачать</string>
|
||||
<string name="menu_filter_all">Все</string>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
<string name="activity_battery_optimizations_summary">请禁用针对媒体锁屏播放的电池优化。</string>
|
||||
<string name="activity_battery_optimizations_title">电池优化</string>
|
||||
<string name="activity_info_offline_mode">离线模式</string>
|
||||
<string name="album_bottom_sheet_add_to_playlist">添加到播放列表</string>
|
||||
<string name="album_bottom_sheet_add_to_queue">添加到队列</string>
|
||||
<string name="album_bottom_sheet_download_all">全部下载</string>
|
||||
<string name="album_bottom_sheet_go_to_artist">查看该艺术家</string>
|
||||
|
|
@ -137,6 +138,7 @@
|
|||
<string name="login_title_expanded">Subsonic 服务器</string>
|
||||
<string name="media_route_menu_title">投送</string>
|
||||
<string name="menu_add_button">添加</string>
|
||||
<string name="menu_add_to_playlist_button">添加到播放列表</string>
|
||||
<string name="menu_download_all_button">全部下载</string>
|
||||
<string name="menu_download_label">下载</string>
|
||||
<string name="menu_filter_all">全部</string>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
<string name="activity_battery_optimizations_summary">Please disable battery optimizations for media playback while the screen is off.</string>
|
||||
<string name="activity_battery_optimizations_title">Battery Optimizations</string>
|
||||
<string name="activity_info_offline_mode">Offline mode</string>
|
||||
<string name="album_bottom_sheet_add_to_playlist">Add to playlist</string>
|
||||
<string name="album_bottom_sheet_add_to_queue">Add to queue</string>
|
||||
<string name="album_bottom_sheet_download_all">Download all</string>
|
||||
<string name="album_bottom_sheet_go_to_artist">Go to artist</string>
|
||||
|
|
@ -158,6 +159,7 @@
|
|||
<string name="login_title_expanded">Subsonic servers</string>
|
||||
<string name="media_route_menu_title">Cast</string>
|
||||
<string name="menu_add_button">Add</string>
|
||||
<string name="menu_add_to_playlist_button">Add to playlist</string>
|
||||
<string name="menu_download_all_button">Download all</string>
|
||||
<string name="menu_download_label">Download</string>
|
||||
<string name="menu_filter_all">All</string>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue