From aeba93dea851c706b7877b6f0312ee6d2aaa140f Mon Sep 17 00:00:00 2001 From: musicsd <66354118+musicsd@users.noreply.github.com> Date: Mon, 21 Dec 2020 11:06:06 +0000 Subject: [PATCH 0001/1603] Update Persian translation --- app/src/main/res/values-fa-rIR/strings.xml | 244 ++++++++++++--------- 1 file changed, 135 insertions(+), 109 deletions(-) diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index b599615cf..6af4a891b 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -1,22 +1,22 @@ - + - About %s + درباره %s Team, social links Accent color The theme accent color, defaults to purple - About + درباره Add to favorites Add to playing queue Add to playlist Clear playing queue Cycle repeat mode - Delete - Delete from device + هذف + هذف از دستگاه Details - Go to album - Go to artist + به سوی جُنگ + به سوی هنرمند Go to genre Go to start directory Grant @@ -24,23 +24,23 @@ Grid size (land) New playlist Next - Play - Play all + پخش + پخش همه Play next - Play/Pause - Previous + پخش/درنگ + پیشین Remove from favorites Remove from playing queue - Remove from playlist + هذف از پهرست Rename Save playing queue Scan - Search - Start + جستجو + آغاز Set as ringtone Set as start directory - "Settings" - Share + "ساماندهی" + همرسانی Shuffle all Shuffle playlist Sleep timer @@ -51,25 +51,25 @@ Adaptive - Add - "Add to playlist" + افزودن + "افزودن به پهرست" "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album + جُنگ - Song - Songs + آهنگ + آهنگ - Album artist + هنرمند جُنگ - Albums + جُنگ‌ها - Album - Albums + جُنگ + جُنگ Always @@ -77,20 +77,20 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text - Artist + هنرمند - Artists + هنرمندان Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto + خودکار Biography @@ -106,7 +106,7 @@ Issues are not enabled for the selected repository. Please contact the app developer. An unexpected error occurred. Please contact the app developer. Wrong username or password - Issue + جستار Send manually Please enter an issue description Please enter your valid GitHub password @@ -121,6 +121,7 @@ Card Colored Card + Square Card Card Carousel effect on the now playing screen @@ -140,9 +141,9 @@ Clear blacklist Clear queue - Color + رنگ - Colors + رنگ‌ها Composer @@ -153,7 +154,7 @@ Could not restore purchase. Could not scan %d files. - Create + ساخت Created playlist %1$s. @@ -163,10 +164,10 @@ Kinda Dark - Delete playlist + هذف پهرست %1$s?]]> Delete playlists - Delete song + هذف آهنگ %1$s?]]> Delete songs %1$d playlists?]]> @@ -178,7 +179,7 @@ Description - Device info + درباره دستگاه Allow Retro Music to modify audio settings Set ringtone @@ -191,9 +192,11 @@ Buy me a: + Done + Drive mode - Empty + تهی Equalizer @@ -207,13 +210,13 @@ Flat - Folders + پوشه‌ها - Follow system + پیرو سامانه - For you + برای شما - Free + رایگان Full Full card @@ -227,21 +230,25 @@ Fork the project on GitHub - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 + Gradient + + ۱ + ۲ + ۳ + ۴ + ۵ + ۶ + ۷ + ۸ Grid style + Need more help? + Hinge - History + پیشینه - Home + خانه Horizontal flip @@ -249,17 +256,22 @@ Gradient image Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + اینستاگرام Share your Retro Music setup to showcase on Instagram - Keyboard + کلیدبرگ Bitrate - Format - File name + قالب + نام پرونده File path - Size + اندازه More from %s Sampling rate Length @@ -271,7 +283,7 @@ Library categories - Licenses + گواهینامه Clearly White @@ -281,7 +293,7 @@ Loading products… - Login + ورود Lyrics @@ -292,12 +304,12 @@ Error Permission error - Name - Most played + نام + بیشترین پخش - Never + هرگز - New playlist + پهرست نو %s is the new start directory. Next Song @@ -318,11 +330,12 @@ Normal lyrics %s is not listed in the media store.]]> + Not recently played Nothing to scan. Nothing to see - Notification + آگهداد Customize the notification style Now playing @@ -334,15 +347,17 @@ Advanced testing features - Other + دیگر - Password + گذرواژه - Past 3 months + ۳ ماه گذشته Peak Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. @@ -357,33 +372,34 @@ Plain The playing notification provides actions for play/pause etc. - Playing notification + آگهداد پخش - Playlist is empty - Playlist name + پهرست تهی‌ست + نام پهرست - Playlists + پهرست‌ها Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length Filter song duration - Advanced + پیشرفته Album style Audio Blacklist Controls - Theme + پوسته Images - Library + کتابخانه Lockscreen Playlists Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app Pause on zero Keep in mind that enabling this feature may affect battery life Keep the screen on - Select language + گزینش زبان Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -408,7 +424,8 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover - Album cover theme + Navigate by Album Artist + پوسته جلد آلبوم Album cover skip Colored app shortcuts Reduce volume on focus loss @@ -418,24 +435,25 @@ Blur album cover Classic notification design Adaptive color - Colored notification + آگهداد رنگی Desaturated color Show now playing screen Extra controls - Song info + درباره آهنگ Gapless playback - App theme + پوسته برنامه + Album grid Artist grid Banner Ignore Media Store covers Last added playlist interval Fullscreen controls Now playing theme - Open source licences + گواهینامه‌های بُن‌باز Tab titles mode Carousel effect Fullscreen app - Auto-play + پخش خودکار Shuffle mode Volume controls @@ -454,8 +472,8 @@ Recent albums Recent artists - Remove - Remove cover + هذف + هذف جلد Remove from blacklist Remove song from playlist %1$s from the playlist?]]> @@ -465,9 +483,9 @@ Rename playlist Report an issue - Report bug + گزارش ایراد - Reset + بازنشانی Reset artist image Restore @@ -480,6 +498,9 @@ Retro Music Player Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s Can\'t get SAF URI @@ -493,7 +514,7 @@ Tap \'select\' button at the bottom of the screen File write failed: %s - Save + اندوختن Save as file @@ -503,20 +524,21 @@ Saving changes - Scan media + پویش رسانه Scanned %1$d of %2$d files. Scrobbles - Select all + گزینش همه - Selected + گزیده شد Set Set artist image - Share app + همرسانی برنامه + Share the app with your friends and family Share to Stories Shuffle @@ -527,21 +549,23 @@ Sleep timer set for %d minutes from now. Social - Share story + همرسانی داستان - Song + آهنگ Song duration - Songs + آهنگ‌ها Sort order Ascending - Album - Artist + جُنگ + هنرمند Composer Date added Date modified - Year + Song count + Song count desc + سال Descending Sorry! Your device doesn\'t support speech input @@ -560,23 +584,23 @@ Synced lyrics - Telegram + تلگرام Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! + سپاس! The audio file - This month - This week - This year + این ماه + این هفته + این سال Tiny Tiny card Title - Today + امروز Top albums Top artists @@ -584,12 +608,12 @@ "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate + ترگمان Help us translate the app to your language Try Retro Music Premium - Twitter + توییتر Share your design with Retro Music Unlabeled @@ -602,9 +626,11 @@ Updating… - Username + نام کاربر - Version + نام کاربری + + نگارش Vertical flip @@ -612,19 +638,19 @@ Web search - Welcome, + خوش آمدید، What do you want to share? What\'s New - Window + پنجره Rounded corners Set %1$s as your ringtone. - %1$d selected + %1$d گزیده شد - Year + سال You have to select at least one category. You will be forwarded to the issue tracker website. From 9a6aa2f1fe305f722d73f82b2424ba3ef6f4136f Mon Sep 17 00:00:00 2001 From: musicsd <66354118+musicsd@users.noreply.github.com> Date: Sun, 27 Dec 2020 11:44:22 +0000 Subject: [PATCH 0002/1603] Update Persian translation --- app/src/main/res/values-fa-rIR/strings.xml | 78 +++++++++++----------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 6af4a891b..8ffd470c7 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -1,4 +1,4 @@ - + درباره %s Team, social links @@ -9,20 +9,20 @@ درباره Add to favorites Add to playing queue - Add to playlist + افزودن به پهرست Clear playing queue Cycle repeat mode هذف - هذف از دستگاه + Delete from device Details - به سوی جُنگ - به سوی هنرمند + بسوی جُنگ + بسوی هنرمند Go to genre Go to start directory Grant Grid size Grid size (land) - New playlist + پهرست نو Next پخش پخش همه @@ -31,15 +31,15 @@ پیشین Remove from favorites Remove from playing queue - هذف از پهرست + Remove from playlist Rename Save playing queue - Scan + پویش جستجو آغاز Set as ringtone Set as start directory - "ساماندهی" + ساماندهی همرسانی Shuffle all Shuffle playlist @@ -52,7 +52,7 @@ Adaptive افزودن - "افزودن به پهرست" + افزودن به پهرست "Added 1 title to the playing queue." Added %1$d titles to the playing queue. @@ -64,9 +64,9 @@ آهنگ - هنرمند جُنگ + Album artist - جُنگ‌ها + Albums جُنگ جُنگ @@ -85,12 +85,12 @@ هنرمند - هنرمندان + Artists Audio focus denied. Change the sound settings and adjust the equalizer controls - خودکار + Auto Biography @@ -106,7 +106,7 @@ Issues are not enabled for the selected repository. Please contact the app developer. An unexpected error occurred. Please contact the app developer. Wrong username or password - جستار + Issue Send manually Please enter an issue description Please enter your valid GitHub password @@ -141,9 +141,9 @@ Clear blacklist Clear queue - رنگ + Color - رنگ‌ها + Colors Composer @@ -154,7 +154,7 @@ Could not restore purchase. Could not scan %d files. - ساخت + Create Created playlist %1$s. @@ -164,10 +164,10 @@ Kinda Dark - هذف پهرست + Delete playlist %1$s?]]> Delete playlists - هذف آهنگ + Delete song %1$s?]]> Delete songs %1$d playlists?]]> @@ -196,7 +196,7 @@ Drive mode - تهی + Empty Equalizer @@ -252,7 +252,7 @@ Horizontal flip - Image + نگاره Gradient image Change artist image download settings @@ -283,7 +283,7 @@ Library categories - گواهینامه + گواهینامه‌ها Clearly White @@ -293,7 +293,7 @@ Loading products… - ورود + Login Lyrics @@ -335,7 +335,7 @@ Nothing to scan. Nothing to see - آگهداد + Notification Customize the notification style Now playing @@ -366,13 +366,13 @@ Pick from local storage - Pinterest + پینترست Follow Pinterest page for Retro Music design inspiration Plain The playing notification provides actions for play/pause etc. - آگهداد پخش + Playing notification پهرست تهی‌ست نام پهرست @@ -385,7 +385,7 @@ Filter song duration پیشرفته Album style - Audio + آوا Blacklist Controls پوسته @@ -425,7 +425,7 @@ If enough space is available, show volume controls in the now playing screen Show album cover Navigate by Album Artist - پوسته جلد آلبوم + پوسته جلد جُنگ Album cover skip Colored app shortcuts Reduce volume on focus loss @@ -435,11 +435,11 @@ Blur album cover Classic notification design Adaptive color - آگهداد رنگی + Colored notification Desaturated color Show now playing screen Extra controls - درباره آهنگ + Song info Gapless playback پوسته برنامه Album grid @@ -453,7 +453,7 @@ Tab titles mode Carousel effect Fullscreen app - پخش خودکار + Auto-play Shuffle mode Volume controls @@ -532,7 +532,7 @@ گزینش همه - گزیده شد + Selected Set Set artist image @@ -549,7 +549,7 @@ Sleep timer set for %d minutes from now. Social - همرسانی داستان + Share story آهنگ Song duration @@ -595,7 +595,7 @@ این هفته این سال - Tiny + کوچک Tiny card Title @@ -626,11 +626,11 @@ Updating… - نام کاربر + User Name - نام کاربری + Username - نگارش + Version Vertical flip @@ -648,7 +648,7 @@ Rounded corners Set %1$s as your ringtone. - %1$d گزیده شد + %1$d selected سال From 4d26c414a5151c60ca79b0b9e6c2e11adda7beee Mon Sep 17 00:00:00 2001 From: Daxxxis Date: Sun, 27 Dec 2020 15:12:15 +0100 Subject: [PATCH 0003/1603] Update Polsih translation --- app/src/main/res/values-pl-rPL/strings.xml | 250 ++++++++++----------- 1 file changed, 125 insertions(+), 125 deletions(-) diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index b1d723c01..ab0e03fb8 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -3,8 +3,8 @@ O %s Zespół, media społecznościowe - Kolor akcentu - Kolor akcentu motywu, domyślnie morski + Kolor wiodący + Kolor wiodący motywu, domyślnie morski O aplikacji Dodaj do ulubionych @@ -16,9 +16,9 @@ Usuń z urządzenia Szczegóły Przejdź do albumu - Przejdź do artysty + Przejdź do wykonawcy Idź do gatunku - Przejdź do katalogu startowego + Przejdź do folderu startowego Przyznaj Rozmiar siatki Rozmiar siatki (poziomo) @@ -27,10 +27,10 @@ Odtwarzaj Odtwórz wszystko Odtwarzaj następne - Odtwarzanie/Pauza + Odtwórz/Zatrzymaj Poprzedni Usuń z ulubionych - Usuń z kolejki odtwarzania + Usuń z kolejki Usuń z playlisty Zmień nazwę Zapisz kolejkę @@ -38,7 +38,7 @@ Szukaj Rozpocznij Ustaw jako dzwonek - Ustaw jako katalog startowy + Ustaw jako folder startowy "Ustawienia" Udostępnij Losowo wszystko @@ -54,7 +54,7 @@ Dodaj "Dodaj do playlisty" - "Dodano 1 tytuł do kolejki odtwarzania" + "Dodano tytuł do kolejki odtwarzania" Dodano %1$d tytułów do kolejki Album @@ -62,34 +62,34 @@ Utwór Utwory - Utwory - Utwory + Utworów + Utworów - Artysta albumu + Wykonawca albumu Albumy Album Albumy - Albumy - Albumy + Albumów + Albumów Zawsze - Hej sprawdź ten fajny odtwarzacz muzyki na: https://play.google.com/store/apps/details?id=%s + Hej, sprawdź ten fajny odtwarzacz muzyki na: https://play.google.com/store/apps/details?id=%s Losowo Najczęściej odtwarzane utwory Duży Karta Klasyczny - mały + Mały Tekst - Artysta + Wykonawca - Artyści + Wykonawcy Odrzucono fokus dźwiękowy. Dostosuj ustawienia dźwięku i equalizera @@ -106,18 +106,18 @@ Rozmyta Karta Nie udało się wysłać raportu - Niepoprawny token dostępu. Proszę się skontaktować z twórcą aplikacji. - Problemy nie zostały włączone dla wybranego repozytorium. Proszę się skontaktować z twórcą aplikacji. - Wystąpił nieoczekiwany błąd. Proszę skontaktować się z twórcą aplikacji. + Niepoprawny token dostępu. Skontaktuj się z twórcą aplikacji. + Problemy nie zostały włączone dla wybranego repozytorium. Skontaktuj się z twórcą aplikacji. + Wystąpił nieoczekiwany błąd. Skontaktuj się z twórcą aplikacji. Zła nazwa użytkownika lub hasło Problem Wyślij ręcznie - Proszę opisać problemu - Proszę wpisać poprawne hasło GitHub - Proszę wpisać tytuł problemu - Proszę wpisać poprawną nazwę użytkownika GitHub - Wystąpił nieoczekiwany błąd. Wyczyść dane podręczne lub - jeśli błąd pojawi się ponownie - wyślij nam maila. - Wyślij przez konto GitHub + Opisz problem + Wpisz poprawne hasło serwisu GitHub + Wpisz tytuł problemu + Wpisz poprawną nazwę użytkownika serwisu GitHub + Wystąpił nieoczekiwany błąd. Wyczyść dane podręczne aplikacji, jeżeli błąd pojawi się ponownie - wyślij nam maila. + Wyślij używając konta serwisu GitHub Kup teraz @@ -134,7 +134,7 @@ Lista zmian Lista zmian zarządzana z aplikacji Telegram - Okręg + Okrąg Okrągły @@ -152,29 +152,29 @@ Skopiowano informacje o urządzeniu do schowka - Nie mo\u017cna utworzy\u0107 playlisty. - "Nie mo\u017cna pobra\u0107 dopasowanej ok\u0142adki albumu" - Nie można przywrócić zakupów. - Nie można przeskanować %d plików. + Nie udało się utworzyć playlisty. + "Nie udało się pobrać pasującej okładki albumu" + Nie udało się przywrócić zakupu. + Nie udało się przeskanować %d plików. Utwórz Stworzono playlistę %1$s. - Członkowie i współpracownicy + Twórcy Aktualnie odtwarzane %1$s wykonawcy %2$s. Dość ciemny Usuń playlistę - %1$s?]]> - Usuń listy odtwarzania + %1$s?]]> + Usuń playlisty Usuń utwór %1$s?]]> Usuń utwory - %1$d ?]]> - %1$d ?]]> + %1$d playlisty?]]> + %1$d utwory?]]> Usunięto %1$d utworów. @@ -213,7 +213,7 @@ Foldery - Śledź system + Zgodnie z motywem systemu Dla Ciebie @@ -249,17 +249,17 @@ Obrót poziomy - Obraz - Obraz gradientowy - Zmień ustawienia pobierania obrazka wykonawcy + Grafika + Grafika gradientowy + Zmień ustawienia pobierania grafiki wykonawcy - Dodano %1$d utworów do listy odtwarzania %2$s. + Dodano %1$d utworów do playlisty %2$s. - Udostępnij swój setup aplikacji Retro Music na Instagramie + Udostępnij swój desigm aplikacji Retro Music na Instagramie Klawiatura - Przepływność + Jakość Typ Nazwa pliku Ścieżka pliku @@ -268,7 +268,7 @@ Częstotliwość próbkowania Długość - Wszystkie podpisy + Podpisano Ostatnio dodane Ostatni utwór @@ -281,7 +281,7 @@ Słuchacze - Listowanie plików + Wyświetlanie plików Ładowanie... @@ -291,30 +291,30 @@ Stworzone z ❤️ w Indiach - Materialistyczny + Material Błąd Błąd uprawnień - Moje imię + Imię Najczęściej odtwarzane Nigdy - Nowa lista odtwarzania - %s jest nowym katalogiem startowym. + Nowa playlista + %s jest nowym folderem startowym. Następny utwór Brak albumów - Brak artystów + Brak wykonawców "Odtwórz jakiś utwór i spróbuj ponownie." - Nie znaleziono korektora dźwięku. + Nie znaleziono korektora dźwięku Brak gatunków Nie znaleziono tekstu utworu Brak odtwarzanych utworów - Brak list odtwarzania - Nie znaleziono zakupów. + Brak playlist + Nie znaleziono zakupu. Brak wyników. Brak utworów @@ -323,16 +323,16 @@ %s nie znajduje się w magazynie multimediów.]]> - Nic do skanowania. - Nic do zobaczenia + Brak elementów do przeskanowania. + Pusto Powiadomienie - Zmień wygląd powiadomień + Dostosuj wygląd powiadomień Teraz odtwarzane - Kolejka teraz odtwarzanych - Dostosuj panel aktualnie odtwarzanych - 9+ motywów Teraz odtwarzane + Kolejka odtwarzanych + Dostosuj odtwarzacz + 9+ motywów odtwarzacza Tylko przez Wi-Fi @@ -342,7 +342,7 @@ Hasło - Przez 3 miesiące + Ostatnie 3 miesiące Szczyt @@ -351,26 +351,26 @@ Odmowa dostępu. Personalizuj - Dostosuj interfejs \"Teraz odtwarzane\" + Dostosuj interfejs i odtwarzacz Wybierz z pamięci lokalnej Pinterest - Śledź stronę Retro Music na Pintrest po więcej inspiracji + Śledź stronę Retro Music na Pintrescie po więcej inspiracji Wyraźny - Powiadomienie odtwarzania pokazuje przyciski play/pauza itp. + Powiadomienie odtwarzania pokazuje przyciski odtwórz/zatrzymaj itp. Powiadomienie odtwarzania - Lista odtwarzania jest pusta - Nazwa listy odtwarzania + Playlista jest pusta + Nazwa playlisty - Listy odtwarzania + Playlisty - Ilość rozmycia dla motywów, mniejsza ilość jest szybsza - Wartość rozmycia - Filtruj piosenki według długości + Poziom rozmycia dla motywów; mniej znaczy szybciej + Poziom rozmycia + Filtruj utwory według długości Filtruj długość utworów Zaawansowane Styl okładki @@ -378,64 +378,64 @@ Czarna lista Przyciski kontrolne Motyw - Obrazki + Grafiki Biblioteka Ekran blokady - Listy odtwarzania - Zatrzymuje odtwarzanie przy zerowym poziomie głośności i wznawia po jego zwiększeniu. Kiedy zwiększysz głośność, odtwarzanie rozpocznie się nawet gdy jesteś poza aplikacją + Playlisty + Zatrzymuje odtwarzanie po wyciszeniu urządzenia i wznawia je po jego odciszeniu. Kiedy zwiększysz głośność, odtwarzanie rozpocznie się nawet gdy jesteś poza aplikacją Zatrzymaj przy wyłączonym dźwięku Ta opcja może mieć wpływ na zużycie baterii Pozostaw ekran włączony Wybierz język - Używaj okładki aktualnie odtwarzanego albumu jako tapety ekranu blokady + Używaj okładki aktualnie odtwarzanego albumu jako tła ekranu blokady Zmniejsz głośność kiedy dostajesz powiadomienia - Zawartość czarnej listy jest ukryta w twojej bibliotece. - Rozpocznij odtwarzanie po podłączeniu urządzenia bluetooth - Rozmazuj okładkę albumu na ekranie blokady. Może powodować problemy z aplikacjami i widżetami innych firm - Efekt karuzeli na okładce obecnie odtwarzanego albumu. Zwróć uwagę, że motyw karty i rozmycia nie zadziała - Użyj klasycznego wyglądu powiadomień. - Tło oraz kolor przycisku sterującego zmieniają się zgodnie z okładką albumu na ekranie odtwarzacza - Koloruje skróty aplikacji w kolorze akcentującym. Za każdym razem, gdy zmieniasz kolor, włącz tę opcję, aby zmiany odniosły skutek. - "Koloruje powiadomienie dominuj\u0105cym kolorem ok\u0142adki albumu." - Zgodnie z zaleceniami Material Design, w trybie ciemnym kolory powinny być mniej nasycone - Kliknięcie powiadomienia pokaże teraz odtwarzane zamiast ekranu głównego - Dodaj ekstra przyciski do małego odtwarzacza - Pokaż dodatkowe informacje o utworze, takie jak format pliku, częstość próbkowania i częstotliwość + Foldery zawarte na czarnej listy są ukryte w Twojej bibliotece. + Rozpocznij odtwarzanie po podłączeniu urządzenia Bluetooth + Rozmyj okładkę albumu na ekranie blokady. Może powodować problemy z aplikacjami i widżetami innych firm + Efekt karuzeli na okładce obecnie odtwarzanego albumu. Motywy karty i rozmycie nie będą dostępne + Użyj klasycznego wyglądu powiadomień + Tło oraz kolory przycisków sterujących będą zmieniać się zgodnie z okładką albumu na ekranie odtwarzacza + Koloruje skróty aplikacji w kolorze wiodącym. Za każdym razem, gdy zmieniasz kolor, włącz tę opcję, aby zmiany odniosły skutek. + "Koloruje powiadomienie dominującym kolorem okładki albumu." + Podążaj za zaleceniami Material Design; w trybie ciemnym kolory powinny być mniej nasycone + Kliknięcie powiadomienia pokaże odtwarzacz zamiast ekranu głównego + Dodaj dodatkowe przyciski do miniodtwarzacza + Pokaż dodatkowe informacje o utworze, takie jak format pliku, próbkowanie i jakość "Może powodować problemy z odtwarzaniem na niektórych urządzeniach." - Przełącz styl banera strony głównej + Pokaż lub ukryj baner ekranu głównego Może zwiększyć jakość okładki albumu, ale powoduje spowolnienie ładowania obrazu. Włącz tę opcję tylko jeśli masz problemy z okładkami o niskiej rozdzielczości. - Skonfiguruj widoczność i kolejność kategorii w bibliotece. - Sterowanie Retro na zablokowanym ekranie. - Szczegóły licencji oprogramowania open source + Dostosuj widoczność i kolejność kategorii bibliotek. + Użyj niestandardowych przycisków kontroli na ekranie blokady + Szczegóły licencji oprogramowania typu open source Tryb imersji - Zacznij odtwarzanie po podłączanie zestawu słuchawkowego + Rozpocznij odtwarzanie po podłączeniu zestawu słuchawkowego Odtwarzanie losowe zostanie wyłączone podczas odtwarzania nowej listy utworów - Włącz sterowanie głośnością na ekranie \"teraz odtwarzane\" + Pokaż sterowanie głośnością w odtwarzaczu, gdy jest wystarczająco wolnego miejsca Pokaż okładkę albumu Wygląd okładki albumu Przesuwanie okładki albumu Kolorowe skróty aplikacji Zmniejsz głośność przy braku skupienia - Automatycznie pobierz obrazki wykonawców + Automatycznie pobierz grafiki wykonawców Czarna lista Odtwarzanie przez Bluetooth - Rozmaż okładkę albumu + Rozmyj okładkę albumu Klasyczny wygląd powiadomień Kolor adaptacyjny Kolorowe powiadomienia Mniej nasycony kolor Wyświetl teraz odtwarzane - Dodatkowe sterowanie + Dodatkowe przyciski kontroli Informacje o utworze Odtwarzanie bez przerw - Motyw główny - Siatka wykonawców strony głównej + Motyw aplikacji + Siatka wykonawców Baner strony głównej Ignoruj okładki z Media Store - Ostatnio dodany interwał listy odtwarzania - Sterowanie pełno ekranowe - Wygląd - Licencje Open Source + Interwał ostatnio dodanych playlist + Sterowanie pełnoekranowe + Wyglądodtwarzacza + Licencje typu Open Source Wygląd tytułów kart Efekt karuzeli Aplikacja pełnoekranowa @@ -444,7 +444,7 @@ Sterowanie głośnością Pro - Efekt karuzeli, kolorowe motywy i wiele więcej... + Efekt karuzeli, tryb czarny i wiele więcej... Profil @@ -461,18 +461,18 @@ Usuń Usuń okładkę Usuń z czarnej listy - Usuń utwór z listy odtwarzania - %1$s z listy odtwarzania?]]> - Usuń te utwory z listy odtwarzania - %1$d z listy odtwarzania?]]> + Usuń utwór z playlisty + %1$s z playlisty?]]> + Usuń utwory z playlisty + %1$d z playlisty?]]> - Zmień nazwę listy odtwarzania + Zmień nazwę playlisty Zgłoś problem Zgłoś błąd Zresetuj - Zresetuj obrazek wykonawcy + Zresetuj grafikę wykonawcy Przywróć @@ -491,7 +491,7 @@ Włącz \'Pokaż kartę SD\' w menu przeciążenia %s wymaga dostępu do karty SD - Musisz wybrać katalog główny karty SD + Wybierz folder główny karty SD Wybierz kartę SD w panelu nawigacji Nie otwieraj żadnych podfolderów Dotknij przycisku \'Wybierz\' u dołu ekranu @@ -503,13 +503,13 @@ Zapisz jako plik Zapisz jako - Zapisz listę odtwarzania do %s. + Zapisz playlistę do %s. Zapisywanie zmian Skanuj media - Zeskanowano %1$d z plików %2$d. + Przeskanowano %1$d z plików %2$d. Scrobble @@ -518,10 +518,10 @@ Zaznaczone Ustaw - Ustaw obrazek wykonawcy + Ustaw grafikę wykonawcy Udostępnij aplikację - Podziel się z opowieściami + Udostępnik jako Stories Losowo @@ -538,17 +538,17 @@ Utwory - Porządek sortowania + Sortowanie Rosnąco Album - Artysta + Wykonawca Kompozytor - Dane + Data dodania Data modyfikacji Rok Malejąco - Przepraszamy! Twoje urządzenie nie obsługuje wprowadzania głosowego + Twoje urządzenie nie obsługuje wprowadzania głosowego Przeszukaj swoją bibliotekę Stos @@ -565,11 +565,11 @@ Telegram - Dołącz do grupy Telegram, aby zgłosić błędy, zasugerować zmiany i inne + Dołącz do grupy Telegram, aby zgłosić błędy lub zasugerować zmiany Dziękuję! - Pliki dźwiękowy + Plik dźwiękowy Ten miesiąc Ten tydzień @@ -583,13 +583,13 @@ Dzisiaj Najczęściej odtwarzane albumy - Najczęściej odtwarzani artyści + Najczęściej odtwarzani wykonawcy "Ścieżka (2 dla ścieżki 2 lub 3004 dla ścieżki CD3 4)" Numer utworu Przetłumacz - Pomóż nam tłumaczyć aplikację na swój język + Pomóż nam przetłumaczyć aplikację na swój język Wypróbuj Retro Music Premium @@ -598,13 +598,13 @@ Niepodpisane - Nie mo\u017cna odtworzy\u0107 utworu. + Nie można odtworzyć utworu. Następne - Zaktualizuj obrazek + Zaktualizuj grafikę - Aktualizowanie... + Aktualizowanie… Nazwa użytkownika @@ -630,8 +630,8 @@ Rok - Musisz zaznaczyć przynajmniej jedną kategorię - Będziesz przekierowany do strony ze zgłoszeniami. + Zaznacz przynajmniej jedną kategorię + Zostaniesz przekierowany do strony ze zgłoszeniami. Informacje o twoim koncie są używane tylko do autoryzacji. From 3385b96615b0b28bc33a70b8f66f25c398c1afd1 Mon Sep 17 00:00:00 2001 From: musicsd <66354118+musicsd@users.noreply.github.com> Date: Sun, 27 Dec 2020 19:30:08 +0000 Subject: [PATCH 0004/1603] Update Persian translation --- app/src/main/res/values-fa-rIR/strings.xml | 90 ++++++++-------------- 1 file changed, 32 insertions(+), 58 deletions(-) diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 8ffd470c7..d024fa576 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -1,4 +1,4 @@ - + درباره %s Team, social links @@ -13,12 +13,12 @@ Clear playing queue Cycle repeat mode هذف - Delete from device + هذف از دستگاه Details بسوی جُنگ بسوی هنرمند Go to genre - Go to start directory + بسوی شاخه آغازین Grant Grid size Grid size (land) @@ -31,7 +31,7 @@ پیشین Remove from favorites Remove from playing queue - Remove from playlist + هذف از پهرست Rename Save playing queue پویش @@ -39,7 +39,7 @@ آغاز Set as ringtone Set as start directory - ساماندهی + "ساماندهی" همرسانی Shuffle all Shuffle playlist @@ -52,7 +52,7 @@ Adaptive افزودن - افزودن به پهرست + "افزودن به پهرست" "Added 1 title to the playing queue." Added %1$d titles to the playing queue. @@ -64,9 +64,9 @@ آهنگ - Album artist + هنرمند جُنگ - Albums + جُنگ‌ها جُنگ جُنگ @@ -77,20 +77,20 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text هنرمند - Artists + هنرمندان Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto + خودکار Biography @@ -121,7 +121,6 @@ Card Colored Card - Square Card Card Carousel effect on the now playing screen @@ -137,13 +136,13 @@ Classic - Clear + زدایش Clear blacklist Clear queue - Color + رنگ - Colors + رنگ‌ها Composer @@ -154,7 +153,7 @@ Could not restore purchase. Could not scan %d files. - Create + ساختن Created playlist %1$s. @@ -164,12 +163,12 @@ Kinda Dark - Delete playlist + هذف پهرست %1$s?]]> - Delete playlists - Delete song + هذف پهرست‌ها + هذف آهنگ %1$s?]]> - Delete songs + هذف آهنگ‌ها %1$d playlists?]]> %1$d songs?]]> @@ -192,11 +191,9 @@ Buy me a: - Done + شیوه رانندگی - Drive mode - - Empty + تهی Equalizer @@ -230,8 +227,6 @@ Fork the project on GitHub - Gradient - ۱ ۲ ۳ @@ -242,8 +237,6 @@ ۸ Grid style - Need more help? - Hinge پیشینه @@ -252,17 +245,12 @@ Horizontal flip - نگاره + Image Gradient image Change artist image download settings - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. - Inserted %1$d songs into the playlist %2$s. - اینستاگرام Share your Retro Music setup to showcase on Instagram کلیدبرگ @@ -272,7 +260,7 @@ نام پرونده File path اندازه - More from %s + بیشتر از %s Sampling rate Length @@ -301,7 +289,7 @@ Material - Error + کژی Permission error نام @@ -323,19 +311,18 @@ No songs playing You have no playlists No purchase found. - No results + بی هیچ دستاورد You have no songs Normal Normal lyrics %s is not listed in the media store.]]> - Not recently played Nothing to scan. Nothing to see - Notification + آگهداد Customize the notification style Now playing @@ -356,8 +343,6 @@ Peak Permission to access external storage denied. - The app needs permission to access your device storage for playing music - Storage Access Permissions denied. @@ -390,16 +375,15 @@ Controls پوسته Images - کتابخانه + Library Lockscreen - Playlists + پهرست‌ها Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app - Pause on zero + درنگ در صفر Keep in mind that enabling this feature may affect battery life Keep the screen on گزینش زبان Use the currently playing song album cover as the lockscreen wallpaper - Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -424,7 +408,6 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover - Navigate by Album Artist پوسته جلد جُنگ Album cover skip Colored app shortcuts @@ -441,8 +424,7 @@ Extra controls Song info Gapless playback - پوسته برنامه - Album grid + App theme Artist grid Banner Ignore Media Store covers @@ -453,7 +435,7 @@ Tab titles mode Carousel effect Fullscreen app - Auto-play + پخش خودکار Shuffle mode Volume controls @@ -498,9 +480,6 @@ Retro Music Player Retro Music Pro - The app needs permission to access your device settings in order to set music as Ringtone - Ringtone - File delete failed: %s Can\'t get SAF URI @@ -538,7 +517,6 @@ Set artist image همرسانی برنامه - Share the app with your friends and family Share to Stories Shuffle @@ -563,8 +541,6 @@ Composer Date added Date modified - Song count - Song count desc سال Descending @@ -626,8 +602,6 @@ Updating… - User Name - Username Version From d38f1bb771e0767d383c1272d5d5ea9bb632c46d Mon Sep 17 00:00:00 2001 From: Wongsakorn1997 <77884809+Wongsakorn1997@users.noreply.github.com> Date: Sat, 23 Jan 2021 20:17:59 +0700 Subject: [PATCH 0005/1603] Thai lanuage add --- app/src/main/res/values-th-rTH/strings.xml | 527 +++++++++++++++++++++ 1 file changed, 527 insertions(+) create mode 100644 app/src/main/res/values-th-rTH/strings.xml diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml new file mode 100644 index 000000000..85d132c86 --- /dev/null +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -0,0 +1,527 @@ + + + ติดต่อผู้พัฒนา + ลบ + ลบออกจากอุปกรณ์ + รายละเอียด + ไปที่อัลบั้ม + ไปที่ศิลปิน + เน้นสี + ถัดไป + เล่น + เล่นทั้งหมด + ไปที่ประเภท + เล่นเพลงถัดไป + เกี่ยวกับ + เพิ่มในเพลงที่ชอบ + เพิ่มลงในคิวเพลง + เพิ่มในเพลย์ลิส + ล้างคิวเพลง + ล้างเพลย์ลิสต์ + ไปแฟ้มเริ่มต้น + เล่น/พัก + ก่อนหน้า + ลบออกจากเพลงที่ชอบ + ลบออกจากคิวเพลง + เปลี่ยนชื่อ + สแกน + ค้นหา + เริ่ม + ตั้งเป็นเสียงเรียกเข้า + ตั้งเป็นแฟ้มเริ่มต้น + ตั้งค่า + แชร์ + สลับทั้งหมด + ตั้งเวลาสลีบ + แก้แท็ก + เพิ่ม + เพิ่มเนื้อร้อง + เพิ่มรูปภาพ + เพิ่มรายการเพลง + อัลบั้ม + เพิ่ม 1 เพลงเข้าไปในคิวเพลง + อัลบั้ม + เต็มหน้าจอ + การ์ด + คลาสสิก + ขนาดเล็ก + ข้อความน้อย + ศิลปิน + ศิลปิน + อัตโนมัติ + ข้อมูลศิลปิน + ดำสนิท(ต้องตั้งธีมดำก่อน) + เบลอ + เบลอการ์ด + แคส + ล้างข้อมูลแอป + ล้างเพลลิส + ล้างการแจ้งเตือน + สีธีม + ไม่มีเนื้อร้อง + กำลังลบเพลง + อ้างอิงข้อมูลจาก Last.fm + แก้ไข + ผิดพลาด + เข้าร่วมกลุ่ม Google+ + เพิ่มรูปโปรไฟล์ + ปกติ + วางเนื้อเพลงที่นี่ + ประวัติ + บานพับ + นี่ มาลองใช้แอปฟังเพลงนี้ดูสิ หวังว่าจะชอบนะ: https://play.google.com/store/apps/details?id=%s + มาช่วยแปลภาษาในแอปเรากันเถอะ + หน้าหลัก + พลิกแนวนอน + ผิดพลาด + ประวัติ + เพิ่มเบส + กำลังส่งรีพอร์ตไป GitHub + แก้ไขปก + ตั้งเป็นรูปโปรไฟล์ + ส่งข้อมูลผิดพลาด + แดชบอร์ด + สวัสดีตอนบ่าย + เป็นวันที่เนอะ + อรุณสวัส + ต้อนรับเช้าวันใหม่ + สวัสดีตอนเที่ยง อย่าลืมกินข้าวนะ + คุณชื่ออะไร + ปรับแต่งเสียง + เลือก %1$d แล้ว + ต้องการเข้าถึง Sd card %s + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + เกี่ยวกับ%s + เข้ากับธีม + เข้ากับสี + เพิ่ม %1$ เพลงเข้าคิวเพลงแล้ว + เพิ่มปุ่มควบคุม Mini Player + ขั้นสูง + ฟีเจอร์ทดลอง + อัลบั้ม + อัลบั้มศิลปิน + ตลิด + จำนวนความเบลอที่ใช้สำหรับธีม(ยิ่งน้อยยิ่งเร็ว) + ธีมแอป + ศิลปิน + จากน้อยไปมาก + เสียง + เล่นอัตโนมัติ + แบนเนอร์ + บิตเรท + แบล็กลิสต์ + แบล็กลิสต์ + แบล็กลิสต์ + ธีมสีดำ,ธีมกำลังเล่นและอื่นๆ + เบลอปกอัลบั้ม + ซื้อให้เรา: + ซื้อเลย + ยกเลิก + การ์ด + การ์ด + เอฟเฟกต์แบบหมุน + หากใช้งานเอฟเฟกต์แบบหมุนสำหรับปกอัลบั้มอยู่ โปรดทราบว่าธีมการ์ดและการ์ดเบลอจะไม่ทำงาน + บันทึกการเปลี่ยนแปลง + ดูบันทึกการเปลี่ยนแปลงได้ที่ช่องทาง Telegram + วงกลม + วงกลม + คลาสสิก + การแจ้งเตือนแบบคลาสสิก + ล้าง + ล้างแบล็กลิสต์ + ขาวนวล + สี + สี + สีแจ้งเตือน + แฟลชการ์ด + สีทางลัดของแอพด้วยสีที่เน้น ทุกครั้งที่คุณเปลี่ยนสีโปรดสลับเพื่อให้มีผล + สีแถบการแจ้งเตือนจะเหมือนสีปก + ผู้แต่ง + ผู้แต่ง + กำหนดค่าการเปิดเผยและลำดับของหมวดหมู่ไลบรารี + ควบคุม + คัดลอกข้อมูลอุปกรณ์ไปยังคลิปบอร์ด + สร้าง + ไม่สามารถกู้คืนการซื้อได้ + ลบเพลย์ลิสต์ + ลบเพลง + ลบเพลง + ลบเพลย์ลิสต์ + ความลึก + สีไม่อิ่มตัว + จากมากไปน้อย + คำอธิบาย + ข้อมูลอุปกรณ์ + สนับสนุนนักพัฒนา + เสร็จแล้ว + อย่าเปิดโฟลเดอร์ย่อย + แน่ใจนะว่าจะล้างแบล็กลิสต์? + โหมดขับรถและแว๊นมอไซค์ + ว่างเปล่า + อีควอไลเซอร์ + คำถามที่พบบ่อย + ปุ่มควบคุมเพิ่มเติม + รายการโปรด + การลบไฟล์ล้มเหลว: %s + ที่อยู่ไฟล์ + ชื่อไฟล์ + การเขียนไฟล์ล้มเหลว: %s + กรองระยะเวลาเพลง + กรองเพลงตามความยาว + จบเพลงสุดท้าย + พอดี + แบน + โฟลเดอร์ + ติดตาม Pinterest เพื่อค้นหาแรงบันดาลใจการออกแบบ Retro Music + ร่วมโปรเจ็คใน GitHub + ฟอร์แมต + สำหรับคุณ + ฟรี + เต็ม + การ์ดขนาดใหญ่ + เต็มหน้าจอ + ปุ่มควบคุมเต็มหน้าจอ + ประเภท + เล่นต่อเนื่อง + ประเภท + ภาพไล่ระดับสี + ให้สิทธิ์ + ขนาดตาราง + ขนาดตาราง (ที่ดิน) + รูปแบบตาราง + หากมีพื้นที่เพียงพอให้แสดงตัวควบคุมระดับเสียงในหน้าจอที่กำลังเล่นอยู่ + ถ้าคิดว่าแอปนี้ดีหละก็ สนับสนุนเราได้นะ + ละเว้นปก Media Store + รูปภาพ + รูปภาพ + นำเข้า + นำเข้าเพลย์ลิสต์ + อินสตาแกรม + ปัญหา + คีย์บอร์ด + เปิดหน้าจอไว้ + ค่อนข้างมืด + ป้ายกำกับ + เพิ่มล่าสุด + ช่วงเพลย์ลิสต์ที่เพิ่มล่าสุด + เพลงสุดท้าย + ระยะเวลา + รายชื่อ + หมวดหมู่คลีงเพลง + รายละเอียดใบอนุญาตสำหรับซอฟต์แวร์โอเพนซอร์ส + ใบอนุญาต + ผู้ฟัง + รายชื่อไฟล์ + กำลังโหลดผลิตภัณฑ์.... + ล็อกหน้าจอ + เข้าสู่ระบบ + ชอบแอปนี้หรือป่าว? ถ้าชอบหละก็อยากให้เราปรับปรุงอะไรบอกเราได้ใน Google Play Store ได้นะ ถึงเราจะเป็นทีมเล็กๆแต่ก็พร้อมรับฟังทุกปัญหาเลยแหละ(มั้ง) + ลดระดับเสียงเมื่อมีการแจ้งเตือน + สร้างโดย❤️ชาวอินเดีย + ทีมนักพัฒนา + เพิ่มเติมจาก %s + เล่นบ่อย + ชื่อ + มีอะไรให้ช่วยมั้ย + รายการเพลงใหม่ + รายการเพลงใหม่ + เพลงถัดไป + " ไม่พบอีควอไลเซอร์" + ไม่พบเนื้อเพลง + " ไม่พบการซื้อ" + ไม่มีผลลัพธ์ + ปกติ + " เนื้อเพลงปกติ" + ไม่มีอะไรให้สแกน + ไม่มีอะไรให้ดู + การแจ้งเตือน + ปรับแต่งรูปแบบการแจ้งเตือน + กำลังเล่น + คิวที่กำลังเล่น + ปรับแต่งหน้าจอที่กำลังเล่นอยู่ + มีธีมกำลังเล่นมากกว่า9 ธีมให้ปรับแต่ง + เฉพาะ Wi-Fi + อื่นๆ + รหัสผ่าน + " 3 เดือนที่ผ่านมา" + จุดสูงสุด + ไม่มีสิทธิเข้าถึงข้อมูล + " สิทธิ์ถูกปฏิเสธ" + " ปรับแต่ง" + ปรับแต่ง UI และธีมกำลังเล่นให้เหมาะกับสไตล์ผู้ใช่ + " เลือกจากที่จัดเก็บในตัวเครื่อง" + เลือกภาพ + " เรียบ" + เมื่อมีการแจ้งเตือน เพลงจะหยุดชั่วขณะหนึ่ง + การแจ้งเตือนตอนเพลงเล่นอยู่ + "เพลย์ลิสต์ว่างเปล่า" + เพลย์ลิสต์ว่างเปล่า + " ชื่อเพลย์ลิสต์" + เพลย์ลิสต์ + สไตล์รายละเอียดอัลบั้ม + ระดับความเบลอ + ปรับมุมกล่องโต้ตอบด้านล่างของแผ่นงาน + " รูปแบบอัลบั้ม" + ธีม + " เพลย์ลิสต์" + " หยุดเพลงชั่วคราวเมื่อระดับเสียงลดลงเป็นศูนย์และเริ่มเล่นเมื่อระดับเสียงดังขึ้น (มีผลกับแอปอื่นด้วย)" + " หยุดชั่วคราวเมื่อลดเสียง" + " โปรดทราบว่าการเปิดใช้งานคุณสมบัตินี้อาจส่งผลต่ออายุการใช้งานแบตเตอรี่" + "คลิกเพื่อเปิดหรือเลื่อนไปโดยไม่มีการนำทางแบบโปร่งใสของหน้าจอที่กำลังเล่นอยู่" + "คลิกหรือสไลด์" + ใช้ปกอัลบั้มเพลงที่กำลังเล่นอยู่เป็นวอลเปเปอร์หน้าจอล็อก + แถบนำทางสี + ธีมกำลังเล่น + ใบอนุญาตโอเพนซอร์ส + แปลภาษา + วันนี้ + ทวิตเตอร์ + แชร์ะีมของคุณด้วย Retro Music + ไม่มีป้ายกำกับ + ต่อไป + อัปเดตรูปภาพ + กำลังอัพเดท..... + ชื่อผู้ใช้ + เวอร์ชัน + พลิกแนวตั้ง + ระดับเสียง + ยินดีต้อนรับ + คุณอยากจะแชร์อะไร? + มีอะไรใหม่๐บ้าง + หน้าต่าง + มุมโค้งมน + ตั้ง %1$s เป็นเสียงเรียกเข้า + ปี + คุณต้องเลือกอย่างน้อยหนึ่งหมวดหมู่ + คุณจะถูกส่งต่อไปยังเว็บไซต์ติดตามปัญหา + ข้อมูลบัญชีของคุณใช้สำหรับการตรวจสอบสิทธิ์เท่านั้น + จำนวน + โน๊ต(ไม่บังคับ) + เริ่มการชำระเงิน + แสดงหน้าจอกำลังเล่น + เข้าถึงข้อมูล + เปลี่ยนภาษา + ลองใช้เรโทร มิวสิค พรีเมี่ยม + จำนวนเพลง + ชื่อผู้ใช้ + แชร์แอพกับเพื่อนและครอบครัวของคุณ + เสียงเรียกเข้า + แอปต้องการสิทธิ์ในการเข้าถึงการตั้งค่าอุปกรณ์ของคุณเพื่อตั้งค่าเพลงเป็นเสียงเรียกเข้า + รายละเอียดการนับเพลง + ตารางอัลบั้ม + นำทางโดย Album Artist + การคลิกที่การแจ้งเตือนจะแสดงหน้าจอกำลังเล่นแทนหน้าจอหลัก + อัลบั้มที่ฟังบ่อย + ศิลปินที่ฟังบ่อย + หมายเลขแทร็ก + แทร็ก (2 สำหรับแทร็ก 2 หรือ 3004 สำหรับซีดี 3 แทร็ก 4) + แนะนำ + ขออภัย! อุปกรณ์ของคุณไม่รองรับการป้อนข้อมูลด้วยเสียง + สีเน้นหัวข้อหลัก ค่าเริ่มต้นคือสีม่วง + โหมดวนซ้ำ + สุ่มรายการเพลง + เรียงลำดับ + สลับรายการโปรด + สลับโหมดสุ่ม + ไม่พบเพลงหรือศิลปินที่ระบุไว้ + สุ่ม + เพลงที่ฟังบ่อย + ปฏิเสธการโฟกัสเสียง + ควบคุมอีควอไลเซอร์และตั้งค่าเสียงให้เหมาะกับแนวของคุณ + ธีมสีพื้นฐาน + "ลบออกจากเพลย์ลิสต์ " + บันทึกคิวเพลง + เพิ่มเวลาเนื้อเพลง + ส่งในนาม GitHub + วงกลม + หมุน + เอฟเฟกต์แบบหมุนบนหน้าจอที่กำลังเล่นอยู่ + ลดหลั่น + %1$sใช่มั้ย?.=]]> + %1$s?]]> + %1$d เพลย์ลิสต์?]]> + ลบ %1$d เพลงแล้ว + อนุญาตให้ Retro Music แก้ไขการตั้งค่าเสียง + ตั้งเป็นเสียงเรียกเข้า + กำลังฟังอยู่ %1$s โดย %2$s. + %1$sแบล็คลิสต์?]]> + ตามธีมระบบ + เปลี่ยนธีมและสีของแอพ + เปลี่ยนสีธีม + เปลี่ยนการตั้งค่าการดาวน์โหลดรูปภาพของศิลปิน + เพิ่ม %1$d เพลง ลงในเพลย์ลิสต์%2$sแล้ว + แชร์การตั้งค่าธีมแอป Retro Music ลงในอินสตาแกรม + ขนาด + อัตราการสุ่มตัวอย่าง + มาเล่นเพลงกัน + คลังเพลง + เนื้อเพลง + รูปทรงเรขาคณิต + ข้อผิดพลาดในการขอสิทธิ์เข้าถึง + ไม่เคย + รูปภาพแบนเนอร์ใหม่ + %s คือไดเร็กทอรีเริ่มต้นใหม่ + ไม่มีอัลบั้ม + ไม่มีศิลปิน + เล่นเพลงก่อนแล้วลองอีกครั้ง + ไม่มีประเภท + ไม่มีเพลงให้เล่น + ไม่มีเพลย์ลิสต์ + ไม่มีเพลง + %sไม่มีรายชื่ออยู่ในที่เก็บสื่อ]]> + มุมโต้ตอบ + หิมะตก + เนื้อหาของโฟลเดอร์ที่ขึ้นบัญชีดำ + ปกศิลปิน + ลดระดับเสียงเมื่อสูญเสียโฟกัส + ดาวน์โหลดภาพศิลปินอัตโนมัติ + ปกอัลบั้ม + ธีมปกอัลบั้ม + ปกอัลบั้มข้ามไป + แสดงปกอัลบั้ม + ทางลัดแอปสี + ควบคุมผ่านบรูทูธ + ข้อมูลเพลง + แสดงแท็บประเภท + ปกศิลปิน + ขอบมุม + " โหมดชื่อแท็บ" + สีที่โดดเด่น + ชื่อแท็บ + ควบคุมระดับเสียง + โหมดสุ่ม + ข้อมูลผู้ใช้ + สีหลัก + สีของชุดรูปแบบหลักมีค่าเริ่มต้นเป็นสีเทาสีน้ำเงินสำหรับตอนนี้ใช้งานได้กับสีเข้ม + โปร + ข้อมูลส่วนตัว + ซื้อ + * คิดก่อนซื้อ ไม่สามรถคืนเงินได้ + กำลังเล่นคิว + ให้คะแนนแอป + อัลบั้มเล่นล่าสุด + ศิลปินเล่นล่าสุด + ถอดถอน + ลบภาพแบนเนอร์ + ถอดฝาครอบออก + ลบออกจากบัญชีดำ + ลบรูปโปรไฟล์ + ลบเพลงออกจากเพลย์ลิส + เมื่อเชื่อมต่อบลูทูธแล้วเพลงจะเริ่มเล่นทันที + เบลอปกอัลบั้มบนหน้าจอล็อก อาจทำให้เกิดปัญหากับแอพอื่นๆ + ใช้บการแจ้งเตือนแบบคลาสสิก + สีพื้นหลังและปุ่มควบคุมจะเปลี่ยนไปตามหน้าปกอัลบั้มจากหน้าจอที่กำลังเล่นอยู่ + สีแถบนำทางเป็นสีหลัก + เมื่อใช้โหมดนี้ในธีมสีดำ โลโก้จะเปลี่ยนรูปแบบสีเพื่อให้มองง่ายขึ้น + สีที่โดดเด่นส่วนใหญ่จะเลือกจากปกอัลบั้มหรือศิลปิน + แสดงข้อมูลเพลงเพิ่มเติมเช่นรูปแบบ,ไฟล์บิตเรตและความถี่ + อาจทำให้เกิดปัญหาในการเล่น + สลับแท็บประเภท + แสดงหรือซ่อนแบนเนอร์หน้าแรก + "เปิดใช้งานเฉพาะเมื่อคุณมีปัญหารูปภาพปกไม่ค่อยชัด สามารถเพิ่มคุณภาพปกอัลบั้มได้ แต่ทำให้เวลาโหลดภาพช้าลง " + ใช้การควบคุมหน้าจอล็อกที่กำหนดเองของ Retro Music + ปัดขอบของแอป + โหมดใหญ่พิเศษ + โหมดสุ่มจะปิดเมื่อเล่นรายการเพลงใหม่ + เลือกอีควอไลเซอร์ + เริ่มเล่นทันทีหลังจากเชื่อมต่อหูฟัง + ลบเพลงออกจากเพลย์ลิส + >%1$s เพลย์ลิส?]]> + %1$d เพลงจากเพลย์ลิส?]]> + เปลี่ยนชื่อเพลย์ลิส + รายงานปัญหา + รายงานบั๊ก + รีเซ็ต + รีเซ็ตภาพศิลปิน + คืนค่า + ถ้าซื้อแล้ว กรุณารีสตาร์ทเพื่อใช้ฟีเจอร์ทั้งหมดในแอปได้อย่างสมบูรณ์แบบ + กู้คืนการซื้อก่อนหน้านี้ + กำลังกู้คืนการซื้อ ... + อีควอไลเซอร์ Retro Music + Retro Music โปร + ไม่สามรถรับ SAF URI ได้ + เปิดลิ้นชักการนำทาง + เปิดใช้งาน \"แสดงการ์ด SD\" ในเมนูรายการเพิ่มเติม + คุณต้องเลือกไดเรกทอรีรากของการ์ด SD + เลือกการ์ด SD ของคุณในลิ้นชักการนำทาง + แตะปุ่ม \'เลือก\' ที่ด้านล่างของหน้าจอ + บันทึก + บันทึกเป็น + บันทึกเป็น + บันทึกเพลย์ลิสต์ไปที่ %s. + กำลังบันทึกการเปลี่ยนแปลง + สแกนสื่อ + แสกนไฟล์ %1$d และ %2$d แล้ว + ค้นหาคลังเพลงของคุณ ... + เลือกทั้งหมด + เลือกรูปภาพแบนเนอร์ + เลือกแล้ว + เซ็ต + ตั้งค่ารูปภาพศิลปิน + แชร์แอป + แชร์ไปที่สตอรี่ + สุ่ม + เรียบง่าย + ยกเลิกโหมดสลีบแล้ว + โหมดสลีบจะทำงานใน %d นาที + สไลด์ + อัลบั้มขนาดเล็ก + โซเชียล + แชร์สตอรี่ + เพลง + ระยะเวลาเพลง + เพลง + เรียงลำดับ + วันที่เพิ่ม + วันที่แก้ไข + ปี ค.ศ. + ค้นหาในคลังเพลง + ซ้อนกัน + เริ่มเล่นเพลง + เพียงแค่แสดงชื่อของคุณบนหน้าจอหลัก + สนับสนุนการพัฒนา + ปัดเพื่อปลดล็อก + ซิงค์เนื้อเพลงแล้ว + ระบบอีควอไลเซอร์ + เทเลแกรม + เข้าร่วมเทเลแกรมเพื่อแจ้งข้อผิดพลาดหรือเสนอแนะเกี่ยวกับแอป + ขอบคุณนะ + ไฟล์เสียง + เดือนนี้ + ในสัปดาห์นี้ + ปีนี้ + ขนาดเล็ก + หัวข้อ + การ์ดจิ๋ว + การ์ดเหลี่ยม + ไล่ระดับสี + นำเข้าเพลย์ลิสต์ทั้งหมดที่อยู่ใน Android Media Store พร้อมเพลงหากมีเพลย์ลิสต์อยู่แล้วเพลงจะถูกรวมเข้าด้วยกัน + เพิ่งเล่นไม่นาน + แอปต้องการสิทธิ์ในการเข้าถึงที่เก็บข้อมูลอุปกรณ์ของคุณเพื่อเล่นเพลง + แสดงศิลปินอัลบั้มในประเภทศิลปิน + ล้างคิว + ล้้างเพลลิส + โปรดป้อนชื่อปัญหา + "โปรดป้อนชื่อผู้ใช้ GitHub " + หากเกิดข้อผิดพลาด กรุณาลอง \"ล้างข้อมูลแอป\" หรือส่งอีเมลเมื่อไม่สามรถแก้ไขปัญหาได้ + โปรดป้อนรหัสผ่าน GitHub + โปรดอธิบายปัญหา + ส่งด้วยตนเอง + ชื่อผู้ใช้หรือรหัสผ่านผิด + เกิดความผิดพลาดอย่างไม่ได้คาดคิด. โปรดติดต่อผู้พัฒนาแอป + ปัญหาไม่ได้เปิดใช้งานสำหรับที่เก็บที่เลือก โปรดติดต่อผู้พัฒนาแอป + โทเค็นการเข้าถึงไม่ถูกต้อง โปรดติดต่อผู้พัฒนาแอป + ไม่สามารถส่งรายงานได้ + ไม่สามารถสแกน%d ไฟล์ + สร้างเพลย์ลิสต์ %1$s + ไม่สามารถสร้างเพลย์ลิสต์ได้ + ไม่สามารถดาวน์โหลดปกอัลบั้มที่ตรงกันได้ + + \ No newline at end of file From df6867f6c3927b0382b7e3259aae3f856049f38d Mon Sep 17 00:00:00 2001 From: Wongsakorn1997 <77884809+Wongsakorn1997@users.noreply.github.com> Date: Sun, 24 Jan 2021 12:02:14 +0700 Subject: [PATCH 0006/1603] Add files via upload update --- app/src/main/res/values-th-rTH/strings.xml | 25 ++++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index 85d132c86..95f1c8a38 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -70,7 +70,7 @@ ประวัติ บานพับ นี่ มาลองใช้แอปฟังเพลงนี้ดูสิ หวังว่าจะชอบนะ: https://play.google.com/store/apps/details?id=%s - มาช่วยแปลภาษาในแอปเรากันเถอะ + มาช่วยแปลภาษาในแอปเรากันเถอะ(ไหว้หละ) หน้าหลัก พลิกแนวนอน ผิดพลาด @@ -82,7 +82,7 @@ ส่งข้อมูลผิดพลาด แดชบอร์ด สวัสดีตอนบ่าย - เป็นวันที่เนอะ + เป็นวันที่ดีนะ อรุณสวัส ต้อนรับเช้าวันใหม่ สวัสดีตอนเที่ยง อย่าลืมกินข้าวนะ @@ -194,7 +194,7 @@ ภาพไล่ระดับสี ให้สิทธิ์ ขนาดตาราง - ขนาดตาราง (ที่ดิน) + ขนาดตาราง (ต่อขนาดจอ) รูปแบบตาราง หากมีพื้นที่เพียงพอให้แสดงตัวควบคุมระดับเสียงในหน้าจอที่กำลังเล่นอยู่ ถ้าคิดว่าแอปนี้ดีหละก็ สนับสนุนเราได้นะ @@ -251,7 +251,7 @@ อื่นๆ รหัสผ่าน " 3 เดือนที่ผ่านมา" - จุดสูงสุด + จุดพีค ไม่มีสิทธิเข้าถึงข้อมูล " สิทธิ์ถูกปฏิเสธ" " ปรับแต่ง" @@ -283,7 +283,7 @@ แปลภาษา วันนี้ ทวิตเตอร์ - แชร์ะีมของคุณด้วย Retro Music + แชร์ะีมของคุณด้วยแอปเรโทรมิวสิค ไม่มีป้ายกำกับ ต่อไป อัปเดตรูปภาพ @@ -392,7 +392,7 @@ แสดงแท็บประเภท ปกศิลปิน ขอบมุม - " โหมดชื่อแท็บ" + โหมดชื่อแท็บ สีที่โดดเด่น ชื่อแท็บ ควบคุมระดับเสียง @@ -428,7 +428,7 @@ "เปิดใช้งานเฉพาะเมื่อคุณมีปัญหารูปภาพปกไม่ค่อยชัด สามารถเพิ่มคุณภาพปกอัลบั้มได้ แต่ทำให้เวลาโหลดภาพช้าลง " ใช้การควบคุมหน้าจอล็อกที่กำหนดเองของ Retro Music ปัดขอบของแอป - โหมดใหญ่พิเศษ + โหมดเต็มจอ โหมดสุ่มจะปิดเมื่อเล่นรายการเพลงใหม่ เลือกอีควอไลเซอร์ เริ่มเล่นทันทีหลังจากเชื่อมต่อหูฟัง @@ -444,8 +444,8 @@ ถ้าซื้อแล้ว กรุณารีสตาร์ทเพื่อใช้ฟีเจอร์ทั้งหมดในแอปได้อย่างสมบูรณ์แบบ กู้คืนการซื้อก่อนหน้านี้ กำลังกู้คืนการซื้อ ... - อีควอไลเซอร์ Retro Music - Retro Music โปร + "อีควอไลเซอร์ เรโทรมิวสิค " + เรโทรมิวสิค โปร ไม่สามรถรับ SAF URI ได้ เปิดลิ้นชักการนำทาง เปิดใช้งาน \"แสดงการ์ด SD\" ในเมนูรายการเพิ่มเติม @@ -523,5 +523,12 @@ สร้างเพลย์ลิสต์ %1$s ไม่สามารถสร้างเพลย์ลิสต์ได้ ไม่สามารถดาวน์โหลดปกอัลบั้มที่ตรงกันได้ + Pinterest + สลับชื่อเรื่องสำหรับแท็บแถบนำทางด้านล่าง + "เรโทรมิวสิค " + Scrobbles + ไม่สามารถเล่นเพลงนี้ได้ + ค้นหาเว็บ + %1$d เพลง?]]> \ No newline at end of file From fead7fc479159d506bdf3fbe7bdc45dcbf2971da Mon Sep 17 00:00:00 2001 From: gnuhead-chieb <41156994+gnuhead-chieb@users.noreply.github.com> Date: Mon, 25 Jan 2021 14:50:20 +0000 Subject: [PATCH 0007/1603] Update strings.xml --- app/src/main/res/values-ja-rJP/strings.xml | 106 +++++++++++---------- 1 file changed, 56 insertions(+), 50 deletions(-) diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 4cacbfacf..c988c84ab 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -22,10 +22,10 @@ 承諾 グリッドサイズ グリッドサイズ(土地) - New playlist + 新しいプレイリスト 再生 - Play all + 全て再生 次に再生する 再生/一時停止 @@ -60,14 +60,14 @@ アルバム - Songs + アルバム アーティスト アルバム - Albums + アルバム 常に @@ -92,12 +92,12 @@ バイオグラフィー - + ダークテーマ時に漆黒にする ブラックリスト ぼかし - ブラーとカード + ブラーカード レポートを送信できませんでした 無効なトークン:アプリの開発者に連絡してください @@ -114,7 +114,7 @@ このバグが何度も発生する場合は、端末のアプリ設定より「データを削除する(Androidバージョンによって異なります)」を実行するか、概要をメールで送信してください。 GitHubアカウントを使って送信 - Buy now + 今すぐ購入 キャンセル @@ -129,7 +129,7 @@ パッチノート 電報チャネルで変更ログが維持されています - Circle + サークル @@ -160,7 +160,7 @@ 現在、 %1$s によって %2$s で聴いています。 - ちょっと暗い + ダーク プレイリストを削除 %1$s を削除しますか?]]> @@ -185,12 +185,12 @@ ブラックリストを削除しますか? %1$s をブラックリストから削除しますか?]]> - 寄付します + 寄付する 私が自分の仕事に払う価値があると思うなら、あなたはここにお金を残すことができます 俺を購入: - Drive mode + 運転モード 空の @@ -208,13 +208,13 @@ フォルダ - Follow system + システムに従う あなたのために Free - いっぱい + フル 全体のカード このアプリのテーマや色を変更します @@ -234,7 +234,7 @@ - Grid style + 表示スタイル ヒンジ @@ -245,14 +245,14 @@ 水平方向に反転 画像 - Gradient image + グラディエント アーティスト画像のダウンロード設定を変更する プレイリスト %2$s に %1$d 曲を追加しました - 君のRetro Music設定を共有してInstagramにショーケースしましょう + あなたのRetro Music設定を共有してInstagramにショーケースしましょう - Keyboard + キーボードを表示 ビットレート フォーマット @@ -263,16 +263,16 @@ サンプリングレート 長さ - ラベル付き + ラベルを表示する 最後に追加された 前の曲 - Library categories + ライブラリの表示項目 ライセンス - はっきり白 + ライト Listeners @@ -324,7 +324,7 @@ 通知 通知スタイルを変更 - 再生中 + 再生画面 再生中のキュー 再生中の画面をカスタマイズ 9種類以上の再生中テーマ @@ -339,13 +339,13 @@ 過去3ヶ月 - Peak + ピーク 外部ストレージへのアクセスが拒否されました 許可が拒否されました - 個人用設定 + 個人設定 再生中のUI画面をカスタマイズ ローカルストレージから選択 @@ -367,42 +367,42 @@ ぼかしの強さ Filter songs by length 曲の長さをフィルター - Advanced - Album style + 高度な設定 + アルバムのスタイル オーディオ - Blacklist - Controls + ブラックリスト + コントロール テーマ 画像 - Library + ライブラリ ロック画面 プレイリスト 音量がゼロになると自動的に音楽が一時停止し、再び音量を上げると音楽が再生されます。※あなたがアプリ外で音量を上げると、Retro Musicも再生を開始します。 音量をゼロで一時停止 この機能をオンにすると、バッテリー寿命に影響する可能性があります 画面をオンのままにする - Select language + 言語を選択 再生中のジャケットをロック画面の壁紙に適用する システムでサウンドが再生されたとき、または通知が受信されたときに一時的に音量を下げる ブラックリストに登録されたフォルダの内容はコレクションには表示されません。 - Start playing as soon as connected to bluetooth device + 端末にBluetoothデバイスが接続されたとき、再生を開始する ロック画面のジャケットをぼかします。他のアプリやウィジェットに問題を及ぼす可能性があります 再生中のジャケットにスライドエフェクトを適用する。この設定を適用するとカードテーマの設定は自動的にオフになります 古い通知デザインを使用する ジャケットから抽出された色が背景と再生ボタンに適用されます アプリのショートカットアイコンをアクセントカラーに切り替えます。アクセントカラーを変更した場合はトグルを切り替えて設定を適用してください "\u30b8\u30e3\u30b1\u30c3\u30c8\u304b\u3089\u62bd\u51fa\u3055\u308c\u305f\u8272\u3067\u901a\u77e5\u3092\u7740\u8272\u3059\u308b" - As per Material Design guide lines in dark mode colors should be desaturated - Clicking on the notification will show now playing screen instead of the home screen + マテリアルデザインのガイドラインに従いダークモードで彩度の低い色を使用する + 通知をタップすることでアプリのトップ画面ではなく、再生画面を表示するようにする ミニプレイヤー専用のコントロールボタンを追加する - Show extra Song information, such as file format, bitrate and frequency + ファイル形式、ビットレート、サンプリング周波数などの曲のメタデータを再生画面に表示する "一部のデバイスでは再生に問題が発生する場合があります" ホーム画面を切り替える アルバムジャケットのクオリティを上げますが、読み込みに時間がかかる場合があります。低解像度の画像で問題がある場合に有効です。 - Configure visibility and order of library categories. + ライブラリに表示される項目と、順番を変更する Retro Musicのカスタムされたロック画面を使用する オープンソースライセンスの詳細 - フルスクリーンモード + アプリをフルスクリーン表示にする ヘッドフォンが接続されたら自動で再生を開始する 新しいリストの楽曲を再生する時にシャッフルは自動的にオフになります 再生画面に十分なスペースがある場合に音量コントロールを追加する @@ -413,27 +413,27 @@ フォーカスロス時に音量を下げる アーティスト画像を自動でダウンロードする ブラックリスト - Bluetooth playback + Bluetooth接続時に再生 アルバムジャケットにぼかしを適用する 古い通知デザイン アダプティブカラー 色付きの通知 - Desaturated color - Show now playing screen - 追加のコントロール - Song info + 彩度の低い色 + 通知から再生画面を開く + 追加コントロール + 曲の情報を表示 ギャップレス再生 アプリのテーマ - アーティストの間隔 + アーティストの表示 ホーム画面 Media Store のカバーを無視する 最後に追加されたプレイリストの間隔 フルスクリーンコントロール 再生中のテーマ オープンソースライセンス - タブのラベルモード + タブのラベル カルーセルエフェクト - フルスクリーンアプリ + フルスクリーン表示 自動再生 シャッフルモード ボリュームコントロール @@ -448,7 +448,7 @@ キュー アプリを評価する - このアプリを気に入りましたか?アプリをより良いものにするために、Google Play Storeで問題の報告と意見をよろしくお願いします。 + このアプリを気に入りましたか?アプリをより良いものにするために、Google Playストアで問題の報告と意見をよろしくお願いします。 最近のアルバム 最近のアーティスト @@ -539,7 +539,7 @@ アーティスト 作曲家 日付 - Date modified + 最後の編集日 降順 @@ -570,7 +570,7 @@ 今週 今年 - 小さい + ティニー Tiny card 主題 @@ -591,7 +591,7 @@ ツイッター あなたのデザインを皆に共有しましょう - ラベル付きでない + ラベルを表示しない \u3053\u306e\u66f2\u3092\u518d\u751f\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f @@ -611,7 +611,7 @@ ウェブで検索 - Welcome, + ようこそ, 何を共有しますか? @@ -620,13 +620,19 @@ ウィンドウ 角を丸める - %1$s をあなたの着信音として設定しました + %1$s を着信音として設定しました %1$d が選択されました You have to select at least one category. - issue trackerのウェブサイトに転送されます + issue trackerのウェブサイトに移動します あなたのアカウントは認証にのみ使用されます + アルバムのアーティストを表示 + アーティストカテゴリ内にアルバムのアーティストを表示する + アルバムの表示 + 曲数順(昇順) + 曲数順(降順) + 傾斜イメージ From 12d4a74427e483fd18a74864e1f204f4b0037e28 Mon Sep 17 00:00:00 2001 From: gnuhead-chieb <41156994+gnuhead-chieb@users.noreply.github.com> Date: Mon, 25 Jan 2021 15:01:31 +0000 Subject: [PATCH 0008/1603] Update arrays.xml --- app/src/main/res/values/arrays.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index b686a726c..1942d911e 100755 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -107,7 +107,7 @@ Bengali Catalan China - Hong kong China + Hong Kong Taiwan Croatian Czech @@ -191,4 +191,4 @@ ur vi - \ No newline at end of file + From f05f71a831e70bc95052f487fbbc2cea77ccb18e Mon Sep 17 00:00:00 2001 From: gnuhead-chieb <41156994+gnuhead-chieb@users.noreply.github.com> Date: Mon, 8 Feb 2021 13:24:20 +0000 Subject: [PATCH 0009/1603] Update arrays.xml --- app/src/main/res/values/arrays.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 1942d911e..5a7dfe816 100755 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -106,9 +106,9 @@ Basque Bengali Catalan - China - Hong Kong - Taiwan + Simplified Chinese + Traditional Chinese(Hong Kong) + Traditional Chinese(Taiwan) Croatian Czech Danish From 35795d3135a7b8f5266fe5914e476dc5833e5d80 Mon Sep 17 00:00:00 2001 From: Eurico Serradas Duarte Date: Tue, 16 Feb 2021 22:24:26 +0000 Subject: [PATCH 0010/1603] Translated the app to European Portuguese The strings file was previously just a copy of the english version. It is similar to the Brazillian Portuguese version, but with some differences. --- .../main/res/master/values-pt-rPT/strings.xml | 966 +++++++++--------- 1 file changed, 483 insertions(+), 483 deletions(-) diff --git a/app/src/main/res/master/values-pt-rPT/strings.xml b/app/src/main/res/master/values-pt-rPT/strings.xml index e028f27cb..5c04a26e0 100644 --- a/app/src/main/res/master/values-pt-rPT/strings.xml +++ b/app/src/main/res/master/values-pt-rPT/strings.xml @@ -1,180 +1,180 @@ - Team, social links - Accent color - The theme accent color, defaults to purple - About - Add to favorites - Add to playing queue - Add to playlist - Clear playing queue - Clear playlist - Cycle repeat mode - Delete - Delete from device - Details - Go to album - Go to artist - Go to genre - Go to start directory - Grant - Grid size - Grid size (land) - New playlist - Next - Play - Play all - Play next - Play/Pause - Previous - Remove from favorites - Remove from playing queue - Remove from playlist - Rename - Save playing queue - Scan - Search - Start - Set as ringtone - Set as start directory - "Settings" - Share - Shuffle all - Shuffle playlist - Sleep timer - Sort order - Tag editor - Toggle favorite - Toggle shuffle mode - Adaptive - Add - Add lyrics - Add \nphoto - "Add to playlist" - Add time frame lyrics - "Added 1 title to the playing queue." - Added %1$d titles to the playing queue. - Album - Album artist - The title or artist is empty. - Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s - Shuffle - Top Tracks - Big - Card - Classic - Small - Text - Artist - Artists - Audio focus denied. - Change the sound settings and adjust the equalizer controls - Auto - Base color theme - Bass Boost - Bio - Biography - Just Black - Blacklist - Blur - Blur Card - Unable to send report - Invalid access token. Please contact the app developer. - Issues are not enabled for the selected repository. Please contact the app developer. - An unexpected error occurred. Please contact the app developer. - Wrong username or password - Issue - Send manually - Please enter an issue description - Please enter your valid GitHub password - Please enter an issue title - Please enter your valid GitHub username - An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email - Uploading report to GitHub… - Send using GitHub account - Buy now - Cancel - Card + Equipa, links sociais + Cor de destaque + A cor de destaque do tema, a predefinição é roxo + Acerca + Adicionar aos favoritos + Adicionar à fila de reprodução + Adicionar à playlist + Limpar fila de reprodução + Limpar playlist + Modo de repetição + Remover + Remover do dispositivo + Detalhes + Ir para o álbum + Ir para o artista + Ir para o género + Ir para o diretório inicial + Permitir + Tamanho da grade + Tamanho da grade (horizontal) + Nova lista de reprodução + Próxima + Reproduzir + Reproduzir tudo + Reproduzir próxima + Reproduzir/Pausar + Anterior + Remover dos favoritos + Remover da fila de reprodução + Remover da playlist + Renomear + Guardar fila de reprodução + Scanear + Procurar + Iniciar + Definir como toque + Definir como diretório inicial + "Definições" + Partilhar + Tocar todos aleatoriamente + Playlist em ordem aleatória + Temporizador + Ordem de classificação + Editor de tag + Ativar/Desativar favoritos + Alternar modo aleatório + Adaptável + Adicionar + Adicionar letras + Adicionar fotografia + "Adicionar à lista" + Adicione tempo de enquadramento das letras + "Uma música foi adicionada à fila de reprodução" + Foram adicionadas %1$d músicas na fila de reprodução + Álbum + Álbum do artista + O título ou artista está vazio + Álbuns + Sempre + Oi, vê este reprodutor de música giro em: https://play.google.com/store/apps/details?id=%s + Aleatório + Músicas favoritas + Música Retro-Grande + Música Retro-Cartão + Música Retro-Clássico + Música Retro-Pequeno + Música Retro-Texto + Artista + Artistas + Foco de áudio negado + Altere as configurações de som e ajuste os controladores do equalizador + Automático + Baseado na cor do tema + Aumento de graves + Biografia + Biografia + Só preto + Lista negra + Desfocado + Cartão desfocado + Não é possível enviar o relatório + Token de acesso inválido. Entre em contato com o desenvolvedor da aplicação + Os problemas não estão ativos para o repositório selecionado. Entre em contato com o desenvolvedor da aplicação. + Um erro inesperado ocorreu. Entre em contato com o desenvolvedor da aplicação. + Nome de utilizador ou palavra-passe incorreta + Questão + Enviar manualmente + Por favor, insira uma descrição do problema + Por favor, digite a sua palavra-passe válida do GitHub + Por favor, insira o título do problema + Por favor, digite o seu nome de utilizador válido do GitHub + Um erro inesperado ocorreu. Se tentar novamente e o erro persistir, use a opção \"Limpar dados da aplicação\" ou envie-nos um e-mail + A enviar o relatório para o GitHub... + Enviar usando uma conta do GitHub + Compre agora + Cancelar + Cartão Circular - Colored Card - Card - Carousel - Carousel effect on the now playing screen - Cascading - Cast - Changelog - Changelog maintained on the Telegram channel - Circle + Cartão colorido + Cartão + Carrossel + Efeito carrossel na ecrã de reprodução + Cascata + Transmitir + Lista de mudanças + Lista de mudanças mantida no Canal no Telegram + Círculo Circular - Classic - Clear - Clear app data - Clear blacklist - Clear queue - Clear playlist - %1$s? This can\u2019t be undone!]]> - Close - Color - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. - "Couldn\u2019t download a matching album cover." - Could not restore purchase. - Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - No Lyrics - Delete playlist - %1$s?]]> - Delete playlists - Delete song - %1$s?]]> - Delete songs - %1$d playlists?]]> - %1$d songs?]]> - Deleted %1$d songs. - Deleting songs - Depth - Description - Device info - Allow Retro Music to modify audio settings - Set ringtone - Do you want to clear the blacklist? - %1$s from the blacklist?]]> - Donate - If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - Download from Last.fm - Drive mode - Edit - Edit cover - Empty - Equalizer - Error - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full - Full card - Change the theme and colors of the app - Look and feel - Genre - Genres - Fork the project on GitHub - Join the Google Plus community where you can ask for help or follow Retro Music updates + Clássico + Limpar + Limpar dados do aplicação + Limpar lista negra + Limpar fila de reprodução + Limpar playlist + %1$s? Isto n\u00e3o pode ser desfeito!]]> + Fechar + Cor + Cor + Cores + Compositor + Informações do dispositivo copiadas para a área de transferência. + N\u00e3o foi poss\u00edvel criar a playlist + "N\u00e3o foi poss\u00edvel baixar uma capa do \u00e1lbum correspondente" + Não foi possível restaurar a compra + Não foi possível scanear %d ficheiros + Criar + A playlist %1$s foi criada + Membros e contribuidores + Atualmente a ouvir %1$s por %2$s. + Meio escuro + Sem letras + Remover playlist + %1$s?]]> + Remover playlists + Remover música + %1$s?]]> + Remover músicas + %1$d playlists?]]> + %1$d músicas?]]> + %1$d músicas foram removidas. + Remover músicas + Profundidade + Descrição + Informação do dispositivo + Permita que o Retro Music modifique as configurações de áudio + Definir toque + Quer limpar a lista negra? + %1$s da lista negra?]]> + Doar + Se acha que eu mereço ser recompensado pelo meu trabalho, pode-me deixar algum dinheiro aqui + Compre-me um: + Transferir do Last.fm + Modo de condução + Editar + Editar capa + Vazio + Equalizador + Erro + Perguntas frequentes + Favoritos + Terminar a última música + Em forma + Plano + Pastas + Seguir sistema + Para si + Grátis + Ecrã completo + Cartão cheio + Alterar o tema e as cores da aplicação + Aparência + Género + Géneros + "Fork" o projeto no GitHub + Participe da comunidade do Google+, onde pode pedir ajuda ou seguir as atualizações do Retro Music 1 2 3 @@ -183,333 +183,333 @@ 6 7 8 - Grid style - Hinge - History - Home - Horizontal flip - Image - Gradient image - Change artist image download settings - Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate - Format - File name - File path - Size - More from %s - Sampling rate - Length - Labeled - Last added - Last song - Let\'s play some music - Library - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India + Grades & Estilos + Dobradiça + Histórico + Início + Giro horizontal + Imagem + Imagem em gradiente + Alterar as configurações de download de imagens de artistas + %1$d músicas adicionadas na playlist %2$s. + Partilhe o seu perfil do Retro Music para mostrá-lo no Instagram + Teclado + Taxa de bits + Formato + Nome do arquivo + Caminho do arquivo + Tamanho + Mais de %s + Taxa de amostragem + Comprimento + Rotulado + Mais recentes + Última música + Vamos reproduzir alguma música + Biblioteca + Categorias da biblioteca + Licenças + Claramente branco + Ouvintes + A listar ficheiros... + A carregar produtos... + Entrar + Letras + Feito com ❤️ na Índia Material - Error - Permission error - Name - Most played - Never - New banner photo - New playlist - New profile photo - %s is the new start directory. - Next Song - You have no albums - You have no artists - "Play a song first, then try again." - No equalizer found - You have no genres - No lyrics found - No songs playing - You have no playlists - No purchase found. - No results - You have no songs + Erro + Erro de permissão + Nome + Mais tocadas + Nunca + Nova foto do mural + Nova playlist + Nova foto de perfil + %s é o novo diretório inicial + Próxima música + Sem álbuns + Sem artistas + "Reproduza uma música primeiro e tente novamente" + Nenhum equalizador encontrado + Sem géneros + Nenhuma letra encontrada + Nenhuma música a tocar + Sem playlists + Nenhuma compra encontrada. + Sem resultados + Sem músicas Normal - Normal lyrics + Letras normais Normal - %s is not listed in the media store.]]> - Nothing to scan. - Nothing to see - Notification - Customize the notification style - Now playing - Now playing queue - Customize the now playing screen - 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Paste lyrics here + %s não está listado no armazenamento de media]]> + Nada para scanear. + Nada a ver + Notificação + Personalizar o estilo de notificação + A reproduzir + Fila de reprodução a tocar + Personalizar ecrã de reprodução + 9 temas incríveis para a interface do reprodutor + Apenas em Wi-Fi + Recursos avançados em teste + Outro + Palavra-passe + Últimos 3 meses + Cole as letras aqui Peak - Permission to access external storage denied. - Permissions denied. - Personalize - Customize your now playing and UI controls - Pick from local storage - Pick image + Permissão para acessar o armazenamento externo negada + Permissões negadas. + Personalizar + Personalizar os controles em Reproduzindo agora e Interface do Utilizador + Escolha no armazenamento local + Escolha a imagem Pinterest - Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. - Playing notification - Empty playlist - Playlist is empty - Playlist name + Siga a página do Pinterest para inspiração de design do Retro Music + Liso + A notificação de reprodução fornece ações para reprodução/pausa, etc + Notificação de reprodução + Playlist vazia + A playlist está vazia + Nome da playlist Playlists - Album detail style - Amount of blur applied for blur themes, lower is faster - Blur amount - Adjust the bottom sheet dialog corners - Dialog corner - Filter songs by length - Filter song duration - Advanced - Album style - Audio - Blacklist - Controls - Theme - Images - Library - Lockscreen + Estilo de detalhe do álbum + Quantidade de desfoque aplicada a temas de desfoque, menor é mais rápido + Quantidade de desfoque + Ajustar os cantos da caixa de diálogo + Canto de diálogo + Filtrar músicas por duração + Filtrar duração da música + Avançado + Estilo do álbum + Áudio + Lista negra + Controles + Tema + Imagens + Biblioteca + Ecrã de bloqueio Playlists - Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app - Pause on zero - Keep in mind that enabling this feature may affect battery life - Keep the screen on - Click to open with or slide to without transparent navigation of now playing screen - Click or Slide - Snow fall effect - Use the currently playing song album cover as the lockscreen wallpaper - Lower the volume when a system sound is played or a notification is received - The content of blacklisted folders is hidden from your library. - Start playing as soon as connected to bluetooth device - Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets - Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work - Use the classic notification design - The background and control button colors change according to the album art from the now playing screen - Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect - Colors the navigation bar in the primary color - "Colors the notification in the album cover\u2019s vibrant color" - As per Material Design guide lines in dark mode colors should be desaturated - Most dominant color will be picked from the album or artist cover - Add extra controls for mini player - Show extra Song information, such as file format, bitrate and frequency - "Can cause playback issues on some devices." - Toggle genre tab - Show or hide the home banner - Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks - Configure visibility and order of library categories. - Use Retro Music\'s custom lockscreen controls - License details for open source software - Round the app\'s edges - Toggle titles for the bottom navigation bar tabs - Immersive mode - Start playing immediately after headphones are connected - Shuffle mode will turn off when playing a new list of songs - If enough space is available, show volume controls in the now playing screen - Show album cover - Album cover theme - Album cover skip - Album grid - Colored app shortcuts - Artist grid - Reduce volume on focus loss - Auto-download artist images - Blacklist - Bluetooth playback - Blur album cover - Choose equalizer - Classic notification design - Adaptive color - Colored notification - Desaturated color - Extra controls - Song info - Gapless playback - App theme - Show genre tab - Artist grid - Banner - Ignore Media Store covers - Last added playlist interval - Fullscreen controls - Colored navigation bar - Now playing theme - Open source licences - Corner edges - Tab titles mode - Carousel effect - Dominant color - Fullscreen app - Tab titles - Auto-play - Shuffle mode - Volume controls - User info - Primary color - The primary theme color, defaults to blue grey, for now works with dark colors + Pausar a reprodução quando o volume é zero e reproduzir novamente quando o volume aumentar. Também funciona fora da aplicação + Pausar quando o volume for zero + Tenha em mente que ativar este recurso pode afetar a duração da bateria + Manter o ecrã ligado + Clique para abrir ou deslizar sem a navegação transparente do ecrã que está a ser reproduzido agora + Clique ou deslize + Efeito de neve cadente + Usar a capa do álbum da música em reprodução como papel de parede na ecrã de bloqueio + Diminuir o volume quando um som do sistema for reproduzido ou uma notificação for recebida + O conteúdo das pastas na lista negra está oculto da sua biblioteca. + Começar a tocar assim que conectado ao dispositivo bluetooth + Desfoque a capa do álbum na ecrã de bloqueio. Pode causar problemas com aplicações e widgets de terceiros + Efeito carrossel para a imagem do álbum no ecrã de reprodução. Note que nos temas \"Cartão\" e \"Cartão desfocado\" não irá funcionar + Use o design de notificação clássico + As cores de fundo e do botão de controle mudam de acordo com a capa do álbum a partir da ecrã que está a ser reproduzida + Colore os atalhos da aplicação na cor de destaque. Sempre que mudar a cor, alterne esta opção para ter efeito + Colore a barra de navegação na cor primária + "Colore a notifica\u00e7\u00e3o na cor vibrante da capa do \u00e1lbum" + Conforme o guia do Material Design as cores devem ser dessaturadas no modo escuro + A cor mais dominante será escolhida da capa do álbum/artista + Adicionar botões extras para o mini reprodutor + Mostrar informações extras da música, como formato de arquivo, taxa de bits e frequência + "Pode causar problemas de reprodução em alguns dispositivos" + Alternar aba de géneros + Alternar o estilo do mural inicial + Pode aumentar a qualidade da capa do álbum, mas diminui a velocidade de carregamento da capa do álbum. Ative isto apenas se tiver problemas com capas de baixa resolução + Configurar visibilidade e ordem de categorias da biblioteca. + Usar controles personalizados do Retro Music na ecrã de bloqueio + Detalhes da licença para software de código aberto + Arredondar as bordas da aplicação + Ativar títulos para as guias da barra de navegação inferior + Modo imersivo + Começar a reproduzir imediatamente quando os auscultadores forem conectados + O modo aleatório será desativado ao reproduzir uma nova lista de músicas + Se houver espaço suficiente, mostrar os controles de volume no ecrã de reprodução + Exibir a capa do álbum + Tema da capa do álbum + Saltar a capa do álbum + Grade do álbum + Colorir os atalhos da aplicação + Grade do artista + Reduzir o volume na perda de foco + Transferir automaticamente as imagens dos artistas + Lista negra + Reprodução Bluetooth + Desfocar a capa do álbum + Escolha o equalizador + Design de notificação clássico + Cor adaptável + Notificações coloridas + Cor dessaturada + Controles extras + Informações da música + Reprodução contínua + Tema da aplicação + Exibir a aba de géneros + Grade de artistas no ecrã inicial + Mural na ecrã inicial + Ignorar capas do Armazenamento de Media + Intervalo da playlist \"Mais recentes\" + Controles em ecrã completo + Barra de navegação colorida + Tema do ecrã \"A reproduzir\" + Licenças de código aberto + Bordas arredondadas + Modo de títulos nas abas + Efeito carrossel + Cor dominante + Aplicação em ecrã completo + Títulos das guias + Reprodução automática + Modo aleatório + Controles do volume + Informação do utilizador + Cor primária + A cor principal do tema por padrão é cinza azulado, por enquanto funciona com cores escuras Pro - Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - *Think before buying, don\'t ask for refund. - Playing Queue - Rate the app - Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums - Recent artists - Remove - Remove banner photo - Remove cover - Remove from blacklist - Remove profile photo - Remove song from playlist - %1$s from the playlist?]]> - Remove songs from playlist - %1$d songs from the playlist?]]> - Rename playlist - Report an issue - Report bug - Reset - Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. - Restored previous purchases. - Restoring purchase… - Retro Music Equalizer + Temas do a reproduzir, efeito carrossel, tema de cor e mais... + Perfil + Comprar + *Pense antes de comprar, não peça o reembolso! + Fila + Avalie a aplicação + Adorou esta aplicação? Informe-nos na Google Play Store sobre como podemos melhorar a aplicação + Álbuns recentes + Artistas recentes + Remover + Remover foto do mural + Remover capa + Remover da lista negra + Remover foto do perfil + Remover música da playlist + %1$s da playlist?]]> + Remover músicas da playlist + %1$d músicas da playlist?]]> + Renomear playlist + Reportar um problema + Reportar erro + Repor + Restaurar imagem do artista + Restaurar + Compra anterior restaurada. Por favor, reinicie a aplicação para fazer uso de todos os recursos. + As compras anteriores foram restauradas. + A restaurar compra... + Equalizador do Retro Music Retro Music Player Retro Music Pro - File delete failed: %s + Falha ao remover ficheiro: %s - Can\'t get SAF URI - Open navigation drawer - Enable \'Show SD card\' in overflow menu + Não foi possível obter o URI SAF + Abrir o painel de navegação + Ativar \'Mostrar cartão SD\' no menu flutuante - %s needs SD card access - You need to select your SD card root directory - Select your SD card in navigation drawer - Do not open any sub-folders - Tap \'select\' button at the bottom of the screen - File write failed: %s - Save + %s precisa de acesso ao cartão SD + Precisa de selecionar o diretório raiz do seu cartão SD + Selecione o seu cartão SD no menu de navegação + Não abra nenhuma subpasta + Toque no botão \'selecionar\' na parte inferior da ecrã + Falha na escrita do arquivo: %s + Guardar - Save as file - Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. + Salvar como ficheiro + Salvar como ficheiros + Playlist salva para %s + A guardar alterações... + Scanear media + Scaneados %1$d dos %2$d ficheiros Scrobbles - Search your library… - Select all - Select banner photo - Selected - Send crash log - Set - Set artist image - Set a profile photo - Share app - Share to Stories - Shuffle - Simple - Sleep timer canceled. - Sleep timer set for %d minutes from now. - Slide - Small album + Pesquisar na sua biblioteca ... + Selecionar tudo + Selecione a foto do mural + Selecionado + Enviar log de falha + Definir + Definir imagem do artista + Definir uma foto de perfil + Partilhar o aplicativo + Partilhar para as Stories + Aleatório + Simples + Temporizador cancelado + Temporizador definido para %d minutos a partir de agora + Deslizar + Português Social - Share story - Song - Song duration - Songs - Sort order - Ascending - Album - Artist - Composer - Date added - Date modified - Year - Descending - Sorry! Your device doesn\'t support speech input - Search your library - Stack - Start playing music. - Suggestions - Just show your name on home screen - Support development - Swipe to unlock - Synced lyrics - System Equalizer + Partilhar Story + Música + Duração da música + Músicas + Ordem de classificação + Ascendente + Álbum + Artista + Compositor + Data + Data de modificação + Ano + Decrescente + Desculpe! O seu dispositivo não suporta entrada de voz + Pesquisar... + Pilha + Começar a reprodução de música. + Sugestões + Mostrar apenas o seu nome na ecrã inicial + Apoiar o desenvolvimento + Deslize para desbloquear + Letras sincronizadas + Equalizador do sistema Telegram - Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month - This week - This year - Tiny - Title - Dashboard - Good afternoon - Good day - Good evening - Good morning - Good night - What\'s Your Name - Today - Top albums - Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" - Track number - Translate - Help us translate the app to your language - Twitter - Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - Username - Version - Vertical flip - Virtualizer + Junte-se ao grupo no Telegram para discutir bugs, fazer sugestões e muito mais + Obrigado! + Arquivo de áudio + Este mês + Esta semana + Este ano + Minúsculo + Título + Painel de controle + Boa tarde + Bom dia + Boa noite + Bom dia + Boa noite + Como se chama? + Hoje + Melhores albuns + Artistas principais + "Música (2 para a música 2 ou 3004 para a música 4 do CD3)" + Número da música + Traduzir + Ajude-nos a traduzir a aplicação para o seu idioma + Twitter + Compartilhe o seu design com o Retro Music + Não rotulado + N\u00e3o foi poss\u00edvel reproduzir esta m\u00fasica. + A seguir + Atualizar imagem + A atualizar... + Nome de utilizador + Versão + Giro vertical + Virtualizador Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window - Rounded corners - Set %1$s as your ringtone. - %1$d selected - Year - You have to select at least one category. - You will be forwarded to the issue tracker website. - Your account data is only used for authentication. - Amount - Note(Optional) - Start payment - Show now playing screen - Clicking on the notification will show now playing screen instead of the home screen - Tiny card + Pesquisar na internet + Bem-vindo(a), + O que quer partilhar? + Novidades + Janela + Cantos arredondados + Definir %1$s como toque. + %1$sd selecionado + Ano + Precisa de selecionar pelo menos uma categoria. + Será encaminhado para o website do rastreador de problemas. + Os dados da sua conta são usados ​​apenas para autenticação. + Quantidade + Nota (opcional) + Começar pagamento + Mostrar ecrã de reprodução + Clicar na notificação irá mostrar o ecrã de repodução ao invés do ecrã principal. + Pequeno cartão From b7efd92203ba06c4edd79f2f9cdd8baea25cfeca Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 25 Mar 2021 10:47:45 +0530 Subject: [PATCH 0011/1603] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index e99cf7066..4d7129cb0 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,9 @@ [![Generic badge](https://img.shields.io/badge/Download-Google_Play-green.svg)](https://play.google.com/store/apps/details?id=code.name.monkey.retromusic&hl=en_IN) [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://github.com/h4h13/RetroMusicPlayer/blob/master/LICENSE.txt) [![Twitter Follow](https://img.shields.io/twitter/follow/retromusicapp?style=social)](https://twitter.com/retromusicapp) + +# ⚠ The app is discontinued, [here's why](https://t.me/retromusiclog/919). + ## 🆕 Material Design music player for Android music lovers ## Screenshots From 72125090d110785439cf6c75d45f296e24219e12 Mon Sep 17 00:00:00 2001 From: Hemanth S Date: Sun, 23 May 2021 06:43:32 -0700 Subject: [PATCH 0012/1603] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 4d7129cb0..94058bfcc 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,6 @@ [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://github.com/h4h13/RetroMusicPlayer/blob/master/LICENSE.txt) [![Twitter Follow](https://img.shields.io/twitter/follow/retromusicapp?style=social)](https://twitter.com/retromusicapp) -# ⚠ The app is discontinued, [here's why](https://t.me/retromusiclog/919). - ## 🆕 Material Design music player for Android music lovers ## Screenshots From 6a1c2fac3dd21364bb97cb2d7d1b179a3fbc1cb9 Mon Sep 17 00:00:00 2001 From: Awal Ariansyah <57579406+snowfluke@users.noreply.github.com> Date: Sun, 6 Jun 2021 17:23:26 +0700 Subject: [PATCH 0013/1603] Update Indonesian translation --- app/src/main/res/values-in-rID/strings.xml | 110 ++++++++++----------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index dbb7250cc..967c3f1f4 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -17,11 +17,11 @@ Rincian Ke album Ke artis - Ke aliran + Ke genre Ke direktori awal Izinkan - Jumlah kisi - Ukuran kisi (lanskap) + Jumlah grid + Jumlah grid (lanskap) Daftar putar baru Selanjutnya Putar @@ -43,11 +43,11 @@ Bagikan Acak semua Acak daftar putar - Pewaktu tidur + Pengatur waktu tidur Urutkan Pengubah tag - Toggle favorit - Toggle mode acak + Beralih favorit + Beralih mode acak Adaptif @@ -72,7 +72,7 @@ Selalu - Hei lihat pemutar musik keren ini di: + Hei, lihat pemutar musik keren ini di: https://play.google.com/store/apps/details?id=%s Acak Lagu teratas @@ -101,18 +101,18 @@ https://play.google.com/store/apps/details?id=%s Kartu Buram Tidak dapat mengirimkan laporan - Token akses tidak valid. Mohon hubungi pengembang apl. - Masalah tidak diaktifkan untuk repositori yang dipilih. Mohon hubungi pengembang apl. - Terjadi kesalahan tak terduga. Mohon hubungi pengembang apl. + Token akses tidak valid. Mohon hubungi pengembang aplikasi. + Masalah tidak diaktifkan untuk repositori yang dipilih. Mohon hubungi pengembang aplikasi. + Terjadi kesalahan tak terduga. Mohon hubungi pengembang aplikasi. Nama pengguna atau kata sandi salah - Isu + Masalah Kirimkan secara manual - Mohon masukkan deskripsi dari isu tersebut + Mohon masukkan deskripsi dari permasalahan tersebut Mohon masukkan kata sandi GitHub yang valid - Mohon masukkan judul isu + Mohon masukkan judul permasalahan Mohon masukkan nama akun GitHub yang valid Terjadi kesalahan tidak terduga. Maaf kamu mengalami masalah ini, jika -tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email +tetap bermasalah, \"Hapus data Aplikasi\" atau kirimkan Email Kirim menggunakan akun GitHub Beli sekarang @@ -123,7 +123,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Kartu Berwarna Kartu - Efek karosel pada layar sedang diputar + Efek karosel pada layar yang sedang diputar Tersusun ke bawah @@ -151,7 +151,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Tidak dapat membuat daftar putar "Tidak dapat mengunduh sampul album yang cocok." Tidak dapat mengembalikan pembelian - Tidak dapat memindai %d file + Tidak dapat memindai berkas %d Buat @@ -159,7 +159,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Member dan kontributor - Terakhir kali mengdengarkan %1$s oleh %2$s. + Terakhir kali mendengarkan %1$s oleh %2$s. Agak gelap @@ -187,7 +187,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email %1$s dari daftar hitam?]]> Donasi - Jika anda rasa saya berhak dibayar untuk karya saya, anda dapat berdonasi disini + Jika kamu merasa saya berhak dibayar berdasarkan karya saya, kamu dapat berdonasi disini Belikan saya: @@ -201,7 +201,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Favorit - Menyelesaikan lagu terakhir + Selesaikan lagu terakhir Pas @@ -211,7 +211,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Ikuti sistem - Untuk anda + Untuk kamu Gratis @@ -221,9 +221,9 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Ubah tema dan warna dari aplikasi Tampilan - Aliran + Genre - Aliran + Genre Fork projek di GitHub @@ -235,7 +235,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email 6 7 8 - Gaya kisi + Gaya grid Engsel @@ -251,7 +251,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Lagu %1$d dimasukan ke daftar putar %2$s - Bagikan pengaturan Retro Musicmu di Instagram untuk menunjukannya + Bagikan pengaturan Retro Musicmu di Instagram untuk memamerkannya Papan ketik @@ -285,11 +285,11 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Lirik - Dibuat dengan cinta ❤️ di India + Dibuat dengan ❤️ di India Material - Galat + Gagal Kesalahan perizinan Nama @@ -304,11 +304,11 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Tidak ada album Tidak ada artis - "Putar lagu lebih dahulu, lalu coba lagi" + "Putar lagu lebih dulu, lalu coba lagi" Ekualiser tidak ditemukan Tidak ada genre Lirik tidak ditemukan - Tidak ada lagu diputar + Tidak ada lagu yang sedang diputar Tidak ada daftar putar Pembelian tidak ditemukan Tidak ada hasil @@ -319,14 +319,14 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email %s tidak ada di daftar media]]> - Tak ada apapun untuk dipindai + Tidak ada apapun untuk dipindai Tidak ada apapun untuk dilihat Pemberitahuan Sesuaikan gaya pemberitahuan Sedang diputar - Antrean sedang dimutar + Antrean sedang diputar Kostumisasi layar sedang diputar 9+ gaya sedang diputar @@ -356,7 +356,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Polos - Notifikasi pemutaran menyediakan tindakan untuk mainkan/jeda, dsb. + Notifikasi pemutaran menyediakan aksi untuk mainkan/jeda, dsb. Notifikasi pemutaran Daftar putar kosong @@ -366,8 +366,8 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Tingkat keburaman diaplikasikan pada tema buram, lebih rendah membuat lebih cepat Tingkat keburaman - Urutkan berdasar panjang lagu - Filter berdasar durasi lagu + Filter lagu berdasarkan panjang + Filter lagu berdasarkan durasi Lanjutan Gaya album Audio @@ -385,7 +385,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Pilih bahasa Menggunakan sampul album lagu yang sedang diputar sebagai wallpaper layar kunci Volume lebih rendah ketika suara sistem diputar atau terdapat notifikasi baru - Konten folder yang telah didaftar hitamkan disembunyikan dari pustaka. + Konten folder yang berada di daftar hitam disembunyikan dari pustaka. Mulai pemutaran saat terhubung dengan perangkat bluetooth Blur sampul album di layar kunci. Dapat menyebabkan masalah dengan aplikasi pihak ketiga dan widget. Efek karosel di sampul album yang sedang diputar. Ingat bahwa Kartu dan Kartu Buram tidak akan bekerja @@ -393,23 +393,23 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Latar belakang, Warna tombol kontrol berubah sesuai sampul album lagu yang diputar Warna pintasan aplikasi dalam warna aksen. Setiap kali anda mengubahnya, restart aplikasi untuk menerapkan efek "Warna notifikasi berdasarkan warna dominan sampul album" - Berdasarkan peraturan Desain Material dalam mode gelap, warna haruslah didesaturasikan - Mengklik pada notifikasi akan menampilkan layar sedang diputar bukan layar beranda + Berdasarkan aturan Material Design dalam mode gelap, warna haruslah didesaturasikan + Ketuk notifikasi akan menampilkan layar sedang diputar bukan layar beranda Tambahkan kontrol tambahan untuk pemutar mini Tampilkan informasi lagu tambahan, seperti format file, bitrate dan frekuensi "Dapat menyebabkan masalah pemutaran pada beberapa perangkat." - Toggle gaya banner beranda + Beralih gaya banner beranda Dapat meningkatkan kualitas sampul album tetapi menyebabkan waktu pemuatan gambar lebih lambat. Hanya aktifkan ini jika Anda memiliki masalah dengan gambar resolusi rendah. Atur visibilitas dan perintah dari kategori pustaka. Gunakan kontrol layar kunci Retro Music - Rincian Lisensi untuk aplikasi sumber terbuka + Rincian Lisensi untuk aplikasi open-source Mode immersif Putar segera setelah headphones terhubung. Mode acak akan non-aktif ketika memutar lagu baru dari daftar - Jika tersedia ruang yang memadai, tampilkan pengendai suara di layar sedang diputar + Jika tersedia ruang yang memadai, tampilkan pengatur volume di layar sedang diputar Tampilkan sampul album Tema sampul album - Sampul album lewati + Lewati sampul album Pintasan aplikasi berwarna Kurangi volume ketika hilang fokus Otomatis unduh gambar artis @@ -425,13 +425,13 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Info lagu Pemutaran tanpa jeda Tema aplikasi - Kisi beranda artis + Grid beranda artis Banner beranda - Abaikan sampul Media Store + Abaikan sampul penyimpanan media Interval daftar putar terbaru Kontrol layar penuh Tema sedang diputar - Lisensi sumber terbuka + Lisensi open-source Mode tab judul Efek Karosel Layar penuh aplikasi @@ -464,7 +464,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Ganti nama daftar putar - Laporkan isu + Laporkan permasalahan Laporkan bug Setel ulang @@ -483,21 +483,21 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Gagal menghapus file: %s Gagal mendapatkan SAF URI - Buka laci notifikasi - Aktifkan \'Tampilkan Kartu SD\' di menu luapan + Buka kotak navigasi + Aktifkan \'Tampilkan Kartu SD\' di menu overflow %s membutuhkan akses kartu SD Anda perlu memilih direktori akar kartu SD anda - Pilih kartu SD anda di laci navigasi + Pilih kartu SD anda di kotak navigasi Jangan buka sub-folder apapun - Ketuk tombol \'pilih\' pada bagaian bawah layar - Gagal menulis file: %s + Ketuk tombol \'pilih\' pada bagian bawah layar + Gagal menuliskan berkas: %s Simpan Simpan berkas sebagai - Simpan file sebagai + Simpan berkas sebagai Daftar putar disimpan ke %s. @@ -516,7 +516,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Atur Setel gambar artis - Bagikan Apl + Bagikan Apllikasi Bagikan ke Cerita Acak @@ -524,7 +524,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Sederhana Waktu tidur dibatalkan. - Pewaktu tidur diatur %d menit dari sekarang. + Pengatur waktu tidur diatur %d menit dari sekarang. Sosial Bagikan cerita @@ -568,7 +568,7 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Berkas audio Bulan ini - Pekan ini + Minggu ini Tahun ini Kecil @@ -585,9 +585,9 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirim Email Nomor trek Terjemahkan - Bantu kami untuk menerjemahkan aplikasi ke bahasa anda + Bantu kami untuk menerjemahkan aplikasi ke bahasa kamu - Try Retro Music Premium + Coba Retro Music versi Premium Twitter Bagikan desain anda dengan Retro Music From b4a8ed968ac8d938c1f26aaf847cbdc86ab212d6 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:07:06 +0530 Subject: [PATCH 0014/1603] Update Crowdin configuration file --- crowdin.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 crowdin.yml diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 000000000..c0fd32fbb --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,5 @@ +files: + - source: /app/src/main/res/values-en-rUS/strings.xml + translation: /app/src/main/res/values-%android_code%/strings.xml + translatable_elements: + - strings.xml From 62ab41c01e50c0b0921d1639a698122d5892f3d6 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:29:19 +0530 Subject: [PATCH 0015/1603] Update Crowdin configuration file --- crowdin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crowdin.yml b/crowdin.yml index c0fd32fbb..4d12f3cc2 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,5 +1,5 @@ files: - - source: /app/src/main/res/values-en-rUS/strings.xml + - source: /app/src/main/res/values/strings.xml translation: /app/src/main/res/values-%android_code%/strings.xml translatable_elements: - strings.xml From 4bf5a3aa5f3ae0dd8e12d27c33718d3ad47ad71e Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:44:25 +0530 Subject: [PATCH 0016/1603] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 94058bfcc..45351fe29 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![Generic badge](https://img.shields.io/badge/Download-Google_Play-green.svg)](https://play.google.com/store/apps/details?id=code.name.monkey.retromusic&hl=en_IN) [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://github.com/h4h13/RetroMusicPlayer/blob/master/LICENSE.txt) [![Twitter Follow](https://img.shields.io/twitter/follow/retromusicapp?style=social)](https://twitter.com/retromusicapp) +[![Crowdin](https://badges.crowdin.net/retromusicplayer/localized.svg)](https://crowdin.com/project/retromusicplayer) ## 🆕 Material Design music player for Android music lovers @@ -60,7 +61,7 @@ favorite songs. No other music player has this feature. - Create, edit and import playlists - Playing queue with reorder - User profile -- 30+ languages support +- 30+ languages support (help translate the project: [Crowdin](https://crowdin.com/project/retromusicplayer) - Browse and play your music by songs, albums, artists, playlists and genre - Smart Auto Playlists - Recently played, most played and history From bc593953a3b488ed55ddba7d55ff6bcc57fa30d5 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:27 +0530 Subject: [PATCH 0017/1603] New translations strings.xml (Romanian) --- app/src/main/res/values-ro-rRO/strings.xml | 207 +++------------------ 1 file changed, 21 insertions(+), 186 deletions(-) diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index e5b845d4e..934dbfdbb 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Culoare ton Culoarea de accent, implicit, se face verde. - Despre Adaugă la favorite Adaugă la coada de redare @@ -48,34 +46,25 @@ Redactor info Toggle favorite Toggle shuffle mode - Adaptive - Adaugă "Adaugă la playlist" - "Adăugat 1 titlu la coada de redare." Adăugate %1$d titluri la coada de redare - Album - Song Songs Songs - Artistul albumului - Albume Album Albums Albums - Mereu - Hey! încearcă acest music player la adresa: https://play.google.com/store/apps/details?id=%s Amestecă Top cântece @@ -84,25 +73,16 @@ Classic Mic Text - Artist - Artiști - Folcalizarea audio a fost respinsă. Ajustați setările de sunet și comenzile egalizatorului - Auto - Biografie - Negru - Lista neagră - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -116,55 +96,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Anulează cronometrul curent - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Modificări Lista de modificări păstrată din aplicația \"Telegram\" - Circle - Circular - Classic - Șterge Șterge \"Lista neagră\" Clear queue - Culoare - Culori - Composer - Copied device info to clipboard. - Nu s-a putut crea playlist. "Nu s-a putut desc\u0103rca o copert\u0103 de album corespunz\u0103toare." Nu a putut fi restabilită achiziția. Nu s-au putut scana %d fișiere - Crează - S-a creat playlist-ul %1$s. - Members and contributors - Acum ascultați %1$s de %2$s. - Suriu - Șterge playlist %1$s?]]> Șterge playlist-uri @@ -173,62 +133,38 @@ Delete songs %1$d playlist-uri?]]> %1$d cântece?]]> - Au fost șterse %1$d cântece. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Doriți să ștergeți lista neagră? %1$s din lista neagră?]]> - Donează Dacă ești de părere că merit să fiu plătit pentru munca mea, poți să donezi aici. - Cumpăraţi-mi o(un) - + Done Drive mode - Gol - Egalizator - FAQ - Favorite - Finish last song - Fit - Uniform - Mape - Follow system - Pentru dvs. - Free - Plin Full card - Schimbați culorile generale ale aplicației Aspect - Gen muzical - Genuri - Fork the project on GitHub - + Gradient 1 2 3 @@ -238,25 +174,20 @@ 7 8 Grid style - + Need more help? Hinge - Istoric - Acasă - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Au fost insertate %1$d cântece în playlist-ul %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format Numele fișierului @@ -265,45 +196,27 @@ More from %s Rata de eșantionare Lungime - Labeled - Adăugate recent Last song - Library categories - Licențe - Alb - Listeners - Listarea fișierelor - Se încarcă produsele... - Login - Versuri - Made with ❤️ in India - Material - Error Permission error - Numele Meu Top cântece redate - Niciodată - Playlist nou %s a fost setat ca noul registru principal. - Next Song - Niciun album Niciun artist "Mai întâi redă un cântec, apoi incearcă din nou." @@ -315,57 +228,39 @@ Nu s-a găsit nicio achiziție. Niciun rezultat Niciun cântec - Normal Normal lyrics - %s nu este litsat în magazinul media.]]> - + Not recently played Nimic de scanat. Nothing to see - Notificare Personalizează stil de notificare - Se redă Coada de redare Customize the now playing screen 9+ now playing themes - Doar pe Wi-Fi - Advanced testing features - Altele - Password - Ultimele 3 luni - Peak - Accesul la stocarea externă este respinsă. - + The app needs permission to access your device storage for playing music + Storage Access Permisiunile au fost respinse. - Personalizare Personalizează UI si pagina de redare - Alegeți din spațiul de stocare local - Pinterest Follow Pinterest page for Retro Music design inspiration - Simplu - Notificarea de redare oferă acțiuni de redare / pauză etc. Notificarea de redare - Playlist-ul este gol Numele playlist-ului - Playlist-uri - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -373,7 +268,7 @@ Advanced Album style Audio - Blacklist + Lista neagră Controls General Imagini @@ -386,6 +281,7 @@ Keep the screen on Select language Folosește coperta de album curentă ca imagine de fundal pe ecranul de blocare. + Show Album Artists in the Artist category Notificațiile, navigarea etc. The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -410,12 +306,13 @@ Shuffle mode will turn off when playing a new list of songs Dacă aveți spațiu pe ecranul de redare, activați controalele de volum Afișați coperta albumului + Navigate by Album Artist Album cover theme Album cover skip Comenzi rapide colorate Reduce volumul la pierderea focalizării Descărcați automat imagini ale artistului - Blacklist + Lista neagră Bluetooth playback Spălăcește coperta albumului Design classic de notificare @@ -427,6 +324,7 @@ Song info Redare \"Gapless\" Temă + Album grid Artist grid Banner Ignoră copertele de pe Magazinul Media @@ -440,22 +338,15 @@ Redare automată Shuffle mode Controale volum - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Procurare - Coadă - Evaluaţi aplicaţia Dacă vă place această aplicație, anunțați-ne în magazinul Google Play pentru a oferi o experiență mai bună - Albume recente Artişti recenţi - Eliminare Eliminare copertă Eliminare din lista neagră @@ -463,25 +354,19 @@ %1$s din lista de redare?]]> Eliminare melodii din lista de redare %1$d melodii din lista de redare?]]> - Redenumiţi lista de redare - Report an issue Report bug - Reset Reseteţi imaginea artistului - Restabilire - A fost restaurată achiziția anterioară. Reporniți aplicația pentru a utiliza toate funcțiile. Au fost restabilite achizițiile anterioare. - Se restabilește achiziția... - Retro Music Player Cumpărați RetroMusic Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -494,48 +379,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Salvare ca fişier Save as files - Salvaţi lista de redare în %s. - Salvare modificări - Scan media - Au fost scanate %1$d din %2$d fişiere. - Scrobbles - Select all - Selected - Set Setaţi imaginea artistului - Share app + Share the app with your friends and family Share to Stories - Amestecare - Simplu - Temporizatorul a fost anulat. Temporizatorul este setat pentru %d minute de acum. - Social Share story - Melodie Durată - Melodii - ordinea de sortare Ascending Album @@ -543,93 +412,59 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Scuze! Dispozitivul tau nu suporta comenzi vocale Caută în colecția ta - Stack - Start playing music. - Suggestions - Susţineţi dezvoltarea - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Mulțumesc! - Fișier audio - Luna aceasta Săptămâna aceasta Anul acesta - Mic Tiny card - Title - Astăzi - Albume de top Artişti de top - "Melodie (2 pentru melodia 2 sau 3004 pentru CD3 melodia 4)" Numărul piesei - Traducere Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Nu s-a putut reda aceast\u0103 melodie. - Urmează - Actualizare imagine - Se actualizează... - + User Name Username - Versiune - Vertical flip - Volume - Căutare pe internet - Welcome, - Ce doriți să expediați? - What\'s New - Fereastră Rounded corners - Setează %1$s ca ton de apel %1$d selectat - Anul - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 8090a9ca8ccc0876bbc76dc4a1565095bd5a9b90 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:28 +0530 Subject: [PATCH 0018/1603] New translations strings.xml (Thai) --- app/src/main/res/values-th-rTH/strings.xml | 1000 +++++++++----------- 1 file changed, 466 insertions(+), 534 deletions(-) diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index 95f1c8a38..107d2d644 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -1,534 +1,466 @@ - - - ติดต่อผู้พัฒนา - ลบ - ลบออกจากอุปกรณ์ - รายละเอียด - ไปที่อัลบั้ม - ไปที่ศิลปิน - เน้นสี - ถัดไป - เล่น - เล่นทั้งหมด - ไปที่ประเภท - เล่นเพลงถัดไป - เกี่ยวกับ - เพิ่มในเพลงที่ชอบ - เพิ่มลงในคิวเพลง - เพิ่มในเพลย์ลิส - ล้างคิวเพลง - ล้างเพลย์ลิสต์ - ไปแฟ้มเริ่มต้น - เล่น/พัก - ก่อนหน้า - ลบออกจากเพลงที่ชอบ - ลบออกจากคิวเพลง - เปลี่ยนชื่อ - สแกน - ค้นหา - เริ่ม - ตั้งเป็นเสียงเรียกเข้า - ตั้งเป็นแฟ้มเริ่มต้น - ตั้งค่า - แชร์ - สลับทั้งหมด - ตั้งเวลาสลีบ - แก้แท็ก - เพิ่ม - เพิ่มเนื้อร้อง - เพิ่มรูปภาพ - เพิ่มรายการเพลง - อัลบั้ม - เพิ่ม 1 เพลงเข้าไปในคิวเพลง - อัลบั้ม - เต็มหน้าจอ - การ์ด - คลาสสิก - ขนาดเล็ก - ข้อความน้อย - ศิลปิน - ศิลปิน - อัตโนมัติ - ข้อมูลศิลปิน - ดำสนิท(ต้องตั้งธีมดำก่อน) - เบลอ - เบลอการ์ด - แคส - ล้างข้อมูลแอป - ล้างเพลลิส - ล้างการแจ้งเตือน - สีธีม - ไม่มีเนื้อร้อง - กำลังลบเพลง - อ้างอิงข้อมูลจาก Last.fm - แก้ไข - ผิดพลาด - เข้าร่วมกลุ่ม Google+ - เพิ่มรูปโปรไฟล์ - ปกติ - วางเนื้อเพลงที่นี่ - ประวัติ - บานพับ - นี่ มาลองใช้แอปฟังเพลงนี้ดูสิ หวังว่าจะชอบนะ: https://play.google.com/store/apps/details?id=%s - มาช่วยแปลภาษาในแอปเรากันเถอะ(ไหว้หละ) - หน้าหลัก - พลิกแนวนอน - ผิดพลาด - ประวัติ - เพิ่มเบส - กำลังส่งรีพอร์ตไป GitHub - แก้ไขปก - ตั้งเป็นรูปโปรไฟล์ - ส่งข้อมูลผิดพลาด - แดชบอร์ด - สวัสดีตอนบ่าย - เป็นวันที่ดีนะ - อรุณสวัส - ต้อนรับเช้าวันใหม่ - สวัสดีตอนเที่ยง อย่าลืมกินข้าวนะ - คุณชื่ออะไร - ปรับแต่งเสียง - เลือก %1$d แล้ว - ต้องการเข้าถึง Sd card %s - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - เกี่ยวกับ%s - เข้ากับธีม - เข้ากับสี - เพิ่ม %1$ เพลงเข้าคิวเพลงแล้ว - เพิ่มปุ่มควบคุม Mini Player - ขั้นสูง - ฟีเจอร์ทดลอง - อัลบั้ม - อัลบั้มศิลปิน - ตลิด - จำนวนความเบลอที่ใช้สำหรับธีม(ยิ่งน้อยยิ่งเร็ว) - ธีมแอป - ศิลปิน - จากน้อยไปมาก - เสียง - เล่นอัตโนมัติ - แบนเนอร์ - บิตเรท - แบล็กลิสต์ - แบล็กลิสต์ - แบล็กลิสต์ - ธีมสีดำ,ธีมกำลังเล่นและอื่นๆ - เบลอปกอัลบั้ม - ซื้อให้เรา: - ซื้อเลย - ยกเลิก - การ์ด - การ์ด - เอฟเฟกต์แบบหมุน - หากใช้งานเอฟเฟกต์แบบหมุนสำหรับปกอัลบั้มอยู่ โปรดทราบว่าธีมการ์ดและการ์ดเบลอจะไม่ทำงาน - บันทึกการเปลี่ยนแปลง - ดูบันทึกการเปลี่ยนแปลงได้ที่ช่องทาง Telegram - วงกลม - วงกลม - คลาสสิก - การแจ้งเตือนแบบคลาสสิก - ล้าง - ล้างแบล็กลิสต์ - ขาวนวล - สี - สี - สีแจ้งเตือน - แฟลชการ์ด - สีทางลัดของแอพด้วยสีที่เน้น ทุกครั้งที่คุณเปลี่ยนสีโปรดสลับเพื่อให้มีผล - สีแถบการแจ้งเตือนจะเหมือนสีปก - ผู้แต่ง - ผู้แต่ง - กำหนดค่าการเปิดเผยและลำดับของหมวดหมู่ไลบรารี - ควบคุม - คัดลอกข้อมูลอุปกรณ์ไปยังคลิปบอร์ด - สร้าง - ไม่สามารถกู้คืนการซื้อได้ - ลบเพลย์ลิสต์ - ลบเพลง - ลบเพลง - ลบเพลย์ลิสต์ - ความลึก - สีไม่อิ่มตัว - จากมากไปน้อย - คำอธิบาย - ข้อมูลอุปกรณ์ - สนับสนุนนักพัฒนา - เสร็จแล้ว - อย่าเปิดโฟลเดอร์ย่อย - แน่ใจนะว่าจะล้างแบล็กลิสต์? - โหมดขับรถและแว๊นมอไซค์ - ว่างเปล่า - อีควอไลเซอร์ - คำถามที่พบบ่อย - ปุ่มควบคุมเพิ่มเติม - รายการโปรด - การลบไฟล์ล้มเหลว: %s - ที่อยู่ไฟล์ - ชื่อไฟล์ - การเขียนไฟล์ล้มเหลว: %s - กรองระยะเวลาเพลง - กรองเพลงตามความยาว - จบเพลงสุดท้าย - พอดี - แบน - โฟลเดอร์ - ติดตาม Pinterest เพื่อค้นหาแรงบันดาลใจการออกแบบ Retro Music - ร่วมโปรเจ็คใน GitHub - ฟอร์แมต - สำหรับคุณ - ฟรี - เต็ม - การ์ดขนาดใหญ่ - เต็มหน้าจอ - ปุ่มควบคุมเต็มหน้าจอ - ประเภท - เล่นต่อเนื่อง - ประเภท - ภาพไล่ระดับสี - ให้สิทธิ์ - ขนาดตาราง - ขนาดตาราง (ต่อขนาดจอ) - รูปแบบตาราง - หากมีพื้นที่เพียงพอให้แสดงตัวควบคุมระดับเสียงในหน้าจอที่กำลังเล่นอยู่ - ถ้าคิดว่าแอปนี้ดีหละก็ สนับสนุนเราได้นะ - ละเว้นปก Media Store - รูปภาพ - รูปภาพ - นำเข้า - นำเข้าเพลย์ลิสต์ - อินสตาแกรม - ปัญหา - คีย์บอร์ด - เปิดหน้าจอไว้ - ค่อนข้างมืด - ป้ายกำกับ - เพิ่มล่าสุด - ช่วงเพลย์ลิสต์ที่เพิ่มล่าสุด - เพลงสุดท้าย - ระยะเวลา - รายชื่อ - หมวดหมู่คลีงเพลง - รายละเอียดใบอนุญาตสำหรับซอฟต์แวร์โอเพนซอร์ส - ใบอนุญาต - ผู้ฟัง - รายชื่อไฟล์ - กำลังโหลดผลิตภัณฑ์.... - ล็อกหน้าจอ - เข้าสู่ระบบ - ชอบแอปนี้หรือป่าว? ถ้าชอบหละก็อยากให้เราปรับปรุงอะไรบอกเราได้ใน Google Play Store ได้นะ ถึงเราจะเป็นทีมเล็กๆแต่ก็พร้อมรับฟังทุกปัญหาเลยแหละ(มั้ง) - ลดระดับเสียงเมื่อมีการแจ้งเตือน - สร้างโดย❤️ชาวอินเดีย - ทีมนักพัฒนา - เพิ่มเติมจาก %s - เล่นบ่อย - ชื่อ - มีอะไรให้ช่วยมั้ย - รายการเพลงใหม่ - รายการเพลงใหม่ - เพลงถัดไป - " ไม่พบอีควอไลเซอร์" - ไม่พบเนื้อเพลง - " ไม่พบการซื้อ" - ไม่มีผลลัพธ์ - ปกติ - " เนื้อเพลงปกติ" - ไม่มีอะไรให้สแกน - ไม่มีอะไรให้ดู - การแจ้งเตือน - ปรับแต่งรูปแบบการแจ้งเตือน - กำลังเล่น - คิวที่กำลังเล่น - ปรับแต่งหน้าจอที่กำลังเล่นอยู่ - มีธีมกำลังเล่นมากกว่า9 ธีมให้ปรับแต่ง - เฉพาะ Wi-Fi - อื่นๆ - รหัสผ่าน - " 3 เดือนที่ผ่านมา" - จุดพีค - ไม่มีสิทธิเข้าถึงข้อมูล - " สิทธิ์ถูกปฏิเสธ" - " ปรับแต่ง" - ปรับแต่ง UI และธีมกำลังเล่นให้เหมาะกับสไตล์ผู้ใช่ - " เลือกจากที่จัดเก็บในตัวเครื่อง" - เลือกภาพ - " เรียบ" - เมื่อมีการแจ้งเตือน เพลงจะหยุดชั่วขณะหนึ่ง - การแจ้งเตือนตอนเพลงเล่นอยู่ - "เพลย์ลิสต์ว่างเปล่า" - เพลย์ลิสต์ว่างเปล่า - " ชื่อเพลย์ลิสต์" - เพลย์ลิสต์ - สไตล์รายละเอียดอัลบั้ม - ระดับความเบลอ - ปรับมุมกล่องโต้ตอบด้านล่างของแผ่นงาน - " รูปแบบอัลบั้ม" - ธีม - " เพลย์ลิสต์" - " หยุดเพลงชั่วคราวเมื่อระดับเสียงลดลงเป็นศูนย์และเริ่มเล่นเมื่อระดับเสียงดังขึ้น (มีผลกับแอปอื่นด้วย)" - " หยุดชั่วคราวเมื่อลดเสียง" - " โปรดทราบว่าการเปิดใช้งานคุณสมบัตินี้อาจส่งผลต่ออายุการใช้งานแบตเตอรี่" - "คลิกเพื่อเปิดหรือเลื่อนไปโดยไม่มีการนำทางแบบโปร่งใสของหน้าจอที่กำลังเล่นอยู่" - "คลิกหรือสไลด์" - ใช้ปกอัลบั้มเพลงที่กำลังเล่นอยู่เป็นวอลเปเปอร์หน้าจอล็อก - แถบนำทางสี - ธีมกำลังเล่น - ใบอนุญาตโอเพนซอร์ส - แปลภาษา - วันนี้ - ทวิตเตอร์ - แชร์ะีมของคุณด้วยแอปเรโทรมิวสิค - ไม่มีป้ายกำกับ - ต่อไป - อัปเดตรูปภาพ - กำลังอัพเดท..... - ชื่อผู้ใช้ - เวอร์ชัน - พลิกแนวตั้ง - ระดับเสียง - ยินดีต้อนรับ - คุณอยากจะแชร์อะไร? - มีอะไรใหม่๐บ้าง - หน้าต่าง - มุมโค้งมน - ตั้ง %1$s เป็นเสียงเรียกเข้า - ปี - คุณต้องเลือกอย่างน้อยหนึ่งหมวดหมู่ - คุณจะถูกส่งต่อไปยังเว็บไซต์ติดตามปัญหา - ข้อมูลบัญชีของคุณใช้สำหรับการตรวจสอบสิทธิ์เท่านั้น - จำนวน - โน๊ต(ไม่บังคับ) - เริ่มการชำระเงิน - แสดงหน้าจอกำลังเล่น - เข้าถึงข้อมูล - เปลี่ยนภาษา - ลองใช้เรโทร มิวสิค พรีเมี่ยม - จำนวนเพลง - ชื่อผู้ใช้ - แชร์แอพกับเพื่อนและครอบครัวของคุณ - เสียงเรียกเข้า - แอปต้องการสิทธิ์ในการเข้าถึงการตั้งค่าอุปกรณ์ของคุณเพื่อตั้งค่าเพลงเป็นเสียงเรียกเข้า - รายละเอียดการนับเพลง - ตารางอัลบั้ม - นำทางโดย Album Artist - การคลิกที่การแจ้งเตือนจะแสดงหน้าจอกำลังเล่นแทนหน้าจอหลัก - อัลบั้มที่ฟังบ่อย - ศิลปินที่ฟังบ่อย - หมายเลขแทร็ก - แทร็ก (2 สำหรับแทร็ก 2 หรือ 3004 สำหรับซีดี 3 แทร็ก 4) - แนะนำ - ขออภัย! อุปกรณ์ของคุณไม่รองรับการป้อนข้อมูลด้วยเสียง - สีเน้นหัวข้อหลัก ค่าเริ่มต้นคือสีม่วง - โหมดวนซ้ำ - สุ่มรายการเพลง - เรียงลำดับ - สลับรายการโปรด - สลับโหมดสุ่ม - ไม่พบเพลงหรือศิลปินที่ระบุไว้ - สุ่ม - เพลงที่ฟังบ่อย - ปฏิเสธการโฟกัสเสียง - ควบคุมอีควอไลเซอร์และตั้งค่าเสียงให้เหมาะกับแนวของคุณ - ธีมสีพื้นฐาน - "ลบออกจากเพลย์ลิสต์ " - บันทึกคิวเพลง - เพิ่มเวลาเนื้อเพลง - ส่งในนาม GitHub - วงกลม - หมุน - เอฟเฟกต์แบบหมุนบนหน้าจอที่กำลังเล่นอยู่ - ลดหลั่น - %1$sใช่มั้ย?.=]]> - %1$s?]]> - %1$d เพลย์ลิสต์?]]> - ลบ %1$d เพลงแล้ว - อนุญาตให้ Retro Music แก้ไขการตั้งค่าเสียง - ตั้งเป็นเสียงเรียกเข้า - กำลังฟังอยู่ %1$s โดย %2$s. - %1$sแบล็คลิสต์?]]> - ตามธีมระบบ - เปลี่ยนธีมและสีของแอพ - เปลี่ยนสีธีม - เปลี่ยนการตั้งค่าการดาวน์โหลดรูปภาพของศิลปิน - เพิ่ม %1$d เพลง ลงในเพลย์ลิสต์%2$sแล้ว - แชร์การตั้งค่าธีมแอป Retro Music ลงในอินสตาแกรม - ขนาด - อัตราการสุ่มตัวอย่าง - มาเล่นเพลงกัน - คลังเพลง - เนื้อเพลง - รูปทรงเรขาคณิต - ข้อผิดพลาดในการขอสิทธิ์เข้าถึง - ไม่เคย - รูปภาพแบนเนอร์ใหม่ - %s คือไดเร็กทอรีเริ่มต้นใหม่ - ไม่มีอัลบั้ม - ไม่มีศิลปิน - เล่นเพลงก่อนแล้วลองอีกครั้ง - ไม่มีประเภท - ไม่มีเพลงให้เล่น - ไม่มีเพลย์ลิสต์ - ไม่มีเพลง - %sไม่มีรายชื่ออยู่ในที่เก็บสื่อ]]> - มุมโต้ตอบ - หิมะตก - เนื้อหาของโฟลเดอร์ที่ขึ้นบัญชีดำ - ปกศิลปิน - ลดระดับเสียงเมื่อสูญเสียโฟกัส - ดาวน์โหลดภาพศิลปินอัตโนมัติ - ปกอัลบั้ม - ธีมปกอัลบั้ม - ปกอัลบั้มข้ามไป - แสดงปกอัลบั้ม - ทางลัดแอปสี - ควบคุมผ่านบรูทูธ - ข้อมูลเพลง - แสดงแท็บประเภท - ปกศิลปิน - ขอบมุม - โหมดชื่อแท็บ - สีที่โดดเด่น - ชื่อแท็บ - ควบคุมระดับเสียง - โหมดสุ่ม - ข้อมูลผู้ใช้ - สีหลัก - สีของชุดรูปแบบหลักมีค่าเริ่มต้นเป็นสีเทาสีน้ำเงินสำหรับตอนนี้ใช้งานได้กับสีเข้ม - โปร - ข้อมูลส่วนตัว - ซื้อ - * คิดก่อนซื้อ ไม่สามรถคืนเงินได้ - กำลังเล่นคิว - ให้คะแนนแอป - อัลบั้มเล่นล่าสุด - ศิลปินเล่นล่าสุด - ถอดถอน - ลบภาพแบนเนอร์ - ถอดฝาครอบออก - ลบออกจากบัญชีดำ - ลบรูปโปรไฟล์ - ลบเพลงออกจากเพลย์ลิส - เมื่อเชื่อมต่อบลูทูธแล้วเพลงจะเริ่มเล่นทันที - เบลอปกอัลบั้มบนหน้าจอล็อก อาจทำให้เกิดปัญหากับแอพอื่นๆ - ใช้บการแจ้งเตือนแบบคลาสสิก - สีพื้นหลังและปุ่มควบคุมจะเปลี่ยนไปตามหน้าปกอัลบั้มจากหน้าจอที่กำลังเล่นอยู่ - สีแถบนำทางเป็นสีหลัก - เมื่อใช้โหมดนี้ในธีมสีดำ โลโก้จะเปลี่ยนรูปแบบสีเพื่อให้มองง่ายขึ้น - สีที่โดดเด่นส่วนใหญ่จะเลือกจากปกอัลบั้มหรือศิลปิน - แสดงข้อมูลเพลงเพิ่มเติมเช่นรูปแบบ,ไฟล์บิตเรตและความถี่ - อาจทำให้เกิดปัญหาในการเล่น - สลับแท็บประเภท - แสดงหรือซ่อนแบนเนอร์หน้าแรก - "เปิดใช้งานเฉพาะเมื่อคุณมีปัญหารูปภาพปกไม่ค่อยชัด สามารถเพิ่มคุณภาพปกอัลบั้มได้ แต่ทำให้เวลาโหลดภาพช้าลง " - ใช้การควบคุมหน้าจอล็อกที่กำหนดเองของ Retro Music - ปัดขอบของแอป - โหมดเต็มจอ - โหมดสุ่มจะปิดเมื่อเล่นรายการเพลงใหม่ - เลือกอีควอไลเซอร์ - เริ่มเล่นทันทีหลังจากเชื่อมต่อหูฟัง - ลบเพลงออกจากเพลย์ลิส - >%1$s เพลย์ลิส?]]> - %1$d เพลงจากเพลย์ลิส?]]> - เปลี่ยนชื่อเพลย์ลิส - รายงานปัญหา - รายงานบั๊ก - รีเซ็ต - รีเซ็ตภาพศิลปิน - คืนค่า - ถ้าซื้อแล้ว กรุณารีสตาร์ทเพื่อใช้ฟีเจอร์ทั้งหมดในแอปได้อย่างสมบูรณ์แบบ - กู้คืนการซื้อก่อนหน้านี้ - กำลังกู้คืนการซื้อ ... - "อีควอไลเซอร์ เรโทรมิวสิค " - เรโทรมิวสิค โปร - ไม่สามรถรับ SAF URI ได้ - เปิดลิ้นชักการนำทาง - เปิดใช้งาน \"แสดงการ์ด SD\" ในเมนูรายการเพิ่มเติม - คุณต้องเลือกไดเรกทอรีรากของการ์ด SD - เลือกการ์ด SD ของคุณในลิ้นชักการนำทาง - แตะปุ่ม \'เลือก\' ที่ด้านล่างของหน้าจอ - บันทึก - บันทึกเป็น - บันทึกเป็น - บันทึกเพลย์ลิสต์ไปที่ %s. - กำลังบันทึกการเปลี่ยนแปลง - สแกนสื่อ - แสกนไฟล์ %1$d และ %2$d แล้ว - ค้นหาคลังเพลงของคุณ ... - เลือกทั้งหมด - เลือกรูปภาพแบนเนอร์ - เลือกแล้ว - เซ็ต - ตั้งค่ารูปภาพศิลปิน - แชร์แอป - แชร์ไปที่สตอรี่ - สุ่ม - เรียบง่าย - ยกเลิกโหมดสลีบแล้ว - โหมดสลีบจะทำงานใน %d นาที - สไลด์ - อัลบั้มขนาดเล็ก - โซเชียล - แชร์สตอรี่ - เพลง - ระยะเวลาเพลง - เพลง - เรียงลำดับ - วันที่เพิ่ม - วันที่แก้ไข - ปี ค.ศ. - ค้นหาในคลังเพลง - ซ้อนกัน - เริ่มเล่นเพลง - เพียงแค่แสดงชื่อของคุณบนหน้าจอหลัก - สนับสนุนการพัฒนา - ปัดเพื่อปลดล็อก - ซิงค์เนื้อเพลงแล้ว - ระบบอีควอไลเซอร์ - เทเลแกรม - เข้าร่วมเทเลแกรมเพื่อแจ้งข้อผิดพลาดหรือเสนอแนะเกี่ยวกับแอป - ขอบคุณนะ - ไฟล์เสียง - เดือนนี้ - ในสัปดาห์นี้ - ปีนี้ - ขนาดเล็ก - หัวข้อ - การ์ดจิ๋ว - การ์ดเหลี่ยม - ไล่ระดับสี - นำเข้าเพลย์ลิสต์ทั้งหมดที่อยู่ใน Android Media Store พร้อมเพลงหากมีเพลย์ลิสต์อยู่แล้วเพลงจะถูกรวมเข้าด้วยกัน - เพิ่งเล่นไม่นาน - แอปต้องการสิทธิ์ในการเข้าถึงที่เก็บข้อมูลอุปกรณ์ของคุณเพื่อเล่นเพลง - แสดงศิลปินอัลบั้มในประเภทศิลปิน - ล้างคิว - ล้้างเพลลิส - โปรดป้อนชื่อปัญหา - "โปรดป้อนชื่อผู้ใช้ GitHub " - หากเกิดข้อผิดพลาด กรุณาลอง \"ล้างข้อมูลแอป\" หรือส่งอีเมลเมื่อไม่สามรถแก้ไขปัญหาได้ - โปรดป้อนรหัสผ่าน GitHub - โปรดอธิบายปัญหา - ส่งด้วยตนเอง - ชื่อผู้ใช้หรือรหัสผ่านผิด - เกิดความผิดพลาดอย่างไม่ได้คาดคิด. โปรดติดต่อผู้พัฒนาแอป - ปัญหาไม่ได้เปิดใช้งานสำหรับที่เก็บที่เลือก โปรดติดต่อผู้พัฒนาแอป - โทเค็นการเข้าถึงไม่ถูกต้อง โปรดติดต่อผู้พัฒนาแอป - ไม่สามารถส่งรายงานได้ - ไม่สามารถสแกน%d ไฟล์ - สร้างเพลย์ลิสต์ %1$s - ไม่สามารถสร้างเพลย์ลิสต์ได้ - ไม่สามารถดาวน์โหลดปกอัลบั้มที่ตรงกันได้ - Pinterest - สลับชื่อเรื่องสำหรับแท็บแถบนำทางด้านล่าง - "เรโทรมิวสิค " - Scrobbles - ไม่สามารถเล่นเพลงนี้ได้ - ค้นหาเว็บ - %1$d เพลง?]]> - - \ No newline at end of file + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Songs + + Album artist + Albums + + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 1be4ba27d2abb33b09061cd9c0c8887cdad94536 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:29 +0530 Subject: [PATCH 0019/1603] New translations strings.xml (Hindi) --- app/src/main/res/values-hi-rIN/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 24252bf25..1ba453fc1 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -2,10 +2,8 @@ About %s टीम, सामाजिक लिंक - एक्सेंट रंग एक्सेंट विषयवस्तु रंग, डिफ़ॉल्ट हरा है। - इसके बारे में पसंदीदा में जोड़े कतार में जोड़ें @@ -48,32 +46,23 @@ टैग एडिटर पसंदीदा टॉगल करें शफल मोड को टॉगल करें - अनुकूली - जोड़ें "प्लेलिस्ट में जोड़ें" - "कतार मे 1 शीर्षक जोड़ा गया है।" कतार मे %1$d शीर्षक जोड़ा गया है। - एल्बम - Song Songs - एल्बम कलाकार - एल्बम Album Albums - हमेशा - इस बढ़िया म्यूजिक प्लेयर को यहां देखें:https://play.google.com/store/apps/details?id=%s शफ़ल टॉप गीत @@ -82,25 +71,16 @@ रेट्रो म्यूजिक - क्लासिक Small Text - कलाकार - कलाकार - ऑडियो फोकस से इनकार किया। ध्वनि सेटिंग्स बदलें और तुल्यकारक नियंत्रण समायोजित करें - ऑटो - जीवनी - सिर्फ काला - ब्लैकलिस्ट - कलंक ब्लर कार्ड - रिपोर्ट भेजने में असमर्थ अमान्य प्रवेश टोकन। कृपया ऐप डेवलपर से संपर्क करें। चयनित रिपॉजिटरी के लिए समस्याएँ सक्षम नहीं हैं। कृपया ऐप डेवलपर से संपर्क करें। @@ -114,55 +94,35 @@ कृपया अपना वैध GitHub उपयोगकर्ता नाम दर्ज करें एक अप्रत्याशित त्रुटि हुई। क्षमा करें, आपको यह बग मिल गया है, अगर यह \"क्लियर ऐप डेटा\" को क्रैश करता है या ईमेल भेजता है GitHub खाते का उपयोग करके भेजें - अभी खरीदें - वर्तमान टाइमर को रद्द करें - कार्ड Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - चेंजलाग साफ़ - Circle - Circular - Classic - साफ़ Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -171,62 +131,38 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - + Done Drive mode - Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Grid style - + Need more help? Hinge - History - Ghar - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -263,45 +194,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -313,57 +226,39 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -384,6 +279,7 @@ Keep the screen on Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -408,6 +304,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover + Navigate by Album Artist Album cover theme Album cover skip Colored app shortcuts @@ -425,6 +322,7 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers @@ -438,22 +336,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -461,25 +352,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -492,48 +377,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -541,93 +410,59 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 086c76734c3c836ddb99c4ae98130e4c9ecb02d0 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:30 +0530 Subject: [PATCH 0020/1603] New translations strings.xml (Irish) --- app/src/main/res/values-ga-rIE/strings.xml | 474 +++++++++++++++++++++ 1 file changed, 474 insertions(+) create mode 100644 app/src/main/res/values-ga-rIE/strings.xml diff --git a/app/src/main/res/values-ga-rIE/strings.xml b/app/src/main/res/values-ga-rIE/strings.xml new file mode 100644 index 000000000..8733d743b --- /dev/null +++ b/app/src/main/res/values-ga-rIE/strings.xml @@ -0,0 +1,474 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + Songs + Songs + Songs + + Album artist + Albums + + Album + Albums + Albums + Albums + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 3dfa0fad29b106d8675ce6ec4d0b829d46ed8094 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:31 +0530 Subject: [PATCH 0021/1603] New translations strings.xml (Gujarati) --- app/src/main/res/values-gu-rIN/strings.xml | 468 +++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 app/src/main/res/values-gu-rIN/strings.xml diff --git a/app/src/main/res/values-gu-rIN/strings.xml b/app/src/main/res/values-gu-rIN/strings.xml new file mode 100644 index 000000000..84152f068 --- /dev/null +++ b/app/src/main/res/values-gu-rIN/strings.xml @@ -0,0 +1,468 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 4029ccc5b6b38b648a0fa5b21a67bb32b2a32104 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:31 +0530 Subject: [PATCH 0022/1603] New translations strings.xml (Punjabi) --- app/src/main/res/values-pa-rIN/strings.xml | 468 +++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 app/src/main/res/values-pa-rIN/strings.xml diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml new file mode 100644 index 000000000..84152f068 --- /dev/null +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -0,0 +1,468 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From e9c5640daa035b1e8de7f381b3cbc165ae5f345a Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:33 +0530 Subject: [PATCH 0023/1603] New translations strings.xml (Slovak) --- app/src/main/res/values-sk-rSK/strings.xml | 207 +++------------------ 1 file changed, 21 insertions(+), 186 deletions(-) diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 89c7743f6..20d072d86 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Accent color The theme accent color, defaults to purple - About Add to favorites Add to playing queue @@ -48,26 +46,19 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - Add "Add to playlist" - "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album - Song Songs Songs Songs - Album artist - Albums Album @@ -75,36 +66,25 @@ Albums Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text - + Minimal Text Artist - Artists - Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -118,55 +98,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -175,62 +135,38 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - + Done Drive mode - Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -240,25 +176,20 @@ 7 8 Grid style - + Need more help? Hinge - History - Home - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -267,45 +198,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -317,57 +230,39 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -388,6 +283,7 @@ Keep the screen on Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -412,6 +308,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover + Navigate by Album Artist Album cover theme Album cover skip Colored app shortcuts @@ -429,6 +326,7 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers @@ -442,22 +340,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -465,25 +356,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -496,48 +381,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -545,93 +414,59 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 23538fe39a3e0882a771e1875f17f912cefdfcdf Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:34 +0530 Subject: [PATCH 0024/1603] New translations strings.xml (Icelandic) --- app/src/main/res/values-is-rIS/strings.xml | 468 +++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 app/src/main/res/values-is-rIS/strings.xml diff --git a/app/src/main/res/values-is-rIS/strings.xml b/app/src/main/res/values-is-rIS/strings.xml new file mode 100644 index 000000000..84152f068 --- /dev/null +++ b/app/src/main/res/values-is-rIS/strings.xml @@ -0,0 +1,468 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 29c8a00e1662667e267ae2a499928f447816ea5c Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:35 +0530 Subject: [PATCH 0025/1603] New translations strings.xml (Indonesian) --- app/src/main/res/values-in-rID/strings.xml | 1021 ++++++++------------ 1 file changed, 427 insertions(+), 594 deletions(-) diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 967c3f1f4..107d2d644 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -1,232 +1,166 @@ - Tentang %s - Tim, tautan sosial - - Warna Aksen - Warna aksen tema, bawaan adalah ungu - - Tentang - Tambahkan ke favorit - Tambahkan ke antrean pemutar - Tambahkan ke daftar putar - Bersihkan antrean pemutaran - Mode pengulangan siklus - Hapus - Hapus dari perangkat - Rincian - Ke album - Ke artis - Ke genre - Ke direktori awal - Izinkan - Jumlah grid - Jumlah grid (lanskap) - Daftar putar baru - Selanjutnya - Putar - Putar semua - Putar selanjutnya - Putar/jeda - Sebelumnya - Hapus dari favorit - Hapus dari antrean pemutaran - Hapus dari daftar putar - Ubah nama - Simpan antrean pemutaran - Pindai - Cari - Mulai - Atur sebagai nada dering - Atur sebagai direktori awal - "Pengaturan" - Bagikan - Acak semua - Acak daftar putar - Pengatur waktu tidur - Urutkan - Pengubah tag - Beralih favorit - Beralih mode acak - - Adaptif - - Tambah - "Tambahkan ke daftar putar" - - "1 judul ditambahkan ke antrean pemutaran." - %1$d ditambahkan ke antrean pemutaran. - + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. Album - Songs - - Album artis - - Album + Album artist + Albums Albums - - Selalu - - Hei, lihat pemutar musik keren ini di: -https://play.google.com/store/apps/details?id=%s - Acak - Lagu teratas - Besar - Kartu - Klasik - Kecil - Teks - - Artis - - Artis - - Fokus audio ditolak - Ubah pengaturan suara dan sesuaikan ekualiser - - Otomatis - - Biografi - - Hanya Hitam - - Daftar hitam - - Buram - Kartu Buram - - Tidak dapat mengirimkan laporan - Token akses tidak valid. Mohon hubungi pengembang aplikasi. - Masalah tidak diaktifkan untuk repositori yang dipilih. Mohon hubungi pengembang aplikasi. - Terjadi kesalahan tak terduga. Mohon hubungi pengembang aplikasi. - Nama pengguna atau kata sandi salah - Masalah - Kirimkan secara manual - Mohon masukkan deskripsi dari permasalahan tersebut - Mohon masukkan kata sandi GitHub yang valid - Mohon masukkan judul permasalahan - Mohon masukkan nama akun GitHub yang valid - Terjadi kesalahan tidak terduga. Maaf kamu mengalami masalah ini, jika -tetap bermasalah, \"Hapus data Aplikasi\" atau kirimkan Email - Kirim menggunakan akun GitHub - - Beli sekarang - - Batalkan - - Kartu - Kartu Berwarna - Kartu - - Efek karosel pada layar yang sedang diputar - - Tersusun ke bawah - - Catatan perubahan - Catatan perubahan ada di aplikasi Telegram - - Lingkaran - - Bulat - - Klasik - - Bersihkan - Bersihkan daftar hitam - Hapus antrean - - Warna - - Warna - - Komposer - - Info perangkat telah disalin ke papan klip. - - Tidak dapat membuat daftar putar - "Tidak dapat mengunduh sampul album yang cocok." - Tidak dapat mengembalikan pembelian - Tidak dapat memindai berkas %d - - Buat - - Daftar putar %1$s dibuat - - Member dan kontributor - - Terakhir kali mendengarkan %1$s oleh %2$s. - - Agak gelap - - Hapus daftar putar - %1$s?]]> - Hapus daftar putar - Hapus lagu - %1$s?]]> - Hapus lagu - %1$d daftar putar?]]> - %1$d lagu?]]> - - Lagu %1$d dihapus - - Kedalaman - - Deskripsi - - Info perangkat - - Izinkan Retro Music untuk mengubah pengaturan suara - Atur nada dering - - Bersihkan daftar hitam? - %1$s dari daftar hitam?]]> - - Donasi - Jika kamu merasa saya berhak dibayar berdasarkan karya saya, kamu dapat berdonasi disini - - Belikan saya: - - Mode berkendara - - Kosong - - Ekualiser - - Tanya-Jawab - - Favorit - - Selesaikan lagu terakhir - - Pas - - Datar - - Folder - - Ikuti sistem - - Untuk kamu - - Gratis - - Penuh - Kartu penuh - - Ubah tema dan warna dari aplikasi - Tampilan - + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel Genre - - Genre - - Fork projek di GitHub - + Genres + Fork the project on GitHub + Gradient 1 2 3 @@ -235,399 +169,298 @@ tetap bermasalah, \"Hapus data Aplikasi\" atau kirimkan Email 6 7 8 - Gaya grid - - Engsel - - Riwayat - - Beranda - - Balik horizontal - - Gambar - Gradasi gambar - Ubah pengaturan pengunduhan gambar artis - - Lagu %1$d dimasukan ke daftar putar %2$s - - Bagikan pengaturan Retro Musicmu di Instagram untuk memamerkannya - - Papan ketik - + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard Bitrate Format - Nama berkas - Direktori berkas - Ukuran - Selebihnya dari %s - Tingkat pengambilan sampel - Durasi - - Berlabel - - Terakhir ditambahkan - Lagu terakhir - - Kategori pustaka - - Lisensi - - Putih jelas - - Pendengar - - Pengurutan berkas - - Memuat produk... - - Masuk - - Lirik - - Dibuat dengan ❤️ di India - + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India Material - - Gagal - Kesalahan perizinan - - Nama - Sering dimainkan - - Tidak pernah - - Daftar putar baru - %s adalah direktori awal yang baru. - - Lagu selanjutnya - - Tidak ada album - Tidak ada artis - "Putar lagu lebih dulu, lalu coba lagi" - Ekualiser tidak ditemukan - Tidak ada genre - Lirik tidak ditemukan - Tidak ada lagu yang sedang diputar - Tidak ada daftar putar - Pembelian tidak ditemukan - Tidak ada hasil - Tidak ada lagu - + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs Normal - Lirik normal - - %s tidak ada di daftar media]]> - - Tidak ada apapun untuk dipindai - Tidak ada apapun untuk dilihat - - Pemberitahuan - Sesuaikan gaya pemberitahuan - - Sedang diputar - Antrean sedang diputar - Kostumisasi layar sedang diputar - 9+ gaya sedang diputar - - Hanya melalui Wi-Fi - - Fitur percobaan lanjutan - - Lainnya - - Kata sandi - - 3 bulan lalu - + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months Peak - - Izin untuk mengakses penyimpanan eksternal ditolak. - - Izin ditolak. - - Personalisasi - Sesuaikan sedang diputar dan tampilan kontrol - - Pilih dari penyimpanan lokal - + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage Pinterest - Ikuti laman Pinterest untuk inspirasi desain Retro Music - - Polos - - Notifikasi pemutaran menyediakan aksi untuk mainkan/jeda, dsb. - Notifikasi pemutaran - - Daftar putar kosong - Nama daftar putar - - Daftar putar - - Tingkat keburaman diaplikasikan pada tema buram, lebih rendah membuat lebih cepat - Tingkat keburaman - Filter lagu berdasarkan panjang - Filter lagu berdasarkan durasi - Lanjutan - Gaya album + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style Audio - Daftar hitam - Kontrol - Tema - Gambar - Pustaka - Layar kunci - Daftar putar - Jeda saat volume sedang nol dan putar setelah menaikan volume. Peringatan, ketika anda menaikan volume, musik akan mulai berputar, bahkan jika anda berada di luar aplikasi - Jeda saat volume nol - Membiarkan fitur ini aktif mungkin akan berpengaruh pada daya baterai - Biarkan layar tetap menyala - Pilih bahasa - Menggunakan sampul album lagu yang sedang diputar sebagai wallpaper layar kunci - Volume lebih rendah ketika suara sistem diputar atau terdapat notifikasi baru - Konten folder yang berada di daftar hitam disembunyikan dari pustaka. - Mulai pemutaran saat terhubung dengan perangkat bluetooth - Blur sampul album di layar kunci. Dapat menyebabkan masalah dengan aplikasi pihak ketiga dan widget. - Efek karosel di sampul album yang sedang diputar. Ingat bahwa Kartu dan Kartu Buram tidak akan bekerja - Gunakan desain notifikasi klasik - Latar belakang, Warna tombol kontrol berubah sesuai sampul album lagu yang diputar - Warna pintasan aplikasi dalam warna aksen. Setiap kali anda mengubahnya, restart aplikasi untuk menerapkan efek - "Warna notifikasi berdasarkan warna dominan sampul album" - Berdasarkan aturan Material Design dalam mode gelap, warna haruslah didesaturasikan - Ketuk notifikasi akan menampilkan layar sedang diputar bukan layar beranda - Tambahkan kontrol tambahan untuk pemutar mini - Tampilkan informasi lagu tambahan, seperti format file, bitrate dan frekuensi - "Dapat menyebabkan masalah pemutaran pada beberapa perangkat." - Beralih gaya banner beranda - Dapat meningkatkan kualitas sampul album tetapi menyebabkan waktu pemuatan gambar lebih lambat. Hanya aktifkan ini jika Anda memiliki masalah dengan gambar resolusi rendah. - Atur visibilitas dan perintah dari kategori pustaka. - Gunakan kontrol layar kunci Retro Music - Rincian Lisensi untuk aplikasi open-source - Mode immersif - Putar segera setelah headphones terhubung. - Mode acak akan non-aktif ketika memutar lagu baru dari daftar - Jika tersedia ruang yang memadai, tampilkan pengatur volume di layar sedang diputar - Tampilkan sampul album - Tema sampul album - Lewati sampul album - Pintasan aplikasi berwarna - Kurangi volume ketika hilang fokus - Otomatis unduh gambar artis - Daftar hitam - Pemutaran bluetooth - Buramkan sampul album - Desain notifikasi klasik - Warna adaptif - Notifikasi berwarna - Desaturasi warna - Tampilkan layar sedang diputar - Kontrol tambahan - Info lagu - Pemutaran tanpa jeda - Tema aplikasi - Grid beranda artis - Banner beranda - Abaikan sampul penyimpanan media - Interval daftar putar terbaru - Kontrol layar penuh - Tema sedang diputar - Lisensi open-source - Mode tab judul - Efek Karosel - Layar penuh aplikasi - Putar otomatis - Mode acak - Kontrol volume - + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls Pro - Tema hitam, tema sedang diputar, efek karosel dan lainnya.. - - Profil - - Beli - - Antrean - - Nilai aplikasi - Suka aplikasi ini? beri tahu kami di Google Play Store untuk memberikan pengalaman yang lebih baik - - Album terbaru - Artis terbaru - - Hapus - Hapus sampul - Hapus dari daftar hitam - Hapus lagu dari daftar putar - %1$s dari daftar putar?]]> - Hapus lagu dari daftar putar - %1$d dari daftar putar?]]> - - Ganti nama daftar putar - - Laporkan permasalahan - Laporkan bug - - Setel ulang - Setel ulang gambar artis - - Pulihkan - - Pembelian dipulihkan. Mulai kembali aplikasi agar semua fitur dapat digunakan - Pembelian dipulihkan. - - Memulihkan pembelian... - + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… Retro Music Player Retro Music Pro - - Gagal menghapus file: %s + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s - Gagal mendapatkan SAF URI - Buka kotak navigasi - Aktifkan \'Tampilkan Kartu SD\' di menu overflow + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu - %s membutuhkan akses kartu SD - Anda perlu memilih direktori akar kartu SD anda - Pilih kartu SD anda di kotak navigasi - Jangan buka sub-folder apapun - Ketuk tombol \'pilih\' pada bagian bawah layar - Gagal menuliskan berkas: %s - - Simpan + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save - Simpan berkas sebagai - Simpan berkas sebagai - - Daftar putar disimpan ke %s. - - Menyimpan perubahan - - Pindai media - - %1$d dari %2$d selesai dipindai. - + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. Scrobbles - - Pilih semua - - Terpilih - - Atur - Setel gambar artis - - Bagikan Apllikasi - Bagikan ke Cerita - - Acak - - Sederhana - - Waktu tidur dibatalkan. - Pengatur waktu tidur diatur %d menit dari sekarang. - - Sosial - Bagikan cerita - - Lagu - Durasi lagu - - Lagu - - Urutkan - Meningkat + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending Album - Artis - Komposer - Tanggal ditambahkan - Tanggal diubah - Tahun - Menurun - - Maaf! Perangkat anda tidak mendukung masukan suara - Cari pustaka anda - - Tumpuk - - Mulai pemutaran musik. - - Saran - - Dukung pengembangan - - Geser untuk membuka - - Lirik tersinkron - + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics Telegram - Gabung ke grup Telegram untuk mendiskusikan masalah, membuat permintaan, memamerkan dan lainnya - - Terima kasih! - - Berkas audio - - Bulan ini - Minggu ini - Tahun ini - - Kecil - Kartu kecil - - Judul - - Hari ini - - Album teratas - Artis teratas - - "Trek (2 untuk trek 2 atau 3004 untuk CD3 trek 4)" - Nomor trek - - Terjemahkan - Bantu kami untuk menerjemahkan aplikasi ke bahasa kamu - - Coba Retro Music versi Premium - + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium Twitter - Bagikan desain anda dengan Retro Music - - Tidak berlabel - - Tidak dapat memutar lagu ini. - - Selanjutnya - - Perbarui gambar - - Memperbarui… - - Nama pengguna - - Versi - - Balik vertikal - + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip Volume - - Pencarian web - - Selamat datang, - - Apa yang ingin anda bagikan? - - Apa yang baru - - Jendela - Sudut melengkung - - Atur %1$s sebagai nada dering. - %1$d dipilih - - Tahun - - Anda harus memilih setidaknya satu kategori - Anda akan diteruskan ke situs web pelacak masalah. - - Data akun anda hanya digunakan untuk otentikasi + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. From 4d23daba74ca93aa4b87f3390b7e36c1cc4926a4 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:36 +0530 Subject: [PATCH 0026/1603] New translations strings.xml (Persian) --- app/src/main/res/values-fa-rIR/strings.xml | 429 +++++++-------------- 1 file changed, 132 insertions(+), 297 deletions(-) diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index d024fa576..84152f068 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -1,46 +1,44 @@ - + - درباره %s + About %s Team, social links - Accent color The theme accent color, defaults to purple - - درباره + About Add to favorites Add to playing queue - افزودن به پهرست + Add to playlist Clear playing queue Cycle repeat mode - هذف - هذف از دستگاه + Delete + Delete from device Details - بسوی جُنگ - بسوی هنرمند + Go to album + Go to artist Go to genre - بسوی شاخه آغازین + Go to start directory Grant Grid size Grid size (land) - پهرست نو + New playlist Next - پخش - پخش همه + Play + Play all Play next - پخش/درنگ - پیشین + Play/Pause + Previous Remove from favorites Remove from playing queue - هذف از پهرست + Remove from playlist Rename Save playing queue - پویش - جستجو - آغاز + Scan + Search + Start Set as ringtone Set as start directory - "ساماندهی" - همرسانی + "Settings" + Share Shuffle all Shuffle playlist Sleep timer @@ -48,59 +46,41 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - - افزودن - "افزودن به پهرست" - + Add + "Add to playlist" "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - - جُنگ - + Album - آهنگ - آهنگ + Song + Songs - - هنرمند جُنگ - - جُنگ‌ها + Album artist + Albums - جُنگ - جُنگ + Album + Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text - - هنرمند - - هنرمندان - + Minimal Text + Artist + Artists Audio focus denied. Change the sound settings and adjust the equalizer controls - - خودکار - + Auto Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,194 +94,127 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog Changelog maintained on the Telegram channel - Circle - Circular - Classic - - زدایش + Clear Clear blacklist Clear queue - - رنگ - - رنگ‌ها - + Color + Colors Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - - ساختن - + Create Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - - هذف پهرست + Delete playlist %1$s?]]> - هذف پهرست‌ها - هذف آهنگ + Delete playlists + Delete song %1$s?]]> - هذف آهنگ‌ها + Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - - درباره دستگاه - + Device info Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - - شیوه رانندگی - - تهی - + Done + Drive mode + Empty Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - - پوشه‌ها - - پیرو سامانه - - برای شما - - رایگان - + Folders + Follow system + For you + Free Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - - ۱ - ۲ - ۳ - ۴ - ۵ - ۶ - ۷ - ۸ + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 Grid style - + Need more help? Hinge - - پیشینه - - خانه - + History + Home Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - - کلیدبرگ - + Keyboard Bitrate - قالب - نام پرونده + Format + File name File path - اندازه - بیشتر از %s + Size + More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - - گواهینامه‌ها - + Licenses Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - - کژی + Error Permission error - - نام - بیشترین پخش - - هرگز - - پهرست نو + Name + Most played + Never + New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -311,79 +224,62 @@ No songs playing You have no playlists No purchase found. - بی هیچ دستاورد + No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - - آگهداد + Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - - دیگر - - گذرواژه - - ۳ ماه گذشته - + Other + Password + Past 3 months Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - - پینترست + Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - - پهرست تهی‌ست - نام پهرست - - پهرست‌ها - + Playlist is empty + Playlist name + Playlists Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length Filter song duration - پیشرفته + Advanced Album style - آوا + Audio Blacklist Controls - پوسته + Theme Images Library Lockscreen - پهرست‌ها + Playlists Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app - درنگ در صفر + Pause on zero Keep in mind that enabling this feature may affect battery life Keep the screen on - گزینش زبان + Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -408,7 +304,8 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover - پوسته جلد جُنگ + Navigate by Album Artist + Album cover theme Album cover skip Colored app shortcuts Reduce volume on focus loss @@ -425,61 +322,49 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers Last added playlist interval Fullscreen controls Now playing theme - گواهینامه‌های بُن‌باز + Open source licences Tab titles mode Carousel effect Fullscreen app - پخش خودکار + Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - - هذف - هذف جلد + Remove + Remove cover Remove from blacklist Remove song from playlist %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue - گزارش ایراد - - بازنشانی + Report bug + Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -492,142 +377,92 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - - اندوختن + Save Save as file Save as files - Saved playlist to %s. - Saving changes - - پویش رسانه - + Scan media Scanned %1$d of %2$d files. - Scrobbles - - گزینش همه - + Select all Selected - Set Set artist image - - همرسانی برنامه + Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - - آهنگ + Song Song duration - - آهنگ‌ها - + Songs Sort order Ascending - جُنگ - هنرمند + Album + Artist Composer Date added Date modified - سال + Song count + Song count desc + Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - - تلگرام + Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - - سپاس! - + Thank you! The audio file - - این ماه - این هفته - این سال - - کوچک + This month + This week + This year + Tiny Tiny card - Title - - امروز - + Today Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - - ترگمان + Translate Help us translate the app to your language - Try Retro Music Premium - - توییتر + Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - Volume - Web search - - خوش آمدید، - + Welcome, What do you want to share? - What\'s New - - پنجره + Window Rounded corners - Set %1$s as your ringtone. %1$d selected - - سال - + Year You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 36521ac6a9e8a4ba7263fec95a7ff262353fcece Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:37 +0530 Subject: [PATCH 0027/1603] New translations strings.xml (Tamil) --- app/src/main/res/values-ta-rIN/strings.xml | 207 +++------------------ 1 file changed, 21 insertions(+), 186 deletions(-) diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index b599615cf..84152f068 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Accent color The theme accent color, defaults to purple - About Add to favorites Add to playing queue @@ -48,59 +46,41 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - Add "Add to playlist" - "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album - Song Songs - Album artist - Albums Album Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text - + Minimal Text Artist - Artists - Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,55 +94,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -171,62 +131,38 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - + Done Drive mode - Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Grid style - + Need more help? Hinge - History - Home - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -263,45 +194,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -313,57 +226,39 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -384,6 +279,7 @@ Keep the screen on Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -408,6 +304,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover + Navigate by Album Artist Album cover theme Album cover skip Colored app shortcuts @@ -425,6 +322,7 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers @@ -438,22 +336,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -461,25 +352,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -492,48 +377,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -541,93 +410,59 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 1bacb9231b84f9e4c20e11fb9664e10fa5d89576 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:38 +0530 Subject: [PATCH 0028/1603] New translations strings.xml (Bengali) --- app/src/main/res/values-bn-rBD/strings.xml | 468 +++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 app/src/main/res/values-bn-rBD/strings.xml diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml new file mode 100644 index 000000000..84152f068 --- /dev/null +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -0,0 +1,468 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 9c1f33eee7ae2f926696dbe35fd23e9336559742 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:39 +0530 Subject: [PATCH 0029/1603] New translations strings.xml (Croatian) --- app/src/main/res/values-hr-rHR/strings.xml | 881 +++++++++------------ 1 file changed, 357 insertions(+), 524 deletions(-) diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml index d64c27d9d..2df1c552e 100644 --- a/app/src/main/res/values-hr-rHR/strings.xml +++ b/app/src/main/res/values-hr-rHR/strings.xml @@ -2,235 +2,169 @@ About %s Team, social links - - Naglašena boja - Naglašena boja teme, zadana je plavo zelena - - O aplikaciji - Dodaj u omiljene - Dodaj u red čekanja - Dodaj na popis naslova - Očisti red čekanja + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue Cycle repeat mode - Izbriši - Izbriši s uređaja - Detalji - Odi na album - Idi na izvođača - Idi na žanr - Idi na početni direktorij - Dopusti - Veličina rešetke - Veličina rešetke (polja) + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) New playlist - Dalje - Reproduciraj + Next + Play Play all - Reproduciraj sljedeće - Reproduciraj/pauziraj - Prethodno - Ukloni iz favorita - Ukloni iz reda reprodukcije - Ukloni sa popisa naslova - Preimenuj - Spremi red reproduciranja - Skeniraj - Traži - Započni - Postavi kao zvuk zvona - Postavi kao početni direktorij - "Postavke" - Podijeli - Izmješaj sve - Izmiješaj popis naslova - Brojač za spavanje - Način sortiranja - Uređivač oznaka + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor Toggle favorite Toggle shuffle mode - - Prilagodljivo - - Dodaj - "Dodaj na popis naslova" - - "Dodana 1 pjesma na red reprodukcije." - Dodano %1$d pjesama na red reprodukcije. - + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. Album - Song Songs Songs - - Izvođač albuma - - Albumi + Album artist + Albums Album Albums Albums - - Uvijek - - Hej, pogledajte ovaj cool reproduktor glazbe: https://play.google.com/store/apps/details?id=%s - Izmiješaj - Najslušanije pjesme - Velik - Kartica - Klasičan - Malen - Tekst - - Izvođač - - Izvođači - - Fokus zvuka je odbijen. - Promijenite postavke zvuka i kontrole ekvalizatora - - Automatski - - Biografija - - Samo crna - - Crni popis - - Zamagljenje - Zamagljena kartica - - Nije moguće poslati izvješće - Pristupni token nije valjan. Molimo kontaktirajte razvojnog programera aplikacije. - Problemi nisu omogućeni za odabrani repozitorij. Molimo kontaktirajte razvojnog programera aplikacije. - Dogodila se neočekivana pogreška. Molimo kontaktirajte razvojnog programera aplikacije. - Krivo korisničko ime ili lozinka - Problem - Pošalji ručno - Molimo unesite opis problema - Molimo unesite vašu valjanu GitHub lozinku - Molimo unesite naslov problema - Molimo unesite vaše valjano GitHub korisničko ime - Dogodila se neočekivana pogreška. Žao nam je što ste pronašli ovu pogrešku, ako se aplikacija - nastavi rušiti \"Očisti podatke aplikacije\" - Pošalji putem GitHub računa - + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account Buy now - - Odustani - - Kartica - Obojena kartica - Kartica - - Efekt ringišpila za zaslon reprodukcije - - Kaskadno - - Popis promjena - Popis promjena održavan na Telegramu - + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel Circle - - Kružno - + Circular Classic - - Očisti - Očisti crnu popis - Očisti red čekanja - - Boja - - Boje - + Clear + Clear blacklist + Clear queue + Color + Colors Composer - - Informacije o uređaju su kopirane u međuspremnik. - - Stvaranje popisa naslova nije uspjelo. - "Preuzimanje odgovaraju\u0107eg omota albuma nije uspjelo." - Vraćanje kupnje nije uspjelo. - Skeniranje %d datoteke nije uspjelo. - - Stvori - - Popis naslova %1$s je stvoren. - - Članovi i dobrinositelji - - Trenutno slušaš %1$s od %2$s. - - Otprilike mračna - - Izbriši popis naslova - %1$s?]]> - Izbriši popise naslova + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists Delete song - %1$s?]]> + %1$s?]]> Delete songs - %1$d popisa naslova?]]> - %1$d pjesama?]]> - - Izbrisano je %1$d pjesama. - - Dubina - - Opis - - Informacije o uređaju - + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info Allow Retro Music to modify audio settings Set ringtone - - Želite li očistiti crni popis? - %1$s sa crnog popisa?]]> - - Doniraj - Ako mislite da zaslužujem biti plaćen za svoj posao, možete mi ostaviti nešto - novca ovdje - - Kupite mi: - + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done Drive mode - - Prazno - - Ekvalizator - - Često postavljena pitanja - - Favoriti - + Empty + Equalizer + FAQ + Favorites Finish last song - - Podesi - - Ravno - - Mape - + Fit + Flat + Folders Follow system - - Za vas - + For you Free - - Puno - Potpuna kartica - - Promijenite temu i boje aplikacije - Izgled i osjećaj - - Žanr - - Žanri - - Forkaj projekt na GitHubu - + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient 1 2 3 @@ -240,250 +174,199 @@ 7 8 Grid style - - Šarka - - Povijest - - Početna - - Horizontalni okret - - Slika + Need more help? + Hinge + History + Home + Horizontal flip + Image Gradient image - Promijenite postavke preuzimanja slika izvođača - - Dodano je %1$d pjesama na popis naslova %2$s. - - Podjelite svoju Retro Music postavu na Instagramu - + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram Keyboard - - Brzina prijenosa + Bitrate Format - Naziv datoteke - Put datoteke - Veličina + File name + File path + Size More from %s - Brzina uzorkovanja - Dužina - - Označeno - - Posljednje dodano + Sampling rate + Length + Labeled + Last added Last song - Library categories - - Licence - - Jasno bijela - + Licenses + Clearly White Listeners - - Popisivanje datoteka - - Učitavanje proizvoda... - - Prijava - - Tekst - - Napravljeno sa ❤️ u Indiji - - Materijal - + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material Error Permission error - - Moje ime - Najslušanije - - Nikad - - Novi popis naslova - %s je novi početni direktorij. - + Name + Most played + Never + New playlist + %s is the new start directory. Next Song - - Nema albuma - Nema izvođača - "Prvo reproducirajte pjesmu, zatim pokušajte ponovo." - Ekvalizator nije pronađen - Nema žanrova - Tekst nije pronađen + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found No songs playing - Nema popisa naslova - Kupnja nije pronađena. - Nema rezultata - Nema pjesama - - Normalno - Normalni tekst - - %s nije na popisu medijske pohrane.]]> - - Nema stavki za skeniranje. + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. Nothing to see - - Obavijest - Prilagodite stil obavijesti - - Zaslon reprodukcije - Red reprodukcije - Prilagodite zaslon reprodukcije - 9+ tema za zaslon reprodukcije - - Samo na Wi-Fi-u - + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi Advanced testing features - - Ostalo - - Lozinka - - Prošla 3 mjeseca - + Other + Password + Past 3 months Peak - - Dopuštenje za pristup eksternoj memoriji odbijeno. - - Dopuštenja odbijena. - - Prilagodba - Prilagodite vaš zaslon reprodukcije i kontrole sučelja - - Odaberi sa lokalne pohrane - + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage Pinterest Follow Pinterest page for Retro Music design inspiration - - Jasno - - Obavijest reprodukcije pruža mogućnosti reprodukcije/pauziranja itd. - Obavijest reprodukcije - - Popis naslova je prazan - Naziv popisa naslova - - Popisi naslova - - Količina zamagljenja koja se primjenjuje na teme, manje je brže - Količina zamagljenja + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount Filter songs by length Filter song duration Advanced Album style - Zvuk + Audio Blacklist Controls - Tema - Slike + Theme + Images Library - Zaključani zaslon - Playliste - Pauzirajte reprodukciju na nuli i započnite ju nakon podizanja glasnoće. Budite oprezni prilikom podizanja glasnoće jer se reprodukcija nastavlja čak i izvan aplikacije - Pauziraj na nuli - Imajte na umu da omogućavanje ove značajke može utjecati na trajanje baterije - Drži zaslon uključenim + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on Select language - Koristite omot albuma trenutne pjesme kao pozadinu zaključanog zaslona. - Smanjuje glasnoću kada je reproduciran zvuk sustava ili kad je stigla obavijest - Sadržaj mapa na crnom popisu će biti skriven iz vaše biblioteke. + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device - Zamagljuje omot albuma na zaključanom zaslonu. Može uzrokovati probleme s widgetima i aplikacijama treće strane. - Efekt ringišpila za omot albuma na zaslonu reprodukcije. Zapamtite da teme Kartica i Zamagljena Kartica neće raditi - Koristite klasični dizajn obavijesti - Pozadina i kontrolne tipke se mijenjaju prema omotu albuma na zaslonu reprodukcije - Boja prečace aplikacije u naglašenu boju. Svaki put kad promijenite boju molimo ponovno uključite ovo - "Boja obavijest u istaknutu boju albuma" + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen - Dodajte dodatne kontrole za mini reproduktor + Add extra controls for mini player Show extra Song information, such as file format, bitrate and frequency - "Može uzrokovati probleme sa reprodukcijom na nekim uređajima." - Uključite/isključite način naslovnice na početnoj stranici - Može povećati kvalitetu omota albuma, ali uzrokuje sporije učitavanje slika. Omogućite ovo samo ako imate problema sa omotima niske rezolucije + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks Configure visibility and order of library categories. - Koristite Retro Music prilagođene kontrole zaklj. zaslona - Detalji o licenci za softver otvorenog koda - Uvjerljivi način - Započni reprodukciju odmah nakon što su slušalice povezane - Nasumični naćin će biti isključen prilikom sviranja novog popisa pjesama - Ako ima dovoljno prostora, prikazati će se kontrole glasnoće na zaslonu reprodukcije - Prikaži omot albuma - Teme omota albuma - Preskakanje omota albuma - Obojeni prečaci aplikacije - Smanji glasnoću pri gubitku fokusa - Automatsko preuzimanje slika izvođača - Crni popis + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist Bluetooth playback - Zamagli prevlaku albuma - Klasični dizajn obavijesti - Prilagodljiva boja - Obojena obavijest + Blur album cover + Classic notification design + Adaptive color + Colored notification Desaturated color Show now playing screen - Dodatne kontrole + Extra controls Song info - Reprodukcija bez prekida - Tema aplikacije - Rešetka izvođača na početnoj stranici - Naslovnica na početnoj stranici - Ignoriraj omote iz medijske pohrane - Interval zadnje dodanih popisa naslova - Kontrole preko cjelog zaslona - Tema zaslona reprodukcije - Licence otvorenog koda - Način oznaka na karticama - Efekt ringišpila - Aplikacija preko cijelog zaslona - Automatska reprodukcija - Način mješanja - Kontrole glasnoće - + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls Pro Black theme, Now playing themes, Carousel effect and more.. - - Profil - - Kupi - - Red - - Ocijeni aplikaciju - Volite ovu aplikaciju? Javite nam to na Google Play trgovini kako bi smo vam poboljšali iskustvo - - Nedavni albumi - Nedavni izvođači - - Ukloni - Ukloni omot - Ukloni sa crnog popisa - Ukloni pjesmu s popisa naslova - %1$s sa popisa naslova?]]> - Ukloni pjesme sa popisa naslova - %1$d pjesama sa popisa naslova?]]> - - Preimenuj popis naslova - - Prijavi pogrešku - Prijavi pogrešku - + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug Reset - Resetiraj sliku izvođača - - Vrati - - Vrati prošlu kupnju. Molimo vas ponovno pokrenite aplikaciju da biste koristili sve značajke. - Bivše kupnje vraćene. - - Vraćanje kupnje... - + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -496,142 +379,92 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save - Spremi kao datoteku - Spremi kao datoteke - - Popis naslova je spremljen u %s. - - Spremanje promjena - - Skeniraj medije - - Skenirano %1$d od %2$d datoteka. - + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. Scrobbles - - Odaberi sve - - Odabrano - + Select all + Selected Set - Postavi sliku izvođača - - Podijeli aplikaciju + Set artist image + Share app + Share the app with your friends and family Share to Stories - - Izmiješaj - - Jednostavno - - Brojač za spavanje je otkazan. - Brojač za spavanje je postavljen za %d minuta od sada. - - Društveno + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social Share story - - Pjesma - Trajanje pjesme - - Pjesme - - Red sortiranja - Uzlazno + Song + Song duration + Songs + Sort order + Ascending Album - Izvođač + Artist Composer - Datum + Date added Date modified - Godina - Silazno - - Žao mi je! Tvoj uređaj ne podržava unos govora - Pretraži svoju biblioteku - + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library Stack - Start playing music. - - Preporuke - - Podrži razvijanje - + Suggestions + Support development Swipe to unlock - - Sinkroniziran tekst - + Synced lyrics Telegram - Pridružite se Telegram grupi da biste raspravili o pogreškama, dali preporuke, te još mnogo toga - - Hvala ti! - - Zvučna datoteka - - Ovaj mjesec - Ovaj tjedan - Ove godine - - Sitno + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny Tiny card - - Naziv - - Danas - - Najslušaniji albumi - Najslušaniji izvođači - - "Pjesma (2 za 2. pjesmu ili 3004 za 3. CD 4. pjesmu)" - Broj pjesme - - Prevedi - Pomozite nam prevesti našu aplikaciju na svoj jezik - + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language Try Retro Music Premium - Twitter - Podjeli svoj dizajn sa Retro Music-om - - Neoznačeno - - Nije mogu\u0107e reproducirati ovu pjesmu. - - Sljedeće - - Ažuriraj sliku - - Ažuriranje... - - Korisničko ime - - Verzija - - Vertikalni okret - + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip Volume - - Web pretraživanje - + Web search Welcome, - - Što želite podijeliti? - - Što je novo - - Prozor - Zaobljeni kutovi - - Postavi %1$s kao zvuk zvona. - %1$d odabran - - Godina - + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year You have to select at least one category. - Biti će te preusmjereni na web stranicu za praćenje pogrešaka. - - Vaši podatci o računu su korišteni samo za autentikaciju. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. From 73f25dff67589eaa4ec5984d73e114c095b98f94 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:40 +0530 Subject: [PATCH 0030/1603] New translations strings.xml (Vietnamese) --- app/src/main/res/values-vi-rVN/strings.xml | 205 ++------------------- 1 file changed, 20 insertions(+), 185 deletions(-) diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 259463037..46314caa6 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -2,10 +2,8 @@ About %s Đường dẫn tổ đội, mạng xã hội - Màu sắc nhấn mạnh Màu sắc chủ đạo của chủ đề, mặc định là xanh ngọc - Về chúng tôi Thêm vào yêu thích Thêm vào hàng đợi @@ -48,30 +46,21 @@ Chỉnh sửa thẻ Toggle favorite Toggle shuffle mode - Thích nghi - Thêm "Thêm vào danh sách phát" - "Đã thêm 1 bài vào háng đợi phát." Đã thêm %1$d bài vào hàng đợi phát. - Album - Songs - Album của nghệ sĩ - Album Albums - Luôn luôn - Hãy dùng thử trình phát nhạc siêu chất này tại: https://play.google.com/store/apps/details?id=%s Ngẫu nhiên Bản nhạc hàng đầu @@ -80,25 +69,16 @@ Cổ điển Nhỏ Text - Nghệ sĩ - Nghệ sĩ - Tập trung âm thanh bị từ chối Thay đổi cài đặt âm thanh và điều chỉnh các điều khiển bộ chỉnh âm - Tự động - Tiểu sử - Đen hoàn toàn - Danh sách đen - Làm mờ Thẻ mờ - Không thể gửi báo cáo Mã token không hợp lệ. Vui lòng liên hệ với nhà phát triển ứng dụng. Các vấn đề không được kích hoạt cho repository đã chọn. Vui lòng liên hệ với nhà phát triển ứng dụng. @@ -113,55 +93,35 @@ Đã xảy ra lỗi không mong muốn. Xin lỗi bạn vì lỗi này, nếu nó tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Gửi bằng tài khoản GitHub - Buy now - Hủy - Thẻ Thẻ màu + Square Card Thẻ - Hiệu ứng băng chuyền trên màn hình đang phát - Xếp tầng - Thay đổi Nhật ký thay đổi được cập nhật trong ứng dụng Telegram - Circle - Thông tư - Cổ điển - Xóa Xóa danh sách đen Xóa hàng đợi - Màu sắc - Màu sắc - Tác giả - Đã sao chép thông tin thiết bị vào clipboard. - Kh\u00f4ng th\u1ec3 t\u1ea1o danh s\u00e1ch ph\u00e1t "Kh\u00f4ng th\u1ec3 t\u1ea3i xu\u1ed1ng \u1ea3nh b\u00eca album ph\u00f9 h\u1ee3p." Không thể khôi phục mua hàng. Không thể quét %d tập tin. - Tạo - Đã tạo danh sách phát %1$s. - Thành viên và cộng tác viên - Đang nghe %1$s bởi %2$s. - Xám đen - Xoá danh sách phát %1$s?]]> Xoá danh sách phát @@ -170,62 +130,38 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Xoá bài hát %1$d danh sách phát?]]> %1$d bài hát?]]> - Đã xoá %1$d bài hát. - Độ sâu - Mô tả - Thông tin thiết bị - Cho phép Retro Music cấu hình cài đặt âm thanh Cài làm nhạc chuông - Bạn có muốn xóa danh sách đen? %1$s khỏi danh sách đen?]]> - Ủng hộ Nếu bạn nghĩ rằng tôi xứng đáng được thưởng cho công việc này, bạn có thể để lại một số tiền ở đây. Cảm ơn bạn! :D - Mua cho tôi một: - + Done Drive mode - Trống - Bộ chỉnh âm - Câu hỏi thường gặp - Yêu thích - Kết thúc bài cuối - Phù hợp - Phẳng - Thư mục - Follow system - Cho bạn - Free - Toàn bộ Thẻ đầy đủ - Thay đổi chủ đề và màu sắc của ứng dụng Nhìn và cảm nhận - Thể loại - Thể loại - Tham gia phát triển dự án trên Github - + Gradient 1 2 3 @@ -235,25 +171,20 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" 7 8 Bố trí lưới - + Need more help? Bản lề - Lịch sử - Trang chủ - Lật ngang - Hình ảnh Ảnh màu chuyển sắc Thay đổi cài đặt tải xuống hình ảnh nghệ sĩ - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Đã chèn %1$d bài hát vào danh sách phát %2$s. - Chia sẻ thiết lập Retro Music của bạn trong Instagram - Bàn phím - Bitrate Định dạng Tên tệp @@ -262,45 +193,27 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" More from %s Tần số lấy mẫu Độ dài - Được dán nhãn - Đã thêm gần đây Bài cuối - Danh mục thư viện - Giấy phép - Hoàn toàn trắng - Listeners - Danh sách tập tin - Đang tải sản phẩm... - Đăng nhập - Lời bài hát - Được làm bằng ❤️ ở Ấn Độ - Material - Lỗi Lỗi quyền truy cập - Tên của bạn Phát nhiều nhất - Không bao giờ - Danh sách phát mới %s là trang bắt đầu mới. - Bài kế - Không có album Không có nghệ sĩ "Phát một bài hát trước, sau đó thử lại." @@ -312,57 +225,39 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Không tìm thấy giao dịch mua. Không có kết quả Không có bài hát - Tiêu chuẩn Lời chuẩn - %s không được liệt kê trong thư mục nhạc.]]> - + Not recently played Không có gì để quét. Nothing to see - Thông báo Tùy chỉnh kiểu thông báo - Đang phát Đang phát hàng đợi Tùy chỉnh màn hình đang phát Hơn 9 giao diện đang phát - Chỉ khi dùng Wi-Fi - Tính năng nâng cao đang kiểm thử - Khác - Mật khẩu - Mỗi tháng - Peak - Quyền truy cập bộ nhớ ngoài bị từ chối. - + The app needs permission to access your device storage for playing music + Storage Access Quyền đã bị từ chối. - Cá nhân hoá Tùy chỉnh màn hình phát và giao diện người dùng - Chọn từ bộ nhớ trong - Pinterest Follow Pinterest page for Retro Music design inspiration - Giản dị - Thanh thông báo đang phát sẽ cho phép bạn phát nhạc/tạm dừng, chuyển bài,... Thông báo đang phát - Danh sách phát trống Tên danh sách phát - Danh sách phát - Độ mờ được áp dụng cho các chủ đề mờ, thấp hơn là nhanh hơn Độ mờ Filter songs by length @@ -370,7 +265,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Advanced Kiểu Album Âm thanh - Blacklist + Danh sách đen Điều khiển Chủ đề Hình ảnh @@ -383,6 +278,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Giữ màn hình luôn bật Select language Sử dụng ảnh bìa album bài hát đang phát làm ảnh nền màn hình khóa. + Show Album Artists in the Artist category Giảm âm lượng khi có âm báo hệ thống hoặc khi bạn có thông báo Nội dung của các thư mục trong danh sách đen được ẩn khỏi thư viện của bạn. Start playing as soon as connected to bluetooth device @@ -407,6 +303,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Chế độ phát ngẫu nhiên sẽ tắt khi phát danh sách bài hát mới Hiện thanh điều chỉnh âm lượng nếu có không gian trống trong màn hình đang phát Hiện ảnh bìa album + Navigate by Album Artist Chủ đề bìa album Kiểu bìa album đang phát Đổi màu lối tắt ứng dụng @@ -424,6 +321,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Song info Phát không gián đoạn Chủ đề ứng dụng + Album grid Lưới nghệ sĩ trang chủ Biểu ngữ trang chủ Ảnh bìa chất lượng nguyên bản @@ -437,22 +335,15 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Tự động phát Chế độ ngẫu nhiên Điều khiển âm lượng - Pro Black theme, Now playing themes, Carousel effect and more.. - Hồ sơ - Mua - Hàng đợi - Đánh giá ứng dụng Bạn thích ứng dụng này không? Hãy cho chúng tôi biết suy nghĩ của bạn trên Cửa hàng Play để chúng tôi có thể làm cho nó tốt hơn nữa - Album mới thêm Nghệ sĩ mới thêm - Loại bỏ Xoá ảnh bìa Xóa khỏi danh sách đen @@ -460,25 +351,19 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" %1$s khỏi danh sách phát?]]> Xoá bài hát khỏi danh sách phát %1$d bài hát khỏi danh sách phát?]]> - Đổi tên danh sách phát - Báo cáo vấn đề Báo cáo lỗi - Cài lại Đặt lại ảnh nghệ sĩ - Khôi phục - Khôi phục mua trước đó. Vui lòng khởi động lại ứng dụng để sử dụng tất cả các tính năng. Đã khôi phục lần mua trước. - Đang khôi phục mua hàng... - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -491,48 +376,32 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Lưu Lưu thành Lưu thành tệp - Danh sách phát đã lưu đến %s. - Lưu thay đổi - Quét phương tiện - Đã sửa %1$d trong %2$d tập tin. - Scrobbles - Chọn tất cả - Đã chọn - Cấu hình Đặt ảnh nghệ sĩ thủ công - Chia sẽ ứng dụng + Share the app with your friends and family Share to Stories - Ngẫu nhiên - Đơn giản - Đã huỷ hẹn giờ ngủ. Dừng phát nhạc sau %d phút kể từ bây giờ. - Xã hội Share story - Bài hát Thời lượng bài hát - Bài hát - Thứ tự sắp xếp Tăng dần Album @@ -540,93 +409,59 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Tác giả Ngày Date modified + Song count + Song count desc Năm Giảm dần - Xin lỗi! Thiết bị không hỗ trợ nhập liệu bằng giọng nói Tìm kiếm trong thư viện của bạn - Ngăn xếp - Bắt đầu chơi nhạc - Đề nghị - Hỗ trợ nhà phát triển - Swipe to unlock - Karaoke - Telegram Tham gia nhóm Telegram để thảo luận về lỗi, đưa ra đề xuất, và hơn thế nữa - Cảm ơn! - Tệp âm thanh - Mỗi tháng Mỗi tuần Mỗi năm - Nhỏ Tiny card - Tiêu đề - Hôm nay - Album hàng đầu Nghệ sĩ hàng đầu - "Rãnh (2 cho bài số 2 hoặc 3004 cho CD3 bài số 4)" Số rãnh - Dịch Giúp chúng tôi dịch ứng dụng sang ngôn ngữ của bạn - Try Retro Music Premium - Twitter Chia sẻ thiết kế của bạn với Retro Music - Chưa gắn nhãn - Kh\u00f4ng th\u1ec3 ph\u00e1t b\u00e0i h\u00e1t n\u00e0y. - Tiếp theo - Cập nhật hình ảnh - Đang cập nhật... - + User Name Tên người dùng - Phiên bản - Vertical flip - Volume - Tìm kiếm trên web - Chào mừng, - Bạn muốn chia sẻ gì? - Có gì mới! - Cửa sổ Góc tròn - Đặt %1$s làm nhạc chuông. %1$d đã chọn - Năm - Bạn phải chọn ít nhất một danh mục. Bạn sẽ được chuyển tiếp đến trang web theo dõi vấn đề. - Dữ liệu tài khoản của bạn chỉ được sử dụng để xác thực. From 329bcef903b735aadfb80f96276a3b55bed64f43 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:41 +0530 Subject: [PATCH 0031/1603] New translations strings.xml (Estonian) --- app/src/main/res/values-et-rEE/strings.xml | 468 +++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 app/src/main/res/values-et-rEE/strings.xml diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml new file mode 100644 index 000000000..84152f068 --- /dev/null +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -0,0 +1,468 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From d7f9cc97c9506229e0db4f68f44904b6379db531 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:42 +0530 Subject: [PATCH 0032/1603] New translations strings.xml (Latvian) --- app/src/main/res/values-lv-rLV/strings.xml | 470 +++++++++++++++++++++ 1 file changed, 470 insertions(+) create mode 100644 app/src/main/res/values-lv-rLV/strings.xml diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml new file mode 100644 index 000000000..406ddab98 --- /dev/null +++ b/app/src/main/res/values-lv-rLV/strings.xml @@ -0,0 +1,470 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Songs + Song + Songs + + Album artist + Albums + + Albums + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 4867686e21bbdac3a86df41b50c1f17cc4aa72aa Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:43 +0530 Subject: [PATCH 0033/1603] New translations strings.xml (Malay) --- app/src/main/res/values-ms-rMY/strings.xml | 466 +++++++++++++++++++++ 1 file changed, 466 insertions(+) create mode 100644 app/src/main/res/values-ms-rMY/strings.xml diff --git a/app/src/main/res/values-ms-rMY/strings.xml b/app/src/main/res/values-ms-rMY/strings.xml new file mode 100644 index 000000000..107d2d644 --- /dev/null +++ b/app/src/main/res/values-ms-rMY/strings.xml @@ -0,0 +1,466 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Songs + + Album artist + Albums + + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 131586ed3ec94b9e43c919548750dd8b01eebe5b Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:44 +0530 Subject: [PATCH 0034/1603] New translations strings.xml (Burmese) --- app/src/main/res/values-my-rMM/strings.xml | 466 +++++++++++++++++++++ 1 file changed, 466 insertions(+) create mode 100644 app/src/main/res/values-my-rMM/strings.xml diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml new file mode 100644 index 000000000..107d2d644 --- /dev/null +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -0,0 +1,466 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Songs + + Album artist + Albums + + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 0a03a8116cf9c8e104401d861fa1679243eb7fa5 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:45 +0530 Subject: [PATCH 0035/1603] New translations strings.xml (Esperanto) --- app/src/main/res/values-eo-rUY/strings.xml | 468 +++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 app/src/main/res/values-eo-rUY/strings.xml diff --git a/app/src/main/res/values-eo-rUY/strings.xml b/app/src/main/res/values-eo-rUY/strings.xml new file mode 100644 index 000000000..84152f068 --- /dev/null +++ b/app/src/main/res/values-eo-rUY/strings.xml @@ -0,0 +1,468 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 37848cce0fbee62a80758df75a59bd6979ba0b73 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:46 +0530 Subject: [PATCH 0036/1603] New translations strings.xml (Filipino) --- app/src/main/res/values-fil-rPH/strings.xml | 468 ++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 app/src/main/res/values-fil-rPH/strings.xml diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml new file mode 100644 index 000000000..84152f068 --- /dev/null +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -0,0 +1,468 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From c8295c7c1808aa0eb800763e27f4bac263e28b94 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:47 +0530 Subject: [PATCH 0037/1603] New translations strings.xml (Luxembourgish) --- app/src/main/res/values-lb-rLU/strings.xml | 468 +++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 app/src/main/res/values-lb-rLU/strings.xml diff --git a/app/src/main/res/values-lb-rLU/strings.xml b/app/src/main/res/values-lb-rLU/strings.xml new file mode 100644 index 000000000..84152f068 --- /dev/null +++ b/app/src/main/res/values-lb-rLU/strings.xml @@ -0,0 +1,468 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 372146fd113b585ff4342a60fd32163f1c61ba34 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:48 +0530 Subject: [PATCH 0038/1603] New translations strings.xml (Latin) --- app/src/main/res/values-la-rLA/strings.xml | 468 +++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 app/src/main/res/values-la-rLA/strings.xml diff --git a/app/src/main/res/values-la-rLA/strings.xml b/app/src/main/res/values-la-rLA/strings.xml new file mode 100644 index 000000000..84152f068 --- /dev/null +++ b/app/src/main/res/values-la-rLA/strings.xml @@ -0,0 +1,468 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 76b43141bd9d7df47afe87040961e3e1d11712f3 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:49 +0530 Subject: [PATCH 0039/1603] New translations strings.xml (Flemish) --- app/src/main/res/values-vls-rBE/strings.xml | 468 ++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 app/src/main/res/values-vls-rBE/strings.xml diff --git a/app/src/main/res/values-vls-rBE/strings.xml b/app/src/main/res/values-vls-rBE/strings.xml new file mode 100644 index 000000000..84152f068 --- /dev/null +++ b/app/src/main/res/values-vls-rBE/strings.xml @@ -0,0 +1,468 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 1f0d6112df69f0cc8c3aa4e15aa337d082a43eb4 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:50 +0530 Subject: [PATCH 0040/1603] New translations strings.xml (Kannada) --- app/src/main/res/values-kn-rIN/strings.xml | 207 +++------------------ 1 file changed, 21 insertions(+), 186 deletions(-) diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index b599615cf..84152f068 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Accent color The theme accent color, defaults to purple - About Add to favorites Add to playing queue @@ -48,59 +46,41 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - Add "Add to playlist" - "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album - Song Songs - Album artist - Albums Album Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text - + Minimal Text Artist - Artists - Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,55 +94,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -171,62 +131,38 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - + Done Drive mode - Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Grid style - + Need more help? Hinge - History - Home - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -263,45 +194,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -313,57 +226,39 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -384,6 +279,7 @@ Keep the screen on Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -408,6 +304,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover + Navigate by Album Artist Album cover theme Album cover skip Colored app shortcuts @@ -425,6 +322,7 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers @@ -438,22 +336,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -461,25 +352,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -492,48 +377,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -541,93 +410,59 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From d38e60ad8a2e19a4526dd1fe8c6ff41a4d7466ff Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:51 +0530 Subject: [PATCH 0041/1603] New translations strings.xml (Nepali) --- app/src/main/res/values-ne-rNP/strings.xml | 468 +++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 app/src/main/res/values-ne-rNP/strings.xml diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml new file mode 100644 index 000000000..84152f068 --- /dev/null +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -0,0 +1,468 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 3a637db414d527892c83dbadba9511b74b777acc Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:52 +0530 Subject: [PATCH 0042/1603] New translations strings.xml (Portuguese, Brazilian) --- app/src/main/res/values-pt-rBR/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 72e97b7fd..d9a2f7147 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -2,10 +2,8 @@ About %s Time, links sociais - Cor de destaque A cor de destaque do tema, o padrão é verde - Sobre Adicionar aos favoritos Adicionar à lista de reprodução @@ -48,32 +46,23 @@ Editor de TAG Ativar/Desativar favorito Alternar modo aleatório - Adaptável - Adicionar "Adicionar à lista" - "Uma música foi adicionada à fila de reprodução" Foram adicionadas %1$d músicas na fila de reprodução - Álbum - Song Songs - Álbum do artista - Álbuns Album Albums - Sempre - Ei, confira este reprodutor de música legal em: https://play.google.com/store/apps/details?id=%s Aleatório Músicas favoritas @@ -82,25 +71,16 @@ Música Retrô-Clássico Música Retrô-Pequeno Música Retrô-Texto - Artista - Artistas - Foco de áudio negado Altere as configurações de som e ajuste os controles do equalizador - Automático - Biografia - Apenas preto - Lista negra - Desfocado Cartão desfocado - Não é possível enviar o relatório Token de acesso inválido. Entre em contato com o desenvolvedor do aplicativo Os problemas não estão ativados para o repositório selecionado. Entre em contato com o desenvolvedor do aplicativo. @@ -114,55 +94,35 @@ Por favor, digite seu nome de usuário válido do GitHub Um erro inesperado ocorreu. Se você tentar novamente e o erro persistir, use a opção \"Limpar dados do aplicativo\" ou envie-nos um e-mail Enviar usando uma conta do GitHub - Compre agora - Cancelar - Cartão Cartão colorido + Square Card Cartão - Efeito carrossel na tela de reprodução - Cascata - Lista de mudanças Lista de mudanças mantida no Canal no Telegram - Círculo - Circular - Clássico - Limpar Limpar lista negra Limpar fila - Cor - Cores - Compositor - Informações do dispositivo copiado para a área de transferência. - N\u00e3o foi poss\u00edvel criar a playlist "N\u00e3o foi poss\u00edvel baixar uma capa do \u00e1lbum correspondente" Não foi possível restaurar a compra Não foi possível escanear %d arquivos - Criar - A playlist %1$s foi criada - Membros e contribuidores - Atualmente ouvindo %1$s por %2$s. - Meio escuro - Excluir playlist %1$s?]]> Excluir playlists @@ -171,62 +131,38 @@ Excluir músicas %1$d playlists?]]> %1$d músicas?]]> - %1$d músicas foram excluídas. - Profundidade - Descrição - Informação do dispositivo - Permite que o Retro Music modifique as configurações de áudio Definir toque - Você quer limpar a lista negra? %1$s da lista negra?]]> - Doar Se você acha que eu mereço ser recompensado pelo meu trabalho, você pode me deixar algum dinheiro aqui - Compre-me um: - + Done Modo de direção - Vazio - Equalizador - Perguntas frequentes - Favoritos - Terminar a última música - Em forma - Plano - Pastas - Seguir sistema - Para você - Grátis - Tela cheia Cartão cheio - Alterar o tema e as cores do aplicativo Aparência - Gênero - Gêneros - Fork o projeto no GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Grades & Estilos - + Need more help? Dobradiça - Histórico - Início - Giro horizontal - Imagem Imagem degradê Alterar as configurações de download das imagens dos artistas - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. %1$d músicas adicionadas na playlist %2$s. - Compartilhe seu perfil do Retro Music para mostrá-lo no Instagram - Teclado - Taxa de bits Formato Nome do arquivo @@ -263,45 +194,27 @@ Mais de %s Taxa de amostragem Comprimento - Rotulado - Mais recentes Última música - Categorias da biblioteca - Licenças - Claramente branco - Ouvintes - Listando arquivos... - Carregando produtos... - Entrar - Letras - Feito com ❤️ na Índia - Material - Erro Erro de permissão - Nome Mais tocadas - Nunca - Nova playlist %s é o novo diretório inicial - Próxima música - Sem álbuns Sem artistas "Reproduza uma música primeiro e tente novamente" @@ -313,57 +226,39 @@ Nenhuma compra encontrada. Sem resultados Sem músicas - Normal Letras normais - %s não está listado no armazenamento de mídia]]> - + Not recently played Nada para escanear. Nada para escanear - Notificação Personalizar o estilo de notificação - Reproduzindo agora Reproduzindo agora na fila Personalizar tela de reprodução Incríveis 9 temas para a interface do reprodutor - Apenas com Wi-Fi - Recursos avançados em teste - Outro - Senha - Últimos 3 meses - Peak - Permissão para acessar o armazenamento externo negada - + The app needs permission to access your device storage for playing music + Storage Access Permissões negadas. - Personalizar Personalizar os controles em Reproduzindo agora e Interface do Usuário - Escolha do armazenamento local - Pinterest Siga a página do Pinterest para inspiração de design do Retro Music - Liso - A notificação de reprodução fornece ações para reprodução/pausa, etc Notificação de reprodução - A playlist está vazia Nome da playlist - Playlists - Quantidade de desfoque aplicada a temas de desfoque, menor é mais rápido Quantidade de desfoque Filtrar músicas por duração @@ -384,6 +279,7 @@ Manter a tela ligada Select language Usar a capa do álbum da música em reprodução como papel de parede na tela de bloqueio + Show Album Artists in the Artist category Diminua o volume quando um som do sistema for reproduzido ou uma notificação for recebida O conteúdo das pastas na lista negra está oculto da sua biblioteca. Comece a tocar assim que conectado ao dispositivo bluetooth @@ -408,6 +304,7 @@ O modo aleatório será desativado ao reproduzir uma nova lista de músicas Se houver espaço suficiente, mostre os controles de volume na tela que está sendo reproduzida Exibir a capa do álbum + Navigate by Album Artist Tema da capa do álbum Pular a capa do álbum Colorir os atalhos do aplicativo @@ -425,6 +322,7 @@ Informações da música Reprodução contínua Tema do aplicativo + Album grid Grade de artistas na tela inicial Mural na tela inicial Ignorar capas do Armazenamento de Mídia @@ -438,22 +336,15 @@ Execuções automática Modo aleatório Controles do volume - Pro Temas do reproduzindo agora, Efeito carrossel, Tema de cor e mais... - Perfil - Comprar - Fila - Avalie o aplicativo Adorou este aplicativo? Informe-nos na Google Play Store como podemos melhorar o aplicativo - Álbuns recentes Artistas recentes - Remover Remover capa Remover da lista negra @@ -461,25 +352,19 @@ %1$s da playlist?]]> Remover músicas da playlist %1$d músicas da playlist?]]> - Renomear playlist - Reportar um problema Reportar erro - Resetar Restaurar imagem do artista - Restaurar - Compra anterior restaurada. Por favor, reinicie o aplicativo para fazer uso de todos os recursos. Compras anteriores foram restauradas. - Restaurando compra... - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone Falha ao excluir arquivo: %s Não foi possível obter URI SAF @@ -492,48 +377,32 @@ Não abra nenhuma subpasta Toque no botão \'selecionar\' na parte inferior da tela Falha na escrita do arquivo: %s - Salvar Salvar como arquivo Salvar como arquivos - Playlist salva para %s - Salvando alterações... - Escanear mídia - Escaneados %1$d dos %2$d arquivos - Scrobbles - Selecionar tudo - Selecionado - Definir Definir imagem do artista - Compartilhar o aplicativo + Share the app with your friends and family Share to Stories - Aleatório - Simples - Temporizador cancelado Temporizador definido para %d minutos a partir de agora - Social Share story - Música Duração da música - Músicas - Ordem de classificação Ascendente Álbum @@ -541,93 +410,59 @@ Compositor Data Date modified + Song count + Song count desc Ano Decrescente - Desculpe! O seu dispositivo não suporta entrada de voz Pesquisar... - Pilha - Começar a reprodução de música. - Sugestões - Apoiar o desenvolvimento - Deslize para desbloquear - Letras sincronizadas - Telegram Junte-se ao grupo no Telegram para discutir bugs, fazer sugestões e muito mais - Obrigado! - Arquivo de áudio - Este mês Esta semana Este ano - Minúsculo Tiny card - Título - Hoje - Melhores albuns Artistas principais - "Música (2 para a música 2 ou 3004 para a música 4 do CD3)" Número da música - Traduzir Ajude-nos a traduzir o aplicativo para seu idioma - Try Retro Music Premium - Twitter Compartilhe seu design com o Retro Music - Não rotulado - N\u00e3o foi poss\u00edvel reproduzir est\u00e1 m\u00fasica. - A seguir - Atualizar imagem - Atualizando... - + User Name Nome de usuário - Versão - Giro vertical - Volume - Pesquisar na internet - Bem-vindo(a), - O que você quer compartilhar? - Novidades - Janela Cantos arredondados - Definir %1$s como toque. %1$sd selecionado - Ano - Você precisa selecionar ao menos uma categoria. Você será encaminhado para o website do rastreador de problemas. - Os dados da sua conta são usados ​​apenas para autenticação. From ccc0fe30fc3edca7d8055d70337c4010a013db39 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:53 +0530 Subject: [PATCH 0043/1603] New translations strings.xml (Chinese Traditional) --- app/src/main/res/values-zh-rTW/strings.xml | 211 +++------------------ 1 file changed, 23 insertions(+), 188 deletions(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index d63f75085..7adb3f076 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - 重點色調 重點色調,預設為粉紅色。 - 關於 加到最愛 加入播放佇列 @@ -48,30 +46,21 @@ 編輯音樂資訊 Toggle favorite Toggle shuffle mode - Adaptive - Add "加入播放清單" - "已將 1 首歌加到播放佇列" 已將 %1$d 首歌加到播放佇列。 - 專輯 - Songs - 專輯演出者 - 專輯 Albums - 永遠 - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s 隨機播放 最佳單曲 @@ -80,25 +69,16 @@ 經典 小型 Text - 演唱者 - 演唱者 - 無法控制音訊焦點。 Change the sound settings and adjust the equalizer controls - Auto - 簡介 - 純黑(AMOLED) - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -112,55 +92,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - 取消目前的計時器 - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - 新功能 Changelog maintained on the Telegram channel - Circle - Circular - - Classic - + 經典 清空 Clear blacklist Clear queue - Color - 主題顏色 - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. 不能掃描 %d。 - 建立 - 已新增播放清單 %1$s。 - Members and contributors - 我正在聽 %2$s 的 %1$s - 暗沉 - 刪除播放清單 %1$s 嗎?]]> 刪除多個播放清單 @@ -169,62 +129,38 @@ Delete songs %1$d 個播放清單?]]> %1$d 首歌嗎?]]> - 已刪除 %1$d 首歌。 - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - 捐助 如果你認為我的努力值得回報,你可以在這裡留幾塊錢。 - Buy me a: - + Done Drive mode - 空的 - 等化器 - FAQ - 最愛 - Finish last song - Fit - 方角 - 文件夾 - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - 類型 - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -234,25 +170,20 @@ 7 8 Grid style - + Need more help? Hinge - 記錄 - 首頁 - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. 已將 %1$d 首歌加入播放清單 %2$s 中。 - Share your Retro Music setup to showcase on Instagram - Keyboard - 位元率 格式 檔案名稱 @@ -261,45 +192,27 @@ More from %s 取樣率 長度 - Labeled - 最後新增 Last song - Library categories - 原始碼授權 - 明亮 - Listeners - 清單文件 - 正在載入 - Login - 歌詞 - Made with ❤️ in India - Material - Error Permission error - Name 我的最佳單曲 - 永不 - 新增播放清單 %s是新的起始目錄 - Next Song - 沒有專輯 沒有演唱者 "請先播放一首歌後再重試一遍。" @@ -311,57 +224,39 @@ No purchase found. 沒有搜尋結果 沒有歌曲 - Normal Normal lyrics - %s 未在音樂庫裡。]]> - + Not recently played 沒有東西可掃描。 Nothing to see - 通知 Customize the notification style - Now playing 播放佇列 Customize the now playing screen 9+ now playing themes - 只在有 Wi-Fi 連接時 - Advanced testing features - Other - Password - Past 3 months - Peak - 無法取得存取外部儲存空間的權限。 - + The app needs permission to access your device storage for playing music + Storage Access 存取被拒 - Personalize Customize your now playing and UI controls - 從手機裡選擇(SD卡或記憶體) - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty 播放清單名稱 - 播放清單 - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -375,13 +270,14 @@ 圖片 Library 鎖定螢幕 - Playlists + 播放清單 Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app Pause on zero Keep in mind that enabling this feature may affect battery life Keep the screen on Select language 將播放中歌曲的專輯封面設為鎖定螢幕背景。 + Show Album Artists in the Artist category 通知鈴聲、導航語音等。 The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -406,6 +302,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen 顯示專輯封面 + Navigate by Album Artist Album cover theme Album cover skip 彩色的應用快捷方式 @@ -423,6 +320,7 @@ Song info 無縫播放 主題 + Album grid Artist grid Banner 忽略音訊檔內嵌的專輯封面 @@ -436,22 +334,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - 播放佇列 - 評分 如果您喜歡 Retro music,在 Play 商店給個好評吧 ! - Recent albums Recent artists - 移除 移除封面 Remove from blacklist @@ -459,25 +350,19 @@ %1$s 從播放清單中移除嗎?]]> 將多首歌曲從播放清單中移除 %1$d 首歌從播放清單中移除嗎?]]> - 重新命名播放清單 - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. 回復購買 - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -490,142 +375,92 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save 儲存檔案 Save as files - 已儲存播放清單至 %s - 儲存變更 - Scan media - 已掃描 %2$d 個檔案夾中的 %1$d 個。 - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - 隨機播放 - Simple - 已取消睡眠定時器。 %d 分鐘後,音樂將會自動停止。 - Social Share story - 歌曲 Song duration - 歌曲 - 排序 Ascending - Album - Artist + 專輯 + 演唱者 Composer Date added Date modified + Song count + Song count desc Year Descending - 抱歉!你的裝置不支援語音輸入 搜尋音樂庫 - Stack - Start playing music. - Suggestions - 支援開發 - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - 感謝你! - 音訊檔案 - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "音軌(用2表示第2首歌或用3004表示 CD3 的第4首歌)" Track number - 翻譯 Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - \u7121\u6cd5\u64ad\u653e\u9019\u9996\u6b4c\u3002 - 即將播放 - 更新圖片 - 正在更新… - + User Name Username - 版本 - Vertical flip - Volume - 網路搜尋 - Welcome, - 你想分享哪些內容? - What\'s New - Window Rounded corners - 已將 %1$s 設為鈴聲。 已選取 %1$d 個 - 年份 - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 1d97f6466189cd8ee9b94204e1d4833e840f83cd Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:53 +0530 Subject: [PATCH 0044/1603] New translations strings.xml (French) --- app/src/main/res/values-fr-rFR/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 426641031..bdcbc384b 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -2,10 +2,8 @@ About %s Équipe, liens sociaux - Couleur d\'accentuation La couleur d\'accentuation du thème, verte par défaut - À propos Ajouter aux favoris Ajouter à la file d\'attente @@ -48,32 +46,23 @@ Éditeur de tag Activer/désactiver les favoris Jouer en aléatoire - Adaptatif - Ajouter "Ajouter à playlist" - "1 titre à été ajoutée à la file d'attente." %1$d titres ont été ajoutés à la file d\'attente. - Album - Song Songs - Artiste de l\'album - Albums Album Albums - Toujours - Hey, jetez un coup d\'œil à ce super lecteur de musique : https://play.google.com/store/apps/details?id=%s Aléatoire Pistes préférées @@ -82,25 +71,16 @@ Retro Music – Classique Retro Music – Petit Texte - Artiste - Artistes - Focus audio refusé. Changer les paramètres audio et ajuster l\'égaliseur - Auto - Biographie - Juste noir - Liste noire - Flou Carte floue - Impossible d\'envoyer le rapport de bug Jeton d\'accès invalide. Veuillez contacter le développeur de l\'application. Les problèmes ne sont pas activés pour le dépôt sélectionné. Veuillez contacter le développeur de l\'application. @@ -114,55 +94,35 @@ Veuillez entrer votre nom d\'utilisateur GitHub valide Une erreur imprévue s\'est produite. Nous sommes désolé que vous ayez rencontré ce bug, si l\'application continue de planter, effacez les données de l\'application Envoyer en utilisant un compte GitHub - Acheter maintenant - Annuler - Carte Cartes colorées + Square Card Carte - Effet carousel sur l\'écran de lecture en cours - En cascade - Liste des changements Liste des changements maintenu sur la canal Telegram - Circle - Circulaire - Classique - Effacer Effacer la liste noire Vider la file d\'attente - Couleur - Couleurs - Compositeur - Informations sur l\'appareil copiées dans le presse-papier. - La liste de lecture n\'a pas pu \u00eatre cr\u00e9\u00e9e. "Impossible de t\u00e9l\u00e9charger une image d'album qui corresponde." Les achats n\'ont pas pu être restaurés. Les fichiers %d n\'ont pas pu être scanné. - Créer - Liste de lecture %1$s créée. - Membres et contributeurs - Vous écoutez actuellement %1$s par %2$s. - Plutôt Sombre - Supprimer la liste de lecture %1$s ?]]> Supprimer les listes de lecture @@ -171,62 +131,38 @@ Supprimer les morceaux %1$d ?]]> %1$d ?]]> - %1$d à été supprimé. - Profondeur - Description - Infos sur l\'appareil - Autoriser la musique Retro pour modifier les paramètres audio Set ringtone - Voulez vous vraiment vider la liste noire ? %1$s de la liste noire ?]]> - Faire un don Si vous pensez que je mérite d\'être payé pour mon travail, vous pouvez me donner quelques dollars ici - Achetez moi : - + Done Drive mode - Vide - Égaliseur - FAQ - Favoris - Finissez la dernière chanson - Adapter - Plat - Dossiers - Follow system - Pour vous - Free - Plein Carte complète - Changer le thème et les couleurs de l\'application Apparence - Genre - Genres - Cloner le projet sur GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Les Grilles & Le Style - + Need more help? Charnière - Historique - Accueil - Balayage horizontal - Image Le Gradient de l\'image Changer les paramètres de téléchargement des photos d\'artistes - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. %1$d morceaux ont été inséré dans la liste %2$s. - Partager votre configuration de Retro Music pour la montrer sur Instagram - Clavier - Débit Format Nom du fichier @@ -263,45 +194,27 @@ More from %s Taux d’échantillonnage Longueur - Étiqueté - Dernier ajout Dernière Chanson - Catégories - Licences - Clairement blanc - Listeners - Listage des fichiers - Chargement des produits… - Se connecter - Paroles - Fait avec ❤️ en Inde - Material - Erreur Erreur d\'autorisation - Mon nom Plus jouées - jamais - Nouvelle liste de lecture %s est le nouveau dossier de départ. - Prochaine Chanson - Pas d\'albums Pas d\'artistes "Lancez d'abord un morceau, puis réessayez." @@ -313,57 +226,39 @@ Aucun achat trouvé Aucun résultat Aucun morceau - Normal Paroles normales - %s n\'est pas repertorié dans le stockage média.]]> - + Not recently played Rien à scanner. Rien à afficher - Notification Personnaliser le style de notification - Lecture en cours File d\'attente Personnaliser l\'écran de lecture 9+ thèmes d\'écran de lecture en cours - Uniquement via Wi-Fi - Fonctions de test avancées - Autre - Mot de passe - 3 derniers mois - Peak - La permission pour accéder au stockage externe a été refusée. - + The app needs permission to access your device storage for playing music + Storage Access Permission refusée. - Personnaliser Personnalisez le lecteur et l\'interface - Sélectionner depuis le stockage - Pinterest Suivez la page de Pintrest pour la musique Retro. - Simple - La notification de lecture fournit des actions pour la lecture / pause etc. Lecture de la notification - Cette liste de lecture est vide Nom de la liste de lecture - Listes de lecture - Quantité de flou appliqué aux thèmes flous, bas est plus rapide Quantité de flou Filtrer les sons par temps @@ -384,6 +279,7 @@ Garder l\'écran allumé Select language Utiliser la couverture d\'album de la piste en cours de lecture comme fond sur l\'écran de verrouillage + Show Album Artists in the Artist category Baisser le volume quand un son système ou une notification est reçue Le contenu des dossiers en liste noire est masqué de votre bibliothèque. Commencez à jouer dès que vous êtes connecté à un appareil Bluetooth @@ -408,6 +304,7 @@ Le mode aléatoire se désactivera lors de la lecture d\'une nouvelle liste de morceaux Si vous avez assez de place, affiche les contrôle du volume sur l\'écran de lecture Afficher la couverture de l\'album + Navigate by Album Artist Thème de la couverture d\'album Style du balayage de l\'image d\'album Raccourcis d\'application colorés @@ -425,6 +322,7 @@ Détails sur la musique Lecture sans blanc Thème de l\'application + Album grid Disposition de la grille d\'artistes sur l\'accueil Bannière d\'accueil Ignorer les couvertures du stockage média @@ -438,22 +336,15 @@ Lecture automatique Mode aléatoire Contrôles de volume - Pro Maintenant les thèmes de jeu, L\'effet de carrousel, thème de couleur et plus.. - Profil - Acheter - File d\'attente - Noter l\'application Vous aimez l\'application ? Faites-le nous savoir sur le Play Store afin que nous puissions l\'améliorer davantage - Albums récents Artistes récents - Supprimer Supprimer la couverture Retirer de la liste noire @@ -461,25 +352,19 @@ %1$s de la liste de lecture ?]]> Retirer le morceau de la liste de lecture %1$d morceaux de la liste de lecture ?]]> - Renommer la liste de lecture - Signaler un problème Signaler un bug - Réinitialiser Réinitialiser la photo de l\'artiste - Restaurer - Achat précédent restauré. Veuillez redémarrer l\'application pour utiliser toutes les fonctionnalités. Achats précédents restaurés. - Restauration de l\'achat… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -492,48 +377,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Enregistrer Enregistrer en tant que fichier Enregistrer en tant que fichiers - Liste de lecture enregistrée vers %s - Enregistrement des changements - Scanner le média - Fichier %1$d sur %2$d scanné - Scrobbles - Tout sélectionner - Sélectionné - Définir Définir photo de l\'artiste - Partager l\'app + Share the app with your friends and family Share to Stories - Aléatoire - Simple - Minuteur d\'extinction annulé. Extinction dans %d minutes. - Social Share story - Morceau Durée du morceau - Morceaux - Ordre de classement Ascendant Album @@ -541,93 +410,59 @@ Compositeur Date Date de modification + Song count + Song count desc Année Descendant - Désolé, votre appareil ne supporte pas l\'entrée vocale Rechercher dans votre bibliothèque - Pile - Commencer à jouer de la musique. - Suggestions - Aider le développement - Glisser pour déverrouiller - Paroles synchronisées - Telegram Rejoignez le groupe Telegram pour discuter des bugs, faire des suggestions, montrer votre configuration, etc. - Merci ! - Le fichier audio - Ce mois Cette semaine Cette année - Petit Petite carte - Titre - Aujourd\'hui - Top albums Top artistes - "Morceau (2 pour morceau 2, 3004 pour morceau 4 du CD 3)" Numéro du morceau - Traduction Aidez-nous à traduire l\'application dans votre langue - Essayer Retro Music Premium - Twitter Partager votre design avec Retro Music - Non étiqueté - Impossible de lire ce morceau. - À suivre - Mettre à jour l\'image - Mise à jour... - + User Name Nom d\'utilisateur - version - Balayage vertical - Volume - Recherche internet - Bienvenue, - Que souhaitez-vous partager ? - Quoi de neuf - Fenêtre Bords arrondis - Définir %1$s comme sonnerie. %1$d sélectionné - Année - Vous devez sélectionner au moins une catégorie. Vous allez être redirigé vers le site web de suivi des problèmes. - Vos données de compte sont utilisées uniquement pour vous authentifier. From 1415af59c9ad8d26b2d0ac46ab40f0dfc8e3b924 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:54 +0530 Subject: [PATCH 0045/1603] New translations strings.xml (Hungarian) --- app/src/main/res/values-hu-rHU/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 23dae79be..e709b1211 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -2,10 +2,8 @@ %s -ról Csapat, társadalmi kapcsolatok - Kiemelő szín Az kiemelő téma színe alapértelmezés szerint színtiszta - Rólunk Hozzáadás a kedvencekhez Hozzáadás a lejátszási sorhoz @@ -48,32 +46,23 @@ Címkeszerkesztő A kedvenc váltása A véletlenszerű lejátszás megváltoztatása - AdaptÍv - Hozzáad "Hozzáadás lejátszási listához" - "1 cím lett hozzáadva a lejátszási sorhoz." %1$d cím hozzáadva a lejátszási sorhoz. - Album - Dal Dalok - Album előadó - Albumok Album Albumok - Mindig - Hé, nézd meg ezt a menő zenelejátszót itt: https://play.google.com/store/apps/details?id=%s Keverés Legjobb zeneszámok @@ -82,25 +71,16 @@ Retro zene - Klasszikus Retro zene - Kicsi Retro zene - Szöveg - Előadó - Előadók - Az audiofókusz megtagadva. Módosítsa a hangbeállításokat és állítsa be a hangszínszabályzó irányítását - Autó - Életrajz - Csak Fekete - Feketelista - Homályosítás Kártya homályosítása - Nem sikerült elküldeni a jelentést Érvénytelen belépési azonosító. Kérem, lépjen kapcsolatba az alkalmazás fejlesztőjével. A problémák jelentése nincs engedélyezve a repository-ban. Kérem, lépjen kapcsolatba az alkalmazás fejlesztőjével. @@ -114,55 +94,35 @@ Kérem, adja meg az érvényes GitHub felhasználónevét Egy váratlan hiba történt. Sajnáljuk, hogy hibába botlottál, ha folyton összeomlik, töröld az alkalmazásadatokat, vagy küldj nekünk E-Mailt. Küldés a GitHub fiókkal - Vásárolj most - Mégse - Kártya Színes Kártya + Square Card Kártya - Kőrhinta effekt a most játszik képernyőn - Növelés - Változtatási napló A Változtatási napló a Telegram csatornán működik - Kör - Kör alakú - Klasszikus - Kiürítés Feketelista kiürítése Lejátszási sor törlése - Szín - Színek - Zeneszerző - Eszköz információk a vágólapra másolva. - Lej\u00e1tsz\u00e1si lista l\u00e9trehoz\u00e1sa nem siker\u00fclt. "Nem siker\u00fclt lek\u00e9rni a megfelel\u0151 albumbor\u00edt\u00f3t." A vásárlást nem sikerült visszaállítani. Nem sikerült beolvasni %d fájlt. - Létrehozás - Létrehozott lejátszási lista %1$s. - Tagok és támogatók - Jelenleg hallgat %1$s által %2$s - Kissé sötét - Lejátszási lista törlése %1$s lejátszási listát?]]> Lejátszási listák törlése @@ -171,62 +131,38 @@ Dalok törlése %1$d lejátszási listát?]]> %1$d zenéket?]]> - Törölte a %1$d zenét. - Mélység - Leírás - Eszköz információ - Hagyja, hogy a Retro Music módosítsa az audiobeállításokat Csengőhang beállítás - Szeretné törölni a feketelistát? %1$s a feketelistáról?]]> - Támogatás Ha úgy gondolja, hogy megérdemlem fizetni a munkámért, hagyhatsz néhányat pénzt itt - Vegyél nekem egy: - + Done Vezetés mód - Üres - Hangszínszabályzó - GYIK - Kedvencek - Fejezze be az utolsó dalt - Illeszkedő - Lapos - Mappák - Kövesse a rendszert - Neked - Ingyenes - Teljes Teljes kártya - Módosítsa az alkalmazás témáját és színeit Megjelenés - Műfaj - Műfajok - Szerezd meg a projektet a githubon - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Rácsok és stílus - + Need more help? Zsanér - Előzmény - Kezdőlap - Vízszintes forgatás - Kép Színátmenet kép A művészképek letöltésének megváltoztatása. - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. %1$d dalt betett a %2$s lejátszási listába. - Ossza meg Retro Music beállításait, hogy bemutassa a Instagram-on - Billentyűzet - Bitrát Formátum Fájl név @@ -263,45 +194,27 @@ Több a következőtől: %s Mintavételi arány Hossz - Címkézve - Utoljára hozzáadva Utolsó dal - Könyvtár kategóriák - Licencek - Világos fehér - Hallgatók - Listázási fájlok - A termékek betöltése ... - Bjelentkezés - Dalszöveg - ❤️-el készítve Indiából - Materiál - Hiba Engedély hiba - Név Legjobb számok - Soha - Új lejátszási lista %s az új indítókönyvtár. - Következő dal - Nincsenek albumok Nincs előadó "Először játssz le egy dalt, majd próbálkozzon újra." @@ -313,57 +226,39 @@ Nincs vásárlás. Nincs eredmény Nincs dal - Normál Normál dalszövegek - %s nem szerepel a médiában.]]> - + Not recently played Nincs szkennelve. Semmit sem látni - Értesítés Értesítési stílus testreszabása - Most lejátszott Sorban áll Most játszik képernyő személyre szabása 9+ most játszik témák - Csak Wi-Fi-n - Speciális tesztelési szolgáltatások - Egyéb - Jelszó - 3 hónapnál túl - Csúcs - A külső tárolási hozzáférés engedélyezése tiltva. - + The app needs permission to access your device storage for playing music + Storage Access Engedélyek megtagadva. - Megszemélyesít Szabd személyre a jelenleg játszott felületet és a kezelőfelületet - Válasszon a helyi tárolóból - Pinterest Kövesse a Pinterest oldalt a Retro Music design inspirációjához - Egyszerű - A lejátszási értesítés lejátszási/szüneteltetési intézkedéseket tartalmaz. Értesítés lejátszása - A lejátszási lista üres Lejátszási lista neve - Lejátszási listák - Homályosítás mértéke homályos témákhoz, az alacsonyabb gyorsabb Homályosítás mértéke A dalok szűrése hossz szerint @@ -384,6 +279,7 @@ Tartsa bekapcsolva a képernyőt Válasszon nyelvet A jelenlegi zeneszámok albumborítóját zárolt háttérképként használja. + Show Album Artists in the Artist category Hangerő csökkentése rendszerhang vagy értesítés érkezik A feketelistán szereplő mappák tartalma el van rejtve a könyvtárban. Amint csatlakoztatta a bluetooth készüléket, kezdje el a lejátszást @@ -408,6 +304,7 @@ A véletlen sorrendű mód kikapcsol, ha új számlistát játszik le Ha van szabad hely a képernyőn engedélyezett hangerőszabályzókkal Az album borítójának megjelenítése + Navigate by Album Artist Album borító téma Most játszik album borító stílusa Színes alkalmazás parancsikonok @@ -425,6 +322,7 @@ Dalinformáció Gapless lejátszás Általános téma + Album grid Kezdőlapi előadó rács Kezdőlap banner Figyelmen kívül hagyja a médiatárolók fedelét @@ -438,22 +336,15 @@ Automatikus lejátszás Kevert mód Hangerőszabályzók - Pro Jelenleg témákat játszik, körhinta effektus és még sok más .. - Profil - Vásárlás - Sorban áll - Értékeld az alkalmazást Szereted ezt az app-ot a Google Play áruházban, hogy jobb élményt nyújtsunk - Legutóbbi albumok Legújabb előadók - Eltávolítás Borító eltávolítása Eltávolítás a feketelistáról @@ -461,25 +352,19 @@ %1$s dalt a lejátszási listából?]]> A dalok eltávolítása a lejátszási listáról %1$d dalt a lejátszási listából?]]> - Lejátszási lista átnevezése - Hibajelentés Hibajelentés - Visszaállítás Az előadó képének visszaállítása - Visszaállítás - Az előző vásárlás helyreállítása. Kérjük, indítsa újra az alkalmazást az összes funkció használatához. Korábbi vásárlások visszaállítása. - A vásárlás visszaállítása ... - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone A fájl törlése sikertelen: %s Nem lehet SAF URI @@ -492,48 +377,32 @@ Ne nyisson semmilyen almappát Érintse meg a \"select\" gombot a képernyő alján A fájl írása sikertelen: %s - Mentés Mentés fájlként Fájl mentése másként - Mentett lejátszási lista a következőhöz: %s - A változtatások mentése - Média szkennelés - %2$d fájlt %1$d szkennelt. - Scrobblek - Minden kiválasztása - Kiválaszott - Beállít Állítsa be az előadó képét - Alkalmazás megosztása + Share the app with your friends and family Ossza meg a Történet-ben - Keverés - Egyszerű - Az elalváskapcsoló kikapcsolva. Az elalvási időzítő beállítása %d perc múlva. - Közösségi Ossza meg a történetet - Dal A dal időtartama - Dalok - Sorrend Növekvő Album @@ -541,93 +410,59 @@ Zeneszerző Dátum Módosítás dátuma + Song count + Song count desc Év Csökkenő - Sajnálom! A készülék nem támogatja a beszédet Keresés a könyvtárban - Rakás - Kezdje el lejátszani a zenét - Javaslatok - Támogatás fejlesztése - Csúsztasd fel a feloldáshoz - Szinkronizált dalszövegek - Telegram Csatlakozz a Telegram csoporthoz hogy megbeszélhesd a hibákat, ajánlásokat tegyél, bemutass valamit stb... - Köszönöm! - Az audio fájl - Ebben a hónapban Ezen a héten Egy éve - Apró Apró kártya - Cím - Ma - Legjobb albumok Legjobb előadok - "Sáv (2 a 2. vagy a 3004-es számhoz a CD3 4. sávjához)" Sáv száma - Fordítás Segítsen nekünk az alkalmazás nyelvének fordításához - Próbálja ki a Retro Music Premium alkalmazást - Twitter oldal Ossza meg tervét a RetroMusicApp segítségével - Címkézetlen - Nem lehetett j\u00e1tszani ezt a dalt. - A következő - Kép frissítése - Frissítés... - + User Name Felhasználónév - Verzió - Függőleges forgatás - Hangerő - Webes keresés - Üdvözöljük, - Mit szeretne megosztani? - Mi az újdonság? - Ablak Lekerekített sarkak - Állítsa be a (z) %1$s csengőhangot. %1$d kiválasztása - Év - Legalább egy kategóriát kell kiválasztania Továbbítani fogjuk a problémakezelő weboldalra. - Fiókja adatait kizárólag a hitelesítéshez fogjuk használni. From 8f4e77c427eae311c6a55ed3c1ff5528ca4a3fe8 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:56 +0530 Subject: [PATCH 0046/1603] New translations strings.xml (Spanish) --- app/src/main/res/values-es-rES/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 98066df79..f97f70548 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -2,10 +2,8 @@ Acerca de %s Equipo, enlaces sociales - Color de énfasis El color de énfasis del tema, es morado por defecto - Acerca de Retro Music Player Añadir a favoritos Añadir a la cola de reproducción @@ -48,32 +46,23 @@ Editor de etiquetas Alternar favoritos Alternar el modo aleatorio - Adaptativo - Agregar "Agregar a lista de reproducción" - "Se ha agregado 1 canción a la cola de reproducción" %1$d canciones agregadas a la cola de reproducción - Álbum - Canción Canciones - Artista del álbum - Álbumes Álbum Álbumes - Siempre - Ve este cool reproductor de música en: https://play.google.com/store/apps/details?id=%s Aleatorio Canciones más reproducidas @@ -82,25 +71,16 @@ Clásico Pequeño Texto - Artista - Artistas - Enfoque de audio denegado Modifica los ajustes de sonido y ajusta los controles del ecualizador - Automático - Biografía - Negro - Lista Negra - Desenfoque Tarjeta con desenfoque - Enviando el reporte a GitHub... Token de acceso inválido. Por favor, contacta con el desarrollador de la aplicación El problema no está habilitado para el repositorio seleccionado. Por favor, contacta con el desarrollador de la app. @@ -114,55 +94,35 @@ Por favor, introduce tu nombre de usuario de GitHub Ocurrió un error inesperado. Lamento que hayas encontrado este error, si sigue fallando \"Borra los datos de la aplicación\" Enviar usando la cuenta de Github - Comprar ahora - Cancelar - Tarjeta Tarjeta Coloreada + Square Card Tarjeta - Efecto carrusel en la pantalla de reproducción - En cascada - Registro de cambios Registro de cambios disponible en el canal de Telegram - Círculo - Circular - Clásico - Limpiar Limpiar lista negra Limpiar la cola - Color - Colores - Compositor - Información del dispositivo copiada al portapapeles - No se pudo crear la lista de reproducción. "No se pudo descargar una portada de álbum coincidente." No se pudo restaurar la compra. No se pudieron escanear %d archivos - Crear - Lista de reproducción %1$s creada - Miembros y colaboradores - Actualmente estás escuchando %1$s de %2$s. - Un poco oscuro - Eliminar lista de reproducción %1$s?]]> Eliminar listas de reproducción @@ -171,62 +131,38 @@ Eliminar canciones %1$d listas de reproducción?]]> %1$d canciones?]]> - %1$d canciones eliminadas. - Profundidad - Descripción - Información del dispositivo - Permitir a Retro Music modificar los ajustes de audio Establecer como tono - ¿Deseas limpiar la lista negra? %1$s de la lista negra?]]> - Donar Si crees que merezco que me paguen por mi trabajo, puedes dejar algo de dinero aquí - Cómprame: - + Done Modo de conducir - Vacio - Ecualizador - Preguntas más frecuentes - Favoritos - Termina la última canción - Ajustado - Plano - Carpetas - Seguir al sistema - Para ti - Gratuito - Completo Tarjeta completa - Cambiar el tema y colores de la aplicación Aspecto y la sensación - Género - Géneros - Haz Fork del proyecto en GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Cuadrícula y estilo - + Need more help? Giro - Historial - Inicio - Giro horizontal - Imagen Imagen de degradado Cambiar la configuración de descarga de imágenes del artista - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. %1$d canciones agregadas a la lista de reproducción %2$s. - Comparte tu configuración de Retro Music para exhibirlo en Instagram - Teclado - Velocidad de bits Formato Nombre del archivo @@ -263,45 +194,27 @@ Más de %s Frecuencia de muestreo Duración - Etiquetado - Añadidos recientemente Última canción - Categorías de la Biblioteca - Licencias - Blanco claro - Oyentes - Listando archivos - Cargando productos... - Iniciar Sección - Letras - Hecho con ❤️ en India - Material - Error Error de permisos - Nombre Más reproducidas - Nunca - Nueva lista %s es el nuevo directorio de inicio - Próxima canción - No hay Álbumes No hay Artistas "Primero reproduce una canción, luego intenta de nuevo." @@ -313,57 +226,39 @@ No se encontraron compras. Sin resultados No hay Canciones - Normal Letras normales - %s no aparece en la lista de medios.]]> - + Not recently played Nada para escanear. Nada para escanear - Notificaciones Personaliza el estilo de la notificación - Reproduciendo ahora Cola de reproducción actual Personalizar la ventana de reproducción Más de 9 temas para la ventana de reproducción - Solo con Wi-Fi - Funciones avanzadas experimentales - Otro - Contraseña - Más de 3 meses - Pica - Permiso de acceso al almacenamiento externo denegado. - + The app needs permission to access your device storage for playing music + Storage Access Permiso denegado. - Personalizar Personalizar la ventana de reproducción y los controles de la interfaz - Elegir del almacenamiento local - Pinterest Síguenos en Pinterest para inspirarte en el diseño de Retro Music. - Simple - La notificación de reproducción proporciona acciones para reproducir/pausar, etc. Notificación de reproducción - La lista de reproducción está vacía Nombre de la lista - Listas de reproducción - Cantidad de desenfoque aplicado a los temas desenfocados, más bajo es más rápido Cantidad de desenfoque Filtrar canciones por longitud @@ -384,6 +279,7 @@ Mantener la pantalla encendida Seleccionar lenguaje Usar la portada del álbum de la canción en reproducción como fondo de la pantalla de bloqueo + Show Album Artists in the Artist category Bajar el volumen cuando se reproduzca un sonido del sistema o se reciba una notificación Las carpetas en la lista negra, serán ocultado de tu librería. Comienza a reproducir tan pronto como esté conectado al dispositivo bluetooth @@ -408,6 +304,7 @@ El modo aleatorio se desactivará cuando se reproduzca una nueva lista de canciones Mostrar controles de volumen si hay suficiente espacio disponible. Mostrar/Ocultar portada del álbum + Navigate by Album Artist Tema de la portada del álbum Estilo de portada del álbum en reproducción Accesos directos de la aplicación coloreados @@ -425,6 +322,7 @@ Información de la canción Reproducción sin pausas Tema de la aplicación + Album grid Cuadrícula de los artistas en inicio Banner de Inicio Ignorar las portadas de la biblioteca de medios @@ -438,22 +336,15 @@ Reproducir automáticamente Aleatorio Controles de volumen - Pro Temas en reproducción, efecto Carrusel, tema de color y más ... - Perfil - Comprar - Cola - Califica la aplicación ¿Te encanta la aplicación? Haznos saber en Google Play Store cómo podemos hacerla aún mejor - Álbumes recientes Artistas recientes - Eliminar Eliminar portada Eliminar de la Lista Negra @@ -461,25 +352,19 @@ %1$s de la lista?]]> Eliminar canciones de la lista %1$d canciones de la lista?]]> - Renombrar lista - Reporta un problema Reportar un error - Restablecer Reiniciar imagen del artista - Restaurar - Compra anterior restaurada. Por favor, reinicie la aplicación para hacer uso de todas las funciones. Compras anteriores restauradas. - Restaurando compra... - Reproductor de Retro Music Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone La eliminación del archivo falló No se puede obtener SAF URI @@ -492,48 +377,32 @@ No abra ninguna sub-carpeta Toca el botón \'seleccionar\' en la parte inferior de la pantalla Error al escribir: %s - Guardar Guardar como archivo Guardar como archivos - Guardar lista de reproducción a %s - Guardando cambios - Escanear medios - %1$d de %2$d archivos escaneados. - Scrobbles - Seleccionar todos - Seleccionado - Establecer Establecer imagen del artista - Compartir app + Share the app with your friends and family Compartir en historias - Aleatorio - Sencillo - Temporizador cancelado. Temporizador de apagado establecido para %d minutos desde ahora. - Social Compartir historia - Canción Duración de la canción - Canciones - Ordenar por Ascendente Álbum @@ -541,93 +410,59 @@ Compositor Fecha Fecha de modificación + Song count + Song count desc Año Descendente - ¡Lo siento! Su dispositivo no es compatible con la entrada de voz Busca en tu biblioteca - Apilado - Comenzar a reproducir música. - Recomendaciones - Apoya el desarrollo - Desbloquear - Letras sincronizadas - Telegram Únete al grupo de Telegram para discutir los errores, hacer sugerencias, presumir y más - ¡Gracias! - El archivo de audio - Este mes Esta semana Este año - Pequeño Tarjeta pequeña - Titulo - Hoy - Álbumes más reproducidos Artistas más reproducidos - "Pista (2 para pista 2 o 3004 para CD3 pista 4)" Número de pista - Traducir Ayúdanos a traducir la aplicación a tu lenguaje - Pruebe Retro Music Premium - Twitter Comparte tu diseño con Retro Music - Sin etiqueta - No se pudo reproducir esta canción - A continuación - Actualizar imagen - Actualizando... - + User Name Nombre de usuario - Versión - giro vertical - Volumen - Búsqueda web - Bienvenido, - ¿Qué quieres compartir? - Lo Nuevo - Ventana Esquinas redondeadas - %1$s establecido como tono de llamada. %1$d seleccionados - Año - Tienes que seleccionar al menos una categoría Será redirigido al sitio web para reportar problemas. - Los datos de tu cuenta sólo se utilizan para la autenticación From 968f97c987219cc46eeaf4707d5bf90cf22fdbdb Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:56 +0530 Subject: [PATCH 0047/1603] New translations strings.xml (Afrikaans) --- app/src/main/res/values-af-rZA/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index b599615cf..0a9a9d1f7 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Accent color The theme accent color, defaults to purple - About Add to favorites Add to playing queue @@ -48,32 +46,23 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - Add "Add to playlist" - "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album - Song Songs - Album artist - Albums Album Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks @@ -82,25 +71,16 @@ Classic Small Text - Artist - Artists - Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,55 +94,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -171,62 +131,38 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - + Done Drive mode - Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Grid style - + Need more help? Hinge - History - Home - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -263,45 +194,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -313,57 +226,39 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -384,6 +279,7 @@ Keep the screen on Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -408,6 +304,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover + Navigate by Album Artist Album cover theme Album cover skip Colored app shortcuts @@ -425,6 +322,7 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers @@ -438,22 +336,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -461,25 +352,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -492,48 +377,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -541,93 +410,59 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 7639d860e15b2894cc9a3a6034d2038ac23f08a3 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:57 +0530 Subject: [PATCH 0048/1603] New translations strings.xml (Arabic) --- app/src/main/res/values-ar-rSA/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index e33392315..bb024dda9 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -2,10 +2,8 @@ حول %s الفريق, الروابط للتواصل - اللون الأساسي لون تمييز المظهر ، يتم تعيينه إلى اللون الأرجواني - حول اضافة الى المفضلة إضافة الى قائمة التشغيل الحالية @@ -48,17 +46,12 @@ محرر البطاقة تبديل المفضلة تفعيل وضع الخلط - متكيف - إضافة "إضافة الى قائمة التشغيل" - "إضافة ١ من العناوين الى قائمة التشغيل الحالية" إضافة %1$d من العناوين الى قائمة التشغيل الحالية - البوم - Songs Song @@ -67,9 +60,7 @@ Songs Songs - البوم الفنان - الألبومات Albums @@ -79,9 +70,7 @@ Albums Albums - دائما - مرحبا القي نظرة على مشغل الموسيقى الرائع هذا في: https://play.google.com/store/apps/details?id=%s عشوائي المسارات الاكثر شعبية @@ -90,25 +79,16 @@ ريترو ميوزك - تقليدي ريترو ميوزك - صغير ريترو ميوزك - نص - فنان - فنانين - تم منع تركيز الصوت تغيير إعدادات الصوت وضبط عناصر التحكم في موازن الصوت - تلقائي - سيرة ذاتية - أسود لامع - القائمة السوداء - ضبابي بطاقة ضبابية - لم يمكن ارسال التقرير دخول غير مكتمل. الرجاء إبلاغ مطور التطبيق المشاكل غير مفعلة للمستودعات المحددة.الرجاء إبلاغ مطور التطبيق @@ -122,55 +102,35 @@ الرجاء ادخال أسم مستخدم صالح حصل خطأ غير متوقع. نأسف لذالك, اذا تكرر معك الخطأ \"قم بمسح بيانات التطبيق\"او ارسل ايميل ارسال بأستخدام حساب چيتهب - اشتري الآن - إلغاء - بطاقة بطاقة ملونة + Square Card بطاقة - التاثير الدائري على شاشة التشغيل الآن - المتتالية - سجل التغيرات سجل التغيرات ثابت على قناة التيليجرام - دائرية - دائري - كلاسيكي - إزالة إزالة القائمة السوداء مسح التسلسل - لون - الوان - المؤلف - تم نسخ معلومات الجهاز للحافظة. - تعذّر\u2019t إنشاء قائمة. "تعذّر تحميل\u2019t غلاف الألبوم المطابق." لايمكن إسترجاع المشتريات لايمكن فحص الملفات %d - إنشاء - قائمة التشغيل الموجودة %1$s. - الافراد والمساهمين - يستمع حالياً إلى %1$s لـ %2$s - أسود قليلاً - حذف قائمة التشغيل %1$s؟]]> حذف قوائم التشغيل @@ -179,63 +139,39 @@ حذف الاغاني %1$d؟]]> %1$d؟]]> - تم حذف %1$d الأغاني. - العمق - الوصف - معلومات الجهاز - السمات لتطبيق ريترو ميوزك بتعديل اعدادات الصوت ك نغمة رنين - هل تريد إزالة القائمة السوداء؟ %1$s من القائمة السوداء]]> - تبرع إذا كنت تعتقد أنني أستحق الحصول على المال مقابل عملي ، يمكنك ترك بعض المال هنا. - اشتري لي: - + Done وضع القيادة - فارغ - موازن الصوت - التعليمات - المفضلات - إنهاء الأغنية الأخيرة - تناسق - مسطح - المجلدات - اتبع النظام - لأجلك - مجاني - كامل بطاقة كاملة - تغيير سمات وألوان التطبيق المظهر و الحس - فئة - فئات - اجلب المشروع على GitHub - + Gradient 1 2 3 @@ -245,25 +181,20 @@ 7 8 الشبكة والأسلوب - + Need more help? مفصل - السجل - الشاشة الرئيسية - تدوير عمودي - صورة الصورة المتدرجة تغيير إعدادات تنزيل صور الفنان - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. إدراج %1$d الأغاني في قائمة التشغيل %2$s. - شارك إعداد Retro Music الخاص بك للعرض على إنستقرام - الكيبورد - معدل البت الصيغة اسم الملف @@ -272,45 +203,27 @@ المزيد من %s معدل العينات الامتداد - معنون - المضافة مؤخرا الاغنية الاخيرة - فئات المكتبة الموسيقية - تراخيص - أبيض صافي - المستمعون - قائمة الملفات - تحميل المنتجات... - تسجيل الدخول - كلمات الاغنية - صنع ب❤️في الهند - ماتيريال - خطأ خطأ في الصلاحيات - الأسم الأكثر تشغيل - أبداً - قائمة تشغيل جديدة %s هذا دليل البدء الجديد. - الاغنية التالية - لا توجد ألبومات لا يوجد مغنين "قم بتشغيل أغنية أولاً ، ثم حاول مرة أخرى." @@ -322,57 +235,39 @@ لم يتم العثور على عملية شراء. لا يوجد نتائج لا يوجد أغاني - الافتراضي كلمات عادية - %s غير مدرج في مخزن الوسائط]]> - + Not recently played لاشيء لفحصه. لاشيء لفحصه - إشعارات تخصيص نمط الإشعارات - تشغيل الان تسلسل التشغيل الان تخصيص شاشة التشغيل الآن 9+ من ثيمات التشغيل الان - فقط على الواي فاي - اعدادات اختبارية متقدمة - آخر - كلمة السر - أخر 3 أشهر - الذروة - تم رفض إذن الوصول إلى وحدة التخزين الخارجي. - + The app needs permission to access your device storage for playing music + Storage Access تم رفض الأذونات. - تخصيص تخصيص المشغل و الواجهة - اختر من وحدة التخزين الداخلي - بينتريست متابعة صفحة البينتريست لمشاهدة الهامات التصميم - عادي - اشعارات التشغيل توفر إجراءات للتشغيل / الإيقاف المؤقت إلخ. تنبيهات التشغيل - قائمة التشغيل فارغة اسم قائمة التشغيل - قوائم التشغيل - مستوى ضبابية الثيم , كلما قل كلما كان افضل مستوى الضبابية تصفية الأغاني حسب الطول @@ -393,6 +288,7 @@ ابقاء الشاشة تعمل حدد اللغة استخدم غلاف ألبوم الأغنية قيد التشغيل حاليًا كخلفية لشاشة القفل + Show Album Artists in the Artist category خفض مستوى الصوت عند تشغيل صوت نظام أو تلقي إشعارات محتويات مجلدات القائمة السوداء يتم أخفائها من مكتبتك الموسيقية. بدء التشغيل بمجرد توصيل جهاز بلوتوث @@ -417,6 +313,7 @@ سوف يتم تعطيل وضع الخلط عند التشغيل من قائمة جديدة في حال توفر مساحة كافية قم بعرض شريط التحكم بالصوت في شاشة التشغيل الآن عرض غطاء الالبوم + Navigate by Album Artist ثيم غطاء الالبوم تخطي غطاء الالبوم تلوين اختصارات التطبيق @@ -434,6 +331,7 @@ معلومات الأغنية تشغيل متتابع سمات التطبيق + Album grid شبكة الفنان الرئيسية صورة الواجهة تجاهل صور تخزين الميديا @@ -447,22 +345,15 @@ التشغيل التلقائي وضع الخلط التحكم بالصوت - الكامل تشغيل الآن السمات ، وتأثير التكدس ، وموضوع اللون وأكثر من ذلك .. - الملف الشخصي - شراء - تسلسل - تقييم التطبيق أحببت هذا التطبيق؟ أخبرنا في متجر Google Play كيف يمكننا تحسينه - الالبومات الحديثة الفنانون الحديثون - حذف حذف الغطاء حذف من القائمة السوداء @@ -470,25 +361,19 @@ %1$s من قائمة التشغيل ?]]> حذف الاغاني من قائمة التشغيل %1$d اغنية من قائمة التشغيل?]]> - اعادة تسمية قائمة التشغيل - تبليغ عن مشكلة تقرير الأخطاء - استرداد اعادة ضبط صور الالبومات - استرجاع - تم استرداد عملية الشراء السابقة. الرجاء اعادة تشغيل التطبيق الاستمتاع بكافة المميزات. تم - استرداد عملية الشراء... - مشغل الموسيقى Retro ريترو ميوزك - الكامل - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone فشل حذف الملف: %s لا يمكن الحصول على URI SAF @@ -501,48 +386,32 @@ لا تفتح أي مجلدات فرعية اضغط على زر \"تحديد\" في الجزء السفلي من الشاشة فشلت كتابة الملف: %s - حفظ حفظ كملف حفظ كملف - حفظ قائمة التشغيل الى %s. - حفظ التغييرات - فحص الميديا - تم فحص %1$d من %2$d ملف. - تمريرات - تحديد الكل - محدد - تعيين اختيار صورة الفنان - مشاركة التطبيق + Share the app with your friends and family شارك في القصص - خلط - بسيط - تم إلغاء مؤقت النوم. تم ضبط مؤقت النوم الى %d دقيقة من الآن. - أجتماعي مشاركة القصة - الاغنية مدة الأغنية - الاغاني - ترتيب الفرز تصاعدي الالبوم @@ -550,93 +419,59 @@ المؤلف التاريخ تاريخ التعديل + Song count + Song count desc السنة تنازلي - عذرا! جهازك لايدعم الادخال الصوتي أبحث في مكتبتك - التكدس - أبدا بتشغيل الموسيقى. - اقتراحات - دعم التطوير - اسخب للفتح - مزامنة الكلمات - تيليجرام انضم لمجموعة التيليجرام لمناقشة المشاكل, و طرح اقتراحات والمزيد - شكرا - الملف الصوتي - هذا الشهر هذا الاسبوع هذه السنة - صغير بطاقة صغيرة - عنوان - اليوم - افضل الالبومات افضل الفنانين - "المسار (2 للمسار 2 أو 3004 لمسار CD3 4)" رقم المسار - ترجمة ساعدها لترجمة التطبيق الى لغتك - جرب ريترو الموسيقى الإصدار المميز - تويتر شارك تصميمك مع ريترو ميوزك - غير معنون - تعذّر تشغيل\u2019t هذه الأغنية. - التالي - تحديث الصورة - تحديث... - + User Name أسم المستخدم - الإصدار - تدوير رأسي - الصوت - البحث عبر الانترنت - مرحبا, - مالذي تريد مشاركته? - مالجديد - نافذة حواف دائرية - تعيين %1$s كنغمة الرنين الخاصة بك. %1$d تحديد - السنة - عليك اختيار فئة واحدة على الأقل. سيتم تحويلك الى صفحة سجل الاخطاء - بيانات حسابك تستخدم لتوثيق فقط. From 9a39349110fb85776adee3f6f908d240944c52e9 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:52:58 +0530 Subject: [PATCH 0049/1603] New translations strings.xml (Catalan) --- app/src/main/res/values-ca-rES/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index b599615cf..0a9a9d1f7 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Accent color The theme accent color, defaults to purple - About Add to favorites Add to playing queue @@ -48,32 +46,23 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - Add "Add to playlist" - "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album - Song Songs - Album artist - Albums Album Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks @@ -82,25 +71,16 @@ Classic Small Text - Artist - Artists - Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,55 +94,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -171,62 +131,38 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - + Done Drive mode - Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Grid style - + Need more help? Hinge - History - Home - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -263,45 +194,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -313,57 +226,39 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -384,6 +279,7 @@ Keep the screen on Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -408,6 +304,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover + Navigate by Album Artist Album cover theme Album cover skip Colored app shortcuts @@ -425,6 +322,7 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers @@ -438,22 +336,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -461,25 +352,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -492,48 +377,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -541,93 +410,59 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 1b8ef26eb44478980e48c5495904e29328afaeb3 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:00 +0530 Subject: [PATCH 0050/1603] New translations strings.xml (Czech) --- app/src/main/res/values-cs-rCZ/strings.xml | 207 +++------------------ 1 file changed, 21 insertions(+), 186 deletions(-) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 0505668a9..a8527b164 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Barva akcentů Barva motivu akcentu je výchozí k růžové barvě. - Informace Přidat k oblíbeným Přidat do fronty @@ -48,26 +46,19 @@ Editor tagů Toggle favorite Toggle shuffle mode - Adaptive - Add "Přidat do seznamu skladeb" - "Přidán 1 titul do fronty přehrávání." Přidány %1$d tituly do fronty přehrávání. - Album - Song Songs Songs Songs - Umělec alba - Albumy Album @@ -75,9 +66,7 @@ Albums Albums - Vždy - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks @@ -86,25 +75,16 @@ Classic Small Text - Umělec - Umělci - Zaměření zvuku bylo zamítnuto. Change the sound settings and adjust the equalizer controls - Auto - Bio - Velmi černá - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -118,55 +98,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Zrušit aktuální časovač - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Přehled změn Changelog maintained on the Telegram channel - Circle - Circular - Classic - Vyčistit Clear blacklist Clear queue - Color - Barvy - Composer - Copied device info to clipboard. - Nelze vytvo\u0159it playlist. "Nelze st\u00e1hnout odpov\u00eddaj\u00edc\u00ed obal alba." Could not restore purchase. Nelze skenovat %d soubory. - Vytvořit - Vytvořený seznam skladeb %1$s. - Members and contributors - Aktuálně posloucháš %1$s od %2$s. - Tmavá - Smazat seznam skladeb %1$s?]]> Smazat seznamy skladeb @@ -175,62 +135,38 @@ Delete songs %1$d seznamů skladeb?]]> %1$d písní?]]> - %1$d skladby byly smazány. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Darovat Pokud si myslíte, že si zasloužím odměnu za svou práci, můžete mi nechat pár dolarů. - Buy me a: - + Done Drive mode - Prázdný - Equalizer - FAQ - Oblíbené - Finish last song - Fit - Flat - Složky - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Žánr - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -240,25 +176,20 @@ 7 8 Grid style - + Need more help? Hinge - Historie - Domov - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Do playlistu %2$s byly vloženy %1$d skladby. - Share your Retro Music setup to showcase on Instagram - Keyboard - Datový tok Formát Název souboru @@ -267,45 +198,27 @@ More from %s Vzorkovací frekvence Délka - Labeled - Poslední Last song - Library categories - Licence - Velmi bílá - Listeners - Výpis souborů - Načítání produktů... - Login - Text - Made with ❤️ in India - Material - Error Permission error - Name Moje top skladby - Nikdy - Nový seznam skladeb %S je nový úvodní adresář. - Next Song - Žádné alba žádní umělci "Přehrajte nejprve píseň a zkuste to znovu." @@ -317,57 +230,39 @@ No purchase found. Žádné výsledky Žádné písně - Normal Normal lyrics - %s není uveden v úložišti médií.]]> - + Not recently played Nic pro skenování. Nothing to see - Upozornění Customize the notification style - Now playing Aktuální fronta Customize the now playing screen 9+ now playing themes - Pouze přes Wifi - Advanced testing features - Other - Password - Past 3 months - Peak - Povolení přístupu k externímu úložišti bylo zamítnuto. - + The app needs permission to access your device storage for playing music + Storage Access Oprávnění byla odepřena. - Personalize Customize your now playing and UI controls - Vyberte z místního úložiště - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Název playlistu - Seznamy skladeb - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -381,13 +276,14 @@ Obrázky Library Obrazovka uzamčení - Playlists + Seznamy skladeb Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app Pause on zero Keep in mind that enabling this feature may affect battery life Keep the screen on Select language Používá současný obal alba písní jako tapetu zámku. + Show Album Artists in the Artist category Oznámení, navigace atd. The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -412,6 +308,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Zobrazit obal alba + Navigate by Album Artist Album cover theme Album cover skip Barevné zkratky aplikace @@ -429,6 +326,7 @@ Song info Přehrávání bez mezery Hlavní téma + Album grid Artist grid Banner Ignorovat obaly v zařízení @@ -442,22 +340,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Fronta - Ohodnoťte aplikaci Zanechte pozitivní hodnocení na Google Play pokud máte rádi Retro music. - Recent albums Recent artists - Odstranit Odstranit obal Remove from blacklist @@ -465,25 +356,19 @@ %1$s ze seznamu skladeb?]]> Smazat skladby ze seznamu skladeb %1$d skladby ze seznamu skladeb?]]> - Přejmenovat seznam skladeb - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Předchozí nákupy byly obnoveny. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -496,142 +381,92 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Uložit jako soubor Save as files - Seznam skladeb uložený do %s. - Uložení změn - Scan media - Naskenované %1$d z %2$d souborů. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Náhodně - Simple - Časovač vypnutí byl zrušen. Časovač vypnutí byl nastaven na %d minut. - Social Share story - Skladba Song duration - Písně - Řazení Ascending Album - Artist + Umělec Composer Date added Date modified + Song count + Song count desc Year Descending - Promiňte! Vaše zařízení nepodporuje vstup řeči Prohledat knihovnu - Stack - Start playing music. - Suggestions - Podpora vývoje - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Děkujeme! - Audio soubor - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Skladba (2 pro stopu 2 ​​nebo 3004 pro čtvrtou stopu z CD3)" Track number - Překlad Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Tuto p\u00edse\u0148 se nepoda\u0159ilo p\u0159ehr\u00e1t. - Up next - Aktualizovat obrázek - Aktualizace... - + User Name Username - Verze - Vertical flip - Volume - Webové vyhledávání - Welcome, - Co chcete sdílet? - What\'s New - Window Rounded corners - Nastavit %1$s jako zvonění %1$d vybrané - Rok - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 5a29acc359ca25104d26d0512e86b3f02203b027 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:01 +0530 Subject: [PATCH 0051/1603] New translations strings.xml (Danish) --- app/src/main/res/values-da-rDK/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index b599615cf..0a9a9d1f7 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Accent color The theme accent color, defaults to purple - About Add to favorites Add to playing queue @@ -48,32 +46,23 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - Add "Add to playlist" - "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album - Song Songs - Album artist - Albums Album Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks @@ -82,25 +71,16 @@ Classic Small Text - Artist - Artists - Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,55 +94,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -171,62 +131,38 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - + Done Drive mode - Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Grid style - + Need more help? Hinge - History - Home - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -263,45 +194,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -313,57 +226,39 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -384,6 +279,7 @@ Keep the screen on Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -408,6 +304,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover + Navigate by Album Artist Album cover theme Album cover skip Colored app shortcuts @@ -425,6 +322,7 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers @@ -438,22 +336,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -461,25 +352,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -492,48 +377,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -541,93 +410,59 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 74eb69ce57a7124b8dce207ab2ada62f04381573 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:02 +0530 Subject: [PATCH 0052/1603] New translations strings.xml (German) --- app/src/main/res/values-de-rDE/strings.xml | 205 ++------------------- 1 file changed, 20 insertions(+), 185 deletions(-) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index bfce5fd27..8542e5dd2 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -2,10 +2,8 @@ About %s Team, soziale Netzwerke - Akzentfarbe Akzentfarbe des Farbthemas, Standard ist Grün - Über Zu Favoriten hinzufügen Zur Wiedergabeliste hinzufügen @@ -48,32 +46,23 @@ Tag-Editor Favorit umschalten Toggle shuffle mode - Adaptiv - Hinzufügen "Zur Playlist hinzufügen" - "1 Titel wurde zur Wiedergabeliste hinzugefügt." %1$d Titel wurden zur Wiedergabeliste hinzugefügt. - Album - Song Songs - Album Künstler - Alben Album Albums - Immer - Hey, schau dir diesen coolen Music Player an: https://play.google.com/store/apps/details?id=%s Zufällig Top Songs @@ -82,25 +71,16 @@ Classic Klein Text - Künstler - Künstler - Audio Fokus verweigert. Sound- und Equalizer-Optionen einstellen - Automatisch - Biografie - Sehr schwarz - Schwarze Liste - Unschärfe Karte (Unschärfe) - Fehler beim Melden Ungültiger Token. Bitte kontaktiere den Entwickler. Für diese Repository sind Fehlermeldungen nicht aktiviert. Bitte den Entwickler kontaktieren. @@ -114,55 +94,35 @@ Bitte nutze einen gültigen GitHub-Nutzernamen Sorry! Ein unerwarteter Fehler ist aufgetreten. Die App-Daten zurückzusetzen, könnte helfen. Via GitHub senden - Jetzt kaufen - Timer stoppen - Karte Karte (Farbe) + Square Card Karte - Karussell-Effekt auf dem Abspielbildschirm - Kaskadierend - Änderungen Changelog über Telegram-App verwaltet. - Kreis - Rund - Klassik - Leer Blacklist leeren Leeren - Farbe - Farben - Komponist - Geräteinformationen wurden kopiert - Playlist konnte nicht erstellt werden. "Passendes Album Cover konnte nicht gedownloadet werden." Kauf konnte nicht wiederhergestellt werden. %d Dateien konnte(n) nicht gescannt werden. - Erstellen - Playlist %1$s erstellt. - Helfende Hände - Spielt zur Zeit %1$s von %2$s. - Dunkel - Playlist löschen %1$s löschen?]]> Playlisten löschen @@ -171,62 +131,38 @@ Songs löschen %1$d Playlisten löschen?]]> %1$d Songs löschen?]]> - %1$d Songs gelöscht. - Tiefe - Beschreibung - Geräteinfo - Retro Music erlauben, Audioeinstellungen zu verändern Klingelton festlegen - Möchtest du die Blacklist leeren? %1$s von der Blacklist entfernen?]]> - Spenden Falls du denkst ich habe mir etwas für meine Arbeit verdient, kannst du hier gerne ein bisschen Geld hinterlassen. - Kauf\' mir: - + Done Fahrmodus - Leer - Equalizer - FAQ - Favoriten - Letzten Song ganz spielen - Anpassen - Flach - Ordner - System folgen - Für dich - Kostenlos - Voll Karte (Voll) - Allgemeine Farben der App ändern Aussehen - Genre - Genres - Projekt von GitHub forken - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Vorschaubilder - + Need more help? Scharnier - Verlauf - Zuhause - Horizontale Drehung - Bild Bild mit Farbverlauf Download-Verhalten für Interpretenbilder ändern - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. %1$d Song(s) in Playlist %2$s eingefügt. - Teile dein Retro Music-Design auf Instagram - Tastatur - Bitrate Formattieren Dateiname @@ -263,45 +194,27 @@ Mehr von %s Sampling Rate Länge - Beschriftet - Zuletzt hinzugefügt Letzter Song - Bibliothekkategorien - Lizenzen - Sehr weiß - Zuhörer - Gelistete Dateien - Produkte werden geladen... - Login - Songtext - Hergestellt mit ❤ in Indien - Material - Fehler Berechtigungsfehler - Mein Name Meine Top Lieder - Nie - Neue Playlist %s ist das neue Startverzeichnis. - Nächster Song - Keine Alben Keine Künstler "Song abspielen und anschließend erneut versuchen." @@ -313,57 +226,39 @@ Kein Kauf gefunden. Keine Ergebnisse Keine Songs - Normal Normaler Songtext - %s ist nicht im Medienspeicher aufgeführt.]]> - + Not recently played Nichts zu scannen. Nichts zu sehen - Benachrichtigung Benachrichtigungen bearbeiten - Derzeit gespielt Aktuelle Wiedergabeliste Passe den Abspielbildschirm an Mehr als 10 Abspiel-Themes - Nur über Wi-Fi - Erweiterte Testfunktionen - Anderes - Passwort - Letzte 3 Monate - Spitze - Berechtigung für den Zugriff auf externen Speicher verweigert. - + The app needs permission to access your device storage for playing music + Storage Access Berechtigung verweigert. - Personalisieren Abspiel-Bildschirm und Interface bearbeiten - Vom lokalen Speicher wählen - Pinterest Folge der Pinterest-Seite für Retro Music Design Inspirationen - Einfach - Die Abspielbenachrichtigung bietet Play/Pause-Steuerung Abspielbenachrichtigung - Playlist ist leer Playlistname - Wiedergabelisten - Geringere Unschärfe benötigt weniger Rechenleistung. Unschärfe Lieder nach Länge filtern @@ -371,7 +266,7 @@ Erweitert Album-Stil Audio - Blacklist + Schwarze Liste Schaltflächen Allgemein Bilder @@ -384,6 +279,7 @@ Bildschirm anlassen Select language Aktuelles Album-Cover als Sperrbildschrim verwenden. + Show Album Artists in the Artist category Benachrichtigungen, Benachrichtigung etc. Die Musik in Ordnern von der schwarzen Liste wird nicht angezeigt. Wiedergabe starten, sobald mit dem Bluetooth-Gerät verbunden wurde @@ -408,6 +304,7 @@ Shufflemodus wird ausgeschaltet, sobald neue Wiedergabe gestartet wird Falls Platz vorhanden ist, Lautstärkeregler auf Derzeit gespielt-Bildschirm zeigen Album Cover anzeigen + Navigate by Album Artist Aussehen des Albumcovers Stil des Album-Covers Gefärbte App Shortcuts @@ -425,6 +322,7 @@ Song-Info Lückenlose Wiedergabe Hauptthema + Album grid Künstlerbilder auf der Startseite Home-Banner Media Store Cover ignorieren @@ -438,22 +336,15 @@ Automatische Wiedergabe Shuffle-Modus Lautstärkeregler - Pro Themes für \"Now Playing\", Karussell-Effekte und mehr - Profil - Kaufen - Warteschlange - App bewerten Hinterlasse eine positive Bewertung auf Google Play, wenn die Retro Music gefällt. - Kürzlich gespielte Alben Kürzlich gehörte Interpreten - Entfernen Cover entfernen Von der Blacklist löschen @@ -461,25 +352,19 @@ %1$s von der Playlist entfernen?]]> Songs von Playlist entfernen %1$d Songs von der Playlist entfernen?]]> - Playlist umbenennen - Fehler melden Einen Fehler melden - Zurücksetzen Interpretenbild zurücksetzen - Wiederherstellen - Vorherigen Kauf wiederherstellen. Starte die App bitte neu, um den Vorgang abzuschließen. Käufe wiederhergestellt - Kauf wird wiederhergestellt... - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone Löschen der Datei fehlgeschlagen: %s SAF-URI kann nicht geladen werden @@ -492,48 +377,32 @@ Keine Unterordner öffnen Tippe auf die \'auswählen\' Taste am unteren Bildschirmrand Datei schreiben fehlgeschlagen: %s - Speichern Als Datei speichern Als Dateien speichern - Playlist gespeichert zu %s. - Änderungen speichern - Medien scannen - %1$d von %2$d Dateien gescannt. - Scrobbles - Alle auswählen - Ausgewähltes beschriftet - Setzen Wähle ein Interpretenbild - App teilen + Share the app with your friends and family In Stories teilen - Zufall - Einfach - Sleep-Timer abgebrochen Sleep-Timer wurde auf %d minuten eingestellt. - Sozial Story teilen - Lied Songdauer - Titel - Sortierreihenfolge Aufsteigend Album @@ -541,93 +410,59 @@ Komponist Datum Änderungsdatum + Song count + Song count desc Jahr Absteigend - Tut uns leid! Dein Gerät unterstützt keine Spracheingabe Bibliothek durchsuchen - Gestapelt - Beginne Musik zu spielen. - Für dich - Entwickler unterstützen - Wischen zum Entsperren - Synchronisierter Songtext - Telegram Betritt die Telegram-Gruppe um über Fehler zu diskutieren, um Vorschläge zu geben usw. - Vielen Dank! - Die Audiodatei - Diesen Monat Diese Woche Dieses Jahr - Winzig Kleinkartenschrank - Titel - Heute - Top Alben Top Interpreten - "Songnummer (2 für Song 2 oder 3004 für CD3 Song 4)" Songnummer - Übersetzen Hilf\' uns, die App in deine Sprache zu übersetzen! - Try Retro Music Premium - Twitter-Seite Teile dein Design mit RetroMusic - Unbeschriftet - Song konnte nicht abgespielt werden. - Als Nächstes - Bild aktualisieren - Aktualisieren... - + User Name Benutzername - Version - Vertikale Drehung - Lautstärke - Internetsuche - Willkommen, - Was möchtest du teilen? - Neuigkeiten - Fenster Runde Ecken - %1$s als Klingelton verwenden. %1$d ausgewählt - Jahr - Du musst mindestens eine Kategorie auswählen Du wirst auf die Issue Tracker-Seite weitergeleitet. - Deine Accountdaten werden ausschließlich zur Authentifizierung genutzt From f48527db4680af54ae530e78172af677558d6c6a Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:03 +0530 Subject: [PATCH 0053/1603] New translations strings.xml (Greek) --- app/src/main/res/values-el-rGR/strings.xml | 209 +++------------------ 1 file changed, 22 insertions(+), 187 deletions(-) diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index c2671b300..5afa8b2fe 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -2,10 +2,8 @@ Σχετικά με %s Ομάδα, κοινωνικοί σύνδεσμοι - Χρώμα Τονισμού Το χρώμα τονισμού του θέματος, η προεπιλογή είναι το πράσινο. - Σχετικά με... Προσθήκη στα αγαπημένα Προσθήκη στην ουρά αναπαραγωγής @@ -48,32 +46,23 @@ Επεξεργασία Ετικετών Εναλλαγή αγαπημένου Εναλλαγή λειτουργίας τυχαίας σειράς - Προσαρμοστικό - Προσθήκη "Προσθήκη στη λίστα αναπαραγωγής" - "Προστέθηκε 1 κομμάτι στην ουρά αναπαραγωγής." Προστέθηκαν %1$d κομμάτια στην ουρά αναπαραγωγής. - Άλμπουμ - Κομμάτι Κομμάτια - Καλλιτέχνης Άλμπουμ - Άλμπουμ Άλμπουμ Άλμπουμς - Πάντα - Τσεκάρετε αυτό το κούλ music player στο:https://play.google.com/store/apps/details?id=%s Τυχαία αναπαραγωγή Κορυφαία Κομμάτια @@ -81,26 +70,17 @@ Κάρτα Κλασσικό Μικρό - >Κείμενο - + >Κείμενο Καλλιτέχνης - Καλλιτέχνες - Η εστίαση ήχου απορρίφθηκε. Αλλάξτε τις ρυθμίσεις ήχου και προσαρμόστε τα χειριστήρια του ισοσταθμιστή - Αυτόματο - Βιογραφία - Απλά Μαύρο - Blacklist - Θολούρα Κάρτα θαμπώματος - Δεν είναι δυνατή η αποστολή αναφοράς Μη έγκυρο διακριτικό πρόσβασης. Επικοινωνήστε με τον προγραμματιστή της εφαρμογής. Τα ζητήματα δεν είναι ενεργοποιημένα για το επιλεγμένο αποθετήριο. Επικοινωνήστε με τον προγραμματιστή της εφαρμογής. @@ -112,57 +92,37 @@ Παρακαλώ εισαγάγετε τον έγκυρο κωδικό πρόσβασης GitHub Παρακαλώ εισαγάγετε έναν τίτλο ζητήματος Παρακαλώ εισαγάγετε το έγκυρο όνομα χρήστη GitHub - Προέκυψε ένα μη αναμενόμενο σφάλμα. Λυπούμαστε που βρήκατε αυτό το σφάλμα, εάν εξακολουθεί να παρουσιάζεται \""Διαγραφή δεδομένων εφαρμογής\" ή στείλτε ένα Email + Προέκυψε ένα μη αναμενόμενο σφάλμα. Λυπούμαστε που βρήκατε αυτό το σφάλμα, εάν εξακολουθεί να παρουσιάζεται \"\"Διαγραφή δεδομένων εφαρμογής\" ή στείλτε ένα Email Αποστολή χρησιμοποιώντας λογαριασμό GitHub - Αγορά τώρα - Ακύρωση τρέχων χρονοδιακόπτη - Κάρτα Έγχρωμη κάρτα + Square Card Κάρτα - Εφέ καρουσέλ στην οθόνη του παίζει τώρα - Με υπερχείλιση - Λίστα Αλλαγών Η Λίστα Αλλαγών συντηρείται από τη εφαρμογή Telegram - Κύκλος - - >Κυκλικό - + >Κυκλικό Κλασσικό - Εκκαθάριση Εκκαθάριση blacklist Εκκαθάριση ουράς - Χρώμα - Χρώματα - Συνθέτης - Οι πληροφοριές συσκευής αντιγράφηκαν στο πρόχειρο. - \u0391\u03b4\u03c5\u03bd\u03b1\u03bc\u03af\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2 playlist. "\u0391\u03b4\u03c5\u03bd\u03b1\u03bc\u03af\u03b1 \u03bb\u03ae\u03c8\u03b7\u03c2 \u03c4\u03b1\u03b9\u03c1\u03b9\u03b1\u03c3\u03c4\u03bf\u03cd \u03b5\u03be\u03c9\u03c6\u03cd\u03bb\u03bb\u03bf\u03c5 \u03ac\u03bb\u03bc\u03c0\u03bf\u03c5\u03bc." Could not restore purchase. Αδυναμία στη σάρωση %d αρχείων. - Δημιουργία - Δημιουργήθηκε η λίστα αναπαραγωγής %1$s. - Μέλη και συνεισφέροντες - Παίζει το %1$s από τους %2$s. - Κάπως Σκούρο - Διαγραφή playlist %1$s?]]> Διαγραφή αυτών των λιστών αναπαραγωγής @@ -171,62 +131,38 @@ Διαγραφή κομματιών %1$d λίστα αναπαραγωγής?]]> %1$d κομματιών?]]> - Διαγράφηκαν %1$d κομμάτια. - Βάθος - Περιγραφή - Πληροφορίες συσκευής - Επιτρέψτε στο Retro Music να τροποποιεί τις ρυθμίσεις ήχου Ορισμός ήχου κλήσης - Εκκαθάριση της blacklist? %1$s από τη blacklist?]]> - Δώρισε Αν σου άρεσε η εφαρμογή μπορείς να δωρίσεις εδώ. - Αγορασέ μου ένα - + Done Λειτουργία οδήγησης - Κενό - Ισοσταθμιστής - FAQ - Αγαπημένα - Τελειώσε το τελευταίο κομμάτι - Fit - Επίπεδο - Φάκελοι - Βάση του συστήματος - Για σένα - Δωρεάν - Πλήρες Πλήρης κάρτα - Αλλάξτε το θέμα και τα χρώματα της εφαρμογής Eμφάνιση και Αίσθηση - Είδος - Είδη - Fork το έργο στο GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Στυλ πλέγματος - + Need more help? Hinge - Ιστορικό - Αρχική - Οριζόντια αναστροφή - Εικόνα Διαβαθμισμένη Εικόνα Αλλαγή των ρυθμίσεων λήψης εικόνων καλλιτέχνη - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Προστέθηκαν %1$d κομμάτια στη λίστα αναπαραγωγής %2$s. - Μοιραστείτε το setup του Retro Music σας για προβολή στο Instagram - Πληκτρολόγιο - Bitrate Μορφή Όνομα Αρχείου @@ -263,45 +194,27 @@ Περισσότερα από %s Ρυθμός δειγματοληψίας Μήκος - Με ετικέτα - Προστέθηκαν τελευταία Τελευταίο κομμάτι - Κατηγορίες βιβλιοθήκης - Άδειες - Ξεκάθαρα Λευκό - Ακροατές - Καταγραφή αρχείων - Φόρτωση προϊόντων... - Σύνδεση - Στίχοι - Φτιαγμένο με ❤️ στην Ινδία - Material - Σφάλμα Σφάλμα άδειας - Το Όνομά μου Τα Κορυφαία Κομμάτια μου - Ποτέ - Νέα λίστα αναπαραγωγής %s είναι ο νέος κατάλογος εκκίνησης. - Επόμενο Κομμάτι - Κανένα άλμπουμ Κανένας καλλιτέχνης "Παίξτε ενα κομμάτι πρώτα, και ξαναπροσπαθήστε." @@ -313,57 +226,39 @@ Δεν βρέθηκε αγορά. Κανένα αποτέλεσμα Δεν βρέθηκαν κομμάτια - Κανονικό Κανονικοί στίχοι - %s δεν υπάρχει στο media store.]]> - + Not recently played Δεν υπάρχει στοιχείο προς σάρωση. Τίποτα για να δείτε - Ειδοποίηση Προσαρμόστε το στυλ ειδοποίησης - Παίζει τώρα Ουρά \"Παίζει Τώρα\" Προσαρμόστε την οθόνη παίζει τώρα 9+ τώρα παίζει θέματα - Μόνο από Wi-Fi - Προηγμένες δοκιμαστικές δυνατότητες - Άλλα - Κωδικός πρόσβασης - Τους περασμένους 3 μήνες - Κορυφή - Η άδεια για προσπέλαση του external storage δεν παραχωρήθηκε. - + The app needs permission to access your device storage for playing music + Storage Access Οι άδειες δεν παραχωρήθηκαν. - Προσωποποιήση Προσαρμόστε τα στοιχεία ελέγχου του παίζετε τώρα και του περιβάλλοντως χρήστη - Επιλογή από Χώρο Αποθήκευσης - Pinterest Ακολουθήστε τη σελίδα Pinterest για έμπνευση σχεδιασμού του Retro Music - Απλό - Η ειδοποίηση αναπαραγωγής προσφέρει κουμπιά για αναπαραγωγή/παύση, κλπ. Ειδοποίηση Αναπαραγωγής - H Λίστα αναπαραγωγής είναι κενή Όνομα Λίστα αναπαραγωγής - Λίστες αναπαραγωγής - Η ποσότητα θαμπώματος που εφαρμόζεται για θέματα θαμπάδων, το χαμηλότερο είναι ταχύτερο Ποσότητα θαμπώματος Φιλτράρετε κομμάτια κατά μήκος @@ -384,6 +279,7 @@ Διατηρήστε την οθόνη ενεργή πιλέξτε γλώσσα Χρησιμοποιεί το εξώφυλλο του τρέχων κομματιού ως φόντο οθόνης κλειδώματος. + Show Album Artists in the Artist category Ειδοποιήσεις, πλοήγηση, κλπ. The content of blacklisted folders is hidden from your library. Ξεκινά να παίζει μόλις συνδεθείτε με συσκευή Bluetooth @@ -408,6 +304,7 @@ Shuffle mode will turn off when playing a new list of songs Εαν υπάρχει χώρος στην οθόνη αναπαραγωγής, ενεργοποιήστε τον πίνακα ελέγχου έντασης. Εμφάνιση εξωφύλλου άλμπουμ. + Navigate by Album Artist Album cover theme Album cover skip Χρωματιστά app shortcuts @@ -425,6 +322,7 @@ Song info Αναπαραγωγή χωρίς κενά Γενικό θέμα + Album grid Artist grid Banner Παράληψη Media Store για εξώφυλλα @@ -438,22 +336,15 @@ Αυτόματη αναπαραγωγή Τυχαία λειτουργία Πίνακας Ελέγχου Έντασης - Pro Μαύρο θέμα, Θέματα στο Τώρα παίζει, εφέ Καρουσέλ και πολλά άλλα.. - Προφίλ - Αγορά - Ουρά - Βαθμολόγησε την εφαρμογή Σας αρέσει αυτό το app; Γράψτε μας τις εντυπώσεις σας στο Google Play για να σας παρέχουμε μια καλύτερη εμπειρία - Πρόσφατα άλμπουμ Πρόσφατοι καλλιτέχνες - Αφαίρεση Αφαίρεση Εξώφυλλου Αφαίρεση από τη blacklist @@ -461,25 +352,19 @@ %1$s από τη λίστα αναπαραγωγής?]]> Αφαίρεσε τα κομμάτια από τη λίστα αναπαραγωγής %1$d κομματιών από τη λίστα αναπαραγωγής?]]> - Μετονόμασε τη λίστα αναπαραγωγής - Αναφέρετε ένα πρόβλημα Αναφορά προβλήματος - Επαναφορά Επαναφορά εικόνας καλλιτέχνη - Επαναφορά - Επαναφορά προηγούμενης αγοράς. Επανεκκινήστε την εφαρμογή για να χρησιμοποιήσετε όλες τις δυνατότητες. Επαναφορά προηγούμενων αγορών επιτυχής. - Επαναφορά αγοράς… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone Η διαγραφή αρχείου απέτυχε: %s Can\'t get SAF URI @@ -492,48 +377,32 @@ Μην ανοίγετε υποφακέλους Tap \'select\' button at the bottom of the screen Η εγγραφή αρχείου απέτυχε: %s - Αποθήκευση Αποθήκευσε ως αρχείο Αποθήκευση ως αρχεία - Η Λίστα αναπαραγωγής αποθηκεύτηκε στο %s. - Αποθηκευόνται οι αλλαγές... - Σάρωση μέσων - Σαρώθηκαν %1$d από %2$d αρχεία. - Scrobbles - Επιλογή όλων - Επιλεγμένα - Ορισμός Ορισμός εικόνας καλλιτέχνη - Share app + Share the app with your friends and family Share to Stories - Τυχαία Αναπαραγωγή - Απλό - Χρονοδιακόπτης ύπνου ακυρώθηκε. Ο χρονοδιακόπτης ύπνου ορίστικε για %d λεπτά από τώρα. - Social Share story - Κομμάτι Διάρκεια κομματιού - Κομμάτια - Σειρά Διάταξης Ascending Άλμπουμ @@ -541,93 +410,59 @@ Συνθέτης Ημερομηνία προσθήκης Ημερομηνία τροποποιήσης + Song count + Song count desc Έτος Descending - Ουπς! Η συσκευή σου δεν υποστηρίζει εισαγωγή φωνής Αναζητήστε στην Βιβλιοθήκη - Stack - Ξεκινήστε να παίζετε μουσική. - Προτάσεις - Υποστήριξη ανάπτυξης της εφαρμογής - Σύρετε για ξεκλείδωμα - Συγχρονισμένοι στίχοι - Telegram Γίνετε μέλος της ομάδας Telegram για να συζητήσετε σφάλματα, να κάνετε προτάσεις, να επιδείξετε και άλλα - Σας ευχαριστούμε! - Το αρχείο ήχου - Αυτό το μήνα Αυτή την εβδομάδα Αυτό το χρόνο - Μικροσκοπική Μικρή κάρτα - Τίτλος - Σήμερα - Κορυφαία άλμπουμ Κορυφαίοι καλλιτέχνες - "Κομμάτι (2 για κομμάτι 2, ή 3004 για CD3 κομμάτι 4)" Αριθμός Κομματιού - Μετάφραση Βοηθήστε μας να μεταφράσουμε την εφαρμογή στη γλώσσα σας - Δοκιμάστε το Retro Music Premium - Twitter Μοιραστείτε το σχέδιό σας με το Retro Music - Χωρίς ετικέτα - \u0394\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03ad\u03c3\u03b1\u03bc\u03b5 \u03bd\u03b1 \u03c0\u03b1\u03af\u03be\u03bf\u03c5\u03bc\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9. - Αμέσως επόμενο - Ενημέρωση εικόνας - Ενημέρωση σε εξέλιξη... - + User Name Όνομα χρήστη - Έκδοση - Κάθετη αναστροφή - Ένταση - Αναζήτηση στον ιστό - Καλώς ήρθατε, - Τι θα θέλατε να μοιραστείτε; - What\'s New - Παράθυρο Στρογγυλεμένες γωνίες - Ορισμός %1$s ως ήχου κλήσης. %1$d έχει επιλεγεί - Χρονιά - Πρέπει να επιλέξετε τουλάχιστον μία κατηγορία. Θα προωθηθείτε στον ιστότοπο παρακολούθησης ζητημάτων. - Τα δεδομένα του λογαριασμού σας χρησιμοποιούνται μόνο για έλεγχο ταυτότητας. From f25f1095375e26a5a755d86363f5aca3d53d879a Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:04 +0530 Subject: [PATCH 0054/1603] New translations strings.xml (Finnish) --- app/src/main/res/values-fi-rFI/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index b599615cf..0a9a9d1f7 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Accent color The theme accent color, defaults to purple - About Add to favorites Add to playing queue @@ -48,32 +46,23 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - Add "Add to playlist" - "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album - Song Songs - Album artist - Albums Album Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks @@ -82,25 +71,16 @@ Classic Small Text - Artist - Artists - Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,55 +94,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -171,62 +131,38 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - + Done Drive mode - Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Grid style - + Need more help? Hinge - History - Home - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -263,45 +194,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -313,57 +226,39 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -384,6 +279,7 @@ Keep the screen on Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -408,6 +304,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover + Navigate by Album Artist Album cover theme Album cover skip Colored app shortcuts @@ -425,6 +322,7 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers @@ -438,22 +336,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -461,25 +352,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -492,48 +377,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -541,93 +410,59 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 465d6371cfcaa0b4732c82140b8ced697bf5dae3 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:05 +0530 Subject: [PATCH 0055/1603] New translations strings.xml (Hebrew) --- app/src/main/res/values-iw-rIL/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 2ce2e4b01..bd511cbd9 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Accent color The theme accent color, defaults to purple - About Add to favorites Add to playing queue @@ -48,26 +46,19 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - Add "Add to playlist" - "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album - Song Songs Songs Songs - Album artist - Albums Album @@ -75,9 +66,7 @@ Albums Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks @@ -86,25 +75,16 @@ Classic Small Text - Artist - Artists - Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -118,55 +98,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -175,62 +135,38 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - + Done Drive mode - Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -240,25 +176,20 @@ 7 8 Grid style - + Need more help? Hinge - History - Home - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -267,45 +198,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -317,57 +230,39 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -388,6 +283,7 @@ Keep the screen on Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -412,6 +308,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover + Navigate by Album Artist Album cover theme Album cover skip Colored app shortcuts @@ -429,6 +326,7 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers @@ -442,22 +340,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -465,25 +356,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -496,48 +381,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -545,93 +414,59 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 30fdada7f344ec7a05a2dfcb26a588a0da7c2f20 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:06 +0530 Subject: [PATCH 0056/1603] New translations strings.xml (Italian) --- app/src/main/res/values-it-rIT/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index ef1a4e3b9..ef061ae5e 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -2,10 +2,8 @@ Info su %s Team e pagine social - Colore in rilievo Il colore secondario del tema, il predefinito è verde - Informazioni Aggiungi ai preferiti Aggiungi alla coda @@ -48,32 +46,23 @@ Modifica tag Seleziona preferito Seleziona modalità di riproduzione casuale - Adattivo - Aggiungi "Aggiungi alla playlist" - "Aggiunto un brano alla coda." Aggiungi %1$d brani alla coda. - Album - Canzone Canzoni - Artista dell\'album - Album Album Album - Sempre - Hey, dai un\'occhiata a questo fantastico lettore musicale: https://play.google.com/store/apps/details?id=%s Casuale @@ -83,25 +72,16 @@ https://play.google.com/store/apps/details?id=%s Classico Piccolo Testo - Artista - Artisti - Focalizzazione audio negata. Modifica le impostazioni audio e regola i controlli dell\'equalizzatore - Automatico - Biografia - Solo nero - Blacklist - Sfocatura Card sfocata - Impossibile inviare il rapporto Token di accesso non valido. Contatta lo sviluppatore dell\'app. I problemi non sono abilitati per la repository selezionata. Contatta lo sviluppatore dell\'app. @@ -115,55 +95,35 @@ https://play.google.com/store/apps/details?id=%s Inserisci il tuo nome utente GitHub Si è verificato un errore imprevisto. Mi dispiace, se continua a bloccarsi \"Cancella i dati\" dell\'app o inviami un\'email Invia con l\'account GitHub - Acquista ora - Annulla - Card Card colorata + Square Card Card - Effetto scorrimento sulla schermata di riproduzione - Cascata - Ultime modifiche Per visualizzare le ultime modifiche, entra nel canale Telegram - Cerchio - Circolare - Classico - Vuoto Cancella blacklist Cancella coda - Colore - Colori - Compositore - Info dispositivo copiate negli appunti. - Impossibile creare la playlist. "Impossibile scaricare la copertina dell'album corrispondente." Impossibile ripristinare l\'acquisto. Impossibile scansionare %d file. - Crea - Playlist %1$s creata. - Membri e collaboratori - Ascoltando attualmente %1$s di %2$s. - Scuro - Elimina playlist %1$s?]]> Elimina playlist @@ -172,62 +132,38 @@ https://play.google.com/store/apps/details?id=%s Elimina brani %1$d playlist?]]> %1$d brani?]]> - Eliminati %1$d brani - Profondità - Descrizione - Info dispositivo - Consenti a Retro Music di modificare le impostazioni audio Imposta suoneria - Vuoi cancellare la blacklist? %1$s dalla blacklist?]]> - Dona Se pensi che io meriti di essere pagato per il mio lavoro, puoi lasciarmi qualche soldo qui - Pagami un: - + Done Modalità alla guida - Vuoto - Equalizzatore - FAQ - Preferiti - Termina ultimo brano - Adatta - Piatto - Cartelle - Sistema - Per te - Gratis - Pieno Card intera - Cambia il tema e i colori dell\'app Aspetto - Genere - Generi - Sviluppa il progetto su GitHub - + Gradient 1 2 3 @@ -237,25 +173,20 @@ https://play.google.com/store/apps/details?id=%s 7 8 Griglie e stile - + Need more help? Cerniera - Cronologia - Homepage - Flip orizzontale - Immagine Immagine sfumata Modifica le impostazioni di download delle immagini - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inseriti %1$d brani nella playlist %2$s. - Condividi la tua configurazione di Retro Music per mostrarla su Instagram - Tastiera - Bitrate Formato Nome del file @@ -264,45 +195,27 @@ https://play.google.com/store/apps/details?id=%s Altro da %s Frequenza di campionamento Lunghezza - Etichettato - Ultimi aggiunti Ultimo brano - Categorie della raccolta - Licenze - Chiaro - Ascoltatori - Elenco dei file - Caricamento prodotti... - Accedi - Testi - Creato con ❤ in India - Material - Errore Errore di autorizzazione - Nome I più riprodotti - Mai - Nuova playlist %s è la nuova directory di avvio - Brano successivo - Nessun album Nessun artista "Prima riproduci un brano, poi riprova." @@ -314,57 +227,39 @@ https://play.google.com/store/apps/details?id=%s Nessun acquisto trovato. Nessun risultato Nessun brano - Normale Testi normali - %s non è presente nel Media Store.]]> - + Not recently played Niente da rilevare Non c\'è niente da vedere - Notifica Modifica lo stile delle notifiche - In riproduzione Coda in riproduzione Personalizza la schermata riproduzione Più di 9 schermate di riproduzione - Solo tramite Wi-fi - Funzionalità sperimentali - Altro - Password - Ultimi 3 mesi - Picco - Autorizzazione ad accedere all\'archiviazione esterna negata. - + The app needs permission to access your device storage for playing music + Storage Access Autorizzazione negata. - Personalizza Personalizza i comandi riproduzione - Scegli dalla memoria locale - Pinterest Segui la pagina Pinterest per ispirazioni sul design di Retro Music - Piatto - La notifica di riproduzione fornisce azioni per riproduzione/pausa ecc. Notifica di riproduzione - La playlist è vuota Nome playlist - Playlist - Quantità di sfocatura applicata per i temi con sfocatura, minore è più veloce Quantità di sfocatura Filtra brani per durata @@ -385,6 +280,7 @@ https://play.google.com/store/apps/details?id=%s Mantieni lo schermo acceso Seleziona lingua Imposta la copertina del brano riprodotto come sfondo del blocco schermo + Show Album Artists in the Artist category Riduce il volume quando viene riprodotto un suono di sistema o viene ricevuta una notifica Il contenuto delle cartelle nella blacklist non compare nella raccolta Avvia la riproduzione non appena connesso al dispositivo bluetooth @@ -409,6 +305,7 @@ https://play.google.com/store/apps/details?id=%s La modalità casuale viene disattivata quando si riproduce un nuovo elenco di brani Se c\'è spazio sufficiente, mostra i controlli del volume nella schermata in riproduzione Mostra la copertina dell\'album + Navigate by Album Artist Tema copertina dell\'album Modalità cambio copertina dell\'album Scorciatoie app colorate @@ -426,6 +323,7 @@ https://play.google.com/store/apps/details?id=%s Informazioni brano Riproduzione senza interruzioni Tema generale + Album grid Griglia schermata artista Banner Ignora le copertine del Media Store @@ -439,22 +337,15 @@ https://play.google.com/store/apps/details?id=%s Riproduzione automatica Modalità casuale Controlli volume - Pro Temi in riproduzione, effetto scorrimento e molto altro... - Profilo - Acquista - Coda - Valuta l\'app Adori quest\'app? Facci sapere sul Play Store come possiamo renderla ancora migliore - Album recenti Artisti recenti - Rimuovi Rimuovi copertina Rimuovi dalla blacklist @@ -462,25 +353,19 @@ https://play.google.com/store/apps/details?id=%s %1$s dalla playlist?]]> Rimuovi brani dalla playlist %1$d dalla playlist?]]> - Rinomina playlist - Segnala un problema Segnala bug - Ripristina Ripristina immagine artista - Ripristina - Acquisto precedente ripristinato. Riavvia l\'app per utilizzare tutte le funzionalità. Acquisti precedenti ripristinati. - Ripristino acquisto... - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone Eliminazione file fallita: %s Impossibile ottenere l\'URI dal SAF @@ -493,48 +378,32 @@ https://play.google.com/store/apps/details?id=%s Non aprire alcuna sottocartella Tocca \'seleziona\' nella parte inferiore dello schermo Scrittura file fallita: %s - Salva Salva come file Salva come file - Playlist salvata in %s. - Salvataggio modifiche - Scansiona media - Scansionati %1$d di %2$d file. - Scrobbles - Seleziona tutto - Selezionato - Imposta Imposta immagine artista - Condividi app + Share the app with your friends and family Condividi nelle Storie - Casuale - Semplice - Timer sonno cancellato. Timer sonno impostato per %d minuti da ora. - Social Condividi storia - Brano Durata brano - Brani - Ordina per Crescente Album @@ -542,93 +411,59 @@ https://play.google.com/store/apps/details?id=%s Compositore Data Ultima modifica + Song count + Song count desc Anno Decrescente - Il tuo dispositivo non supporta l\'input vocale Cerca nella tua raccolta - Pila - Inizia a riprodurre musica. - Suggerimenti - Sostieni lo sviluppo - Scorri per sbloccare - Testi sincronizzati - Telegram Unisciti al gruppo Telegram per discutere dei bug, dare suggerimenti e molto altro - Grazie! - Il file audio - Questo mese Questa settimana Quest\'anno - Piccolo Card piccola - Titolo - Oggi - Album migliori Artisti migliori - "Traccia (2 per traccia 2 o 3004 per CD3 traccia 4)" Numero traccia - Traduci Aiutaci traducendo l\'app nella tua lingua - Prova Retro Music Premium - Twitter Condividi il tuo design con Retro Music - Senza etichetta - Impossibile riprodurre il brano. - Prossimo - Aggiorna immagine - Aggiornamento... - + User Name Nome utente - Versione - Flip verticale - Volume - Ricerca web - Benvenuto. - Cosa vuoi condividere? - Novità - Finestra Angoli arrotondati - %1$s impostata come suoneria. %1$d selezionato - Anno - Seleziona almeno una categoria. Verrai reindirizzato al sito web dei problemi. - I dati del tuo account vengono utilizzati solo per l\'autenticazione. From 0ed18f879df69ef9295775074785f3a5929e6bfd Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:07 +0530 Subject: [PATCH 0057/1603] New translations strings.xml (Chinese Simplified) --- app/src/main/res/values-zh-rCN/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f0a7482d6..12efbffca 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -2,10 +2,8 @@ 关于 %s 团队,社交链接 - 强调色 主题强调色,默认为紫色 - 关于 添加到收藏夹 添加到播放队列 @@ -48,30 +46,21 @@ 标签编辑器 切换收藏夹 切换随机播放模式 - 自适应 - 添加 "添加到播放列表" - "已添加1首歌到播放队列。" 已添加 %1$d 首歌到播放队列。 - 专辑 - Songs - 专辑艺术家 - 专辑 Albums - 始终 - 嘿,快来瞧瞧这个酷炫的音乐播放器:https://play.google.com/store/apps/details?id=%s 随机播放 热门曲目 @@ -80,25 +69,16 @@ 经典模式 文本 - 艺术家 - 艺术家 - 音频焦点丢失。 更改声音设置或调整均衡器 - 自动 - 简介 - A屏黑 - 黑名单 - 模糊 模糊卡片 - 无法提交报告 无效的访问令牌,请联系应用开发者。 目的仓库的 Issues 未启用,请联系应用开发者。 @@ -112,55 +92,35 @@ 请您输入有效的 GitHub 用户名 出错了,如一直崩溃请尝试清除应用数据或发送邮件给开发者 使用 GitHub 帐户发送 - 立即购买 - 取消 - 卡片 彩色卡片 + Square Card 卡片 - 在「正在播放」界面使用轮播效果 - 层叠 - 更新日志 在 Telegram 频道上维护更新日志 - 环形 - 圆形 - 古典 - 清空 清空黑名单 清空队列 - 颜色 - 更多颜色 - 作曲家 - 已复制设备信息到剪贴板。 - 无法创建播放列表。 "无法下载匹配的专辑封面。" 无法恢复购买。 无法扫描 %d 个文件。 - 创建 - 已创建播放列表 %1$s。 - 开发团队和贡献者 - 正通过 %2$s 收听 %1$s。 - 暗夜黑 - 删除播放列表 %1$s 吗?]]> 删除播放列表 @@ -169,62 +129,38 @@ 删除歌曲 %1$d 吗?]]> %1$d 吗?]]> - 已删除 %1$d 首歌曲。 - 深度 - 详情 - 设备信息 - 允许 Retro Music 修改声音设置 设为铃声 - 您想清空黑名单吗? %1$s 吗?]]> - 捐赠 如果您认为应用还不错,可以通过捐赠支持我们 - 用以下方式捐赠: - + Done 驾驶模式 - 空空如也 - 均衡器 - 常见问题和解答 - 收藏夹 - 播放完最后一首歌曲 - 填充 - 扁平 - 文件夹 - 跟随系统 - 私人订制 - 免费 - 全屏 填充卡片 - 更改应用的主题和颜色 界面与外观 - 流派 - 流派 - 在 GitHub 上克隆项目 - + Gradient 1 2 3 @@ -234,25 +170,20 @@ 7 8 网格样式 - + Need more help? 关键 - 历史记录 - 主页 - 水平翻转 - 图片 渐变图片 更改下载艺术家图像方式 - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. 将歌曲 %1$d 加入 %2$s 列表。 - 将您的设置分享到 Instagram - 键盘 - 比特率 格式 文件名 @@ -261,45 +192,27 @@ 来自 %s 的更多信息 采样率 长度 - 已标记 - 最近添加 最后一首 - 媒体库分类 - 许可 - 质感白 - 监听器 - 正在罗列所有文件 - 加载产品... - 登录 - 歌词 - 印度 ❤️ 制造 - 质感 - 错误 权限错误 - 我的名字 播放最多 - 从不 - 新建播放列表 %s 是新的起始目录。 - 下一曲 - 暂无专辑 暂无艺术家 "请播放歌曲后重试" @@ -311,57 +224,39 @@ 找不到支付记录 暂无结果 暂无歌曲 - 正常 正常歌词 - %s 未在媒体存储中列出。]]> - + Not recently played 检索不到任何东西。 空空如也 - 通知栏 自定义通知栏风格 - 正在播放 正在播放队列 自定义播放界面 多于 9 种播放主题 - 仅限 Wi-Fi 网络 - 高级测试功能 - 其他 - 密码 - 最近三个月 - 顶点 - 访问外部存储权限时被拒绝。 - + The app needs permission to access your device storage for playing music + Storage Access 权限被拒绝。 - 个性化 自定义正在播放控件和UI控件 - 从本地选取 - Pinterest 在 Pintrest 页面关注 Retro Music 的设计灵感 - 简洁 - 播放通知栏提供播放/暂停等操作。 通知栏播放 - 播放列表为空 播放列表名 - 播放列表 - 应用于模糊主题,数值越低加载越快 模糊值 按长度筛选歌曲 @@ -382,6 +277,7 @@ 保持屏幕常亮 选择语言 将正在播放的歌曲专辑封面设置为锁屏壁纸 + Show Album Artists in the Artist category 当系统播放声音或收到通知时降低音量 在媒体库中隐藏列入黑名单的文件夹内容。 连接到蓝牙设备后立即开始播放 @@ -409,6 +305,7 @@ 播放新列表时关闭随机播放 空间充足时在播放界面显示音量控制控件 显示专辑封面 + Navigate by Album Artist 专辑封面主题 专辑封面跳过 着色应用快捷方式 @@ -426,6 +323,7 @@ 歌曲信息 无缝播放 应用主题 + Album grid 主页艺术家网格 主页横幅 忽略媒体存储封面 @@ -439,22 +337,15 @@ 自动播放 随机播放 音量控件 - 高级版 黑色主题,正在播放主题,轮播效果和更多... - 个人信息 - 购买 - 队列 - 评价 喜欢这个应用?去 Google Play Store 中告诉我们怎样才能让它更好 - 最近专辑 最近艺术家 - 删除 移除封面 从黑名单中移除 @@ -462,25 +353,19 @@ %1$s?]]> 从播放列表中删除歌曲 %1$d?]]> - 重命名播放列表 - 报告问题 报告错误 - 重置 重置艺术家图片 - 恢复 - 恢复以前的购买。请重新启动应用以充分利用所有功能。 恢复之前的购买。 - 恢复购买中... - Retro Music Player Retro Music 高级版 - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone 文件删除失败:%s 无法获取 SAF URI @@ -493,48 +378,32 @@ 不要打开任何子文件夹 点击界面底部的「选择」按钮 文件写入失败:%s - 保存 保存为文件 保存为文件 - 保存播放列表到 %s。 - 保存修改 - 扫描媒体 - 已扫描 %1$d 个,共计 %2$d 个文件。 - 滚动条 - 全选 - 已选中 - 设置 设置艺术家图片 - 分享应用 + Share the app with your friends and family 分享到故事 - 随机播放 - 简单 - 睡眠定时已取消。 睡眠定时器设置为 %d 分钟。 - 社交 分享故事 - 歌曲 歌曲时长 - 歌曲 - 排序 升序 专辑 @@ -542,93 +411,59 @@ 作曲家 日期 修改日期 + Song count + Song count desc 年份 降序 - 抱歉!您的设备不支持语音输入 搜索媒体库 - 堆栈 - 开始播放音乐。 - 建议 - 支持开发者 - 滑动以解锁 - 滚动歌词 - Telegram 加入 Telegram 团队,讨论错误,提出建议,展示信息等等 - 谢谢您! - 音频文件 - 本月 本周 本年 - 细小 小卡片 - 标题 - 今日 - 热门专辑 热门艺术家 - "音轨" 音轨编号 - 翻译 帮助我们将应用翻译成您的语言 - Try Retro Music Premium - Twitter 与 Retro Music 分享您的设计 - 未标记 - 无法播放这首歌曲。 - 下一首 - 更新图片 - 更新中... - + User Name 用户名 - 版本 - 垂直翻转 - 音量 - 网络搜索 - 欢迎, - 您想分享什么? - 更新内容 - 窗口 圆角 - 将 %1$s 设置为铃声。 已选择 %1$d 首 - 年份 - 请至少选择一个分类。 将跳转至问题追踪网站。 - 您的账户数据仅用于验证。 From 12871d72737f9f3796b6adc56c63976207de31c3 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:08 +0530 Subject: [PATCH 0058/1603] New translations strings.xml (Japanese) --- app/src/main/res/values-ja-rJP/strings.xml | 211 ++------------------- 1 file changed, 20 insertions(+), 191 deletions(-) diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index c988c84ab..aec405040 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -2,10 +2,8 @@ About %s 我々のチームとソーシャルリンク - アクセントカラー テーマのアクセントカラー、既定は青緑色です。 - このアプリについて お気に入りに追加 再生キューに追加 @@ -48,30 +46,21 @@ 音楽タグエディター Toggle favorite Toggle shuffle mode - アダプティブ - 追加 "プレイリストに追加" - "1曲が再生キューに追加されました" %1$d 曲が再生キューに追加されました - アルバム - - アルバム アーティスト - アルバム アルバム - 常に - クールな音楽プレイヤーをチェックしよう: https://play.google.com/store/apps/details?id=%s シャッフル トップ曲 @@ -80,25 +69,16 @@ レトロミュージック - クラシック レトロミュージック - 小 テキスト - アーティスト - アーティスト - オーディオのフォーカスが拒否されました。 サウンド設定を変更し、イコライザーコントロールを調整する - 自動 - バイオグラフィー - ダークテーマ時に漆黒にする - ブラックリスト - ぼかし ブラーカード - レポートを送信できませんでした 無効なトークン:アプリの開発者に連絡してください 選択されたリポジトリで問題が有効になっていません。開発者に連絡してください @@ -113,55 +93,35 @@ 予期しないエラーが発生しました。申し訳ございません。 このバグが何度も発生する場合は、端末のアプリ設定より「データを削除する(Androidバージョンによって異なります)」を実行するか、概要をメールで送信してください。 GitHubアカウントを使って送信 - 今すぐ購入 - キャンセル - カード 色付きのカード + Square Card カード - 再生中画面でのカルーセル効果 - 重ねて表示 - パッチノート 電報チャネルで変更ログが維持されています - サークル - - クラシック - 削除 ブラックリストを削除 キューを削除 - カラフル - - 作曲家 - 端末情報をコピー - \u30d7\u30ec\u30a4\u30ea\u30b9\u30c8\u306e\u4f5c\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 "\u9069\u5207\u306a\u30a2\u30eb\u30d0\u30e0\u30a2\u30fc\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f" 購入の復元に失敗しました %d のファイルをスキャンできませんでした - 作成 - プレイリストを作成しました %1$s - メンバーと貢献者 - 現在、 %1$s によって %2$s で聴いています。 - ダーク - プレイリストを削除 %1$s を削除しますか?]]> プレイリストを削除 @@ -170,62 +130,38 @@ Delete songs %1$d を削除しますか?]]> %1$d 曲を削除しますか?]]> - %1$d 曲を削除しました - 深さ - 説明 - 端末の情報 - Retro Musicにオーディオ設定の変更を許可する 着信音に設定 - ブラックリストを削除しますか? %1$s をブラックリストから削除しますか?]]> - 寄付する 私が自分の仕事に払う価値があると思うなら、あなたはここにお金を残すことができます - 俺を購入: - + Done 運転モード - 空の - イコライザー - よくある質問 - お気に入り - Finish last song - フィット - フラット - フォルダ - システムに従う - あなたのために - Free - フル 全体のカード - このアプリのテーマや色を変更します 見た目と操作感 - ジャンル - ジャンル - GitHubでプロジェクトにフォークする - + Gradient @@ -235,25 +171,20 @@ 表示スタイル - + Need more help? ヒンジ - 履歴 - ホーム - 水平方向に反転 - 画像 - グラディエント + 傾斜イメージ アーティスト画像のダウンロード設定を変更する - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. プレイリスト %2$s に %1$d 曲を追加しました - あなたのRetro Music設定を共有してInstagramにショーケースしましょう - キーボードを表示 - ビットレート フォーマット ファイルの名前 @@ -262,45 +193,27 @@ More from %s サンプリングレート 長さ - ラベルを表示する - 最後に追加された 前の曲 - ライブラリの表示項目 - ライセンス - ライト - Listeners - リスティングファイル - 商品の読み込み中... - ログイン - 歌詞 - Made with ❤️ in India - マテリアル - エラー 権限が付与されていません - 名前 最も再生された - 決して - 新しいプレイリスト %s は新しい開始ディレクトリです。 - 次の曲 - アルバムがありません アーティストがありません "音楽再生してから、再度お試しください" @@ -312,57 +225,39 @@ 購入が見つかりません。 結果なし 曲がありません - 通常 通常の歌詞 - %s がリストされたされていません。]]> - + Not recently played スキャン対象がありません Nothing to see - 通知 通知スタイルを変更 - 再生画面 再生中のキュー 再生中の画面をカスタマイズ 9種類以上の再生中テーマ - Wi-Fi時のみ - 高度な試験的機能 - その他 - パスワード - 過去3ヶ月 - ピーク - 外部ストレージへのアクセスが拒否されました - + The app needs permission to access your device storage for playing music + Storage Access 許可が拒否されました - 個人設定 再生中のUI画面をカスタマイズ - ローカルストレージから選択 - Pinterest PintrestでRetro Musicのデザインのインスピレーションを感じましょう! - プレーン - 再生中の通知は再生/停止の操作が利用できます 再生中の通知 - プレイリストが空です プレイリストの名前 - プレイリスト - ブラーを使用するテーマを使用した際のブラーの強さを設定します。低いほど処理が早くなります ぼかしの強さ Filter songs by length @@ -383,6 +278,7 @@ 画面をオンのままにする 言語を選択 再生中のジャケットをロック画面の壁紙に適用する + アーティストカテゴリ内にアルバムのアーティストを表示する システムでサウンドが再生されたとき、または通知が受信されたときに一時的に音量を下げる ブラックリストに登録されたフォルダの内容はコレクションには表示されません。 端末にBluetoothデバイスが接続されたとき、再生を開始する @@ -407,6 +303,7 @@ 新しいリストの楽曲を再生する時にシャッフルは自動的にオフになります 再生画面に十分なスペースがある場合に音量コントロールを追加する アルバムジャケットを表示 + アルバムのアーティストを表示 アルバムカバーのテーマ アルバムジャケットをスキップ 色のついたアプリショートカット @@ -424,6 +321,7 @@ 曲の情報を表示 ギャップレス再生 アプリのテーマ + アルバムの表示 アーティストの表示 ホーム画面 Media Store のカバーを無視する @@ -437,22 +335,15 @@ 自動再生 シャッフルモード ボリュームコントロール - Pro Black theme, Now playing themes, Carousel effect and more.. - プロフィール - 購入 - キュー - アプリを評価する このアプリを気に入りましたか?アプリをより良いものにするために、Google Playストアで問題の報告と意見をよろしくお願いします。 - 最近のアルバム 最近のアーティスト - 削除 ジャケットを削除 ブラックリストから削除 @@ -460,25 +351,19 @@ %1$s をプレイリストから削除しますか?]]> プレイリストから曲を削除する %1$d をプレイリストから削除しますか?]]> - プレイリストの名前を変更 - 問題を報告 不具合を報告する - Reset アーティスト画像をリセット - 復元 - 購入を復元しました。アプリを再起動してフルバージョンをご堪能ください! 購入を復元しました - 購入を復元しています... - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -491,48 +376,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - 保存 ファイルとして保存 ファイルとして保存 - %s にプレイリストを保存しました - 変更を保存中 - メディアをスキャン - %2$d のうち、%1$d がスキャンされました - Scrobbles - すべて選択 - 選択された - 決定 アーティスト画像を設定 - アプリを共有する + Share the app with your friends and family Share to Stories - シャッフル - シンプル - スリープタイマーがキャンセルされました スリープタイマーは %d 分後に設定されました。 - ソーシャル Share story - 曲の長さ - - 順番をソート 昇順 アルバム @@ -540,99 +409,59 @@ 作曲家 日付 最後の編集日 + 曲数順(昇順) + 曲数順(降順) 降順 - ごめんなさい! このデバイスは音声入力に対応しておりません ライブラリを検索 - Stack - Start playing music. - 改善を提案 - 開発を支援 - スワイプしてアンロック - 連動した歌詞 - Telegram Telegram のグループに参加して、バグについて話し合ったり、提案したりしましょう - ありがとう! - オーディオファイル - 今月 今週 今年 - ティニー Tiny card - 主題 - 今日 - トップアルバム トップアーティスト - "トラック(トラック2の場合は「truck 2」、CD3でtruck4の場合は 「3004」)" トラック番号 - 翻訳 翻訳を手伝ってください! - Try Retro Music Premium - ツイッター あなたのデザインを皆に共有しましょう - ラベルを表示しない - \u3053\u306e\u66f2\u3092\u518d\u751f\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f - - 画像を更新 - 更新中... - + User Name ユーザー名 - バージョン - 垂直方向に反転 - Volume - ウェブで検索 - ようこそ, - 何を共有しますか? - 更新内容 - ウィンドウ 角を丸める - %1$s を着信音として設定しました %1$d が選択されました - - You have to select at least one category. issue trackerのウェブサイトに移動します - あなたのアカウントは認証にのみ使用されます - アルバムのアーティストを表示 - アーティストカテゴリ内にアルバムのアーティストを表示する - アルバムの表示 - 曲数順(昇順) - 曲数順(降順) - 傾斜イメージ From 9fa8b25f72d9af32996a0af4edc7e6db41348ce4 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:09 +0530 Subject: [PATCH 0059/1603] New translations strings.xml (Korean) --- app/src/main/res/values-ko-rKR/strings.xml | 215 +++------------------ 1 file changed, 25 insertions(+), 190 deletions(-) diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index a4e8c4fba..906976bb7 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - 강조 색상 강조 색상을 지정합니다. 기본값은 녹색입니다. - 정보 즐겨찾기에 추가 재생 대기열에 추가 @@ -48,30 +46,21 @@ 태그 편집기 Toggle favorite Toggle shuffle mode - Adaptive - 추가 "재생목록에 추가" - "재생 대기열에 1곡이 추가되었습니다." 재생 대기열에 %1$d곡이 추가되었습니다. - 앨범 - Songs - 앨범 아티스트 - 앨범 Albums - 항상 - 이 멋진 뮤직 플레이어를 한 번 써보세요!: https://play.google.com/store/apps/details?id=%s 무작위 자주 재생한 음악 @@ -80,25 +69,16 @@ 클래식 소형 Text - 아티스트 - 아티스트 - 오디오 포커스가 거부되었습니다. 소리 설정 및 이퀄라이저 조정 - Auto - 바이오그래피 - 저스트 블랙 - 블랙리스트 - 흐림 효과 블러 카드 - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -112,55 +92,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - 현재 타이머 취소 - 카드 Colored Card - Card - + Square Card + 카드 Carousel effect on the now playing screen - Cascading - 변경 사항 변경 사항은 Telegram을 통해 확인할 수 있습니다 - Circle - Circular - - Classic - + 클래식 비우기 블랙리스트 비우기 Clear queue - 색상 - 색상 - Composer - Copied device info to clipboard. - \uc7ac\uc0dd\ubaa9\ub85d\uc744 \ub9cc\ub4e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. "\uc774 \uc568\ubc94\uacfc \uc77c\uce58\ud558\ub294 \uc568\ubc94 \ucee4\ubc84\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." 구매내역을 복구할 수 없습니다. %d개의 파일을 스캔하지 못했습니다. - 만들기 - %1$s 재생목록을 만들었습니다. - Members and contributors - 현재 %2$s의 %1$s를 듣는 중입니다. - 카인다 다크 - 재생목록 삭제 %1$s 재생목록을 삭제하시겠습니까?]]> 재생목록 삭제 @@ -169,62 +129,38 @@ Delete songs %1$d개의 재생목록을 삭제하시겠습니까?]]> %1$d개의 노래를 삭제하시겠습니까?]]> - %1$d개의 노래를 삭제했습니다. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - 블랙리스트를 비우시겠습니까? %1$s 항목을 제거하시겠습니까?]]> - 기부하기 제 작업에 대한 대가를 받을 자격이 있다고 생각하신다면 여기서 저를 위해 소액을 기부할 수 있습니다. - 사주세요! - + Done Drive mode - 비어 있음 - 이퀄라이저 - FAQ - 즐겨찾기 - Finish last song - Fit - 플랫 - 폴더 - Follow system - 당신을 위해 - Free - 전체 Full card - 앱의 여러 가지 색상 변경 외관 - 장르 - 장르 - Fork the project on GitHub - + Gradient 1 2 3 @@ -234,25 +170,20 @@ 7 8 Grid style - + Need more help? Hinge - 기록 - - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. %2$s 재생목록에 %1$d개의 노래를 추가했습니다. - Share your Retro Music setup to showcase on Instagram - Keyboard - 비트레이트 형식 파일 이름 @@ -261,45 +192,27 @@ More from %s 샘플링 레이트 길이 - Labeled - 최근 추가된 목록 Last song - Library categories - 라이선스 - 클리어리 화이트 - Listeners - 파일 목록 생성 - 제품을 불러오는 중... - Login - 가사 - Made with ❤️ in India - Material - Error Permission error - 내 이름 자주 재생한 음악 - 아니오 - 새 재생목록 이제 %s 디렉터리가 새 초기 디렉터리입니다. - Next Song - 앨범 없음 아티스트 없음 "먼저 노래를 재생하고 다시 시도해 보십시오." @@ -311,57 +224,39 @@ 구매내역을 찾을 수 없습니다. 결과 없음 노래 없음 - 일반 Normal lyrics - %s은(는) 미디어 저장소에 없는 항목입니다.]]> - + Not recently played 스캔할 것이 없습니다. Nothing to see - 알림 알림 스타일 변경 - 지금 재생 중 현재 재생 대기열 Customize the now playing screen 9+ now playing themes - Wi-Fi에서만 - Advanced testing features - 기타 - Password - 이전 3개월 - Peak - 외부 저장소 접근 권한이 거부되었습니다. - + The app needs permission to access your device storage for playing music + Storage Access 권한이 거부되었습니다. - 개인화 지금 재생 중 화면과 UI 변경 - 로컬 저장소에서 선택 - Pinterest Follow Pinterest page for Retro Music design inspiration - 단색 - 재생 알림은 재생/일시 정지 등에 대한 작업을 제공합니다. 재생 중 알림 - 재생목록이 비어 있음 재생목록 이름 - 재생목록 - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -369,7 +264,7 @@ Advanced Album style 오디오 - Blacklist + 블랙리스트 Controls 일반 이미지 @@ -382,6 +277,7 @@ Keep the screen on Select language 현재 재생 중인 노래의 앨범 커버를 잠금 화면 배경화면으로 사용합니다. + Show Album Artists in the Artist category 알림, 탐색 등 The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -406,12 +302,13 @@ Shuffle mode will turn off when playing a new list of songs 음악 재생 화면에서 공간이 있을 시 볼륨 컨트롤을 보입니다 앨범 커버 표시 + Navigate by Album Artist Album cover theme Album cover skip 앱 바로가기 색상 틴트 알림이 올 때 볼륨 감소 아티스트 이미지 자동 다운로드 - Blacklist + 블랙리스트 Bluetooth playback 앨범 커버 블러 클래식 알림 디자인 @@ -423,6 +320,7 @@ Song info 지연없이 재생하기 기본 테마 + Album grid Artist grid Banner 미디어 저장소 커버 무시 @@ -436,22 +334,15 @@ 자동 재생 Shuffle mode 볼륨 조절 - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - 구매 - 대기열 - 앱 평가 앱이 마음에 드신다면 Google Play 스토어에 평가를 남겨주세요. - 지난 앨범 지난 아티스트 - 제거 커버 제거 블랙리스트에서 제거 @@ -459,25 +350,19 @@ %1$s 노래를 재생목록에서 제거하시겠습니까?]]> 노래를 재생목록에서 삭제 %1$d개의 노래를 재생목록에서 삭제하시겠습니까?]]> - 재생목록 이름 바꾸기 - Report an issue Report bug - Reset 아티스트 이미지 초기화 - 복원 - 지난 구매를 복원했습니다. 모든 기능을 사용하기 위해선 앱을 재시작해 주세요. 이전 구매 내역을 복원했습니다. - 구매 복원 중... - Retro Music Player RetroMusic Pro 구매 - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -490,142 +375,92 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save 파일로 저장 Save as files - 재생목록을 %s 위치에 파일로 저장했습니다. - 변경 사항 저장 - Scan media - %2$d개 파일 중 %1$d개 파일을 스캔했습니다. - Scrobbles - Select all - Selected - Set 아티스트 이미지 설정 - Share app + Share the app with your friends and family Share to Stories - 무작위 재생 - 심플 - 수면 타이머가 취소되었습니다. 수면 타이머가 지금으로부터 %d분 후로 설정되었습니다. - Social Share story - 노래 노래 길이 - 노래 - 정렬 순서 Ascending - Album - Artist + 앨범 + 아티스트 Composer Date added Date modified + Song count + Song count desc Year Descending - 음성 입력을 지원하지 않는 기기입니다 라이브러리 검색 - Stack - Start playing music. - Suggestions - 개발 지원 - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - 감사합니다! - 오디오 파일 - 이번 달 이번 주 올해 - 작음 Tiny card - Title - 오늘 - 인기 앨범 인기 아티스트 - "트랙 (트랙 2는 2, CD3의 트랙 4는 3004)" 트랙 번호 - 번역 Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - \uc774 \ub178\ub798\ub97c \uc7ac\uc0dd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. - 다음 곡으로 재생 - 이미지 갱신 - 갱신 중... - + User Name Username - 버전 - Vertical flip - Volume - 웹 검색 - Welcome, - 무엇을 공유하시겠습니까? - What\'s New - Rounded corners - %1$s을(를) 벨소리로 설정했습니다. %1$d개 항목 선택됨 - 연도 - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From ddaceb14e3acc09f28d70b477f5b9e7c86a44d05 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:10 +0530 Subject: [PATCH 0060/1603] New translations strings.xml (Dutch) --- app/src/main/res/values-nl-rNL/strings.xml | 215 +++------------------ 1 file changed, 25 insertions(+), 190 deletions(-) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index f10e1b53c..90e8ed281 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Accent kleur De accent kleur, standaard naar groen - Over Toevoegen aan favorieten Voeg toe aan afspeel wachtrij @@ -48,32 +46,23 @@ Tags aanpassen Toggle favorite Toggle shuffle mode - Adaptive - Toevoegen "Toevogen aan afspeellijst" - "1 titel aan afspeel wachtrij toegevoegd." %1$d titels toegevoegd aan afspeel wachtrij - Album - Song Songs - Album artiest - Albums Album Albums - Altijd - Hey, bekijk deze coole muziekspeler op:https://play.google.com/store/apps/details?id=%s Shuffle Top tracks @@ -82,25 +71,16 @@ Klassiek Klein Text - Artiest - Artiesten - Geluid focus geweigerd Change the sound settings and adjust the equalizer controls - Auto - Biografie - Gewoon zwart - Zwarte lijst - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,55 +94,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Annuleer huidige timer - - Card + Kaart Colored Card - Card - + Square Card + Kaart Carousel effect on the now playing screen - Cascading - Changelog Changelog onderhouden in Telegram - Circle - Circular - - Classic - + Klassiek Legen Leeg zwarte lijst Clear queue - Color - Kleuren - Composer - Copied device info to clipboard. - Kon geen afspeellijst maken. "Kon geen matchende album cover downloaden." Could not restore purchase. Kon %d files niet scannen. - Aanmaken - Afspeellijst %1$s aangemaakt. - Members and contributors - Nu luisterend naar %1$s van %2$s. - Soort van donker - Afspeellijst verwijderen %1$s verwijderen?]]> Afspeellijsten verwijderen @@ -171,62 +131,38 @@ Delete songs %1$d?]]> %1$d?]]> - Liedjes %1$d verwijderd. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Wil je de zwarte lijst leegmaken? %1$s verwijderen van de zwarte lijst?]]> - Doneren Als je vindt dat ik het verdien om geld te krijgen voor mijn werk, dan kun je hier een paar euro\'s doneren. - Koop mij een - + Done Drive mode - Leeg - Equalizer - FAQ - Favorieten - Finish last song - Fit - Plat - Mappen - Follow system - For you - Free - Vol Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Grid style - + Need more help? Hinge - Geschiedenis - Start - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. %1$d liedjes toegevoegd aan afspeellijst %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Formaat Bestandsnaam @@ -263,45 +194,27 @@ More from %s Sampling rate Duur - Labeled - Laatst toegevoegd Last song - Library categories - Licenties - Clearly wit - Listeners - Luister bestanden - Podcasts laden... - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Mijn naam Mijn top tracks - Nooit - Nieuwe afspeellijst %s is de nieuwe start folder - Next Song - Geen albums Geen artiesten "Laat eerst een liedje afspelen, probeer dan opniew." @@ -313,57 +226,39 @@ No purchase found. Geen resultaten Geen liedjes - Normaal Normal lyrics - %s staat niet in de media store]]> - + Not recently played Niets om te scannen Nothing to see - Notificatie Customize the notification style - Now playing Nu afspeel wachtrij Customize the now playing screen 9+ now playing themes - Alleen Wi-Fi - Advanced testing features - Other - Password - Laatste 3 maanden - Peak - Permissie voor toegang tot extern opslag is afgewezen - + The app needs permission to access your device storage for playing music + Storage Access Permissies afgewezen - Personalize Customize your now playing and UI controls - Kies van local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Vlak - De afspeel notificatie bied acties om af te spelen/pauzeren etc. Afspeel notificatie - Afspeellijst is leeg Naam afspeellijst - Afspeellijsten - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -371,7 +266,7 @@ Advanced Album style Geluid - Blacklist + Zwarte lijst Controls Theme Afbeeldingen @@ -384,6 +279,7 @@ Keep the screen on Select language Gebruik de huidige cover als vergrendelscherm achtergrond. + Show Album Artists in the Artist category Notificaties, bediening etc. The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -408,12 +304,13 @@ Shuffle mode will turn off when playing a new list of songs Als er ruimte is in het nu afspelen scherm, zet volume knoppen aan Laat album cover zien + Navigate by Album Artist Album cover theme Album cover skip Gekleurde app snelkoppelingen Beperk volume bij verliezen focus Automatisch downloaden artisten afbeeldingen - Blacklist + Zwarte lijst Bluetooth playback Vervaag album cover Klassiek notificatie design @@ -425,6 +322,7 @@ Song info Afspelen zonder pauzes Basis thema + Album grid Artist grid Banner Negeer media store covers @@ -438,22 +336,15 @@ Automatisch afspelen Shuffle mode Volume knoppen - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Wachtrij - App beoordelen Vind je deze app leuk? Laat het ons weten in de Google Play Store om de ervaring te verbeteren - Recent albums Recent artists - Verwijderen Verwijder cover Verwijder van zwarte lijst @@ -461,25 +352,19 @@ %1$s van de afspeellijst?]]> Verwijder liedjes van afspeellijst %1$d van de afspeellijst?]]> - Hernoem afspeellijst - Report an issue Report bug - Reset Reset artiest afbeelding - Restore - Restored previous purchase. Please restart the app to make use of all features. Teruggezette aankopen - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -492,142 +377,92 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Opslaan als bestand Save as files - Afspeellijst opgeslagen in %s. - Aanpassingen opslaan - Scan media - %1$d van de %2$d bestanden gescant - Scrobbles - Select all - Selected - Set Stel artiest afbeelding in - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simpel - Slaap timer geannuleerd Slaap timer ingesteld in %d minuten vanaf nu - Social Share story - Liedje Duur liedje - Nummers - Volgorde Ascending Album - Artist + Artiest Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Je apparaat ondersteunt geen spraak invoer Zoek door je bibliotheek - Stack - Start playing music. - Suggestions - Ondersteun ontwikkelaars - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Bedankt! - Het geluidsbestand - Deze maand Deze week Dit jaar - Tiny Tiny card - Title - Vandaag - Top albums Top artists - "Nummer (2 voor nummer 2 of 3004 voor CD3 nummer 4)" Track nummer - Vertalen Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Kon dit nummer niet afspelen - Volgende - Update afbeelding - Bijwerken... - + User Name Username - Versie - Vertical flip - Volume - Web zoekopdracht - Welcome, - Wat wil je delen? - What\'s New - Window Rounded corners - Stel %1$s in als ringtone %1$d geselecteerd - Jaar - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From deddbd384a6187a724fb4da0ec6871fbf2ec865c Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:11 +0530 Subject: [PATCH 0061/1603] New translations strings.xml (Norwegian) --- app/src/main/res/values-no-rNO/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index b599615cf..0a9a9d1f7 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Accent color The theme accent color, defaults to purple - About Add to favorites Add to playing queue @@ -48,32 +46,23 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - Add "Add to playlist" - "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album - Song Songs - Album artist - Albums Album Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks @@ -82,25 +71,16 @@ Classic Small Text - Artist - Artists - Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,55 +94,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -171,62 +131,38 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - + Done Drive mode - Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Grid style - + Need more help? Hinge - History - Home - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -263,45 +194,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -313,57 +226,39 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -384,6 +279,7 @@ Keep the screen on Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -408,6 +304,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover + Navigate by Album Artist Album cover theme Album cover skip Colored app shortcuts @@ -425,6 +322,7 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers @@ -438,22 +336,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -461,25 +352,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -492,48 +377,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -541,93 +410,59 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 872ee75882a7d4a6500512ee86ecdcf50f8ba26b Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:13 +0530 Subject: [PATCH 0062/1603] New translations strings.xml (Polish) --- app/src/main/res/values-pl-rPL/strings.xml | 205 ++------------------- 1 file changed, 20 insertions(+), 185 deletions(-) diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index ab0e03fb8..009eea136 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -2,10 +2,8 @@ O %s Zespół, media społecznościowe - Kolor wiodący Kolor wiodący motywu, domyślnie morski - O aplikacji Dodaj do ulubionych Dodaj do kolejki @@ -48,26 +46,19 @@ Edytor tagów Przełącz na ulubione Przełącz tryb losowy - Adaptacyjny - Dodaj "Dodaj do playlisty" - "Dodano tytuł do kolejki odtwarzania" Dodano %1$d tytułów do kolejki - Album - Utwór Utwory Utworów Utworów - Wykonawca albumu - Albumy Album @@ -75,9 +66,7 @@ Albumów Albumów - Zawsze - Hej, sprawdź ten fajny odtwarzacz muzyki na: https://play.google.com/store/apps/details?id=%s Losowo Najczęściej odtwarzane utwory @@ -86,25 +75,16 @@ Klasyczny Mały Tekst - Wykonawca - Wykonawcy - Odrzucono fokus dźwiękowy. Dostosuj ustawienia dźwięku i equalizera - Automatyczny - Biografia - Po prostu czarny - Czarna lista - Rozmycie Rozmyta Karta - Nie udało się wysłać raportu Niepoprawny token dostępu. Skontaktuj się z twórcą aplikacji. Problemy nie zostały włączone dla wybranego repozytorium. Skontaktuj się z twórcą aplikacji. @@ -118,55 +98,35 @@ Wpisz poprawną nazwę użytkownika serwisu GitHub Wystąpił nieoczekiwany błąd. Wyczyść dane podręczne aplikacji, jeżeli błąd pojawi się ponownie - wyślij nam maila. Wyślij używając konta serwisu GitHub - Kup teraz - Anuluj - Karta Kolorowa Karta + Square Card Karta - Efekt karuzeli na ekranie Teraz odtwarzane - Kaskadowy - Lista zmian Lista zmian zarządzana z aplikacji Telegram - Okrąg - Okrągły - Klasyczny - Wyczyść Wyczyść czarną listę Wyczyść kolejkę - Kolor - Kolory - Kompozytor - Skopiowano informacje o urządzeniu do schowka - Nie udało się utworzyć playlisty. "Nie udało się pobrać pasującej okładki albumu" Nie udało się przywrócić zakupu. Nie udało się przeskanować %d plików. - Utwórz - Stworzono playlistę %1$s. - Twórcy - Aktualnie odtwarzane %1$s wykonawcy %2$s. - Dość ciemny - Usuń playlistę %1$s?]]> Usuń playlisty @@ -175,62 +135,38 @@ Usuń utwory %1$d playlisty?]]> %1$d utwory?]]> - Usunięto %1$d utworów. - Głębia - Opis - Informacje o urządzeniu - Pozwól Retro Music na modyfikację ustawień dźwięku Ustaw jako dzwonek - Czy chcesz wyczyścić czarną listę? %1$s z czarnej listy?]]> - Wesprzyj nas Jeżeli uważasz, że zasługuje na zapłatę za moją pracę możesz zostawić tu drobną sumę - Kup mi: - + Done Tryb samochodowy - Pusto - Korektor dźwięku - Najczęściej zadawane pytania - Ulubione - Dokończ ostatnią piosenkę - Dopasuj - Płaski - Foldery - Zgodnie z motywem systemu - Dla Ciebie - Darmowe - Pełne Pełna karta - Zmień motyw i kolory aplikacji Wygląd i zachowanie interfejsu - Gatunek - Gatunki - Zobacz kod na GitHubie - + Gradient 1 2 3 @@ -240,25 +176,20 @@ 7 8 Styl siatki - + Need more help? Zawias - Historia - Strona główna - Obrót poziomy - Grafika Grafika gradientowy Zmień ustawienia pobierania grafiki wykonawcy - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Dodano %1$d utworów do playlisty %2$s. - Udostępnij swój desigm aplikacji Retro Music na Instagramie - Klawiatura - Jakość Typ Nazwa pliku @@ -267,45 +198,27 @@ Więcej z %s Częstotliwość próbkowania Długość - Podpisano - Ostatnio dodane Ostatni utwór - Kategorie biblioteki - Licencje - Śnieżno biały - Słuchacze - Wyświetlanie plików - Ładowanie... - Zaloguj się - Tekst utworu - Stworzone z ❤️ w Indiach - - Material - + Materialistyczny Błąd Błąd uprawnień - Imię Najczęściej odtwarzane - Nigdy - Nowa playlista %s jest nowym folderem startowym. - Następny utwór - Brak albumów Brak wykonawców "Odtwórz jakiś utwór i spróbuj ponownie." @@ -317,57 +230,39 @@ Nie znaleziono zakupu. Brak wyników. Brak utworów - Normalne Normalny tekst utworu - %s nie znajduje się w magazynie multimediów.]]> - + Not recently played Brak elementów do przeskanowania. Pusto - Powiadomienie Dostosuj wygląd powiadomień - Teraz odtwarzane Kolejka odtwarzanych Dostosuj odtwarzacz 9+ motywów odtwarzacza - Tylko przez Wi-Fi - Zaawansowane funkcje eksperymentalne - Inne ustawienia - Hasło - Ostatnie 3 miesiące - Szczyt - Odmowa dostępu do pamięci zewnętrznej. - + The app needs permission to access your device storage for playing music + Storage Access Odmowa dostępu. - Personalizuj Dostosuj interfejs i odtwarzacz - Wybierz z pamięci lokalnej - Pinterest Śledź stronę Retro Music na Pintrescie po więcej inspiracji - Wyraźny - Powiadomienie odtwarzania pokazuje przyciski odtwórz/zatrzymaj itp. Powiadomienie odtwarzania - Playlista jest pusta Nazwa playlisty - Playlisty - Poziom rozmycia dla motywów; mniej znaczy szybciej Poziom rozmycia Filtruj utwory według długości @@ -388,6 +283,7 @@ Pozostaw ekran włączony Wybierz język Używaj okładki aktualnie odtwarzanego albumu jako tła ekranu blokady + Show Album Artists in the Artist category Zmniejsz głośność kiedy dostajesz powiadomienia Foldery zawarte na czarnej listy są ukryte w Twojej bibliotece. Rozpocznij odtwarzanie po podłączeniu urządzenia Bluetooth @@ -412,6 +308,7 @@ Odtwarzanie losowe zostanie wyłączone podczas odtwarzania nowej listy utworów Pokaż sterowanie głośnością w odtwarzaczu, gdy jest wystarczająco wolnego miejsca Pokaż okładkę albumu + Navigate by Album Artist Wygląd okładki albumu Przesuwanie okładki albumu Kolorowe skróty aplikacji @@ -429,6 +326,7 @@ Informacje o utworze Odtwarzanie bez przerw Motyw aplikacji + Album grid Siatka wykonawców Baner strony głównej Ignoruj okładki z Media Store @@ -442,22 +340,15 @@ Autoodtwarzanie Tryb losowy Sterowanie głośnością - Pro Efekt karuzeli, tryb czarny i wiele więcej... - Profil - Kup - Kolejka - Oceń aplikację Uwielbiasz tą aplikację? Daj nam znać w sklepie Google Play co o niej sądzisz i co powinniśmy poprawić. - Ostatnie albumy Ostatni artyści - Usuń Usuń okładkę Usuń z czarnej listy @@ -465,25 +356,19 @@ %1$s z playlisty?]]> Usuń utwory z playlisty %1$d z playlisty?]]> - Zmień nazwę playlisty - Zgłoś problem Zgłoś błąd - Zresetuj Zresetuj grafikę wykonawcy - Przywróć - Przywrócono poprzedni zakup. Zrestartuj aplikacje aby korzystać z wszystkich funkcji. Przywrócono poprzednie zakupy. - Przywracanie zakupu... - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone Nie udało się usunąć pliku: %s Nie można uzyskać URI SAF @@ -496,48 +381,32 @@ Nie otwieraj żadnych podfolderów Dotknij przycisku \'Wybierz\' u dołu ekranu Nie udało się zapisać do pliku: %s - Zapisz Zapisz jako plik Zapisz jako - Zapisz playlistę do %s. - Zapisywanie zmian - Skanuj media - Przeskanowano %1$d z plików %2$d. - Scrobble - Zaznacz wszystko - Zaznaczone - Ustaw Ustaw grafikę wykonawcy - Udostępnij aplikację + Share the app with your friends and family Udostępnik jako Stories - Losowo - Prosty - Wyłącznik czasowy wyłączony. Wyłącznik czasowy ustawiony na %d minut. - Społeczność Udostępnij historię - Utwór Długość utworu - Utwory - Sortowanie Rosnąco Album @@ -545,93 +414,59 @@ Kompozytor Data dodania Data modyfikacji + Song count + Song count desc Rok Malejąco - Twoje urządzenie nie obsługuje wprowadzania głosowego Przeszukaj swoją bibliotekę - Stos - Rozpocznij odtwarzanie - Sugestie - Wspieraj rozwój - Przesuń, aby odblokować - Synchronizowany tekst utworu - Telegram Dołącz do grupy Telegram, aby zgłosić błędy lub zasugerować zmiany - Dziękuję! - Plik dźwiękowy - Ten miesiąc Ten tydzień Ten rok - Mały Mała karta - Tytuł - Dzisiaj - Najczęściej odtwarzane albumy Najczęściej odtwarzani wykonawcy - "Ścieżka (2 dla ścieżki 2 lub 3004 dla ścieżki CD3 4)" Numer utworu - Przetłumacz Pomóż nam przetłumaczyć aplikację na swój język - Wypróbuj Retro Music Premium - Strona na Twitterze Podziel się swoim designem z Retro Music - Niepodpisane - Nie można odtworzyć utworu. - Następne - Zaktualizuj grafikę - Aktualizowanie… - + User Name Nazwa użytkownika - Wersja - Obrót pionowy - Głośność - Przeszukaj sieć - Witaj, - Co chciałbyś udostępnić? - Co nowego - Okno Zaokrąglone rogi - Ustaw %1$s jako dzwonek. Wybrano %1$d - Rok - Zaznacz przynajmniej jedną kategorię Zostaniesz przekierowany do strony ze zgłoszeniami. - Informacje o twoim koncie są używane tylko do autoryzacji. From 43c177409e2d5e36b4712ca124025aae01413b3d Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:14 +0530 Subject: [PATCH 0063/1603] New translations strings.xml (Portuguese) --- app/src/main/res/values-pt-rPT/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index b599615cf..0a9a9d1f7 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Accent color The theme accent color, defaults to purple - About Add to favorites Add to playing queue @@ -48,32 +46,23 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - Add "Add to playlist" - "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album - Song Songs - Album artist - Albums Album Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks @@ -82,25 +71,16 @@ Classic Small Text - Artist - Artists - Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,55 +94,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -171,62 +131,38 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - + Done Drive mode - Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Grid style - + Need more help? Hinge - History - Home - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -263,45 +194,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -313,57 +226,39 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -384,6 +279,7 @@ Keep the screen on Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -408,6 +304,7 @@ Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover + Navigate by Album Artist Album cover theme Album cover skip Colored app shortcuts @@ -425,6 +322,7 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers @@ -438,22 +336,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -461,25 +352,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -492,48 +377,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -541,93 +410,59 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 9f8659746bb77f31e0e76eb76b4286570461c9f8 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:15 +0530 Subject: [PATCH 0064/1603] New translations strings.xml (Russian) --- app/src/main/res/values-ru-rRU/strings.xml | 200 +-------------------- 1 file changed, 7 insertions(+), 193 deletions(-) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index fc9d1f04a..94e83278f 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -1,11 +1,9 @@ - + Об альбоме %s Команда, ссылки на соц. сети - Основной цвет Основной цвет, по умолчанию фиолетовый - О программe Добавить в избранное Добавить в очередь воспроизведения @@ -39,7 +37,7 @@ Запустить Задать в качества рингтона Установить как стартовый каталог - Настройки + "Настройки" Поделиться Перемешать всё Перемешать плейлист @@ -48,32 +46,27 @@ Редактор тегов Показать избранное Включить перемешивающий режим - Адаптированная - Добавить "Добавить в плейлист" - "В очередь добавлен 1 трек" В очередь добавлено %1$d треков. - Альбом - Песня + Песни + Песни Песни - Исполнитель альбома - Альбомы Альбом + Альбомы + Альбомы Альбомы - Всегда - Эй, попробуй этот крутой музыкальный плеер на Android: https://play.google.com/store/apps/details?id=%s Перемешать Лучшие треки @@ -82,25 +75,16 @@ Классический Маленькое изображение Минималистичный - Исполнитель - Исполнители - Фокус на аудио отключен. Измените настройки звука и отрегулируйте настройки эквалайзера - Авто - Биография - Чёрная - Черный список - Размытие Карточка с размытием - Невозможно отправить отчет Недопустимый ключ доступа. Пожалуйста, свяжитесь с разработчиком приложения. Проблемы не активны в выбранном хранилище. Пожалуйста, свяжитесь с разработчиком приложения. @@ -114,56 +98,35 @@ Пожалуйста, введите корректно ваше имя пользователя GitHub Произошла непредвиденная ошибка. Извините, если это продолжится то \"Очистите данные приложения\" или отправьте сообщение на электронную почту Отправить с помощью учетной записи GitHub - Купить сейчас - Отменить - Карточка Цветная карточка Квадратная Карточка Карточка - Эффект карусели на экране воспроизведения - Каскадный - Список изменений Список изменений находится на канале Telegram - Круг - Круговая - Классическая - Очистить Очистить черный список Очистить очередь - Цветная - Цвета - Композитор - Скопировать информацию об устройстве в буфер обмена. - Не удалось создать плейлист "Не удалось загрузить подходящую обложку для альбома." Не удалось восстановить покупку. Не удалось просканировать %d файлов. - Создать - Создан плейлист %1$s. - Участники и помощники - Сейчас играет %1$s от %2$s. - Тёмная - Удалить плейлист %1$s?]]> Удалить плейлисты @@ -172,66 +135,38 @@ Удалить песни %1$d плейлистов?]]> %1$d песен?]]> - Удалено %1$d песен. - Глубина - Описание - Информация об устройстве - Разрешить Retro Music изменять настройки звука Выбрать рингтон - Вы хотите очистить черный список? %1$s из черного списка?]]> - Пожертвовать Если вы считаете, что я заслуживаю награды за свой труд, можете отправить мне несколько рублей здесь - Купить мне: - Готов - Режим вождения - Пусто - Эквалайзер - ЧаВО - Избранное - Закончить вопсроизведение последней песни - По размеру - Плоская - Папки - Системная - Для вас - Доступно - Заполнение Заполненная карточка - Измените тему и цвет в приложении Внешний вид интерфейса - Жанр - Жанры - Развивайте проект на GitHub - Градиент - 1 2 3 @@ -241,32 +176,20 @@ 7 8 Стиль сетки - Нужна ещё помощь? - Пластинки - История - Главная - Горизонтальный поворот - Изображение Градиентное изображение Изменение настроек загрузки изображения артиста - Импорт Импорт плейлиста Импортирует все плейлисты, перечисленные в Android Media Store с песнями, если плейлисты уже существуют, песни будут объединены. - В плейлист %2$s внесено %1$d песен. - - Instagram Поделитесь своим обзором на приложение Retro Music в Instagram - Клавиатура - Битрейт Формат Имя файла @@ -275,45 +198,27 @@ Больше от %s Частота дискретизации Длина - Показывать всегда - Последние добавленные Последняя песня - Разделы библиотеки - Лицензии - Белая - Слушатели - Список файлов - Загрузка товаров... - Войти - Текст песни - Сделано с ❤️ в Индии - Material - Ошибка Ошибка разрешения - Моё имя Любимые треки - Никогда - Новый плейлист %s новая стартовая директория. - Следующая песня - Альбомы отсутствуют Исполнители отсутствуют "Сначала проиграйте песню, затем попробуйте заново." @@ -325,60 +230,39 @@ Покупки отсутствуют. Нет результатов Нет песен - Обычная Обычный текст - %s не найден в хранилище медиа.]]> Сейчас не проигрывается - Нет файлов для сканирования. Нет файлов для сканирования - Уведомления Настроить стиль уведомлений - Экран воспроизведения Очередь в \"Экране воспроизведения\" Настроить экран воспроизведения 9+ тем экрана текущего воспроизведения - Только по Wi-Fi - Эксперементальные возможности - Другое - Пароль - Последние 3 месяца - Панель снизу - Разрешение для доступа у внешнему хранилищу не получено. Приложению требуется разрешение на доступ к внутренней памяти вашего устройства для воспроизведения музыки. Доступ к внутренней памяти - Разрешения не получены. - Персонализация Настройте управление экрана воспроизведения и интерфейс управления музыкой - Выбрать из хранилища - Pinterest Подпишитесь на страницу Retro Music в Pinterest - Гладкая - Уведомление о песне предоставляет действия для воспроизведения/паузы и т.д. Уведомления воспроизведения - Плейлист пуст Название плейлиста - Плейлисты - Степень размытия в соответствующих темах; чем ниже, тем быстрее работает устройство Степень размытия Фильтровать песни по длине @@ -443,6 +327,7 @@ Непрерывное воспроизведение Тема приложения Сетка альбома на Главной странице + Artist grid Кнопка Домой Игнорировать обложки из хранилища Дата последнего добавления плейлиста @@ -455,22 +340,15 @@ Автовоспроизведение Режим перемешивания Регулировка громкости - Pro Черная тема, Темы экрана воспроизведения, Эффект карусели и многое другое.. - Профиль - Купить - Очередь - Оценить приложение Понравилось это приложение? Напишите нам в Google Play Store о том, как мы можем сделать его еще лучше - Последние альбомы Последние исполнители - Удалить Удалить обложку Удалить из черного списка @@ -478,28 +356,19 @@ %1$s из плейлиста?]]> Удалить песни из плейлиста - Переименовать плейлист - Сообщить об ошибке Сообщить об ошибке - Сбросить Сбросить изображение исполнителя - Восстановить - Предыдущая покупка восстановлена. Перезагрузите приложение, чтобы использовать все функции. Восстановленные предыдущие покупки. - Восстановление покупки ... - Retro Music Player Retro Music Pro - Приложению требуется разрешение на доступ к настройкам вашего устройства, чтобы установить музыку в качестве рингтона. Рингтон - Ошибка при удалении файла: %s Не удается получить SAF URI @@ -512,49 +381,32 @@ Не открывайте никакие подпапки Нажмите кнопку «выбрать» в нижней части экрана Ошибка при записи файла: %s - Сохранить Сохранить как... Сохранить как... - Сохраненный список воспроизведения в %s. - Сохранение изменений - Сканировать медиа-файлы - Просканировано %1$d из %2$d файлов. - Скробблинг - Выбрать все - Выбранная кнопка - Установить Установить изображение исполнителя - Поделиться приложением Поделитесь приложением со своими друзьями и родственниками Поделиться в Историях - Перемешать - Простая - Таймер отключения отменен. Таймер сна установлен на %d минут. - Социальный Поделиться историей - Песня Длительность песни - Песни - Порядок сортировки По возрастанию Альбом @@ -566,93 +418,55 @@ Количество композиций по убыванию Год По убыванию - Извините! Ваше устройство не поддерживает ввод с помощью речи Поиск в вашей библиотеке - Стэк - Начать воспроизведение музыки. - Предложения - Поддержать разработку - Проведите, чтобы разблокировать - Синхронизируемый текст - Telegram Присоединяйтесь к группе Telegram, чтобы обсуждать ошибки, предлагать улучшения, хвастаться и т.д. - Спасибо ! - Аудиофайл - Этот месяц Это неделя Этот год - Маленькая Крошечная карточка - Название - Сегодня - Топ альбомов Топ исполнителей - "Трек (2 для трека 2 или 3004 для CD3 трека 4)" Номер трека - Переведите Помогите нам перевести приложение на ваш язык - Попробуйте Retro Music Premium - Твиттер Поделитесь своим дизайном Retro Music - Не показывать - Невозможно проиграть эту песню - Следующие песни - Обновить изображение - Обновляется… - Имя Пользователя - Имя пользователя - Версия - Вертикальный поворт - Громкость - Поиск в интернете - Добро пожаловать, - Чем вы хотите поделиться? - Что нового : - Окно Закругленные углы - Установите %1$s в качестве мелодии звонка. Выбрано %1$d - Год - Выберите хотя бы одну категорию. Вы будете перенаправлены на сайт системы отслеживания ошибок. - Данные вашей учетной записи используются только для аутентификации. From 7ecf64610fc23aae5d629111e5019c2f75a81225 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:16 +0530 Subject: [PATCH 0065/1603] New translations strings.xml (Serbian (Cyrillic)) --- app/src/main/res/values-sr-rSP/strings.xml | 209 +++------------------ 1 file changed, 22 insertions(+), 187 deletions(-) diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index a8762052b..00f82c3a2 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -2,10 +2,8 @@ About %s Team, social links - Boja detalja Boja plejera, uobičajena je zelena - O programerima Dodaj u omiljene Dodaj u listu za pustanje @@ -48,34 +46,25 @@ Uredjivac tagova Toggle favorite Toggle shuffle mode - Adaptive - Dodaj "Dodaj na plejlistu" - "Dodata je 1 pesma na plejlistu" Dodato %1$d pesama na plejlistu - Album - Song Songs Songs - Izvodjac albuma - Albumi Album Albums Albums - Uvek - Isprobaj ovaj fantastican plejer na: https://play.google.com/store/apps/details?id=%s Reprodukuj nasumicno Najvise slusano @@ -84,25 +73,16 @@ Classic Small Text - Izvodjac - Izvodjac - Zvuk se vec reprodukuje Change the sound settings and adjust the equalizer controls - Auto - Biografija - Perfektno crna - Ne trazi muziku u... - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -116,55 +96,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Otkazi trenutni tajmer - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Izmene Izmene odobrene za Telegram aplikacije - Circle - Circular - Classic - Ocisti Ocisti listu za ignorisanje foldera Clear queue - Color - Boje - Composer - Copied device info to clipboard. - Nemoguce je napraviti plejlistu "Nemoguce je preuzeti odgovarajucu pozadinu albuma" Could not restore purchase. Nije moguce skenirati %d fajlove - Napravi - Plejlista %1$s je napravljena - Members and contributors - Trenutno se reprodukuje %1$s izvodjaca %2$s - Kao tamno - Izbrisi plejlistu %1$s plejlistu?]]> Izbrisi plejlistu @@ -173,62 +133,38 @@ Delete songs %1$d plejliste?]]> %1$d numere?]]> - Izbrisi %1$d numere. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Da li zelite da ispraznite listu za ignorisanje foldera? %1$s sa liste za ignorisanje foldera?]]> - Doniraj Ako mislis da zasluzujem da budem placen za ovaj posao, mozes mi poslati par dolara - Kupi mi - + Done Drive mode - Nema pesama - Ekvilajzer - FAQ - Favoriti - Finish last song - Fit - Ravno - Folderi - Follow system - Za tebe - Free - Ispunjen Full card - Change the theme and colors of the app Look and feel - Zanr - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -238,25 +174,20 @@ 7 8 Grid style - + Need more help? Hinge - Istorija reprodukovanja - Pocetak - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Ubaceno %1$d pesama u plejlistu %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Formatiraj Naziv datoteke @@ -265,45 +196,27 @@ More from %s Brzina uzorkovanja Duzina trajanja - Labeled - Poslednje dodato Last song - Library categories - Licence - Perfektno bela - Listeners - Pronalazenje pesama - Ucitavanje datoteka... - Login - Tekst pesme - Made with ❤️ in India - Material - Error Permission error - Moje ime je Najslusanije numere - Nikada - Nova plejlista %s je novi pocetni direktorijum. - Next Song - Nema albuma Nema izvodjaca "Prvo pusti pesmu, a onda pokusaj opet" @@ -315,57 +228,39 @@ No purchase found. Nema rezultata Nema pesama - Normalno Normal lyrics - %s nije pronadjen u prodavnici pesama]]> - + Not recently played Nema se sta skenirati Nothing to see - Obavestenja Customize the notification style - Now playing Lista za trenutno pustanje Customize the now playing screen 9+ now playing themes - Samo kada je povezan na WiFi - Advanced testing features - Other - Password - Prosla 3 meseca - Peak - Dozvola za pristup spoljasnjem skladistu je odbijena - + The app needs permission to access your device storage for playing music + Storage Access Dozvola odbijena. - Personalize Customize your now playing and UI controls - Izaberi iz unutrasnjeg skladista - Pinterest Follow Pinterest page for Retro Music design inspiration - Jednostavan - Obavestenja obezbedjuju komande za pustanje/pauziranje itd. Obavestenja o reprodukciji - Plejlista je prazna Ime plejliste - Plejliste - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -373,7 +268,7 @@ Advanced Album style Zvuk - Blacklist + Ne trazi muziku u... Controls Theme Slike @@ -386,6 +281,7 @@ Keep the screen on Select language Koristi omot albuma kao pozadinu kada se reprodukuje muzika + Show Album Artists in the Artist category Obavestenja, navigacija itd. The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device @@ -410,12 +306,13 @@ Shuffle mode will turn off when playing a new list of songs Ukoliko imas prostora na ekranu za pustanje omoguci kontroler jacine zvuka. Prikazi omot albuma + Navigate by Album Artist Album cover theme Album cover skip Obojene ikone aplikacije Utisaj zvuk prilikom poziva i drugih obavestenja. Automatski preuzmi sliku izvodjaca - Blacklist + Ne trazi muziku u... Bluetooth playback Zamuti omot albuma Klasican stil obavestenja @@ -427,6 +324,7 @@ Song info Neuznemiravano reprodukovanje Opsta tema + Album grid Artist grid Banner Ignorisi omote sa prodavnice @@ -440,22 +338,15 @@ Automatsko reprodukovanje Shuffle mode Kontroler jacine zvuka - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Trenutno - Oceni aplikaciju Volis ovu aplikaciju? Obavesti nas u Google Play Prodavnici - Recent albums Recent artists - Izbrisi Izbrisi omot albuma Izbrisi sa liste za ignorisanje foldera @@ -463,25 +354,19 @@ %1$s sa plejliste?]]> Izbrisi pesme sa plejliste %1$d pesama sa plejliste?]]> - Promeni ime plejliste - Report an issue Report bug - Reset Resetuj sliku izvodjaca - Restore - Restored previous purchase. Please restart the app to make use of all features. Obnovljene su prethodne kupovine - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone File delete failed: %s Can\'t get SAF URI @@ -494,142 +379,92 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Sacuvaj kao fajl Save as files - Plej lista sacuvana u %s. - Cuvanje izmena - Scan media - Skenirano %1$d od %2$d fajlova - Scrobbles - Select all - Selected - Set Postavi sliku izvodjaca - Share app + Share the app with your friends and family Share to Stories - Nasumicno pusti - Jednostavan - Tajmer za iskljucivanje je otkazan Tajmer za iskljucivanje je podesen za %d od sad. - Social Share story - Pesma Trajanje pesme - Pesme - Nacin sortiranja Ascending Album - Artist + Izvodjac Composer Date added Date modified + Song count + Song count desc Year Descending - Izvini! Tvoj uredjaj ne podrzava unos govorom Pretrazi svoju biblioteku - Stack - Start playing music. - Suggestions - Podrzi programera - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Hvala! - Audio fajl - Ovog meseca Ove nedelje Ove godine - Sitno Tiny card - Title - Danas - Top albums Top artists - "Redni broj (2 za redni broj 2 ili 3004 za CD3 redni broj 4)" Redni broj - Prevod Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Nije moguce pustiti pesmu. - Sledece - Azuriraj sliku - Azurira se... - + User Name Username - Verzija - Vertical flip - Volume - Web pretraga - Welcome, - Sta zelis da podelis? - What\'s New - Window Rounded corners - Postavi %1$s kao melodiju zvona. Selektovano %1$d - Godina - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From 19b8e0bc6e0e1a4b139a7e2c013d28adcbce63e2 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:17 +0530 Subject: [PATCH 0066/1603] New translations strings.xml (Swedish) --- app/src/main/res/values-sv-rSE/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index c255933b0..0eb301762 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -2,10 +2,8 @@ Om %s Vårt team, länkar - Accentfärg Temats accentfärg, standard är lila - Om Lägg till i favoriter Lägg till i spelkön @@ -48,32 +46,23 @@ Tag redigerare Favorit Shuffleläge - Adaptiv - Lägg till "Lägg till i spellista" - "Lade till en titel i spelkön." Lade till %1$d titlar i spelkön. - Album - Låt Låtar - Albumartist - Album Album Album - Alltid - Kolla in den här coola musikspelaren på: https://play.google.com/store/apps/details?id=%s Shuffle Topplåtar @@ -82,25 +71,16 @@ Klassisk Liten Text - Artist - Artister - Ljudfokus nekas. Ändra ljudinställningarna och justera equalizer-kontrollerna - Auto - Biografi - Helt svart - Svartlista - Oskärpa Kort med oskärpa - Det gick inte att skicka rapport Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,55 +94,35 @@ Please enter your valid GitHub username Ett oväntat fel uppstod. Tråkigt att du hittade denna bug, om det fortsätter att krascha, testa att \"Rensa appdata\" eller skicka ett e-postmeddelande Send using GitHub account - Köp nu - Avbryt - Kort Färgat kort + Square Card Kort - Karuselleffekt på spelarskärmen - Släng iväg - Ändringslogg Ändringsloggen befinner sig på Telegram - Cirkel - Cirkulär - Klassisk - Rensa Rensa svartlista Rensa spelkö - Färg - Färger - Kompositör - Kopierade enhetsinfo till urklipp. - Det gick inte att skapa spellista. "Kunde inte ladda ner ett matchande albumomslag." Det gick inte att återställa köpet. Det gick inte att skanna %d filer. - Skapa - Skapade spellistan %1$s. - Medlemmar och bidragsgivare - Lyssnar just nu på %1$s av %2$s. - Ganska mörkt - Radera spellista %1$s?]]> Radera spellistor @@ -171,62 +131,38 @@ Radera låtar %1$d spellistor?]]> %1$d låtar?]]> - %1$d låtar har raderats. - Djup - Beskrivning - Enhetsinformation - Låt Retro Music ändra ljudinställningar Ställ in ringsignal - Vill du rensa svartlistan? %1$s från svartlistan?]]> - Donera Om du tycker att jag förtjänar någon ersättning för mitt arbete, kan du gärna donera lite pengar här - Köp mig en: - + Done Förarläge - Tom - Equalizer - FAQ - Favoriter - Spela färdigt sista låten - Passa - Platt - Mappar - Följ systemet - För dig - Fri - Full Fullt kort - Ändra appens tema och färger Utseende och känsla - Genre - Genrer - Gör en fork av projektet på GitHub - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Rutnätstil - + Need more help? Gångjärn - Historik - Hem - Vänd horisontellt - Bild Tonad bild Ändra inställningar för nedladdning av artistbild - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. La till %1$d låtar i spellistan %2$s. - Dela din Retro Music-setup för att visa upp på Instagram - Tangentbord - Bitrate Format Filnamn @@ -263,45 +194,27 @@ Mer från %s Sampling rate Längd - Labeled - Senast tillagd Sista låten - Bibliotekskategorier - Licenser - Snövitt - Lyssnare - Listar filer - Laddar produkter… - Logga in - Låttext - Skapad med ❤️ i Indien - Material - Fel Behörighetsfel - Namn Mest spelade - Aldrig - Ny spellista %s är den nya startmappen. - Nästa låt - Du har inga album Du har inga artister "Spela en låt först och försök igen." @@ -313,57 +226,39 @@ Inget köp hittades. Inga resultat Du har inga låtar - Normal Normal låttext - %s är inte listad i Media Store.]]> - + Not recently played Inget att skanna. Ingenting att se - Notis Anpassa utseendet på notisen - Spelare Spelkö Anpassa spelarskärmen 9+ spelarteman - Endast via Wi-Fi - Avancerade testfunktioner - Övrigt - Lösenord - De senaste 3 månaderna - Peak - Behörighet att få tillgång till extern lagring nekas. - + The app needs permission to access your device storage for playing music + Storage Access Behörighet nekas. - Skräddarsy Anpassa appens UI till din smak - Välj från lokal lagring - Pinterest Följ vår Pinterestsida för lite designinspiration till Retro Music - Enkel - Notisen har knappar för play/pause etc. Notis - Spellistan är tom Namn på spellista - Spellistor - Mängden oskärpa som används för suddiga teman, lägre är snabbare Oskärpa Filtrera låtar efter dess längd @@ -384,6 +279,7 @@ Håll skärmen på Välj språk Använd det spelade albumets omslag som låsskärmsbakgrund + Show Album Artists in the Artist category Sänk volymen när ett systemljud spelas upp eller ett meddelande tas emot Innehållet i svartlistade mappar döljs från ditt bibliotek. Börja spela direkt när en bluetooth-enhet ansluts @@ -408,6 +304,7 @@ Shuffleläget stängs av när du spelar en ny lista med låtar Visa volymkontroller på spelarskärmen, om det finns tillräckligt med utrymme Visa albumomslag + Navigate by Album Artist Tema för albumomslag Nästa albumomslag Färgade appgenvägar @@ -425,6 +322,7 @@ Låtinfo Sömlös uppspelning Apptema + Album grid Artistruntnät för hem Hem-banner Ignorera omslag i Media Store @@ -438,22 +336,15 @@ Auto-play Shuffleläge Volymkontroller - Pro Helt svart tema, spelarteman, karuselleffekt med mera… - Profil - Köp - Spelkö - Betygsätt appen Älskar du den här appen? Låt oss veta i Google Play Store hur vi kan göra den ännu bättre - Senaste album Senaste artister - Ta bort Ta bort omslag Ta bort från svartlistan @@ -461,25 +352,19 @@ %1$s från spellistan?]]> Ta bort låtar från spellistan %1$d låtar från spellistan?]]> - Byt namn på spellista - Rapportera ett problem Rapportera fel - Återställ Återställ artistbild - Restore - Återställde tidigare köp. Starta om appen för att använda alla funktioner. Återställde tidigare köp. - Återställer köp… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone Radering av fil misslyckades: %s Kan inte hämta SAF URI @@ -492,48 +377,32 @@ Öppna inga submappar Klicka på \'välj\'-knappen längst ner på skärmen Filskrivning misslyckades: %s - Spara Spara som fil Spara som filer - Sparade spellista till %s. - Sparar ändringar - Skanna media - Skannade %1$d av %2$d filer. - Scrobbles - Välj alla - Vald - Ställ in Ställ in artistbild - Dela app + Share the app with your friends and family Dela till Stories - Shuffle - Enkel - Sömntimer inaktiverad. Sömntimern är inställd på %d minuter från och med nu. - Socialt Dela Story - Låt Låtlängd - Låtar - Sorteras efter Stigande Album @@ -541,93 +410,59 @@ Kompositör Tilläggningsdatum Ändringsdatum + Song count + Song count desc År Sjunkande - Hoppsan! Din enhet stöder inte talinmatning Sök i ditt bibliotek - Stack - Börja spela musik. - Förslag - Stöd utvecklingen - Svep för att låsa upp - Synkad låttext - Telegram Gå med i Telegram-gruppen för att diskutera buggar, lämna förslag, briljera och mycket annat - Tack! - Ljudfilen - Den här månaden Denna vecka Det här året - Minimal Litet kort - Titel - I dag - Toppalbum Toppartister - "Spår (2 för spår 2 eller 3004 för CD3 spår 4)" Spårnummer - Översätt Hjälp oss att översätta appen till ditt språk - Prova Retro Music Premium - Twitter Dela din design med Retro Music - Omärkt - Kunde inte spela den här låten. - Spelas härnäst - Uppdatera bilden - Uppdaterar… - + User Name Användarnamn - Version - Vänd vertikalt - Volym - Webbsökning - Välkommen, - Vad vill du dela? - Vad är nytt? - Fönster Rundade hörn - Använd %1$s som ringsignal. %1$d valda - År - Du måste välja minst en kategori. You will be forwarded to the issue tracker website. - Dina kontodata används endast för verifiering. From e9465ad7a8dbeae8b5701f16d9247845cf34cf4c Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:18 +0530 Subject: [PATCH 0067/1603] New translations strings.xml (Turkish) --- app/src/main/res/values-tr-rTR/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 00c4e11c5..c31231d68 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -2,10 +2,8 @@ %s kadar Ekip, sosyal medya linkleri - Vurgu rengi Tema vurgu rengi, varsayılan olarak mor renktedir - Hakkında Favorilere ekle Oynatma kuyruğuna ekle @@ -48,32 +46,23 @@ Şarkı bilgilerini düzenle Favori değiştir Karışık Çal - Uyarlanabilir - Ekle "Oynatma listesine ekle" - "Kuyruğa 1 parça eklendi." %1$d şarkı kuyruğuna eklendi. - Albüm - Şarkı Şarkılar - Albüm sanatçısı - Albümler Albüm Albümler - Her zaman - Hey, şu havalı müzik çalara şuradan bir göz atmaya ne dersin: https://play.google.com/store/apps/details?id=%s Karıştır Sık oynatılan parçalar @@ -82,25 +71,16 @@ Retro müzik - Klasik Retro müzik - Küçük Retro müzik - Metin - Sanatçı - Sanatçılar - Ses odaklaması reddedildi. Ses ayarlarını değiştirin ve ekolayzır kontrollerini ayarlayın - Otomatik - Yaşam öyküsü - Sade Siyah - Kara Liste - Bulanıklık Bulanık kart - Bildiri gönderilemiyor Geçersiz erişim belirteci. Lütfen uygulama geliştiricisine başvurun. Seçilen depo için sorunlar etkin değil. Lütfen uygulama geliştiricisiyle iletişime geçin. @@ -114,55 +94,35 @@ Lütfen geçerli GitHub kullanıcı adınızı girin Beklenmedik bir hata oluştu. Bu hatayı bulduğunuz için üzgünüz, eğer durmadan hata veriyorsa \"Verileri Temizleyin\" ya da bir E-posta yollayın GitHub hesabını kullanarak gönder - Şimdi satın alın - İptal et - Kart Renkli Kart + Square Card Kart - Şimdi oynatılıyor ekranında atlıkarınca efekti - Basamaklı - Değişim kayıt günlüğü Sürümlerdeki değişiklik kayıtları Telegram üzerinde tutulmaktadır. - Çember - Dairesel - Klasik - Temizle Kara listeyi temizle Kuyruğu temizle - Renk - Renkler - Besteci - Cihaz bilgileri panoya kopyalandı. - Oynatma listesi oluşturulamadı\u2019. "Eşleşen albüm kapağı indirilemedi\u2019." Satın alma bulunamadı. %d dosyası taranamadı. - Oluştur - %1$s adında oynatma listesi oluşturuldu. - Üyeler ve katkıda bulunanlar - Şu anda %2$s şarkıcısından %1$s dinleniyor. - Koyu - Çalma listesini sil %1$s silinsin mi?]]> Çalma listelerini sil @@ -171,62 +131,38 @@ Şarkıları sil %1$d çalma listeleri silinsin mi?]]> %1$d parçaları silinsin mi?]]> - %1$d parça silindi. - Derinlik - Açıklama - Cihaz Bilgisi - Retro Müzik\'in ses ayarlarını değiştirmesine izin verin Zil sesini ayarla - Kara listeyi temizlemek istiyor musunuz? %1$s\'i kaldırmak istiyor musunuz?]]> - Bağış yapın Çalışmalarımın karşılığı olarak para hakettiğimi düşünüyorsanız bana biraz bahşiş bırakabilirsiniz - Bağışlayacağınız tutar: - + Done Sürüş modu - Boş - Ekolayzır - SSS - Favoriler - Son şarkıyı sonlandır - Uydur - Düz - Klasörler - Sistemi izle - Sizin için - Bedava - Dolu Dolu kart - Uygulamanın arayüzünü ve renklerini değiştirin Bak ve Hisset - Janr - Janrlar - Projeyi GitHub\'da çatalla - + Gradient 1 2 3 @@ -236,25 +172,20 @@ 7 8 Izgara şekli - + Need more help? Menteşe - Geçmiş - Ana sayfa - Yatay çevir - Görüntü Gradyan görüntü Şarkıcı resimlerinin indirme ayarlarını değiştirin - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. %2$s listesine %1$d parçalar eklendi. - Instagram\'da Retro Müzik temanızı paylaşın - Klavye - Bit Hızı Biçim Dosya adı @@ -263,45 +194,27 @@ %s\'dan daha fazla Örnekleme oranı Uzunluk - Etiketli - Son eklenen Son şarkı - Kütüphane kategorileri - Lisanslar - Açık Beyaz - Dinleyiciler - Dosyalar listeleniyor - Ürünler yükleniyor ... - Giriş - Şarkı sözleri - Hindistan\'da ❤️ ile yapıldı - Materyal - Hata İzin hatası - İsim Sık oynatılanlar - Asla - Yeni şarkı listesi %s yeni başlangıç dizini. - Sonraki Şarkı - Hiç albümünüz bulunmuyor Hiç sanatçınız bulunmuyor "Önce bir şarkı çal, sonra tekrar dene" @@ -313,57 +226,39 @@ Satın alma bulunamadı. Sonuç yok Hiç şarkınız bulunmuyor - Normal Normal şarkı sözleri - %s medya deposunda listelenmiyor.]]> - + Not recently played Aranacak herhangi bir şey yok. Hiçbir şey yok - Bildirim Bildirim stilini özelleştirin - Şimdi oynatılıyor Şimdi çalınıyor kuyruğu Şimdi oynatılıyor ekranını özelleştirin 9+ şimdi oynatılıyor teması - Sadece Wi-Fi\'da - Gelişmiş test özellikleri - Diğer - Şifre - Son 3 ay - Zirve - Harici depolama izni reddedildi. - + The app needs permission to access your device storage for playing music + Storage Access İzinler reddedildi. - Kişiselleştirme Şimdi çalıyor ve kullanıcı arayüzü kontrollerinizi özelleştirin - Yerel depolama alanından seç - Pinterest Retro Müzik tasarım ilhamı almak için Pinterest sayfasını takip edin - Sade - Oynatılıyor bildirimi, oynatma/duraklatma vb. için eylemler sağlar. Oynatılıyor bildirimi - Oynatma listesi boş Oynatma listesi ismi - Oynatma listeleri - Bulanıklık içeren arayüzler için bulanıklık tutarı, ne kadar azsa o kadar hızlı. Bulanıklık miktarı Şarkıları uzunluğa göre filtrele @@ -384,6 +279,7 @@ Ekranı açık tut Dil seçiniz Çalmakta olan şarkı albüm kapağını kilit ekranı duvar kağıdı olarak kullanın + Show Album Artists in the Artist category Sistem sesi çalındığında veya bir bildirim alındığında sesi kısın Kara listedeki klasörlerin içeriği kütüphanenizden gizlenir. Bluetooth cihazına bağlanır bağlanmaz çalmaya başla @@ -408,6 +304,7 @@ Yeni bir şarkı listesi çalınırken karıştırma modu kapanacak Eğer yeterli alan varsa ses kontrollerini şimdi oynatılıyor ekranında göster Albüm kapağını göster + Navigate by Album Artist Albüm kapağı teması Albüm kapağını atla Renkli uygulama kısayolları @@ -425,6 +322,7 @@ Şarkı bilgisi Boşluksuz playback Uygulama teması + Album grid Ana sayfa sanatçı ızgarası Ana sayfa afişi Media Store kapaklarını yoksay @@ -438,22 +336,15 @@ Otomatik oynatma Karıştır modu Ses kontrolleri - Pro Şimdi Oynatılıyor temaları, Atlıkarınca efekti, Renkli tema ve daha fazlası.. - Profil - Satın al - Kuyruk - Uygulamayı değerlendirin Bu uygulamayı beğendiniz mi? Nasıl daha iyi yapabileceğimiz konusunda lütfen Google Play Store\'da bize bildirin - Son albümler Son sanatçılar - Kaldır Kapağı kaldır Kara listeden kaldır @@ -461,25 +352,19 @@ %1$s adlı şarkı oynatma listesinden kaldırılsın mı?]]> Şarkıları oynatma listesinden kaldır %1$d adlı şarkılar oynatma listesinden kaldırılsın mı?]]> - Oynatma listesini yeniden adlandır - Sorun Bildir Hata bildir - Sıfırla Sanatçı resmini sıfırla - Geri yükle - Önceki satın alma işlemi geri yüklendi. Tüm özelliklerden yararlanmak için lütfen uygulamayı yeniden başlatın. Önceki satın almalar geri yüklendi. - Satın alım geri yükleniyor ... - Retro Müzik Çalar Retro Müzik Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone Dosya silme başarısız oldu: %s SAF url\'si alınamıyor. @@ -492,48 +377,32 @@ Herhangi bir alt klasörü açmayın Ekranın alt kısmındaki \'Seç\' düğmesine dokunun Dosya yazma başarısız oldu: %s - Kaydet Dosya olarak kaydet Dosya olarak kaydet - Oynatma listesi %s olarak kaydedildi. - Değişiklikler kaydediliyor - Medyayı tara - %1$d / %2$d dosya tarandı. - Gönderilen şarkı adları - Hepsini seç - Seçilmiş - Ayarla Sanatçı resmini ayarla - Uygulamayı paylaş + Share the app with your friends and family Hikayende paylaş - Karıştır - Basit - Uyku zamanlayıcısı iptal edildi. Uyku zamanlayıcısı %d dakikaya ayarlandı. - Sosyal Hikaye olarak paylaş - Şarkı Şarkı süresi - Şarkılar - Sıralama Ölçütü Yükselen Albüm @@ -541,93 +410,59 @@ Besteci Tarih eklendi Zaman ayarlandı + Song count + Song count desc Yıl Azalan - Üzgünüz, ancak cihazın konuşma girişini desteklemiyor. Kütüphanenizde arayın - Kümele - Müzik çalmayı başlat. - Öneriler - Destek geliştirme - Açmak için kaydırın - Senkronize şarkı sözleri - Telegram Hataları tartışmak, önerilerde bulunmak ve daha fazlası için Telegram grubuna katılın - Teşekkür ederiz! - Ses dosyası - Bu ay Bu hafta Bu yıl - Küçük Ufak kart - Şarkı adı - Bugün - En iyi albümler En iyi sanatçılar - "Parça (parça 2 için 2 veya CD3 parça 4 için 3004)" Parça numarası - Çevir Uygulamayı diline çevirmek için bize yardımcı ol. - Retro Müzik Premium\'u deneyin - Twitter Tasarımınızı Retro Müzik\'le paylaşın - Etiketsiz - Bu şarkı oynatılamadı\u2019. - Bir sonraki - Resmi güncelle - Güncelleniyor ... - + User Name Kullanıcı Adı - Sürüm - Dikey çevir - Ses - İnternette ara - Hoşgeldiniz, - Ne paylaşmak istiyorsunuz? - Yenilikler - Pencere Yuvarlatılmış kenarlar - %1$s\'i zil sesi olarak ayarla. %1$d seçildi - Yıl - En az bir kategori seçmek zorundasınız. Sorun izleyici web sitesine yönlendirileceksiniz. - Hesap verileriniz sadece kimlik doğrulama için kullanılır. From 96e365bbda892ff1dbb1a08d97a943601eea137d Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:19 +0530 Subject: [PATCH 0068/1603] New translations strings.xml (Ukrainian) --- app/src/main/res/values-uk-rUA/strings.xml | 203 ++------------------- 1 file changed, 19 insertions(+), 184 deletions(-) diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 183617bea..8174cad10 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -2,10 +2,8 @@ Про додаток %s Команда, посилання на соц. мережі - Акцентний колір Акцентний колір, за замовчуванням фіолетовий - Про додаток Додати в обране Додати до черги відтворення @@ -48,26 +46,19 @@ Редактор тегів Перемкнути улюблене Перемкнути режим змішування - Адаптивний - Додати "Додати до списку відтворення" - "Додано 1 композицію до черги відтворення." Додано %1$d композицій до черги відтворення. - Альбом - Пісня Пісні Пісні Пісні - Виконавець альбому - Альбоми Альбом @@ -75,9 +66,7 @@ Альбоми Альбоми - Завжди - Привіт, перегляньте цей крутий музичний плеєр за адресою: https://play.google.com/store/apps/details?id=%s Перемішати Кращі треки @@ -86,25 +75,16 @@ Ретро-музика - Класичний Ретро-музика - Малий Ретро-музика - Текст - Виконавець - Виконавці - В отриманні аудіофокусу відмовлено. Змінити налаштування звуку та налаштувати параметри еквалайзера - Автоматично - Життєпис - Чорний - Чорний список - Розмиття Розмита картка - Не вдалося надіслати звіт Недійсний токен доступу. Зв’яжіться з розробником додатка. Проблеми не включені для вибраного сховища. Зверніться до розробника програми. @@ -118,55 +98,35 @@ Введіть своє дійсне ім’я користувача GitHub Сталася неочікувана помилка. Вибачте, що натрапили на цю помилку, якщо вона постійно повторюється, спробуйте \"Очистити дані додатка\" або надішліть лист на ел. пошту Надіслати через обліковий запис GitHub - Придбайте вже - Відмінити - Картка Кольорова картка + Square Card Картка - Карусель на екрані відтворення - Каскад - Історія змін Журнал змін доступний у каналі Telegram - Коло - Круглий - Класичний - Очистити Очистити чорний список Очистити чергу - Колір - Кольори - Композитор - Скопійовано інформацію про пристрій у буфер обміну. - Не вдалося створити список відтворення. "Не вдалося завантажити відповідну обкладинку альбому." Не вдалося відновити покупку. Не вдалося просканувати %d файлів. - Створити - Створено список відтворення %1$s. - Учасники та меценати - Зараз грає %1$s від %2$s. - Майже темна - Видалити список відтворення %1$s?]]> Видалити списки відтворення @@ -175,62 +135,38 @@ Видалити пісні %1$d списки відтворення?]]> %1$d пісень?]]> - Видалено %1$d пісень. - Глибина - Опис - Інформація про пристрій - Дозволити Retro Music змінювати налаштування звуку Встановити як мелодію дзвінка - Ви хочете очистити чорний список? %1$s з чорного списку?]]> - Підтримати Якщо ви вважаєте, що я заслуговую на оплату своєї праці, ви можете залишити гроші тут - Купіть мені: - + Done Режим водія - Порожньо - Еквалайзер - ЧаП - Обране - Закінчити останню пісню - Вмістити - Плоский - Папки - Наслідувати систему - Для Вас - Безкоштовно - Повний Повна картка - Змінити тему і кольори додатку Вигляд - Жанр - Жанри - Розгалужити проект на GitHub - + Gradient 1 2 3 @@ -240,25 +176,20 @@ 7 8 Стиль сітки - + Need more help? Завіса - Історія - Домашня сторінка - Горизонтальне перевернення - Зображення Градієнтне зображення Змінити параметри завантаження зображення виконавця - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Додано %1$d пісень до списку відтворення %2$s. - Похизуйтеся вашими налаштуваннями Retro Music у Instagram - Клавіатура - Бітрейт Формат Назва файлу @@ -267,45 +198,27 @@ Більше від %s Частота дискретизації Довжина - З відміткою - Нещодавно додане Остання пісня - Категорії бібліотеки - Ліцензії - Яскраво-білий - Слухачі - Список файлів - Завантаження продуктів… - Логін - Текст - Зроблено з ❤ в Індії - Матеріал - Помилка Помилка дозволу - Назва Найчастіше відтворювані - Ніколи - Новий список відтворення %s є новим початковим каталогом. - Наступна пісня - Немає жодного альбому Немає жодного виконавця "Спочатку відтворіть пісню, а потім спробуйте ще раз." @@ -317,57 +230,39 @@ Покупки не знайдено. Немає результатів У вас немає пісень - Нормальний Стандартний текст - %s не вказано в медіа сховищі.]]> - + Not recently played Нічого сканувати. Порожньо - Сповіщення Налаштувати стиль сповіщення - Відтворюється зараз Зараз в черзі відтворення Налаштування екрану відтворення 9+ тем екрану відтворення - Лише через Wi-Fi - Розширені функції тестування - Інше - Пароль - Останні 3 місяці - Пік - Відмовлено у доступі до зовнішнього сховища. - + The app needs permission to access your device storage for playing music + Storage Access У доступі відмовлено. - Персоналізація Налаштуйте екран відтворення та зовнішній вигляд - Вибрати з локального сховища - Pinterest Слідкуйте за сторінкою Pinterest від Retro Music для натхнення дизайну - Звичайний - Сповіщення про відтворення надає дії для відтворення/паузи тощо. Сповіщення про відтворення - Список відтворення порожній Назва списку відтворення - Списки відтворення - Величина розмиття, що застосовується для розмиття тем, менше - швидше Величина розмиття Сортувати пісні за довжиною @@ -388,6 +283,7 @@ Не вимикати екран Обрати мову Використовувати обкладинку альбому пісні як шпалери екрана блокування + Show Album Artists in the Artist category Зменшення гучності при відтворенні системного звуку або сповіщення Вміст тек чорного списку приховано з вашої бібліотеки. Почати відтворення відразу при під\'єднанні до Bluetooth пристрою @@ -412,6 +308,7 @@ Випадковий режим вимкнеться при відтворенні нового списку пісень Якщо вистачає місця, показувати панель гучності на екрані відтворення Показати обкладинку альбому + Navigate by Album Artist Тема обкладинки альбому Пропустити обкладинку альбому Кольорові ярлики додатків @@ -429,6 +326,7 @@ Інформація про пісню Безперервне відтворення Тема додатку + Album grid Домашня сітка виконавця Головний банер Ігнорувати обкладинки з Медіасховища @@ -442,22 +340,15 @@ Автоматичне відтворення Режим перемішування Регулювання гучності - Pro Чорна тема, теми відтворення, ефект каруселі та інше.. - Профіль - Придбати - Черга - Оцініть додаток Подобається цей додаток? Напишіть відгук нам у Google Play Store, як ми можемо зробити його ще кращим - Останні альбоми Останні виконавці - Вилучити Видалити обкладинку Видалити з чорного списку @@ -465,25 +356,19 @@ %1$s зі списку відтворення?]]> Видалити пісні зі списку відтворення %1$d пісень зі списку відтворення?]]> - Перейменувати список відтворення - Повідомити про помилку Повідомити про помилку - Скинути Скинути зображення виконавця - Відновити - Відновлено попередню покупку. Перезапустіть додаток, щоб скористатися всіма функціями. Відновлені попередні покупки. - Відновлення покупки… - Retro Music плеєр Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone Помилка видалення файлу: %s Неможливо отримати URI SAF @@ -496,48 +381,32 @@ Не відкривайте вкладені папки Натисніть кнопку \"вибрати\" внизу екрана Не вдалося записати файл: %s - Зберегти Зберегти як файл Зберегти як файли - Збережено список відтворення в %s. - Збереження змін - Сканувати медіа - Проскановано %1$d з %2$d файлів. - Персоналізація - Виділити все - Обрано - Встановити Встановити зображення виконавця - Поділитися додатком + Share the app with your friends and family Поділитися в Історії - Перемішати - Простий - Таймер сну скасовано. Таймер сну спрацює за %d хвилин. - Соціальні мережі Поділитися історією - Пісня Тривалість пісні - Пісні - Порядок сортування За зростанням Альбом @@ -545,93 +414,59 @@ Композитор Дата додавання Дата змінення + Song count + Song count desc Рік За спаданням - Вибачте! Ваш пристрій не підтримує введення мови Пошук у бібліотеці - Стек - Почати програвати музику. - Пропозиції - Підтримати розробку - Свайпніть, щоб розблокувати - Синхронізовані тексти - Telegram Приєднуйтесь до групи Telegram щоб обговорити помилки, робити пропозиції та інше - Щиро дякую! - Аудіофайл - Цього місяця Цього тижня Цього року - Дрібний Крихітна картка - Назва - Сьогодні - Топ альбомів Топ виконавців - "Доріжка (2 для доріжки 2 або 3004 для CD3 доріжки 4)" Номер пісні - Перекласти Допоможіть нам перекласти додаток на вашу мову - Спробуйте Retro Music Преміум - Твіттер Поділіться своїм дизайном із Retro Music - Без позначки - Не можу відтворити пісню. - Наступне - Оновити зображення - Оновлення… - + User Name Ім\'я користувача - Версія додатку - Вертикальне сальто - Гучність - Пошук в інтернеті - Вітаємо вас, - Чим ви хочете поділитися? - Що нового - Вікно Закруглені кути - Встановити %1$s як мелодію дзвінка. %1$d обрано - Рік - Виберіть принаймні одну категорію. Вас буде перенаправлено на сайт відстеження проблем. - Дані вашого облікового запису використовуються лише для автентифікації. From 378a1176fc377fc9a16fd1db7bf8df052d0dd6ae Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 17:53:20 +0530 Subject: [PATCH 0069/1603] New translations strings.xml (Hawaiian) --- app/src/main/res/values-haw-rUS/strings.xml | 468 ++++++++++++++++++++ 1 file changed, 468 insertions(+) create mode 100644 app/src/main/res/values-haw-rUS/strings.xml diff --git a/app/src/main/res/values-haw-rUS/strings.xml b/app/src/main/res/values-haw-rUS/strings.xml new file mode 100644 index 000000000..84152f068 --- /dev/null +++ b/app/src/main/res/values-haw-rUS/strings.xml @@ -0,0 +1,468 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Changelog maintained on the Telegram channel + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + Volume + Web search + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + From 98d5afdcdb02e195e78e6df061aee0797eb8c3aa Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 18:02:39 +0530 Subject: [PATCH 0070/1603] New translations strings.xml (Hindi) --- app/src/main/res/values-hi-rIN/strings.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 1ba453fc1..826b7d30e 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -99,14 +99,14 @@ कार्ड Colored Card Square Card - Card + रेट्रो म्यूजिक - कार्ड Carousel effect on the now playing screen Cascading चेंजलाग साफ़ Circle Circular - Classic + रेट्रो म्यूजिक - क्लासिक साफ़ Clear blacklist Clear queue @@ -212,7 +212,7 @@ Name Most played Never - New playlist + नई प्लेलिस्ट %s is the new start directory. Next Song You have no albums @@ -266,7 +266,7 @@ Advanced Album style Audio - Blacklist + ब्लैकलिस्ट Controls Theme Images @@ -310,7 +310,7 @@ Colored app shortcuts Reduce volume on focus loss Auto-download artist images - Blacklist + ब्लैकलिस्ट Bluetooth playback Blur album cover Classic notification design @@ -394,7 +394,7 @@ Share app Share the app with your friends and family Share to Stories - Shuffle + शफ़ल Simple Sleep timer canceled. Sleep timer set for %d minutes from now. @@ -403,10 +403,10 @@ Song Song duration Songs - Sort order + क्रमबद्ध आदेश Ascending - Album - Artist + एल्बम + कलाकार Composer Date added Date modified From 123703e6e0063ef3d308d612e74672c8b3114f14 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 18:25:02 +0530 Subject: [PATCH 0071/1603] Update strings.xml --- app/src/main/res/values-my-rMM/strings.xml | 945 +++++++++++++-------- 1 file changed, 569 insertions(+), 376 deletions(-) diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index 107d2d644..28f825139 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -1,466 +1,659 @@ - + About %s - Team, social links - Accent color - The theme accent color, defaults to purple + အဖွဲ့နှင့် လူမှုကွန်ယက်လင့်ခ်များ + + Accent Color + The theme accent color (ခရမ်းရောင်သည်မူလအရောင်) + About - Add to favorites - Add to playing queue - Add to playlist - Clear playing queue + အကြိုက်ဆုံးသို့ထည့်မည် + နားထောင်နေသည့်စာရင်းထဲသို့ထည့်မည် + Playlist သို့ထည့်မည် + နားထောင်နေသည့်စာရင်းအားရှင်းမည် Cycle repeat mode - Delete - Delete from device - Details - Go to album - Go to artist - Go to genre - Go to start directory - Grant - Grid size - Grid size (land) - New playlist - Next - Play - Play all + ဖျက်မည် + Device မှဖျက်မည် + အသေးစိတ် + Album သို့သွားမည် + အဆိုတော်သို့သွားမည် + အမျိုးအစားသို့သွားမည် + Directory အစသို့သွားမည် + ခွင့်ပြုမည် + အကွက်အရွယ်အစား + အကွက်အရွယ်အစား (land) + Playlist အသစ် + နောက်တစ်ပုဒ် + Play မည် + အားလုံး play မည် Play next - Play/Pause - Previous - Remove from favorites - Remove from playing queue - Remove from playlist - Rename - Save playing queue - Scan - Search - Start - Set as ringtone - Set as start directory + Play/ခေတ္တရပ် + ယခင်အပုဒ် + အကြိုက်ဆုံးမှထုတ်မည် + နားထောင်နေသည့်စာရင်းမှထုတ်မည် + Playlist မှထုတ်မည် + နာမည်ပြင်မည် + နားထောင်နေသည့်စာရင်းအားသိမ်းမည် + စကန်ဖတ်မည် + ရှာမည် + စမည် + Ringtone အဖြစ်ထားမည် + Directory အစအဖြစ်ထားမည် "Settings" - Share - Shuffle all - Shuffle playlist - Sleep timer - Sort order - Tag editor + မျှဝေမည် + အားလုံး Shuffle play မည် + Playlist အား Shuffle play မည် + Sleep Timer + အထားအသိုပြင်မည် + Tag တည်းဖြတ်ခြင်း Toggle favorite Toggle shuffle mode + Adaptive - Add - "Add to playlist" - "Added 1 title to the playing queue." - Added %1$d titles to the playing queue. + + ထည့်မည် + "အောက်ပါ Playlist သို့ထည့်မည်" + + "နားထောင်နေသည့်စာရင်းထဲသို့ ၁ ပုဒ်ပေါင်းထည့်ခဲ့သည်" + နားထောင်နေသည့်စာရင်းထဲသို့ %1$d ပုဒ်ပေါင်းထည့်ခဲ့သည် + Album + - Songs + သီချင်း + သီချင်းများ - Album artist + + Album အားသီဆိုသူ + Albums + Album Albums + Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + + ဟေ့ အရမ်းမိုက်တဲ့ဒီ Music Player ကိုတစ်ချက်ကြည့်ကြည့်! https://play.google.com/store/apps/details?id=%s Shuffle - Top Tracks - Full Image - Card - Classic - Small - Minimal Text - Artist - Artists - Audio focus denied. - Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist + ထိပ်ဆုံးသီချင်းများ + ပုံအပြည့် + ကတ် + ရိုးရိုး + အသေး + စာပါဝင်မှုနည်း + + အဆိုတော် + + အဆိုတော်များ + + အသံအာရုံစိုက်ခြင်းအား ပယ်ဖျက်ခဲ့သည် + အသံ Settings များပြောင်းလဲရန်နှင့် Equalizer ချိန်ညှိရန် + + အလိုအလျောက် + + အတ္ထုပတ္တိ + + အနက်ရောင်သာ + + လစ်လျူရှုမည့်စာရင်း + Blur - Blur Card - Unable to send report - Invalid access token. Please contact the app developer. - Issues are not enabled for the selected repository. Please contact the app developer. - An unexpected error occurred. Please contact the app developer. - Wrong username or password - Issue - Send manually - Please enter an issue description - Please enter your valid GitHub password - Please enter an issue title - Please enter your valid GitHub username - An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email - Send using GitHub account - Buy now - Cancel - Card - Colored Card - Square Card - Card - Carousel effect on the now playing screen + ကတ်အဝါး + + သတင်းပို့၍မရနိုင်ပါ + မမှန်ကန်သော Access token ဖြစ်သည်။ ကျေးဇူးပြု၍ App ရေးသားသူအားဆက်သွယ်ပါ။ + ရွေးချယ်ထားသော Repository အတွက် Issue ဖွင့်ခွင့်မပေးထားပါ။ ကျေးဇူးပြု၍ App ရေးသားသူအားဆက်သွယ်ပါ။ + မသိထားသော Error တက်သွားခဲ့သည်။ ကျေးဇူးပြု၍ App ရေးသားသူအားဆက်သွယ်ပါ။ + Username (သို့မဟုတ်) Password မှားနေသည် + အကြောင်းအရာ + ကိုယ်တိုင်အသေးစိတ်သတင်းပို့မည် + ကျေးဇူးပြု၍ အကြောင်းအရာအသေးစိတ်ကိုဖြည့်သွင်းပါ + ကျေးဇူးပြု၍ မှန်ကန်သော Github password ကိုဖြည့်သွင်းပါ + ကျေးဇူးပြု၍အကြောင်းအရာခေါင်းစဉ်အားဖြည့်သွင်းပါ + ကျေးဇူးပြု၍ မှန်ကန်သော Github username ကိုဖြည့်သွင်းပါ + မသိထားတဲ့ Error တစ်ခုတက်ခဲ့တယ်ဆိုပါစို့။ ဆက်ပြီး Crash ဖြစ်နေတယ်ဆိုရင် \"Clear App Data\" လုပ်ပါ (ဒါမှမဟုတ်) အီးမေးလ်ပို့ပါ။ + GitHub အကောင့်ဖြင့်ပို့မည် + + ယခုဝယ်မည် + + ပယ်ဖျက်မည် + + ကတ် + အရောင်ပါသောကတ် + လေးထောင့်ကတ် + ကတ် + + Now Playing Screen ပေါ်တွင် Carousel effect + Cascading - Changelog - Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear - Clear blacklist - Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. - "Couldn\u2019t download a matching album cover." - Could not restore purchase. - Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist - %1$s?]]> - Delete playlists - Delete song - %1$s?]]> - Delete songs - %1$d playlists?]]> - %1$d songs?]]> - Deleted %1$d songs. + + ပြောင်းလဲမှုမှတ်တမ်း + Telegram channel ရှိ ပြောင်းလဲမှုမှတ်တမ်း + + အဝိုင်း + + အဝိုင်း + + ရိုးရိုး + + ရှင်းမည် + Blacklist အားရှင်းမည် + နားထောင်နေသည့်စာရင်းအားရှင်းမည် + + အရောင် + + အရောင်များ + + တေးရေးဆရာ + + Device အချက်အလက်အား Clipboard သို့ ကော်ပီကူးခဲ့ပြီး + + Playlist ဖန်တီး၍မရပါ + "ကိုက်ညီသော Album Cover ကို Download မလုပ်နိုင်ပါ" + ဝယ်ယူမှုကိုပြန်မရယူနိုင်ပါ + ဖိုင် %d ခုကိုစကန်မဖတ်နိုင်ပါ + + ဖန်တီးမည် + + ဖန်တီးထားသော Playlist %1$s ခု + + အဖွဲ့ဝင်များနှင့် ကူညီသူများ + + %2$s သီဆိုထားသော %1$s ကိုယခုနားထောင်နေသည် + + အနက်ရောင်ဆန်ဆန် + + Playlist ဖျက်ခြင်း + %1$s Playlist ကိုဖျက်မှာလား]]> + Playlist များဖျက်ခြင်း + သီချင်းဖျက်ခြင်း + %1$s? သီချင်းကိုဖျက်မှာလား]]> + သီချင်းများဖျက်ခြင်း + %1$d ခုကိုဖျက်မှာလား]]> + %1$d ပုဒ်ကိုဖျက်မှာလား]]> + + သီချင်း %1$d ပုဒ်ကိုဖျက်ပစ်ခဲ့သည် + Depth - Description - Device info - Allow Retro Music to modify audio settings - Set ringtone - Do you want to clear the blacklist? - %1$s from the blacklist?]]> - Donate - If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - Done + + အကြောင်းအရာအသေးစိတ် + + Device အချက်အလက် + + အသံ Settings ပြုပြင်ရန် Retro Music ကိုခွင့်ပြုချက်ပေးပါ + Ringtone ထားခြင်း + + Blacklist ကိုရှင်းလင်းလိုပါသလား + %1$s ကိုဖယ်ရှားလိုပါသလား]]> + + လှူဒါန်းမည် + ကျွန်တော့်ရဲ့လက်ရာအတွက် မုန့်ဖိုးရဖို့ထိုက်တန်တယ်လို့ထင်ရင် ဒီမှာပေးသွားလိုက်ပါ။ + + ဝယ်ပေးမယ်: + + ပြီးပြီ + Drive mode - Empty + + ဘာမှမရှိပါ + Equalizer - FAQ - Favorites + + မေးလေ့ရှိသောမေးခွန်းများ + + အကြိုက်ဆုံး + Finish last song - Fit - Flat + + အနေတော် + + အပြားပုံစံ + Folders - Follow system - For you - Free - Full - Full card - Change the theme and colors of the app - Look and feel - Genre - Genres - Fork the project on GitHub + + System အတိုင်း + + သင့်အတွက် + + အခမဲ့ + + အပြည့် + ကတ်အပြည့်ပုံစံ + + App Theme နှင့် အရောင်များကိုပြောင်းလဲရန် + Look and Feel + + အမျိုးအစား + + အမျိုးအစားများ + + Project ကို GitHub မှာ Fork လုပ်ပါ + Gradient - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - Grid style - Need more help? + + + + + + + + + + အကွက်စတိုင် + + အကူအညီထပ်လိုပါသေးလား + Hinge - History - Home - Horizontal flip - Image - Gradient image - Change artist image download settings + + မှတ်တမ်း + + မူလ + + ရေပြင်ညီအတိုင်းဟိုဘက်ဒီဘက်လှန်ခြင်း + + ဓာတ်ပုံ + Gradient ပုံ + အဆိုတော်ပုံအား ဒေါင်းလုဒ်ဆွဲခြင်း Settings များ + Import Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. - Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard + Android မီဒီယာစတိုးမှ Playlist များကိုသီချင်းများနှင့်အတူ import လုပ်သွားမည်ဖြစ်ပြီး ရှိပြီးသား Playlist ဖြစ်ပါကသီချင်းများကိုထည့်ပေါင်းသွားပါမည်။ + + Playlist %2$s သို့သီချင်း %1$d ပုဒ်ထည့်ပြီးပါပြီ + + Instagram + သင့်ရဲ့ Retro Music setup ကို Instagram တွင်ပြသလိုက်ပါ + + ကီးဘုတ် + Bitrate - Format - File name - File path - Size - More from %s + အမျိုးအစား + ဖိုင်နာမည် + ဖိုင်နေရာ + အရွယ်အစား + %s ၏နောက်ထပ် Album များ Sampling rate - Length - Labeled - Last added - Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… + ကြာချိန် + + Label ထိုးထားမည် + + နောက်ဆုံးသွင်းထားသော + နောက်ဆုံးအပုဒ် + + Tab အမျိုးအစားများ + + လိုင်စင်များ + + အဖြူရောင်သက်သက် + + နားဆင်သူများ + + ဖိုင်ပြန်စီနေသည်... + + ခဏစောင့်ပါ... + Login - Lyrics - Made with ❤️ in India + + သီချင်းစာသား + + အိန္ဒိယနိုင်ငံတွင် ❤️ များဖြင့် ဖန်တီးသည် + Material + Error - Permission error - Name - Most played - Never - New playlist - %s is the new start directory. - Next Song - You have no albums - You have no artists - "Play a song first, then try again." - No equalizer found - You have no genres - No lyrics found - No songs playing - You have no playlists - No purchase found. - No results - You have no songs - Normal - Normal lyrics - %s is not listed in the media store.]]> - Not recently played - Nothing to scan. - Nothing to see + Storage ခွင့်ပြုချက် error + + နာမည် + အများဆုံးနားထောင်ခဲ့သော + + ဘယ်တော့မှ + + Playlist အသစ် + %s ဟာ Directory အစဖြစ်သွားပါပြီ + + နောက်တစ်ပုဒ် + + Album တစ်ခုမှမရှိပါ + အဆိုတော်တစ်ယောက်မှမရှိပါ + "သီချင်းတစ်ပုဒ်အရင် play ကြည့်ပြီးမှ ပြန်ကြိုးစားပါ" + Equalizer တစ်ခုမှရှာမတွေ့ပါ + အမျိုးအစားခွဲစရာတစ်ခုမှမရှိပါ + သီချင်းစာသားရှာမတွေ့ပါ + သီချင်းတစ်ပုဒ်မှ play မထားပါ + Playlist တစ်ခုမှမရှိပါ + ဝယ်ယူထားမှုမရှိပါ + ရှာမတွေ့ပါ + သီချင်းတစ်ပုဒ်မှမရှိပါ + + ပုံမှန် + ပုံမှန်သီချင်းစာသား + + %s သည် Android မီဒီယာစတိုးတွင် မရှိပါ]]> + မကြာသေးခင်က play မထားပါ + + စကန်ဖတ်စရာမရှိပါ + ကြည့်စရာတစ်ခုမှမရှိပါ + Notification - Customize the notification style + Notification ပုံစံကို စိတ်ကြိုက်ပြင်ဆင်မည် + Now playing Now playing queue - Customize the now playing screen - 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other + Now playing screen ကိုစိတ်ကြိုက်ပြင်ခြင်း + Now playing theme (၉) ခုအထက် ရရှိခြင်း + + Wi-Fi ဖြင့်သာ + + အဆင့်မြင့် Settings များ + + အခြား + Password - Past 3 months - Peak - Permission to access external storage denied. - The app needs permission to access your device storage for playing music - Storage Access - Permissions denied. - Personalize - Customize your now playing and UI controls - Pick from local storage + + လွန်ခဲ့သော (၃)လ + + Peak ပုံစံ + + External Storage ကြည့်ရှုခွင့်အားငြင်းပယ်ခဲ့သည်။ + သီချင်းဖွင့်ရန်အတွက် ယခု App အား Storage ကြည့်ရှုခွင့်ပေးရန်လိုသည်။ + Storage ကြည့်ရှုခွင့် + + ခွင့်ပြုချက်ငြင်းပယ်ခံရသည် + + မိမိစိတ်ကြိုက် + Now Playing နှင့် UI controls များကိုစိတ်ကြိုက်ပြင်ဆင်မည် + + Local Storage မှ ရွေးမည် + Pinterest - Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. + Retro Music ဒီဇိုင်းအကြံဉာဏ်ကောင်းများအတွက် Pinterest page ကို follow ပါ + + ရှင်းရှင်းလင်းလင်းပုံစံ + + Playing notification သည် play/pause ခလုတ် စသည့်တို့ကိုဖော်ပြပေးသည် Playing notification - Playlist is empty - Playlist name + + Playlist တွင်ဘာမှမရှိပါ + Playlist နာမည် + Playlists - Amount of blur applied for blur themes, lower is faster - Blur amount - Filter songs by length - Filter song duration - Advanced - Album style - Audio + + Blur Themes များအတွက်သက်ရောက်သော အဝါးပမာဏဖြစ်ပြီး ပမာဏနည်းလေ ပိုမြန်လေဖြစ်သည် + အဝါးပမာဏ + ကြာချိန်ဖြင့်သီချင်းစစ်ထုတ်မည် + သီချင်းကြာချိန်စစ်ထုတ်ခြင်း + ပိုမိုဆန်းသစ်သော + Album စတိုင် + အသံပိုင်းဆိုင်ရာ Blacklist - Controls + ထိန်းချုပ်မှုဆိုင်ရာ Theme Images Library Lockscreen Playlists - Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app - Pause on zero - Keep in mind that enabling this feature may affect battery life - Keep the screen on - Select language - Use the currently playing song album cover as the lockscreen wallpaper - Show Album Artists in the Artist category - Lower the volume when a system sound is played or a notification is received - The content of blacklisted folders is hidden from your library. - Start playing as soon as connected to bluetooth device - Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets - Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work - Use the classic notification design - The background and control button colors change according to the album art from the now playing screen - Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect - "Colors the notification in the album cover\u2019s vibrant color" - As per Material Design guide lines in dark mode colors should be desaturated - Clicking on the notification will show now playing screen instead of the home screen - Add extra controls for mini player - Show extra Song information, such as file format, bitrate and frequency - "Can cause playback issues on some devices." - Show or hide the home banner - Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks - Configure visibility and order of library categories. - Use Retro Music\'s custom lockscreen controls - License details for open source software + Volume သုညရောက်သွားပါက သီချင်းရပ်ပြီး Volume ပြန်ကျယ်လာသည့်အခါ ပြန် play မည်ဖြစ်သည်။ App ထဲဝင်မထားသော်လည်းအလုပ်လုပ်သည်။ + သုည၌ရပ်ခြင်း + ဤ feature ဖွင့်ထားပါက ဘက်ထရီသက်တမ်းထိခိုက်နိုင်ပါသည် + Screen တစ်ချိန်လုံးဖွင့်ထားမည် + ဘာသာစကားရွေးချယ်မည် + ယခု play နေသောသီချင်း Album cover ပုံအား Lockscreen wallpaper အဖြစ်ထားမည် + Album သီဆိုသူများကိုလည်း အဆိုတော် Category တွင်ထားမည် + System Sound (သို့) Notification တစ်ခုရောက်လာသည့်အခါ သီချင်းအသံကိုတိုးမည် + Blacklist folder သိို့သွင်းထားသည်များကို Library တွင်မြင်ရမည်မဟုတ်ပါ + Bluetooth device နှင့်ချိတ်ဆက်လိုက်သည်နှင့် သီချင်းစဖွင့်မည် + Lockscreen တွင် Album cover ပုံကိုဝါးထားမည်။ Third-party app နှင့် Widget များတွင် ပြဿနာတက်နိုင်သည်။ + Now Playing screen မှ Album cover အတွက် Carousel effect ဖြစ်သည်။ ဤ effect ကြောင့် ကတ်နှင့် ကတ်အဝါး Theme များအလုပ်လုပ်မည်မဟုတ်ပါ။ + Android ၏ Notification ဒီဇိုင်းအဟောင်းကိုသုံးမည် + နောက်ခံအရောင်နှင့်ထိန်းချုပ်ခလုတ်အရောင်များသည် Now Playing screen မှ Album cover အရောင်အတိုင်း ပြောင်းလဲပါမည် + Accent color မှ App shortcuts များကိုအရောင်ပြောင်းလဲသည်။ Accent color ပြောင်းသည့်အခါတိုင်း App ကိုသက်ရောက်မှုရှိစေရန် ဤခလုတ်ကိုအဖွင့်၊အပိတ်လုပ်ပေးပါ။ + "Notification အရောင်ကို Album cover မှထင်ရှားသည့်အရောင်အတိုင်း ပြောင်းမည်" + Material ဒီဇိုင်းညွှန်ကြားချက်များအရ Dark Mode ဖွင့်ထားချိန်တွင်အရောင်များမှိန်နေသင့်သည် + Notification ကိုနှိပ်သည့်အခါ Home screen သို့ရောက်မည့်အစား Now Playing screen သို့တိုက်ရိုက်ရောက်သွားမည် + Mini player တွင် ထိန်းချုပ်ခလုတ်အပိုများထပ်ပေါင်းမည် + သီချင်းဖိုင်၏အသေးစိတ်အချက်အလက်များ ပြသမည်၊ ဥပမာ - ဖိုင်အမျိုးအစား၊ bitrate နှင့် ကြိမ်နှုန်း + "အချို့ device များတွင် playback ပြဿနာများဖြစ်ပေါ်နိုင်သည်" + Home banner အား ပြသခြင်း၊ ဖျောက်ထားခြင်း + Album cover အရည်အသွေးပိုမိုကောင်းမွန်လာနိုင်သော်လည်း Loading time ပိုကြာနိုင်သည်။ အရည်အသွေးနိမ့်သောပုံများနှင့်အဆင်မပြေမှသာလျှင် ဤခလုတ်ကိုဖွင့်ပါ။ + Library category များ ဖော်ခြင်း၊ ဖျောက်ခြင်းနှင့် အထားအသိုများ ချိန်ညှိမည် + Retro Music ၏ ပြင်ဆင်ထားသော Lockscreen controls များကိုသုံးမည် + Open Source software အတွက် လိုင်စင်အချက်အလက်များ Immersive mode - Start playing immediately after headphones are connected - Shuffle mode will turn off when playing a new list of songs - If enough space is available, show volume controls in the now playing screen - Show album cover - Navigate by Album Artist + နားကြပ်နှင့်ချိတ်ဆက်ပြီးသည့်နှင့် စတင် play မည် + သီချင်းဖွင့်မည့်စာရင်း\'အသစ်\'ကို play သည့်အခါ Shuffle Mode ပိတ်သွားပါမည် + နေရာလုံလုံလောက်လောက်ရှိပါက Now Playing screen တွင် အသံအတိုးအကျယ်ခလုတ်များပြသမည် + Album cover ပြသခြင်း + Album သီဆိုသူဖြင့် ရှာဖွေခြင်း Album cover theme Album cover skip - Colored app shortcuts + Colored App shortcuts Reduce volume on focus loss - Auto-download artist images + အဆိုတော်ဓာတ်ပုံများကို အလိုအလျောက်ဒေါင်းလုဒ်ဆွဲခြင်း Blacklist Bluetooth playback - Blur album cover - Classic notification design + Album cover အဝါး + Notification ဒီဇိုင်းအဟောင်း Adaptive color - Colored notification + အရောင်ပါသော notification Desaturated color - Show now playing screen - Extra controls - Song info - Gapless playback + Now Playing screen ပြသခြင်း + အပိုထိန်းချုပ်မှုများ + သီချင်းဖိုင်အချက်အလက် + လစ်ဟာမှုမရှိ play ခြင်း App theme - Album grid - Artist grid + Album အကွက်ပုံစံ + အဆိုတော်အကွက်ပုံစံ Banner - Ignore Media Store covers - Last added playlist interval - Fullscreen controls + Media Store covers များကိုလျစ်လျူရှုခြင်း + နောက်ဆုံးသွင်းထားသော playlist ရှိသီချင်းများ + Lockscreen အပြည့် controls Now playing theme Open source licences - Tab titles mode + Tab ခေါင်းစဉ်ပြသခြင်း Carousel effect - Fullscreen app - Auto-play + App ကို screen အပြည့်ထားမည် + အလိုအလျောက် play ခြင်း Shuffle mode - Volume controls + အသံထိန်းချုပ်မှု + Pro - Black theme, Now playing themes, Carousel effect and more.. + Black theme ၊ Now playing themes နှင့် Carousel effect စသည်များ... + Profile - Purchase - Playing Queue - Rate the app - Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums - Recent artists - Remove - Remove cover - Remove from blacklist - Remove song from playlist - %1$s from the playlist?]]> - Remove songs from playlist - %1$d songs from the playlist?]]> - Rename playlist - Report an issue - Report bug + + ဝယ်ယူမည် + + နားထောင်နေသည့်စာရင်း + + ဤ app ကို star ပေးမည် + App ကိုကြိုက်ပါသလား။ ယခုထက်ပိုကောင်းမွန်အောင်ဘယ်လိုလုပ်ရမလဲဆိုတာ ကျွန်တော်တို့ကို Google Play Store မှာပြောပြပေးပါ။ + + မကြာသေးခင်ကနားထောင်ထားသော Album များ + မကြာသေးခင်ကနားထောင်ထားသော အဆိုတော်များ + + ပယ်ဖျက်မည် + Cover ကိုဖျက်မည် + Blacklist မှဖျက်မည် + Playlist မှဖျက်မည် + %1$s ကို Playlist ကဖျက်မှာလား]]> + Playlist မှသီချင်းများဖျက်ခြင်း + %1$d ပုဒ်ကို playlist ကဖျက်မှာလား]]> + + Playlist နာမည်ပြင်မည် + + ပြဿနာတစ်ခုသတင်းပို့မည် + Bug report တင်မည် + Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. - Restored previous purchases. - Restoring purchase… + + ပြန်လည်ရယူမည် + + ယခင်ဝယ်ယူမှုကို ပြန်လည်ရယူပြီးပါပြီ။ Feature အားလုံးအလုပ်လုပ်ရန် app မှထွက်ပြီးပြန်ဝင်ပါ။ + ယခင်ဝယ်ယူမှုအား ပြန်လည်ရယူပြီးပါပြီ + + ယခင်ဝယ်ယူမှုအား ပြန်လည်ရယူနေသည်... + Retro Music Player Retro Music Pro - The app needs permission to access your device settings in order to set music as Ringtone + + သီချင်းများကို Ringtone ထားရန် app အား System Settings များကိုပြင်ဆင်ခွင့်ပေးရန်လိုသည်။ Ringtone - File delete failed: %s + + ဖိုင်ဖျက်ခြင်းမအောင်မြင်ပါ: %s - Can\'t get SAF URI - Open navigation drawer - Enable \'Show SD card\' in overflow menu + SAF URI ကိုမရယူနိုင်ပါ + Navigation drawer ကိုဖွင့်ပါ + Overflow Menu မှ \'Show SD card\' ကိုနှိပ်ပါ - %s needs SD card access - You need to select your SD card root directory - Select your SD card in navigation drawer - Do not open any sub-folders - Tap \'select\' button at the bottom of the screen - File write failed: %s - Save + %s သည် SD card ကြည့်ရှုခွင့်လိုအပ်သည် + SD card ၏ ထိပ်ဆုံး Directory ကိုရွေးပေးရန်လိုအပ်သည် + Navigation drawer တွင် SD card ကိုရွေးချယ်ပါ + Folder အခွဲများကို မဖွင့်ပါနှင့် + Screen ၏အောက်ဆုံးတွင်ရှိသော \'select\' ခလုတ်ကိုနှိပ်ပါ + ဖိုင်ပြုပြင်ခြင်းမအောင်မြင်ပါ: %s + + မှတ်ထားမည် - Save as file - Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. + ဖိုင်အဖြစ်သိမ်းမည် + ဖိုင်များအဖြစ်သိမ်းမည် + + %s တွင် playlist ကိုသိမ်းခဲ့သည် + + ပြောင်းလဲမှုများကိုမှတ်သားနေသည် + + မီဒီယာစကန်ဖတ်မည် + + ဖိုင် %2$d ခုအနက် %1$d ခုကို စကန်ဖတ်ပြီးပါပြီ + Scrobbles - Select all - Selected - Set - Set artist image - Share app - Share the app with your friends and family - Share to Stories + + အားလုံးရွေးမည် + + ရွေးချယ်ထားသော + + ထားမည် + အဆိုတော်ပုံအဖြစ်ထားမည် + + App ကိုမျှဝေမည် + သင့်မိသားစုနှင့် သူငယ်ချင်းများကိုပြန်လည်မျှဝေလိုက်ပါ + Stories သို့မျှဝေမည် + Shuffle - Simple - Sleep timer canceled. - Sleep timer set for %d minutes from now. + + ရိုးရိုးရှင်းရှင်း + + Sleep timer ကိုဖျက်ပြီးပါပြီ + ယခုမှစတင်၍ Sleep timer ကို %d မိနစ်အချိန်မှတ်ပြီးပါပြီ + Social - Share story - Song - Song duration - Songs - Sort order - Ascending + Story မျှဝေမည် + + သီချင်း + သီချင်းကြာချိန် + + သီချင်းများ + + အထားအသိုပြင်မည် + ငယ်ရာမှကြီးရာ Album - Artist - Composer - Date added - Date modified - Song count - Song count desc - Year - Descending - Sorry! Your device doesn\'t support speech input - Search your library + အဆိုတော် + တေးရေးဆရာ + ထည့်သွင်းသည့်ရက် + ပြင်ဆင်သည့်ရက် + အပုဒ်အရေအတွက် + အပုဒ်အရေအတွက်ပြောင်းပြန် + ထွက်ရှိသည့်နှစ် + ကြီးရာမှငယ်ရာ + + ဆောရီး! သင့် device သည် အသံဖြင့်ပြောဆိုခြင်းအား အထောက်အပံ့မပေးထားပါ + သင့် Library တွင်ရှာဖွေခြင်း + Stack - Start playing music. - Suggestions + + သီချင်းစတင် play ပါပြီ + + အကြံပြုထားသောသီချင်းများ + Support development + Swipe to unlock - Synced lyrics + + ချိန်ကိုက်ထားသောသီချင်းစာသား + Telegram - Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month - This week - This year + Bugs များကို ဆွေးနွေးရန်၊ အကြံပြုချက်များပေးရန်၊ ကြွားရန်နှင့် စသည်များ... + + ကျေးဇူးတင်ပါတယ် + + အသံဖိုင် + + ယခုလ + ယခုအပတ် + ယခုနှစ် + Tiny Tiny card - Title - Today - Top albums - Top artists + + နာမည် + + ယနေ့ + + ထိပ်ဆုံး Album များ + ထိပ်ဆုံးအဆိုတော်များ + "Track (2 for track 2 or 3004 for CD3 track 4)" - Track number - Translate - Help us translate the app to your language - Try Retro Music Premium + အပုဒ်နံပါတ် + + ဘာသာပြန်ခြင်း + App ကိုသင့်ဘာသာစကားသို့ ကူပြန်ပေးပါ + + Retro Music Premium ကိုစမ်းကြည့်ပါ + Twitter - Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next + သင့် Retro Music ဒီဇိုင်းများကိုမျှဝေပါ + + Label မထိုးပါ + + ဤသီချင်းကို မ play နိုင်ပါ + + လာမည့်အပုဒ် + Update image - Updating… - User Name - Username + + အပ်ဒိတ်လုပ်နေသည်… + + သုံးစွဲသူ + + သုံးစွဲသူအမည် + Version - Vertical flip - Volume + + ဒေါင်လိုက်ဟိုဘက်ဒီဘက်လှန်ခြင်း + + အသံအတိုးအကျယ် + Web search - Welcome, - What do you want to share? - What\'s New + + မင်္ဂလာပါ + + ဘာများမျှဝေချင်ပါသလဲ + + ဘာအသစ်တွေရှိလဲ + Window - Rounded corners - Set %1$s as your ringtone. - %1$d selected - Year - You have to select at least one category. - You will be forwarded to the issue tracker website. - Your account data is only used for authentication. + အနားအကွေးပုံစံ + + %1$s ကို Ringtone အဖြစ်ထားပြီးပါပြီ + %1$d ခုကိုရွေးထားသည် + + ထွက်ရှိသည့်နှစ် + + အနည်းဆုံး category တစ်ခုရွေးချယ်ရန်လိုအပ်သည် + Issue tracker website သို့ခေါ်ဆောင်သွားပါမည် + + သင့်အကောင့်အချက်အလက်ကို အတည်ပြုရန်အတွက်သာအသုံးပြုပါသည်။ From 2f74cb79a3e8b507b8e39a09e9978f598012d331 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 18:25:21 +0530 Subject: [PATCH 0072/1603] Delete app/src/main/res/values-my directory --- app/src/main/res/values-my/strings.xml | 659 ------------------------- 1 file changed, 659 deletions(-) delete mode 100644 app/src/main/res/values-my/strings.xml diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml deleted file mode 100644 index 776cc1fe4..000000000 --- a/app/src/main/res/values-my/strings.xml +++ /dev/null @@ -1,659 +0,0 @@ - - - About %s - အဖွဲ့နှင့် လူမှုကွန်ယက်လင့်ခ်များ - - Accent Color - The theme accent color (ခရမ်းရောင်သည်မူလအရောင်) - - About - အကြိုက်ဆုံးသို့ထည့်မည် - နားထောင်နေသည့်စာရင်းထဲသို့ထည့်မည် - Playlist သို့ထည့်မည် - နားထောင်နေသည့်စာရင်းအားရှင်းမည် - Cycle repeat mode - ဖျက်မည် - Device မှဖျက်မည် - အသေးစိတ် - Album သို့သွားမည် - အဆိုတော်သို့သွားမည် - အမျိုးအစားသို့သွားမည် - Directory အစသို့သွားမည် - ခွင့်ပြုမည် - အကွက်အရွယ်အစား - အကွက်အရွယ်အစား (land) - Playlist အသစ် - နောက်တစ်ပုဒ် - Play မည် - အားလုံး play မည် - Play next - Play/ခေတ္တရပ် - ယခင်အပုဒ် - အကြိုက်ဆုံးမှထုတ်မည် - နားထောင်နေသည့်စာရင်းမှထုတ်မည် - Playlist မှထုတ်မည် - နာမည်ပြင်မည် - နားထောင်နေသည့်စာရင်းအားသိမ်းမည် - စကန်ဖတ်မည် - ရှာမည် - စမည် - Ringtone အဖြစ်ထားမည် - Directory အစအဖြစ်ထားမည် - "Settings" - မျှဝေမည် - အားလုံး Shuffle play မည် - Playlist အား Shuffle play မည် - Sleep Timer - အထားအသိုပြင်မည် - Tag တည်းဖြတ်ခြင်း - Toggle favorite - Toggle shuffle mode - - Adaptive - - ထည့်မည် - "အောက်ပါ Playlist သို့ထည့်မည်" - - "နားထောင်နေသည့်စာရင်းထဲသို့ ၁ ပုဒ်ပေါင်းထည့်ခဲ့သည်" - နားထောင်နေသည့်စာရင်းထဲသို့ %1$d ပုဒ်ပေါင်းထည့်ခဲ့သည် - - Album - - - သီချင်း - သီချင်းများ - - - Album အားသီဆိုသူ - - Albums - - Album - Albums - - - Always - - ဟေ့ အရမ်းမိုက်တဲ့ဒီ Music Player ကိုတစ်ချက်ကြည့်ကြည့်! https://play.google.com/store/apps/details?id=%s - Shuffle - ထိပ်ဆုံးသီချင်းများ - ပုံအပြည့် - ကတ် - ရိုးရိုး - အသေး - စာပါဝင်မှုနည်း - - အဆိုတော် - - အဆိုတော်များ - - အသံအာရုံစိုက်ခြင်းအား ပယ်ဖျက်ခဲ့သည် - အသံ Settings များပြောင်းလဲရန်နှင့် Equalizer ချိန်ညှိရန် - - အလိုအလျောက် - - အတ္ထုပတ္တိ - - အနက်ရောင်သာ - - လစ်လျူရှုမည့်စာရင်း - - Blur - ကတ်အဝါး - - သတင်းပို့၍မရနိုင်ပါ - မမှန်ကန်သော Access token ဖြစ်သည်။ ကျေးဇူးပြု၍ App ရေးသားသူအားဆက်သွယ်ပါ။ - ရွေးချယ်ထားသော Repository အတွက် Issue ဖွင့်ခွင့်မပေးထားပါ။ ကျေးဇူးပြု၍ App ရေးသားသူအားဆက်သွယ်ပါ။ - မသိထားသော Error တက်သွားခဲ့သည်။ ကျေးဇူးပြု၍ App ရေးသားသူအားဆက်သွယ်ပါ။ - Username (သို့မဟုတ်) Password မှားနေသည် - အကြောင်းအရာ - ကိုယ်တိုင်အသေးစိတ်သတင်းပို့မည် - ကျေးဇူးပြု၍ အကြောင်းအရာအသေးစိတ်ကိုဖြည့်သွင်းပါ - ကျေးဇူးပြု၍ မှန်ကန်သော Github password ကိုဖြည့်သွင်းပါ - ကျေးဇူးပြု၍အကြောင်းအရာခေါင်းစဉ်အားဖြည့်သွင်းပါ - ကျေးဇူးပြု၍ မှန်ကန်သော Github username ကိုဖြည့်သွင်းပါ - မသိထားတဲ့ Error တစ်ခုတက်ခဲ့တယ်ဆိုပါစို့။ ဆက်ပြီး Crash ဖြစ်နေတယ်ဆိုရင် \"Clear App Data\" လုပ်ပါ (ဒါမှမဟုတ်) အီးမေးလ်ပို့ပါ။ - GitHub အကောင့်ဖြင့်ပို့မည် - - ယခုဝယ်မည် - - ပယ်ဖျက်မည် - - ကတ် - အရောင်ပါသောကတ် - လေးထောင့်ကတ် - ကတ် - - Now Playing Screen ပေါ်တွင် Carousel effect - - Cascading - - ပြောင်းလဲမှုမှတ်တမ်း - Telegram channel ရှိ ပြောင်းလဲမှုမှတ်တမ်း - - အဝိုင်း - - အဝိုင်း - - ရိုးရိုး - - ရှင်းမည် - Blacklist အားရှင်းမည် - နားထောင်နေသည့်စာရင်းအားရှင်းမည် - - အရောင် - - အရောင်များ - - တေးရေးဆရာ - - Device အချက်အလက်အား Clipboard သို့ ကော်ပီကူးခဲ့ပြီး - - Playlist ဖန်တီး၍မရပါ - "ကိုက်ညီသော Album Cover ကို Download မလုပ်နိုင်ပါ" - ဝယ်ယူမှုကိုပြန်မရယူနိုင်ပါ - ဖိုင် %d ခုကိုစကန်မဖတ်နိုင်ပါ - - ဖန်တီးမည် - - ဖန်တီးထားသော Playlist %1$s ခု - - အဖွဲ့ဝင်များနှင့် ကူညီသူများ - - %2$s သီဆိုထားသော %1$s ကိုယခုနားထောင်နေသည် - - အနက်ရောင်ဆန်ဆန် - - Playlist ဖျက်ခြင်း - %1$s Playlist ကိုဖျက်မှာလား]]> - Playlist များဖျက်ခြင်း - သီချင်းဖျက်ခြင်း - %1$s? သီချင်းကိုဖျက်မှာလား]]> - သီချင်းများဖျက်ခြင်း - %1$d ခုကိုဖျက်မှာလား]]> - %1$d ပုဒ်ကိုဖျက်မှာလား]]> - - သီချင်း %1$d ပုဒ်ကိုဖျက်ပစ်ခဲ့သည် - - Depth - - အကြောင်းအရာအသေးစိတ် - - Device အချက်အလက် - - အသံ Settings ပြုပြင်ရန် Retro Music ကိုခွင့်ပြုချက်ပေးပါ - Ringtone ထားခြင်း - - Blacklist ကိုရှင်းလင်းလိုပါသလား - %1$s ကိုဖယ်ရှားလိုပါသလား]]> - - လှူဒါန်းမည် - ကျွန်တော့်ရဲ့လက်ရာအတွက် မုန့်ဖိုးရဖို့ထိုက်တန်တယ်လို့ထင်ရင် ဒီမှာပေးသွားလိုက်ပါ။ - - ဝယ်ပေးမယ်: - - ပြီးပြီ - - Drive mode - - ဘာမှမရှိပါ - - Equalizer - - မေးလေ့ရှိသောမေးခွန်းများ - - အကြိုက်ဆုံး - - Finish last song - - အနေတော် - - အပြားပုံစံ - - Folders - - System အတိုင်း - - သင့်အတွက် - - အခမဲ့ - - အပြည့် - ကတ်အပြည့်ပုံစံ - - App Theme နှင့် အရောင်များကိုပြောင်းလဲရန် - Look and Feel - - အမျိုးအစား - - အမျိုးအစားများ - - Project ကို GitHub မှာ Fork လုပ်ပါ - - Gradient - - - - - - - - - - အကွက်စတိုင် - - အကူအညီထပ်လိုပါသေးလား - - Hinge - - မှတ်တမ်း - - မူလ - - ရေပြင်ညီအတိုင်းဟိုဘက်ဒီဘက်လှန်ခြင်း - - ဓာတ်ပုံ - Gradient ပုံ - အဆိုတော်ပုံအား ဒေါင်းလုဒ်ဆွဲခြင်း Settings များ - - Import - Import playlist - Android မီဒီယာစတိုးမှ Playlist များကိုသီချင်းများနှင့်အတူ import လုပ်သွားမည်ဖြစ်ပြီး ရှိပြီးသား Playlist ဖြစ်ပါကသီချင်းများကိုထည့်ပေါင်းသွားပါမည်။ - - Playlist %2$s သို့သီချင်း %1$d ပုဒ်ထည့်ပြီးပါပြီ - - Instagram - သင့်ရဲ့ Retro Music setup ကို Instagram တွင်ပြသလိုက်ပါ - - ကီးဘုတ် - - Bitrate - အမျိုးအစား - ဖိုင်နာမည် - ဖိုင်နေရာ - အရွယ်အစား - %s ၏နောက်ထပ် Album များ - Sampling rate - ကြာချိန် - - Label ထိုးထားမည် - - နောက်ဆုံးသွင်းထားသော - နောက်ဆုံးအပုဒ် - - Tab အမျိုးအစားများ - - လိုင်စင်များ - - အဖြူရောင်သက်သက် - - နားဆင်သူများ - - ဖိုင်ပြန်စီနေသည်... - - ခဏစောင့်ပါ... - - Login - - သီချင်းစာသား - - အိန္ဒိယနိုင်ငံတွင် ❤️ များဖြင့် ဖန်တီးသည် - - Material - - Error - Storage ခွင့်ပြုချက် error - - နာမည် - အများဆုံးနားထောင်ခဲ့သော - - ဘယ်တော့မှ - - Playlist အသစ် - %s ဟာ Directory အစဖြစ်သွားပါပြီ - - နောက်တစ်ပုဒ် - - Album တစ်ခုမှမရှိပါ - အဆိုတော်တစ်ယောက်မှမရှိပါ - "သီချင်းတစ်ပုဒ်အရင် play ကြည့်ပြီးမှ ပြန်ကြိုးစားပါ" - Equalizer တစ်ခုမှရှာမတွေ့ပါ - အမျိုးအစားခွဲစရာတစ်ခုမှမရှိပါ - သီချင်းစာသားရှာမတွေ့ပါ - သီချင်းတစ်ပုဒ်မှ play မထားပါ - Playlist တစ်ခုမှမရှိပါ - ဝယ်ယူထားမှုမရှိပါ - ရှာမတွေ့ပါ - သီချင်းတစ်ပုဒ်မှမရှိပါ - - ပုံမှန် - ပုံမှန်သီချင်းစာသား - - %s သည် Android မီဒီယာစတိုးတွင် မရှိပါ]]> - မကြာသေးခင်က play မထားပါ - - စကန်ဖတ်စရာမရှိပါ - ကြည့်စရာတစ်ခုမှမရှိပါ - - Notification - Notification ပုံစံကို စိတ်ကြိုက်ပြင်ဆင်မည် - - Now playing - Now playing queue - Now playing screen ကိုစိတ်ကြိုက်ပြင်ခြင်း - Now playing theme (၉) ခုအထက် ရရှိခြင်း - - Wi-Fi ဖြင့်သာ - - အဆင့်မြင့် Settings များ - - အခြား - - Password - - လွန်ခဲ့သော (၃)လ - - Peak ပုံစံ - - External Storage ကြည့်ရှုခွင့်အားငြင်းပယ်ခဲ့သည်။ - သီချင်းဖွင့်ရန်အတွက် ယခု App အား Storage ကြည့်ရှုခွင့်ပေးရန်လိုသည်။ - Storage ကြည့်ရှုခွင့် - - ခွင့်ပြုချက်ငြင်းပယ်ခံရသည် - - မိမိစိတ်ကြိုက် - Now Playing နှင့် UI controls များကိုစိတ်ကြိုက်ပြင်ဆင်မည် - - Local Storage မှ ရွေးမည် - - Pinterest - Retro Music ဒီဇိုင်းအကြံဉာဏ်ကောင်းများအတွက် Pinterest page ကို follow ပါ - - ရှင်းရှင်းလင်းလင်းပုံစံ - - Playing notification သည် play/pause ခလုတ် စသည့်တို့ကိုဖော်ပြပေးသည် - Playing notification - - Playlist တွင်ဘာမှမရှိပါ - Playlist နာမည် - - Playlists - - Blur Themes များအတွက်သက်ရောက်သော အဝါးပမာဏဖြစ်ပြီး ပမာဏနည်းလေ ပိုမြန်လေဖြစ်သည် - အဝါးပမာဏ - ကြာချိန်ဖြင့်သီချင်းစစ်ထုတ်မည် - သီချင်းကြာချိန်စစ်ထုတ်ခြင်း - ပိုမိုဆန်းသစ်သော - Album စတိုင် - အသံပိုင်းဆိုင်ရာ - Blacklist - ထိန်းချုပ်မှုဆိုင်ရာ - Theme - Images - Library - Lockscreen - Playlists - Volume သုညရောက်သွားပါက သီချင်းရပ်ပြီး Volume ပြန်ကျယ်လာသည့်အခါ ပြန် play မည်ဖြစ်သည်။ App ထဲဝင်မထားသော်လည်းအလုပ်လုပ်သည်။ - သုည၌ရပ်ခြင်း - ဤ feature ဖွင့်ထားပါက ဘက်ထရီသက်တမ်းထိခိုက်နိုင်ပါသည် - Screen တစ်ချိန်လုံးဖွင့်ထားမည် - ဘာသာစကားရွေးချယ်မည် - ယခု play နေသောသီချင်း Album cover ပုံအား Lockscreen wallpaper အဖြစ်ထားမည် - Album သီဆိုသူများကိုလည်း အဆိုတော် Category တွင်ထားမည် - System Sound (သို့) Notification တစ်ခုရောက်လာသည့်အခါ သီချင်းအသံကိုတိုးမည် - Blacklist folder သိို့သွင်းထားသည်များကို Library တွင်မြင်ရမည်မဟုတ်ပါ - Bluetooth device နှင့်ချိတ်ဆက်လိုက်သည်နှင့် သီချင်းစဖွင့်မည် - Lockscreen တွင် Album cover ပုံကိုဝါးထားမည်။ Third-party app နှင့် Widget များတွင် ပြဿနာတက်နိုင်သည်။ - Now Playing screen မှ Album cover အတွက် Carousel effect ဖြစ်သည်။ ဤ effect ကြောင့် ကတ်နှင့် ကတ်အဝါး Theme များအလုပ်လုပ်မည်မဟုတ်ပါ။ - Android ၏ Notification ဒီဇိုင်းအဟောင်းကိုသုံးမည် - နောက်ခံအရောင်နှင့်ထိန်းချုပ်ခလုတ်အရောင်များသည် Now Playing screen မှ Album cover အရောင်အတိုင်း ပြောင်းလဲပါမည် - Accent color မှ App shortcuts များကိုအရောင်ပြောင်းလဲသည်။ Accent color ပြောင်းသည့်အခါတိုင်း App ကိုသက်ရောက်မှုရှိစေရန် ဤခလုတ်ကိုအဖွင့်၊အပိတ်လုပ်ပေးပါ။ - "Notification အရောင်ကို Album cover မှထင်ရှားသည့်အရောင်အတိုင်း ပြောင်းမည်" - Material ဒီဇိုင်းညွှန်ကြားချက်များအရ Dark Mode ဖွင့်ထားချိန်တွင်အရောင်များမှိန်နေသင့်သည် - Notification ကိုနှိပ်သည့်အခါ Home screen သို့ရောက်မည့်အစား Now Playing screen သို့တိုက်ရိုက်ရောက်သွားမည် - Mini player တွင် ထိန်းချုပ်ခလုတ်အပိုများထပ်ပေါင်းမည် - သီချင်းဖိုင်၏အသေးစိတ်အချက်အလက်များ ပြသမည်၊ ဥပမာ - ဖိုင်အမျိုးအစား၊ bitrate နှင့် ကြိမ်နှုန်း - "အချို့ device များတွင် playback ပြဿနာများဖြစ်ပေါ်နိုင်သည်" - Home banner အား ပြသခြင်း၊ ဖျောက်ထားခြင်း - Album cover အရည်အသွေးပိုမိုကောင်းမွန်လာနိုင်သော်လည်း Loading time ပိုကြာနိုင်သည်။ အရည်အသွေးနိမ့်သောပုံများနှင့်အဆင်မပြေမှသာလျှင် ဤခလုတ်ကိုဖွင့်ပါ။ - Library category များ ဖော်ခြင်း၊ ဖျောက်ခြင်းနှင့် အထားအသိုများ ချိန်ညှိမည် - Retro Music ၏ ပြင်ဆင်ထားသော Lockscreen controls များကိုသုံးမည် - Open Source software အတွက် လိုင်စင်အချက်အလက်များ - Immersive mode - နားကြပ်နှင့်ချိတ်ဆက်ပြီးသည့်နှင့် စတင် play မည် - သီချင်းဖွင့်မည့်စာရင်း\'အသစ်\'ကို play သည့်အခါ Shuffle Mode ပိတ်သွားပါမည် - နေရာလုံလုံလောက်လောက်ရှိပါက Now Playing screen တွင် အသံအတိုးအကျယ်ခလုတ်များပြသမည် - Album cover ပြသခြင်း - Album သီဆိုသူဖြင့် ရှာဖွေခြင်း - Album cover theme - Album cover skip - Colored App shortcuts - Reduce volume on focus loss - အဆိုတော်ဓာတ်ပုံများကို အလိုအလျောက်ဒေါင်းလုဒ်ဆွဲခြင်း - Blacklist - Bluetooth playback - Album cover အဝါး - Notification ဒီဇိုင်းအဟောင်း - Adaptive color - အရောင်ပါသော notification - Desaturated color - Now Playing screen ပြသခြင်း - အပိုထိန်းချုပ်မှုများ - သီချင်းဖိုင်အချက်အလက် - လစ်ဟာမှုမရှိ play ခြင်း - App theme - Album အကွက်ပုံစံ - အဆိုတော်အကွက်ပုံစံ - Banner - Media Store covers များကိုလျစ်လျူရှုခြင်း - နောက်ဆုံးသွင်းထားသော playlist ရှိသီချင်းများ - Lockscreen အပြည့် controls - Now playing theme - Open source licences - Tab ခေါင်းစဉ်ပြသခြင်း - Carousel effect - App ကို screen အပြည့်ထားမည် - အလိုအလျောက် play ခြင်း - Shuffle mode - အသံထိန်းချုပ်မှု - - Pro - Black theme ၊ Now playing themes နှင့် Carousel effect စသည်များ... - - Profile - - ဝယ်ယူမည် - - နားထောင်နေသည့်စာရင်း - - ဤ app ကို star ပေးမည် - App ကိုကြိုက်ပါသလား။ ယခုထက်ပိုကောင်းမွန်အောင်ဘယ်လိုလုပ်ရမလဲဆိုတာ ကျွန်တော်တို့ကို Google Play Store မှာပြောပြပေးပါ။ - - မကြာသေးခင်ကနားထောင်ထားသော Album များ - မကြာသေးခင်ကနားထောင်ထားသော အဆိုတော်များ - - ပယ်ဖျက်မည် - Cover ကိုဖျက်မည် - Blacklist မှဖျက်မည် - Playlist မှဖျက်မည် - %1$s ကို Playlist ကဖျက်မှာလား]]> - Playlist မှသီချင်းများဖျက်ခြင်း - %1$d ပုဒ်ကို playlist ကဖျက်မှာလား]]> - - Playlist နာမည်ပြင်မည် - - ပြဿနာတစ်ခုသတင်းပို့မည် - Bug report တင်မည် - - Reset - Reset artist image - - ပြန်လည်ရယူမည် - - ယခင်ဝယ်ယူမှုကို ပြန်လည်ရယူပြီးပါပြီ။ Feature အားလုံးအလုပ်လုပ်ရန် app မှထွက်ပြီးပြန်ဝင်ပါ။ - ယခင်ဝယ်ယူမှုအား ပြန်လည်ရယူပြီးပါပြီ - - ယခင်ဝယ်ယူမှုအား ပြန်လည်ရယူနေသည်... - - Retro Music Player - Retro Music Pro - - သီချင်းများကို Ringtone ထားရန် app အား System Settings များကိုပြင်ဆင်ခွင့်ပေးရန်လိုသည်။ - Ringtone - - ဖိုင်ဖျက်ခြင်းမအောင်မြင်ပါ: %s - - SAF URI ကိုမရယူနိုင်ပါ - Navigation drawer ကိုဖွင့်ပါ - Overflow Menu မှ \'Show SD card\' ကိုနှိပ်ပါ - - %s သည် SD card ကြည့်ရှုခွင့်လိုအပ်သည် - SD card ၏ ထိပ်ဆုံး Directory ကိုရွေးပေးရန်လိုအပ်သည် - Navigation drawer တွင် SD card ကိုရွေးချယ်ပါ - Folder အခွဲများကို မဖွင့်ပါနှင့် - Screen ၏အောက်ဆုံးတွင်ရှိသော \'select\' ခလုတ်ကိုနှိပ်ပါ - ဖိုင်ပြုပြင်ခြင်းမအောင်မြင်ပါ: %s - - မှတ်ထားမည် - - - ဖိုင်အဖြစ်သိမ်းမည် - ဖိုင်များအဖြစ်သိမ်းမည် - - %s တွင် playlist ကိုသိမ်းခဲ့သည် - - ပြောင်းလဲမှုများကိုမှတ်သားနေသည် - - မီဒီယာစကန်ဖတ်မည် - - ဖိုင် %2$d ခုအနက် %1$d ခုကို စကန်ဖတ်ပြီးပါပြီ - - Scrobbles - - အားလုံးရွေးမည် - - ရွေးချယ်ထားသော - - ထားမည် - အဆိုတော်ပုံအဖြစ်ထားမည် - - App ကိုမျှဝေမည် - သင့်မိသားစုနှင့် သူငယ်ချင်းများကိုပြန်လည်မျှဝေလိုက်ပါ - Stories သို့မျှဝေမည် - - Shuffle - - ရိုးရိုးရှင်းရှင်း - - Sleep timer ကိုဖျက်ပြီးပါပြီ - ယခုမှစတင်၍ Sleep timer ကို %d မိနစ်အချိန်မှတ်ပြီးပါပြီ - - Social - Story မျှဝေမည် - - သီချင်း - သီချင်းကြာချိန် - - သီချင်းများ - - အထားအသိုပြင်မည် - ငယ်ရာမှကြီးရာ - Album - အဆိုတော် - တေးရေးဆရာ - ထည့်သွင်းသည့်ရက် - ပြင်ဆင်သည့်ရက် - အပုဒ်အရေအတွက် - အပုဒ်အရေအတွက်ပြောင်းပြန် - ထွက်ရှိသည့်နှစ် - ကြီးရာမှငယ်ရာ - - ဆောရီး! သင့် device သည် အသံဖြင့်ပြောဆိုခြင်းအား အထောက်အပံ့မပေးထားပါ - သင့် Library တွင်ရှာဖွေခြင်း - - Stack - - သီချင်းစတင် play ပါပြီ - - အကြံပြုထားသောသီချင်းများ - - Support development - - Swipe to unlock - - ချိန်ကိုက်ထားသောသီချင်းစာသား - - - Telegram - Bugs များကို ဆွေးနွေးရန်၊ အကြံပြုချက်များပေးရန်၊ ကြွားရန်နှင့် စသည်များ... - - ကျေးဇူးတင်ပါတယ် - - အသံဖိုင် - - ယခုလ - ယခုအပတ် - ယခုနှစ် - - Tiny - Tiny card - - နာမည် - - ယနေ့ - - ထိပ်ဆုံး Album များ - ထိပ်ဆုံးအဆိုတော်များ - - "Track (2 for track 2 or 3004 for CD3 track 4)" - အပုဒ်နံပါတ် - - ဘာသာပြန်ခြင်း - App ကိုသင့်ဘာသာစကားသို့ ကူပြန်ပေးပါ - - Retro Music Premium ကိုစမ်းကြည့်ပါ - - Twitter - သင့် Retro Music ဒီဇိုင်းများကိုမျှဝေပါ - - Label မထိုးပါ - - ဤသီချင်းကို မ play နိုင်ပါ - - လာမည့်အပုဒ် - - Update image - - အပ်ဒိတ်လုပ်နေသည်… - - သုံးစွဲသူ - - သုံးစွဲသူအမည် - - Version - - ဒေါင်လိုက်ဟိုဘက်ဒီဘက်လှန်ခြင်း - - အသံအတိုးအကျယ် - - Web search - - မင်္ဂလာပါ - - ဘာများမျှဝေချင်ပါသလဲ - - ဘာအသစ်တွေရှိလဲ - - Window - အနားအကွေးပုံစံ - - %1$s ကို Ringtone အဖြစ်ထားပြီးပါပြီ - %1$d ခုကိုရွေးထားသည် - - ထွက်ရှိသည့်နှစ် - - အနည်းဆုံး category တစ်ခုရွေးချယ်ရန်လိုအပ်သည် - Issue tracker website သို့ခေါ်ဆောင်သွားပါမည် - - သင့်အကောင့်အချက်အလက်ကို အတည်ပြုရန်အတွက်သာအသုံးပြုပါသည်။ - \ No newline at end of file From 33e59dd2a5895e033c9bd0460b179ee85c5a65f2 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 18:53:05 +0530 Subject: [PATCH 0073/1603] Update Crowdin configuration file --- crowdin.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/crowdin.yml b/crowdin.yml index 4d12f3cc2..a9f539ea0 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,5 +1,6 @@ files: - source: /app/src/main/res/values/strings.xml translation: /app/src/main/res/values-%android_code%/strings.xml + content_segmentation: 0 translatable_elements: - strings.xml From 6ae944d768c389182c69a3bfdf4270320fa3efbe Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 18:57:57 +0530 Subject: [PATCH 0074/1603] New translations strings.xml (Burmese) --- app/src/main/res/values-my-rMM/strings.xml | 750 ++++++++++----------- 1 file changed, 375 insertions(+), 375 deletions(-) diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index 107d2d644..d2e273c8f 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -1,466 +1,466 @@ About %s - Team, social links - Accent color - The theme accent color, defaults to purple + အဖွဲ့နှင့် လူမှုကွန်ယက်လင့်ခ်များ + Accent Color + The theme accent color (ခရမ်းရောင်သည်မူလအရောင်) About - Add to favorites - Add to playing queue - Add to playlist - Clear playing queue + အကြိုက်ဆုံးသို့ထည့်မည် + နားထောင်နေသည့်စာရင်းထဲသို့ထည့်မည် + Playlist သို့ထည့်မည် + နားထောင်နေသည့်စာရင်းအားရှင်းမည် Cycle repeat mode - Delete - Delete from device - Details - Go to album - Go to artist - Go to genre - Go to start directory - Grant - Grid size - Grid size (land) - New playlist - Next - Play - Play all + ဖျက်မည် + Device မှဖျက်မည် + အသေးစိတ် + Album သို့သွားမည် + အဆိုတော်သို့သွားမည် + အမျိုးအစားသို့သွားမည် + Directory အစသို့သွားမည် + ခွင့်ပြုမည် + အကွက်အရွယ်အစား + အကွက်အရွယ်အစား (land) + Playlist အသစ် + နောက်တစ်ပုဒ် + Play မည် + အားလုံး play မည် Play next - Play/Pause - Previous - Remove from favorites - Remove from playing queue - Remove from playlist - Rename - Save playing queue - Scan - Search - Start - Set as ringtone - Set as start directory + Play/ခေတ္တရပ် + ယခင်အပုဒ် + အကြိုက်ဆုံးမှထုတ်မည် + နားထောင်နေသည့်စာရင်းမှထုတ်မည် + Playlist မှထုတ်မည် + နာမည်ပြင်မည် + နားထောင်နေသည့်စာရင်းအားသိမ်းမည် + စကန်ဖတ်မည် + ရှာမည် + စမည် + Ringtone အဖြစ်ထားမည် + Directory အစအဖြစ်ထားမည် "Settings" - Share - Shuffle all - Shuffle playlist - Sleep timer - Sort order - Tag editor + မျှဝေမည် + အားလုံး Shuffle play မည် + Playlist အား Shuffle play မည် + Sleep Timer + အထားအသိုပြင်မည် + Tag တည်းဖြတ်ခြင်း Toggle favorite Toggle shuffle mode Adaptive - Add - "Add to playlist" - "Added 1 title to the playing queue." - Added %1$d titles to the playing queue. + ထည့်မည် + "အောက်ပါ Playlist သို့ထည့်မည်" + "နားထောင်နေသည့်စာရင်းထဲသို့ ၁ ပုဒ်ပေါင်းထည့်ခဲ့သည်" + နားထောင်နေသည့်စာရင်းထဲသို့ %1$d ပုဒ်ပေါင်းထည့်ခဲ့သည် Album - Songs + သီချင်းများ - Album artist + Album အားသီဆိုသူ Albums Albums Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + ဟေ့ အရမ်းမိုက်တဲ့ဒီ Music Player ကိုတစ်ချက်ကြည့်ကြည့်! https://play.google.com/store/apps/details?id=%s Shuffle - Top Tracks - Full Image - Card - Classic - Small - Minimal Text - Artist - Artists - Audio focus denied. - Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist + ထိပ်ဆုံးသီချင်းများ + ပုံအပြည့် + ကတ် + ရိုးရိုး + အသေး + စာပါဝင်မှုနည်း + အဆိုတော် + အဆိုတော်များ + အသံအာရုံစိုက်ခြင်းအား ပယ်ဖျက်ခဲ့သည် + အသံ Settings များပြောင်းလဲရန်နှင့် Equalizer ချိန်ညှိရန် + အလိုအလျောက် + အတ္ထုပတ္တိ + အနက်ရောင်သာ + လစ်လျူရှုမည့်စာရင်း Blur - Blur Card - Unable to send report - Invalid access token. Please contact the app developer. - Issues are not enabled for the selected repository. Please contact the app developer. - An unexpected error occurred. Please contact the app developer. - Wrong username or password - Issue - Send manually - Please enter an issue description - Please enter your valid GitHub password - Please enter an issue title - Please enter your valid GitHub username - An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email - Send using GitHub account - Buy now - Cancel - Card - Colored Card - Square Card - Card - Carousel effect on the now playing screen + ကတ်အဝါး + သတင်းပို့၍မရနိုင်ပါ + မမှန်ကန်သော Access token ဖြစ်သည်။ ကျေးဇူးပြု၍ App ရေးသားသူအားဆက်သွယ်ပါ။ + ရွေးချယ်ထားသော Repository အတွက် Issue ဖွင့်ခွင့်မပေးထားပါ။ ကျေးဇူးပြု၍ App ရေးသားသူအားဆက်သွယ်ပါ။ + မသိထားသော Error တက်သွားခဲ့သည်။ ကျေးဇူးပြု၍ App ရေးသားသူအားဆက်သွယ်ပါ။ + Username (သို့မဟုတ်) Password မှားနေသည် + အကြောင်းအရာ + ကိုယ်တိုင်အသေးစိတ်သတင်းပို့မည် + ကျေးဇူးပြု၍ အကြောင်းအရာအသေးစိတ်ကိုဖြည့်သွင်းပါ + ကျေးဇူးပြု၍ မှန်ကန်သော Github password ကိုဖြည့်သွင်းပါ + ကျေးဇူးပြု၍အကြောင်းအရာခေါင်းစဉ်အားဖြည့်သွင်းပါ + ကျေးဇူးပြု၍ မှန်ကန်သော Github username ကိုဖြည့်သွင်းပါ + မသိထားတဲ့ Error တစ်ခုတက်ခဲ့တယ်ဆိုပါစို့။ ဆက်ပြီး Crash ဖြစ်နေတယ်ဆိုရင် \"Clear App Data\" လုပ်ပါ (ဒါမှမဟုတ်) အီးမေးလ်ပို့ပါ။ + GitHub အကောင့်ဖြင့်ပို့မည် + ယခုဝယ်မည် + ပယ်ဖျက်မည် + ကတ် + အရောင်ပါသောကတ် + လေးထောင့်ကတ် + ကတ် + Now Playing Screen ပေါ်တွင် Carousel effect Cascading - Changelog - Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear - Clear blacklist - Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. - "Couldn\u2019t download a matching album cover." - Could not restore purchase. - Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist - %1$s?]]> - Delete playlists - Delete song - %1$s?]]> - Delete songs - %1$d playlists?]]> - %1$d songs?]]> - Deleted %1$d songs. + ပြောင်းလဲမှုမှတ်တမ်း + Telegram channel ရှိ ပြောင်းလဲမှုမှတ်တမ်း + အဝိုင်း + အဝိုင်း + ရိုးရိုး + ရှင်းမည် + Blacklist အားရှင်းမည် + နားထောင်နေသည့်စာရင်းအားရှင်းမည် + အရောင် + အရောင်များ + တေးရေးဆရာ + Device အချက်အလက်အား Clipboard သို့ ကော်ပီကူးခဲ့ပြီး + Playlist ဖန်တီး၍မရပါ + "ကိုက်ညီသော Album Cover ကို Download မလုပ်နိုင်ပါ" + ဝယ်ယူမှုကိုပြန်မရယူနိုင်ပါ + ဖိုင် %d ခုကိုစကန်မဖတ်နိုင်ပါ + ဖန်တီးမည် + ဖန်တီးထားသော Playlist %1$s ခု + အဖွဲ့ဝင်များနှင့် ကူညီသူများ + %2$s သီဆိုထားသော %1$s ကိုယခုနားထောင်နေသည် + အနက်ရောင်ဆန်ဆန် + Playlist ဖျက်ခြင်း + %1$s Playlist ကိုဖျက်မှာလား]]> + Playlist များဖျက်ခြင်း + သီချင်းဖျက်ခြင်း + %1$s? သီချင်းကိုဖျက်မှာလား]]> + သီချင်းများဖျက်ခြင်း + %1$d ခုကိုဖျက်မှာလား]]> + %1$d ပုဒ်ကိုဖျက်မှာလား]]> + သီချင်း %1$d ပုဒ်ကိုဖျက်ပစ်ခဲ့သည် Depth - Description - Device info - Allow Retro Music to modify audio settings - Set ringtone - Do you want to clear the blacklist? - %1$s from the blacklist?]]> - Donate - If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - Done + အကြောင်းအရာအသေးစိတ် + Device အချက်အလက် + အသံ Settings ပြုပြင်ရန် Retro Music ကိုခွင့်ပြုချက်ပေးပါ + Ringtone ထားခြင်း + Blacklist ကိုရှင်းလင်းလိုပါသလား + %1$s ကိုဖယ်ရှားလိုပါသလား]]> + လှူဒါန်းမည် + ကျွန်တော့်ရဲ့လက်ရာအတွက် မုန့်ဖိုးရဖို့ထိုက်တန်တယ်လို့ထင်ရင် ဒီမှာပေးသွားလိုက်ပါ။ + ဝယ်ပေးမယ်: + ပြီးပြီ Drive mode - Empty + ဘာမှမရှိပါ Equalizer - FAQ - Favorites + မေးလေ့ရှိသောမေးခွန်းများ + အကြိုက်ဆုံး Finish last song - Fit - Flat + အနေတော် + အပြားပုံစံ Folders - Follow system - For you - Free - Full - Full card - Change the theme and colors of the app - Look and feel - Genre - Genres - Fork the project on GitHub + System အတိုင်း + သင့်အတွက် + အခမဲ့ + အပြည့် + ကတ်အပြည့်ပုံစံ + App Theme နှင့် အရောင်များကိုပြောင်းလဲရန် + Look and Feel + အမျိုးအစား + အမျိုးအစားများ + Project ကို GitHub မှာ Fork လုပ်ပါ Gradient - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - Grid style - Need more help? + + + + + + + + + အကွက်စတိုင် + အကူအညီထပ်လိုပါသေးလား Hinge - History - Home - Horizontal flip - Image - Gradient image - Change artist image download settings + မှတ်တမ်း + မူလ + ရေပြင်ညီအတိုင်းဟိုဘက်ဒီဘက်လှန်ခြင်း + ဓာတ်ပုံ + Gradient ပုံ + အဆိုတော်ပုံအား ဒေါင်းလုဒ်ဆွဲခြင်း Settings များ Import Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. - Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard + Android မီဒီယာစတိုးမှ Playlist များကိုသီချင်းများနှင့်အတူ import လုပ်သွားမည်ဖြစ်ပြီး ရှိပြီးသား Playlist ဖြစ်ပါကသီချင်းများကိုထည့်ပေါင်းသွားပါမည်။ + Playlist %2$s သို့သီချင်း %1$d ပုဒ်ထည့်ပြီးပါပြီ + သင့်ရဲ့ Retro Music setup ကို Instagram တွင်ပြသလိုက်ပါ + ကီးဘုတ် Bitrate - Format - File name - File path - Size - More from %s + အမျိုးအစား + ဖိုင်နာမည် + ဖိုင်နေရာ + အရွယ်အစား + %s ၏နောက်ထပ် Album များ Sampling rate - Length - Labeled - Last added - Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… + ကြာချိန် + Label ထိုးထားမည် + နောက်ဆုံးသွင်းထားသော + နောက်ဆုံးအပုဒ် + Tab အမျိုးအစားများ + လိုင်စင်များ + အဖြူရောင်သက်သက် + နားဆင်သူများ + ဖိုင်ပြန်စီနေသည်... + ခဏစောင့်ပါ... Login - Lyrics - Made with ❤️ in India + သီချင်းစာသား + အိန္ဒိယနိုင်ငံတွင် ❤️ များဖြင့် ဖန်တီးသည် Material Error - Permission error - Name - Most played - Never - New playlist - %s is the new start directory. - Next Song - You have no albums - You have no artists - "Play a song first, then try again." - No equalizer found - You have no genres - No lyrics found - No songs playing - You have no playlists - No purchase found. - No results - You have no songs - Normal - Normal lyrics - %s is not listed in the media store.]]> - Not recently played - Nothing to scan. - Nothing to see + Storage ခွင့်ပြုချက် error + နာမည် + အများဆုံးနားထောင်ခဲ့သော + ဘယ်တော့မှ + Playlist အသစ် + %s ဟာ Directory အစဖြစ်သွားပါပြီ + နောက်တစ်ပုဒ် + Album တစ်ခုမှမရှိပါ + အဆိုတော်တစ်ယောက်မှမရှိပါ + "သီချင်းတစ်ပုဒ်အရင် play ကြည့်ပြီးမှ ပြန်ကြိုးစားပါ" + Equalizer တစ်ခုမှရှာမတွေ့ပါ + အမျိုးအစားခွဲစရာတစ်ခုမှမရှိပါ + သီချင်းစာသားရှာမတွေ့ပါ + သီချင်းတစ်ပုဒ်မှ play မထားပါ + Playlist တစ်ခုမှမရှိပါ + ဝယ်ယူထားမှုမရှိပါ + ရှာမတွေ့ပါ + သီချင်းတစ်ပုဒ်မှမရှိပါ + ပုံမှန် + ပုံမှန်သီချင်းစာသား + %s သည် Android မီဒီယာစတိုးတွင် မရှိပါ]]> + မကြာသေးခင်က play မထားပါ + စကန်ဖတ်စရာမရှိပါ + ကြည့်စရာတစ်ခုမှမရှိပါ Notification - Customize the notification style + Notification ပုံစံကို စိတ်ကြိုက်ပြင်ဆင်မည် Now playing Now playing queue - Customize the now playing screen - 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other + Now playing screen ကိုစိတ်ကြိုက်ပြင်ခြင်း + Now playing theme (၉) ခုအထက် ရရှိခြင်း + Wi-Fi ဖြင့်သာ + အဆင့်မြင့် Settings များ + အခြား Password - Past 3 months - Peak - Permission to access external storage denied. - The app needs permission to access your device storage for playing music - Storage Access - Permissions denied. - Personalize - Customize your now playing and UI controls - Pick from local storage + လွန်ခဲ့သော (၃)လ + Peak ပုံစံ + External Storage ကြည့်ရှုခွင့်အားငြင်းပယ်ခဲ့သည်။ + သီချင်းဖွင့်ရန်အတွက် ယခု App အား Storage ကြည့်ရှုခွင့်ပေးရန်လိုသည်။ + Storage ကြည့်ရှုခွင့် + ခွင့်ပြုချက်ငြင်းပယ်ခံရသည် + မိမိစိတ်ကြိုက် + Now Playing နှင့် UI controls များကိုစိတ်ကြိုက်ပြင်ဆင်မည် + Local Storage မှ ရွေးမည် Pinterest - Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. + Retro Music ဒီဇိုင်းအကြံဉာဏ်ကောင်းများအတွက် Pinterest page ကို follow ပါ + ရှင်းရှင်းလင်းလင်းပုံစံ + Playing notification သည် play/pause ခလုတ် စသည့်တို့ကိုဖော်ပြပေးသည် Playing notification - Playlist is empty - Playlist name + Playlist တွင်ဘာမှမရှိပါ + Playlist နာမည် Playlists - Amount of blur applied for blur themes, lower is faster - Blur amount - Filter songs by length - Filter song duration - Advanced - Album style - Audio + Blur Themes များအတွက်သက်ရောက်သော အဝါးပမာဏဖြစ်ပြီး ပမာဏနည်းလေ ပိုမြန်လေဖြစ်သည် + အဝါးပမာဏ + ကြာချိန်ဖြင့်သီချင်းစစ်ထုတ်မည် + သီချင်းကြာချိန်စစ်ထုတ်ခြင်း + ပိုမိုဆန်းသစ်သော + Album စတိုင် + အသံပိုင်းဆိုင်ရာ Blacklist - Controls + ထိန်းချုပ်မှုဆိုင်ရာ Theme Images Library Lockscreen Playlists - Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app - Pause on zero - Keep in mind that enabling this feature may affect battery life - Keep the screen on - Select language - Use the currently playing song album cover as the lockscreen wallpaper - Show Album Artists in the Artist category - Lower the volume when a system sound is played or a notification is received - The content of blacklisted folders is hidden from your library. - Start playing as soon as connected to bluetooth device - Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets - Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work - Use the classic notification design - The background and control button colors change according to the album art from the now playing screen - Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect - "Colors the notification in the album cover\u2019s vibrant color" - As per Material Design guide lines in dark mode colors should be desaturated - Clicking on the notification will show now playing screen instead of the home screen - Add extra controls for mini player - Show extra Song information, such as file format, bitrate and frequency - "Can cause playback issues on some devices." - Show or hide the home banner - Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks - Configure visibility and order of library categories. - Use Retro Music\'s custom lockscreen controls - License details for open source software + Volume သုညရောက်သွားပါက သီချင်းရပ်ပြီး Volume ပြန်ကျယ်လာသည့်အခါ ပြန် play မည်ဖြစ်သည်။ App ထဲဝင်မထားသော်လည်းအလုပ်လုပ်သည်။ + သုည၌ရပ်ခြင်း + ဤ feature ဖွင့်ထားပါက ဘက်ထရီသက်တမ်းထိခိုက်နိုင်ပါသည် + Screen တစ်ချိန်လုံးဖွင့်ထားမည် + ဘာသာစကားရွေးချယ်မည် + ယခု play နေသောသီချင်း Album cover ပုံအား Lockscreen wallpaper အဖြစ်ထားမည် + Album သီဆိုသူများကိုလည်း အဆိုတော် Category တွင်ထားမည် + System Sound (သို့) Notification တစ်ခုရောက်လာသည့်အခါ သီချင်းအသံကိုတိုးမည် + Blacklist folder သိို့သွင်းထားသည်များကို Library တွင်မြင်ရမည်မဟုတ်ပါ + Bluetooth device နှင့်ချိတ်ဆက်လိုက်သည်နှင့် သီချင်းစဖွင့်မည် + Lockscreen တွင် Album cover ပုံကိုဝါးထားမည်။ Third-party app နှင့် Widget များတွင် ပြဿနာတက်နိုင်သည်။ + Now Playing screen မှ Album cover အတွက် Carousel effect ဖြစ်သည်။ ဤ effect ကြောင့် ကတ်နှင့် ကတ်အဝါး Theme များအလုပ်လုပ်မည်မဟုတ်ပါ။ + Android ၏ Notification ဒီဇိုင်းအဟောင်းကိုသုံးမည် + နောက်ခံအရောင်နှင့်ထိန်းချုပ်ခလုတ်အရောင်များသည် Now Playing screen မှ Album cover အရောင်အတိုင်း ပြောင်းလဲပါမည် + Accent color မှ App shortcuts များကိုအရောင်ပြောင်းလဲသည်။ Accent color ပြောင်းသည့်အခါတိုင်း App ကိုသက်ရောက်မှုရှိစေရန် ဤခလုတ်ကိုအဖွင့်၊အပိတ်လုပ်ပေးပါ။ + "Notification အရောင်ကို Album cover မှထင်ရှားသည့်အရောင်အတိုင်း ပြောင်းမည်" + Material ဒီဇိုင်းညွှန်ကြားချက်များအရ Dark Mode ဖွင့်ထားချိန်တွင်အရောင်များမှိန်နေသင့်သည် + Notification ကိုနှိပ်သည့်အခါ Home screen သို့ရောက်မည့်အစား Now Playing screen သို့တိုက်ရိုက်ရောက်သွားမည် + Mini player တွင် ထိန်းချုပ်ခလုတ်အပိုများထပ်ပေါင်းမည် + သီချင်းဖိုင်၏အသေးစိတ်အချက်အလက်များ ပြသမည်၊ ဥပမာ - ဖိုင်အမျိုးအစား၊ bitrate နှင့် ကြိမ်နှုန်း + "အချို့ device များတွင် playback ပြဿနာများဖြစ်ပေါ်နိုင်သည်" + Home banner အား ပြသခြင်း၊ ဖျောက်ထားခြင်း + Album cover အရည်အသွေးပိုမိုကောင်းမွန်လာနိုင်သော်လည်း Loading time ပိုကြာနိုင်သည်။ အရည်အသွေးနိမ့်သောပုံများနှင့်အဆင်မပြေမှသာလျှင် ဤခလုတ်ကိုဖွင့်ပါ။ + Library category များ ဖော်ခြင်း၊ ဖျောက်ခြင်းနှင့် အထားအသိုများ ချိန်ညှိမည် + Retro Music ၏ ပြင်ဆင်ထားသော Lockscreen controls များကိုသုံးမည် + Open Source software အတွက် လိုင်စင်အချက်အလက်များ Immersive mode - Start playing immediately after headphones are connected - Shuffle mode will turn off when playing a new list of songs - If enough space is available, show volume controls in the now playing screen - Show album cover - Navigate by Album Artist + နားကြပ်နှင့်ချိတ်ဆက်ပြီးသည့်နှင့် စတင် play မည် + သီချင်းဖွင့်မည့်စာရင်း\'အသစ်\'ကို play သည့်အခါ Shuffle Mode ပိတ်သွားပါမည် + နေရာလုံလုံလောက်လောက်ရှိပါက Now Playing screen တွင် အသံအတိုးအကျယ်ခလုတ်များပြသမည် + Album cover ပြသခြင်း + Album သီဆိုသူဖြင့် ရှာဖွေခြင်း Album cover theme Album cover skip - Colored app shortcuts + Colored App shortcuts Reduce volume on focus loss - Auto-download artist images + အဆိုတော်ဓာတ်ပုံများကို အလိုအလျောက်ဒေါင်းလုဒ်ဆွဲခြင်း Blacklist Bluetooth playback - Blur album cover - Classic notification design + Album cover အဝါး + Notification ဒီဇိုင်းအဟောင်း Adaptive color - Colored notification + အရောင်ပါသော notification Desaturated color - Show now playing screen - Extra controls - Song info - Gapless playback + Now Playing screen ပြသခြင်း + အပိုထိန်းချုပ်မှုများ + သီချင်းဖိုင်အချက်အလက် + လစ်ဟာမှုမရှိ play ခြင်း App theme - Album grid - Artist grid + Album အကွက်ပုံစံ + အဆိုတော်အကွက်ပုံစံ Banner - Ignore Media Store covers - Last added playlist interval - Fullscreen controls + Media Store covers များကိုလျစ်လျူရှုခြင်း + နောက်ဆုံးသွင်းထားသော playlist ရှိသီချင်းများ + Lockscreen အပြည့် controls Now playing theme Open source licences - Tab titles mode + Tab ခေါင်းစဉ်ပြသခြင်း Carousel effect - Fullscreen app - Auto-play + App ကို screen အပြည့်ထားမည် + အလိုအလျောက် play ခြင်း Shuffle mode - Volume controls + အသံထိန်းချုပ်မှု Pro - Black theme, Now playing themes, Carousel effect and more.. + Black theme ၊ Now playing themes နှင့် Carousel effect စသည်များ... Profile - Purchase - Playing Queue - Rate the app - Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums - Recent artists - Remove - Remove cover - Remove from blacklist - Remove song from playlist - %1$s from the playlist?]]> - Remove songs from playlist - %1$d songs from the playlist?]]> - Rename playlist - Report an issue - Report bug + ဝယ်ယူမည် + နားထောင်နေသည့်စာရင်း + ဤ app ကို star ပေးမည် + App ကိုကြိုက်ပါသလား။ ယခုထက်ပိုကောင်းမွန်အောင်ဘယ်လိုလုပ်ရမလဲဆိုတာ ကျွန်တော်တို့ကို Google Play Store မှာပြောပြပေးပါ။ + မကြာသေးခင်ကနားထောင်ထားသော Album များ + မကြာသေးခင်ကနားထောင်ထားသော အဆိုတော်များ + ပယ်ဖျက်မည် + Cover ကိုဖျက်မည် + Blacklist မှဖျက်မည် + Playlist မှဖျက်မည် + %1$s ကို Playlist ကဖျက်မှာလား]]> + Playlist မှသီချင်းများဖျက်ခြင်း + %1$d ပုဒ်ကို playlist ကဖျက်မှာလား]]> + Playlist နာမည်ပြင်မည် + ပြဿနာတစ်ခုသတင်းပို့မည် + Bug report တင်မည် Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. - Restored previous purchases. - Restoring purchase… + ပြန်လည်ရယူမည် + ယခင်ဝယ်ယူမှုကို ပြန်လည်ရယူပြီးပါပြီ။ Feature အားလုံးအလုပ်လုပ်ရန် app မှထွက်ပြီးပြန်ဝင်ပါ။ + ယခင်ဝယ်ယူမှုအား ပြန်လည်ရယူပြီးပါပြီ + ယခင်ဝယ်ယူမှုအား ပြန်လည်ရယူနေသည်... Retro Music Player Retro Music Pro - The app needs permission to access your device settings in order to set music as Ringtone + သီချင်းများကို Ringtone ထားရန် app အား System Settings များကိုပြင်ဆင်ခွင့်ပေးရန်လိုသည်။ Ringtone - File delete failed: %s + ဖိုင်ဖျက်ခြင်းမအောင်မြင်ပါ: %s - Can\'t get SAF URI - Open navigation drawer - Enable \'Show SD card\' in overflow menu + SAF URI ကိုမရယူနိုင်ပါ + Navigation drawer ကိုဖွင့်ပါ + Overflow Menu မှ \'Show SD card\' ကိုနှိပ်ပါ - %s needs SD card access - You need to select your SD card root directory - Select your SD card in navigation drawer - Do not open any sub-folders - Tap \'select\' button at the bottom of the screen - File write failed: %s - Save + %s သည် SD card ကြည့်ရှုခွင့်လိုအပ်သည် + SD card ၏ ထိပ်ဆုံး Directory ကိုရွေးပေးရန်လိုအပ်သည် + Navigation drawer တွင် SD card ကိုရွေးချယ်ပါ + Folder အခွဲများကို မဖွင့်ပါနှင့် + Screen ၏အောက်ဆုံးတွင်ရှိသော \'select\' ခလုတ်ကိုနှိပ်ပါ + ဖိုင်ပြုပြင်ခြင်းမအောင်မြင်ပါ: %s + မှတ်ထားမည် - Save as file - Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. + ဖိုင်အဖြစ်သိမ်းမည် + ဖိုင်များအဖြစ်သိမ်းမည် + %s တွင် playlist ကိုသိမ်းခဲ့သည် + ပြောင်းလဲမှုများကိုမှတ်သားနေသည် + မီဒီယာစကန်ဖတ်မည် + ဖိုင် %2$d ခုအနက် %1$d ခုကို စကန်ဖတ်ပြီးပါပြီ Scrobbles - Select all - Selected - Set - Set artist image - Share app - Share the app with your friends and family - Share to Stories + အားလုံးရွေးမည် + ရွေးချယ်ထားသော + ထားမည် + အဆိုတော်ပုံအဖြစ်ထားမည် + App ကိုမျှဝေမည် + သင့်မိသားစုနှင့် သူငယ်ချင်းများကိုပြန်လည်မျှဝေလိုက်ပါ + Stories သို့မျှဝေမည် Shuffle - Simple - Sleep timer canceled. - Sleep timer set for %d minutes from now. + ရိုးရိုးရှင်းရှင်း + Sleep timer ကိုဖျက်ပြီးပါပြီ + ယခုမှစတင်၍ Sleep timer ကို %d မိနစ်အချိန်မှတ်ပြီးပါပြီ Social - Share story - Song - Song duration - Songs - Sort order - Ascending + Story မျှဝေမည် + သီချင်း + သီချင်းကြာချိန် + သီချင်းများ + အထားအသိုပြင်မည် + ငယ်ရာမှကြီးရာ Album - Artist - Composer - Date added - Date modified - Song count - Song count desc - Year - Descending - Sorry! Your device doesn\'t support speech input - Search your library + အဆိုတော် + တေးရေးဆရာ + ထည့်သွင်းသည့်ရက် + ပြင်ဆင်သည့်ရက် + အပုဒ်အရေအတွက် + အပုဒ်အရေအတွက်ပြောင်းပြန် + ထွက်ရှိသည့်နှစ် + ကြီးရာမှငယ်ရာ + ဆောရီး! သင့် device သည် အသံဖြင့်ပြောဆိုခြင်းအား အထောက်အပံ့မပေးထားပါ + သင့် Library တွင်ရှာဖွေခြင်း Stack - Start playing music. - Suggestions + သီချင်းစတင် play ပါပြီ + အကြံပြုထားသောသီချင်းများ Support development Swipe to unlock - Synced lyrics + ချိန်ကိုက်ထားသောသီချင်းစာသား Telegram - Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month - This week - This year + Bugs များကို ဆွေးနွေးရန်၊ အကြံပြုချက်များပေးရန်၊ ကြွားရန်နှင့် စသည်များ... + ကျေးဇူးတင်ပါတယ် + အသံဖိုင် + ယခုလ + ယခုအပတ် + ယခုနှစ် Tiny Tiny card - Title - Today - Top albums - Top artists + နာမည် + ယနေ့ + ထိပ်ဆုံး Album များ + ထိပ်ဆုံးအဆိုတော်များ "Track (2 for track 2 or 3004 for CD3 track 4)" - Track number - Translate - Help us translate the app to your language - Try Retro Music Premium + အပုဒ်နံပါတ် + ဘာသာပြန်ခြင်း + App ကိုသင့်ဘာသာစကားသို့ ကူပြန်ပေးပါ + Retro Music Premium ကိုစမ်းကြည့်ပါ Twitter - Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next + သင့် Retro Music ဒီဇိုင်းများကိုမျှဝေပါ + Label မထိုးပါ + ဤသီချင်းကို မ play နိုင်ပါ + လာမည့်အပုဒ် Update image - Updating… - User Name - Username + အပ်ဒိတ်လုပ်နေသည်… + သုံးစွဲသူ + သုံးစွဲသူအမည် Version - Vertical flip - Volume + ဒေါင်လိုက်ဟိုဘက်ဒီဘက်လှန်ခြင်း + အသံအတိုးအကျယ် Web search - Welcome, - What do you want to share? - What\'s New + မင်္ဂလာပါ + ဘာများမျှဝေချင်ပါသလဲ + ဘာအသစ်တွေရှိလဲ Window - Rounded corners - Set %1$s as your ringtone. - %1$d selected - Year - You have to select at least one category. - You will be forwarded to the issue tracker website. - Your account data is only used for authentication. + အနားအကွေးပုံစံ + %1$s ကို Ringtone အဖြစ်ထားပြီးပါပြီ + %1$d ခုကိုရွေးထားသည် + ထွက်ရှိသည့်နှစ် + အနည်းဆုံး category တစ်ခုရွေးချယ်ရန်လိုအပ်သည် + Issue tracker website သို့ခေါ်ဆောင်သွားပါမည် + သင့်အကောင့်အချက်အလက်ကို အတည်ပြုရန်အတွက်သာအသုံးပြုပါသည်။ From 25ff5d9243f7af2e2d35401760e234b18ae29322 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:02:24 +0530 Subject: [PATCH 0075/1603] Update Crowdin configuration file --- crowdin.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/crowdin.yml b/crowdin.yml index a9f539ea0..1c85b3e89 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -2,5 +2,3 @@ files: - source: /app/src/main/res/values/strings.xml translation: /app/src/main/res/values-%android_code%/strings.xml content_segmentation: 0 - translatable_elements: - - strings.xml From a5d3e802cfc21b3cbde0d4d363d8986e847eeaa7 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:07:58 +0530 Subject: [PATCH 0076/1603] Update crowdin.yml --- crowdin.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/crowdin.yml b/crowdin.yml index 1c85b3e89..7a6371886 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,4 +1,3 @@ files: - source: /app/src/main/res/values/strings.xml translation: /app/src/main/res/values-%android_code%/strings.xml - content_segmentation: 0 From 0b6ecb0d67340f587fb23fd538dcbe9db63f05c9 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:13:57 +0530 Subject: [PATCH 0077/1603] New translations strings.xml (Burmese) --- app/src/main/res/values-my-rMM/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index d2e273c8f..a53f6a15a 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -264,7 +264,7 @@ ပိုမိုဆန်းသစ်သော Album စတိုင် အသံပိုင်းဆိုင်ရာ - Blacklist + လစ်လျူရှုမည့်စာရင်း ထိန်းချုပ်မှုဆိုင်ရာ Theme Images @@ -308,7 +308,7 @@ Colored App shortcuts Reduce volume on focus loss အဆိုတော်ဓာတ်ပုံများကို အလိုအလျောက်ဒေါင်းလုဒ်ဆွဲခြင်း - Blacklist + လစ်လျူရှုမည့်စာရင်း Bluetooth playback Album cover အဝါး Notification ဒီဇိုင်းအဟောင်း From 2a487239f4204aa432e89e65117bbc5e6cb93679 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:36:54 +0530 Subject: [PATCH 0078/1603] Update strings.xml --- app/src/main/res/values/strings.xml | 197 +--------------------------- 1 file changed, 3 insertions(+), 194 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7e7d8213a..0a9a9d1f7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,11 +1,9 @@ - + About %s Team, social links - Accent color The theme accent color, defaults to purple - About Add to favorites Add to playing queue @@ -48,59 +46,41 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - Add "Add to playlist" - "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album - Song Songs - Album artist - Albums Album Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text - + Text Artist - Artists - Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,56 +94,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog Changelog maintained on the Telegram channel - Circle - Circular - Classic - Clear Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -172,66 +131,38 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - Done - Drive mode - Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - Gradient - 1 2 3 @@ -241,32 +172,20 @@ 7 8 Grid style - Need more help? - Hinge - History - Home - Horizontal flip - Image Gradient image Change artist image download settings - Import Import playlist It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. - Inserted %1$d songs into the playlist %2$s. - - Instagram Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -275,45 +194,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -325,60 +226,39 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> Not recently played - Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - Peak - Permission to access external storage denied. The app needs permission to access your device storage for playing music Storage Access - Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -456,22 +336,15 @@ Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -479,28 +352,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - The app needs permission to access your device settings in order to set music as Ringtone Ringtone - File delete failed: %s Can\'t get SAF URI @@ -513,49 +377,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -567,93 +414,55 @@ Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - User Name - Username - Version - Vertical flip - Volume - Web search - Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. From f9d9cc5de8530fa41c97774325ba133b506676e3 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:12 +0530 Subject: [PATCH 0079/1603] New translations strings.xml (Romanian) --- app/src/main/res/values-ro-rRO/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 934dbfdbb..2f992da57 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -68,7 +68,7 @@ Hey! încearcă acest music player la adresa: https://play.google.com/store/apps/details?id=%s Amestecă Top cântece - Mare + Big Card Classic Mic From 27d94ac4bf2e09dd5367dda749a1575714c177e0 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:13 +0530 Subject: [PATCH 0080/1603] New translations strings.xml (Croatian) --- app/src/main/res/values-hr-rHR/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml index 2df1c552e..1a1fb9a00 100644 --- a/app/src/main/res/values-hr-rHR/strings.xml +++ b/app/src/main/res/values-hr-rHR/strings.xml @@ -68,11 +68,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 4d56ae82b46fe29721827c862b0296da99c6d082 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:14 +0530 Subject: [PATCH 0081/1603] New translations strings.xml (Chinese Simplified) --- app/src/main/res/values-zh-rCN/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 12efbffca..01127dcf3 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -64,11 +64,11 @@ 嘿,快来瞧瞧这个酷炫的音乐播放器:https://play.google.com/store/apps/details?id=%s 随机播放 热门曲目 - + Big 卡片模式 经典模式 - 文本 + Text 艺术家 艺术家 音频焦点丢失。 From 5c0c849850aa5937824bf899efc82d9a8d6ac852 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:15 +0530 Subject: [PATCH 0082/1603] New translations strings.xml (Chinese Traditional) --- app/src/main/res/values-zh-rTW/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 7adb3f076..b65e1d896 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -64,7 +64,7 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s 隨機播放 最佳單曲 - 大型 + Big Card 經典 小型 From f3bf3313671c2bbd5c054fead03e1b74d3e7cf9c Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:16 +0530 Subject: [PATCH 0083/1603] New translations strings.xml (Vietnamese) --- app/src/main/res/values-vi-rVN/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 46314caa6..03c9c922d 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -64,7 +64,7 @@ Hãy dùng thử trình phát nhạc siêu chất này tại: https://play.google.com/store/apps/details?id=%s Ngẫu nhiên Bản nhạc hàng đầu - Lớn + Big Thẻ Cổ điển Nhỏ From c98a6d0ddf3cad103ac46cf16d414ee77528ed77 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:18 +0530 Subject: [PATCH 0084/1603] New translations strings.xml (Icelandic) --- app/src/main/res/values-is-rIS/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-is-rIS/strings.xml b/app/src/main/res/values-is-rIS/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-is-rIS/strings.xml +++ b/app/src/main/res/values-is-rIS/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 52a7b8dfba83514909b8d8adfbde4f46fc80bbad Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:19 +0530 Subject: [PATCH 0085/1603] New translations strings.xml (Portuguese, Brazilian) --- app/src/main/res/values-pt-rBR/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index d9a2f7147..f47c3d1f3 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -66,11 +66,11 @@ Ei, confira este reprodutor de música legal em: https://play.google.com/store/apps/details?id=%s Aleatório Músicas favoritas - Música Retrô-Grande + Big Música Retrô-Cartão Música Retrô-Clássico Música Retrô-Pequeno - Música Retrô-Texto + Text Artista Artistas Foco de áudio negado From 9ec7ec4859c1e6dfad8ac61b2d510868fefef652 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:20 +0530 Subject: [PATCH 0086/1603] New translations strings.xml (Indonesian) --- app/src/main/res/values-in-rID/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 107d2d644..224b8d344 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -64,11 +64,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From cb1ac61b36b9bd45254322013a5c1ead13e86fa8 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:21 +0530 Subject: [PATCH 0087/1603] New translations strings.xml (Persian) --- app/src/main/res/values-fa-rIR/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 00e550f3dea6a0e6cb6e09f9f6032311816298d5 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:22 +0530 Subject: [PATCH 0088/1603] New translations strings.xml (Tamil) --- app/src/main/res/values-ta-rIN/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From cadcb5cfc9d17495c9030ba7ec13b28e0687be68 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:23 +0530 Subject: [PATCH 0089/1603] New translations strings.xml (Bengali) --- app/src/main/res/values-bn-rBD/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From a7e519a00470b8fa2f71affd1f61f0a75b23ea29 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:24 +0530 Subject: [PATCH 0090/1603] New translations strings.xml (Thai) --- app/src/main/res/values-th-rTH/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index 107d2d644..224b8d344 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -64,11 +64,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From faef7c02512bc6519d570c33d06fb699e1a5bb91 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:25 +0530 Subject: [PATCH 0091/1603] New translations strings.xml (Estonian) --- app/src/main/res/values-et-rEE/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-et-rEE/strings.xml +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From a7bd84a8efa337065b139f120dc3ea6c58cccd53 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:26 +0530 Subject: [PATCH 0092/1603] New translations strings.xml (Turkish) --- app/src/main/res/values-tr-rTR/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index c31231d68..0e1d30562 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -66,11 +66,11 @@ Hey, şu havalı müzik çalara şuradan bir göz atmaya ne dersin: https://play.google.com/store/apps/details?id=%s Karıştır Sık oynatılan parçalar - Retro müzik - Büyük + Big Retro müzik - Kart Retro müzik - Klasik Retro müzik - Küçük - Retro müzik - Metin + Text Sanatçı Sanatçılar Ses odaklaması reddedildi. From 0b55ea9f2069230db1d74915ecd3f508f690ff89 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:27 +0530 Subject: [PATCH 0093/1603] New translations strings.xml (Latvian) --- app/src/main/res/values-lv-rLV/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml index 406ddab98..94066b500 100644 --- a/app/src/main/res/values-lv-rLV/strings.xml +++ b/app/src/main/res/values-lv-rLV/strings.xml @@ -68,11 +68,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 2164ad71ec10e086686b80e32e1e538f64bf055d Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:28 +0530 Subject: [PATCH 0094/1603] New translations strings.xml (Hindi) --- app/src/main/res/values-hi-rIN/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 826b7d30e..23f1c258e 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -66,7 +66,7 @@ इस बढ़िया म्यूजिक प्लेयर को यहां देखें:https://play.google.com/store/apps/details?id=%s शफ़ल टॉप गीत - रेट्रो म्यूजिक - बिग + Big रेट्रो म्यूजिक - कार्ड रेट्रो म्यूजिक - क्लासिक Small From 8414a83a1240ef18c6f7e29c5e1bb289686e5e8f Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:29 +0530 Subject: [PATCH 0095/1603] New translations strings.xml (Malay) --- app/src/main/res/values-ms-rMY/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ms-rMY/strings.xml b/app/src/main/res/values-ms-rMY/strings.xml index 107d2d644..224b8d344 100644 --- a/app/src/main/res/values-ms-rMY/strings.xml +++ b/app/src/main/res/values-ms-rMY/strings.xml @@ -64,11 +64,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 9c81d357304ea2bad62c73b8f1c118c1827f2053 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:30 +0530 Subject: [PATCH 0096/1603] New translations strings.xml (Burmese) --- app/src/main/res/values-my-rMM/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index a53f6a15a..8d3c02039 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -64,11 +64,11 @@ ဟေ့ အရမ်းမိုက်တဲ့ဒီ Music Player ကိုတစ်ချက်ကြည့်ကြည့်! https://play.google.com/store/apps/details?id=%s Shuffle ထိပ်ဆုံးသီချင်းများ - ပုံအပြည့် + Big ကတ် ရိုးရိုး အသေး - စာပါဝင်မှုနည်း + Text အဆိုတော် အဆိုတော်များ အသံအာရုံစိုက်ခြင်းအား ပယ်ဖျက်ခဲ့သည် From bda53f2ca8d2bba1e2ea83eac291f4c93937f36b Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:31 +0530 Subject: [PATCH 0097/1603] New translations strings.xml (Esperanto) --- app/src/main/res/values-eo-rUY/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-eo-rUY/strings.xml b/app/src/main/res/values-eo-rUY/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-eo-rUY/strings.xml +++ b/app/src/main/res/values-eo-rUY/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 9371c1bc3b3d88eae35611756139c746e918194f Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:32 +0530 Subject: [PATCH 0098/1603] New translations strings.xml (Filipino) --- app/src/main/res/values-fil-rPH/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 004f2e5d4926bed561a7404df8629843b483a4a2 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:33 +0530 Subject: [PATCH 0099/1603] New translations strings.xml (Luxembourgish) --- app/src/main/res/values-lb-rLU/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-lb-rLU/strings.xml b/app/src/main/res/values-lb-rLU/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-lb-rLU/strings.xml +++ b/app/src/main/res/values-lb-rLU/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 47c2f521dea40b932fa32d4a610a39849b298a38 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:34 +0530 Subject: [PATCH 0100/1603] New translations strings.xml (Latin) --- app/src/main/res/values-la-rLA/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-la-rLA/strings.xml b/app/src/main/res/values-la-rLA/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-la-rLA/strings.xml +++ b/app/src/main/res/values-la-rLA/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 1e11c27d2ad47e2f8a05b3d1350c6c19e3aa1588 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:35 +0530 Subject: [PATCH 0101/1603] New translations strings.xml (Flemish) --- app/src/main/res/values-vls-rBE/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-vls-rBE/strings.xml b/app/src/main/res/values-vls-rBE/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-vls-rBE/strings.xml +++ b/app/src/main/res/values-vls-rBE/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 8f712552c59ac6eb5d180ac638d5c272925dd78b Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:36 +0530 Subject: [PATCH 0102/1603] New translations strings.xml (Kannada) --- app/src/main/res/values-kn-rIN/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From cd1c626d3d9509873b04f749bb618751b08423ac Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:37 +0530 Subject: [PATCH 0103/1603] New translations strings.xml (Nepali) --- app/src/main/res/values-ne-rNP/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-ne-rNP/strings.xml +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From e49d2d6726bb621809f4b57bfdeda7a13e744103 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:38 +0530 Subject: [PATCH 0104/1603] New translations strings.xml (Ukrainian) --- app/src/main/res/values-uk-rUA/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 8174cad10..164bddf3b 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -70,11 +70,11 @@ Привіт, перегляньте цей крутий музичний плеєр за адресою: https://play.google.com/store/apps/details?id=%s Перемішати Кращі треки - Ретро-музика - Великий + Big Ретро музика - Картка Ретро-музика - Класичний Ретро-музика - Малий - Ретро-музика - Текст + Text Виконавець Виконавці В отриманні аудіофокусу відмовлено. From 86cd6b9767ce56669575f37d3e2469ab8285550a Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:39 +0530 Subject: [PATCH 0105/1603] New translations strings.xml (Swedish) --- app/src/main/res/values-sv-rSE/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 0eb301762..b2e9fb081 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -66,7 +66,7 @@ Kolla in den här coola musikspelaren på: https://play.google.com/store/apps/details?id=%s Shuffle Topplåtar - Stor + Big Kort Klassisk Liten From 83f336371c642e51640fc64f698c2d0478f38006 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:40 +0530 Subject: [PATCH 0106/1603] New translations strings.xml (French) --- app/src/main/res/values-fr-rFR/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index bdcbc384b..bfa5e6502 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -66,11 +66,11 @@ Hey, jetez un coup d\'œil à ce super lecteur de musique : https://play.google.com/store/apps/details?id=%s Aléatoire Pistes préférées - Retro Music – Grand + Big Retro Music – Carte Retro Music – Classique Retro Music – Petit - Texte + Text Artiste Artistes Focus audio refusé. From ebe587684460fef3977c562f074c1eb4b25f268e Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:41 +0530 Subject: [PATCH 0107/1603] New translations strings.xml (Gujarati) --- app/src/main/res/values-gu-rIN/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-gu-rIN/strings.xml b/app/src/main/res/values-gu-rIN/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-gu-rIN/strings.xml +++ b/app/src/main/res/values-gu-rIN/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From c52783e4205f54ff52f5e5be73f6aa34912c6223 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:43 +0530 Subject: [PATCH 0108/1603] New translations strings.xml (Spanish) --- app/src/main/res/values-es-rES/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index f97f70548..f8fe32a71 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -66,11 +66,11 @@ Ve este cool reproductor de música en: https://play.google.com/store/apps/details?id=%s Aleatorio Canciones más reproducidas - Grande + Big Tarjeta Clásico Pequeño - Texto + Text Artista Artistas Enfoque de audio denegado From f6faa11c153eb2d8698a0d3027017b15fa3859c5 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:44 +0530 Subject: [PATCH 0109/1603] New translations strings.xml (Arabic) --- app/src/main/res/values-ar-rSA/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index bb024dda9..a6fc9c870 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -74,11 +74,11 @@ مرحبا القي نظرة على مشغل الموسيقى الرائع هذا في: https://play.google.com/store/apps/details?id=%s عشوائي المسارات الاكثر شعبية - ريترو ميوزك - كبير + Big ريترو ميوزك - بطاقة ريترو ميوزك - تقليدي ريترو ميوزك - صغير - ريترو ميوزك - نص + Text فنان فنانين تم منع تركيز الصوت From 561369ed5cc8ebe56a218187a77307a9514d4632 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:48 +0530 Subject: [PATCH 0110/1603] New translations strings.xml (Greek) --- app/src/main/res/values-el-rGR/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 5afa8b2fe..7422ae608 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -66,11 +66,11 @@ Τσεκάρετε αυτό το κούλ music player στο:https://play.google.com/store/apps/details?id=%s Τυχαία αναπαραγωγή Κορυφαία Κομμάτια - Μεγάλο + Big Κάρτα Κλασσικό Μικρό - >Κείμενο + Text Καλλιτέχνης Καλλιτέχνες Η εστίαση ήχου απορρίφθηκε. From 12b5b6cb8a87ecfddf6e1cf0ad6b2593b8b78e2b Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:50 +0530 Subject: [PATCH 0111/1603] New translations strings.xml (Irish) --- app/src/main/res/values-ga-rIE/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ga-rIE/strings.xml b/app/src/main/res/values-ga-rIE/strings.xml index 8733d743b..5e822b9b8 100644 --- a/app/src/main/res/values-ga-rIE/strings.xml +++ b/app/src/main/res/values-ga-rIE/strings.xml @@ -72,11 +72,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 66e34252d853c48aa7315092f16c6ce2c31690fc Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:52 +0530 Subject: [PATCH 0112/1603] New translations strings.xml (Hungarian) --- app/src/main/res/values-hu-rHU/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index e709b1211..23518cc08 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -66,11 +66,11 @@ Hé, nézd meg ezt a menő zenelejátszót itt: https://play.google.com/store/apps/details?id=%s Keverés Legjobb zeneszámok - Nagy + Big Kártya Retro zene - Klasszikus Retro zene - Kicsi - Retro zene - Szöveg + Text Előadó Előadók Az audiofókusz megtagadva. From 443ee00bf97858868d2bff3df26b28c9c632e8ed Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:53 +0530 Subject: [PATCH 0113/1603] New translations strings.xml (Italian) --- app/src/main/res/values-it-rIT/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index ef061ae5e..364c7a5d7 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -67,11 +67,11 @@ https://play.google.com/store/apps/details?id=%s Casuale Tracce migliori - Grande + Big Card Classico Piccolo - Testo + Text Artista Artisti Focalizzazione audio negata. From 6ead986222c65aec0bdd56884213f064fd7236dc Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:54 +0530 Subject: [PATCH 0114/1603] New translations strings.xml (Japanese) --- app/src/main/res/values-ja-rJP/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index aec405040..821822bf9 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -64,11 +64,11 @@ クールな音楽プレイヤーをチェックしよう: https://play.google.com/store/apps/details?id=%s シャッフル トップ曲 - レトロミュージック - ビッグ + Big レトロミュージック - カード レトロミュージック - クラシック レトロミュージック - 小 - テキスト + Text アーティスト アーティスト オーディオのフォーカスが拒否されました。 From a308279a082df9f6cf6c9a39f04cb76fcb981478 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:55 +0530 Subject: [PATCH 0115/1603] New translations strings.xml (Korean) --- app/src/main/res/values-ko-rKR/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 906976bb7..e443fbe45 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -64,7 +64,7 @@ 이 멋진 뮤직 플레이어를 한 번 써보세요!: https://play.google.com/store/apps/details?id=%s 무작위 자주 재생한 음악 - 대형 + Big 카드 클래식 소형 From 0b66093c306c42460c11418519f56ba546935d40 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:56 +0530 Subject: [PATCH 0116/1603] New translations strings.xml (Dutch) --- app/src/main/res/values-nl-rNL/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 90e8ed281..1b469e123 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -66,7 +66,7 @@ Hey, bekijk deze coole muziekspeler op:https://play.google.com/store/apps/details?id=%s Shuffle Top tracks - Groot + Big Kaart Klassiek Klein From a0153b0cad61ac0f1cc1beeac8d27188d2b1ea91 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:57 +0530 Subject: [PATCH 0117/1603] New translations strings.xml (Punjabi) --- app/src/main/res/values-pa-rIN/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 033ff59bb03e4caa97b07b4cad6971cbe4c978f8 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:37:58 +0530 Subject: [PATCH 0118/1603] New translations strings.xml (Polish) --- app/src/main/res/values-pl-rPL/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 009eea136..80d6a062b 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -70,11 +70,11 @@ Hej, sprawdź ten fajny odtwarzacz muzyki na: https://play.google.com/store/apps/details?id=%s Losowo Najczęściej odtwarzane utwory - Duży + Big Karta Klasyczny Mały - Tekst + Text Wykonawca Wykonawcy Odrzucono fokus dźwiękowy. From d0145f601eaac48f9ac9600d0ce49caa3615972a Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:38:00 +0530 Subject: [PATCH 0119/1603] New translations strings.xml (Russian) --- app/src/main/res/values-ru-rRU/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 94e83278f..67daec4fb 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -70,11 +70,11 @@ Эй, попробуй этот крутой музыкальный плеер на Android: https://play.google.com/store/apps/details?id=%s Перемешать Лучшие треки - Полное изображение + Big Компактный Классический Маленькое изображение - Минималистичный + Text Исполнитель Исполнители Фокус на аудио отключен. From ba93841f8bd33da3168489a20a98bcf377c65869 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:38:02 +0530 Subject: [PATCH 0120/1603] New translations strings.xml (Slovak) --- app/src/main/res/values-sk-rSK/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 20d072d86..f7e20564c 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -70,11 +70,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 0a292d3f87d9c862215de7d3a16073facd0f75dc Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 10 Jun 2021 19:38:03 +0530 Subject: [PATCH 0121/1603] New translations strings.xml (Hawaiian) --- app/src/main/res/values-haw-rUS/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-haw-rUS/strings.xml b/app/src/main/res/values-haw-rUS/strings.xml index 84152f068..0a9a9d1f7 100644 --- a/app/src/main/res/values-haw-rUS/strings.xml +++ b/app/src/main/res/values-haw-rUS/strings.xml @@ -66,11 +66,11 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Full Image + Big Card Classic Small - Minimal Text + Text Artist Artists Audio focus denied. From 278da9ac1f12e1487775f7418c7de4b0f2a87be3 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 11 Jun 2021 10:08:44 +0530 Subject: [PATCH 0122/1603] Update strings.xml --- app/src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0a9a9d1f7..2b12cb0b8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -185,6 +185,7 @@ It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. Share your Retro Music setup to showcase on Instagram + Instagram Keyboard Bitrate Format From 12eb9bee845d096db6da39f85f4e2e613c0475cd Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 11 Jun 2021 10:09:01 +0530 Subject: [PATCH 0123/1603] Update source file strings.xml --- app/src/main/res/values/strings.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2b12cb0b8..0a9a9d1f7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -185,7 +185,6 @@ It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. Share your Retro Music setup to showcase on Instagram - Instagram Keyboard Bitrate Format From 6b4c01471662883d72fe1ebe18cd0c65cf30d5c9 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 11 Jun 2021 10:09:17 +0530 Subject: [PATCH 0124/1603] New translations strings.xml (Burmese) --- app/src/main/res/values-my-rMM/strings.xml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index 2ad9bf81e..8d3c02039 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -1,4 +1,4 @@ - + About %s အဖွဲ့နှင့် လူမှုကွန်ယက်လင့်ခ်များ @@ -53,24 +53,22 @@ နားထောင်နေသည့်စာရင်းထဲသို့ %1$d ပုဒ်ပေါင်းထည့်ခဲ့သည် Album - သီချင်း သီချင်းများ Album အားသီဆိုသူ Albums - Album Albums Always ဟေ့ အရမ်းမိုက်တဲ့ဒီ Music Player ကိုတစ်ချက်ကြည့်ကြည့်! https://play.google.com/store/apps/details?id=%s Shuffle ထိပ်ဆုံးသီချင်းများ - ပုံအပြည့် + Big ကတ် ရိုးရိုး အသေး - စာပါဝင်မှုနည်း + Text အဆိုတော် အဆိုတော်များ အသံအာရုံစိုက်ခြင်းအား ပယ်ဖျက်ခဲ့သည် @@ -184,7 +182,6 @@ Import playlist Android မီဒီယာစတိုးမှ Playlist များကိုသီချင်းများနှင့်အတူ import လုပ်သွားမည်ဖြစ်ပြီး ရှိပြီးသား Playlist ဖြစ်ပါကသီချင်းများကိုထည့်ပေါင်းသွားပါမည်။ Playlist %2$s သို့သီချင်း %1$d ပုဒ်ထည့်ပြီးပါပြီ - Instagram သင့်ရဲ့ Retro Music setup ကို Instagram တွင်ပြသလိုက်ပါ ကီးဘုတ် Bitrate @@ -267,7 +264,7 @@ ပိုမိုဆန်းသစ်သော Album စတိုင် အသံပိုင်းဆိုင်ရာ - Blacklist + လစ်လျူရှုမည့်စာရင်း ထိန်းချုပ်မှုဆိုင်ရာ Theme Images @@ -295,7 +292,7 @@ Mini player တွင် ထိန်းချုပ်ခလုတ်အပိုများထပ်ပေါင်းမည် သီချင်းဖိုင်၏အသေးစိတ်အချက်အလက်များ ပြသမည်၊ ဥပမာ - ဖိုင်အမျိုးအစား၊ bitrate နှင့် ကြိမ်နှုန်း "အချို့ device များတွင် playback ပြဿနာများဖြစ်ပေါ်နိုင်သည်" - Home banner အား ပြသခြင်း၊ ဖျောက်ထားခြင်း + Home banner အား ပြသခြင်း၊ ဖျောက်ထားခြင်း Album cover အရည်အသွေးပိုမိုကောင်းမွန်လာနိုင်သော်လည်း Loading time ပိုကြာနိုင်သည်။ အရည်အသွေးနိမ့်သောပုံများနှင့်အဆင်မပြေမှသာလျှင် ဤခလုတ်ကိုဖွင့်ပါ။ Library category များ ဖော်ခြင်း၊ ဖျောက်ခြင်းနှင့် အထားအသိုများ ချိန်ညှိမည် Retro Music ၏ ပြင်ဆင်ထားသော Lockscreen controls များကိုသုံးမည် @@ -311,7 +308,7 @@ Colored App shortcuts Reduce volume on focus loss အဆိုတော်ဓာတ်ပုံများကို အလိုအလျောက်ဒေါင်းလုဒ်ဆွဲခြင်း - Blacklist + လစ်လျူရှုမည့်စာရင်း Bluetooth playback Album cover အဝါး Notification ဒီဇိုင်းအဟောင်း @@ -466,4 +463,4 @@ အနည်းဆုံး category တစ်ခုရွေးချယ်ရန်လိုအပ်သည် Issue tracker website သို့ခေါ်ဆောင်သွားပါမည် သင့်အကောင့်အချက်အလက်ကို အတည်ပြုရန်အတွက်သာအသုံးပြုပါသည်။ - \ No newline at end of file + From 87e636e7a39b029464c3b018b6fbb40f61de8818 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 11 Jun 2021 10:11:44 +0530 Subject: [PATCH 0125/1603] Update Crowdin configuration file --- crowdin.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/crowdin.yml b/crowdin.yml index 7a6371886..1c85b3e89 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,3 +1,4 @@ files: - source: /app/src/main/res/values/strings.xml translation: /app/src/main/res/values-%android_code%/strings.xml + content_segmentation: 0 From 9c8efeb7755b855913368260f3d0c838b82502e2 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 11 Jun 2021 10:11:50 +0530 Subject: [PATCH 0126/1603] Update source file strings.xml --- app/src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0a9a9d1f7..2b12cb0b8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -185,6 +185,7 @@ It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. Share your Retro Music setup to showcase on Instagram + Instagram Keyboard Bitrate Format From e86df4cd8db285c69ffb2b821bebd2c91b07d3c1 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 11 Jun 2021 10:15:26 +0530 Subject: [PATCH 0127/1603] New translations strings.xml (Burmese) --- app/src/main/res/values-my-rMM/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index 8d3c02039..a53f6a15a 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -64,11 +64,11 @@ ဟေ့ အရမ်းမိုက်တဲ့ဒီ Music Player ကိုတစ်ချက်ကြည့်ကြည့်! https://play.google.com/store/apps/details?id=%s Shuffle ထိပ်ဆုံးသီချင်းများ - Big + ပုံအပြည့် ကတ် ရိုးရိုး အသေး - Text + စာပါဝင်မှုနည်း အဆိုတော် အဆိုတော်များ အသံအာရုံစိုက်ခြင်းအား ပယ်ဖျက်ခဲ့သည် From ca64a2721b046198d959bb8f405b2123c2984f11 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sat, 12 Jun 2021 21:21:40 +0530 Subject: [PATCH 0128/1603] New translations strings.xml (Czech) --- app/src/main/res/values-cs-rCZ/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index a8527b164..0c808169d 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -59,7 +59,7 @@ Songs Umělec alba - Albumy + Alba Album Albums From 60cf3a250760f9328d2eae02a4d32f52750fbe87 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sat, 19 Jun 2021 02:11:09 +0530 Subject: [PATCH 0129/1603] New translations strings.xml (Czech) --- app/src/main/res/values-cs-rCZ/strings.xml | 432 ++++++++++----------- 1 file changed, 216 insertions(+), 216 deletions(-) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 0c808169d..3d9a48daf 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -1,7 +1,7 @@ - About %s - Team, social links + O %s + Tým, odkazy na sociální sítě Barva akcentů Barva motivu akcentu je výchozí k růžové barvě. Informace @@ -15,15 +15,15 @@ Podrobnosti Přejít na album Přejít na interpreta - Go to genre + Přejít na žánr Přejít do začáteční složky - Grant + Udělit Velikost mřížky Velikost spodní mřížky - New playlist + Nový seznam skladeb Další Přehrát - Play all + Přehrát vše Přehrát další Přehrát/Pozastavit Předchozí @@ -31,7 +31,7 @@ Odstranit z fronty Odstranit ze seznamu skladeb Přejmenovat - Save playing queue + Uložit frontu přehrávání Skenovat Hledat Nastavit @@ -44,128 +44,128 @@ Časovač vypnutí Sort order Editor tagů - Toggle favorite - Toggle shuffle mode - Adaptive - Add + Přepnout oblíbené + Přepnout náhodné přehrávání + Adaptivní + Přidat "Přidat do seznamu skladeb" "Přidán 1 titul do fronty přehrávání." Přidány %1$d tituly do fronty přehrávání. Album - Song - Songs - Songs - Songs + Skladba + Skladby + Skladeb + Skladeb Umělec alba Alba Album - Albums - Albums - Albums + Alba + Alb + Alb Vždy - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s - Shuffle - Top Tracks - Big - Card - Classic - Small + Hej, podívejte se na tento skvělý hudební přehrávač na: https://play.google.com/store/apps/details?id=%s + Zamíchat + Nejlepší skladby + Velký + Karta + Klasický + Malý Text Umělec Umělci Zaměření zvuku bylo zamítnuto. - Change the sound settings and adjust the equalizer controls + Změňte nastavení zvuku a upravte ovládání ekvalizéru Auto Bio Velmi černá - Blacklist - Blur + Černá listina + Rozostření Blur Card - Unable to send report - Invalid access token. Please contact the app developer. - Issues are not enabled for the selected repository. Please contact the app developer. - An unexpected error occurred. Please contact the app developer. - Wrong username or password - Issue - Send manually - Please enter an issue description - Please enter your valid GitHub password - Please enter an issue title - Please enter your valid GitHub username - An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email - Send using GitHub account - Buy now + Hlášení se nepodařilo odeslat + Neplatný přístupový token. Prosím kontaktujte vývojáře aplikace. + Ve vybraném repozitáři není povoleno hlášení chyb. Prosím kontaktujte vývojáře aplikace. + Vyskytla se neočekávaná chyba. Prosím kontaktujte vývojáře aplikace. + Špatné uživatelské jméno nebo heslo + Problém + Odeslat ručně + Prosím zadejte popis problému + Prosím zadejte platné GitHub heslo + Prosím zadejte název problému + Prosím zadejte platné uživatelské jméno na GitHubu + Došlo k neočekávané chybě. Je nám líto, že jste našli tuto chybu, pokud aplikace bude stále padat, použijte funkci \"Vymazat data aplikace\" nebo nám pošlete e-mail + Odeslat pomocí účtu GitHub + Zakoupit Zrušit aktuální časovač - Card - Colored Card - Square Card - Card - Carousel effect on the now playing screen + Karta + Obarvená karta + Čtvercová karta + Karta + Kolotočový efekt na obrazovce přehrávání Cascading Přehled změn - Changelog maintained on the Telegram channel - Circle - Circular - Classic + Seznam změn je veden v Telegram kanálu + Kruh + Kruhový + Klasický Vyčistit - Clear blacklist - Clear queue - Color + Vyčistit černou listinu + Vymazat frontu + Barva Barvy - Composer - Copied device info to clipboard. + Skladatel + Informace o zařízení zkopírovány do schránky. Nelze vytvo\u0159it playlist. "Nelze st\u00e1hnout odpov\u00eddaj\u00edc\u00ed obal alba." - Could not restore purchase. + Nepodařilo se obnovit nákup. Nelze skenovat %d soubory. Vytvořit Vytvořený seznam skladeb %1$s. - Members and contributors + Členové a přispěvatelé Aktuálně posloucháš %1$s od %2$s. Tmavá Smazat seznam skladeb %1$s?]]> Smazat seznamy skladeb - Delete song + Smazat skladbu %1$s?]]> - Delete songs + Smazat skladby %1$d seznamů skladeb?]]> %1$d písní?]]> %1$d skladby byly smazány. - Depth - Description - Device info - Allow Retro Music to modify audio settings - Set ringtone - Do you want to clear the blacklist? - %1$s from the blacklist?]]> + Hloubka + Popis + Informace o zařízení + Povolit aplikaci Retro Music upravovat nastavení zvuku + Nastavit vyzvánění + Chcete vyčistit černou listinu? + %1$s z černé listiny?]]> Darovat Pokud si myslíte, že si zasloužím odměnu za svou práci, můžete mi nechat pár dolarů. - Buy me a: - Done + Kupte mi: + Hotovo Drive mode Prázdný - Equalizer - FAQ + Ekvalizér + Často kladené otázky Oblíbené - Finish last song + Dokončit poslední skladbu Fit Flat Složky Follow system - For you + Pro vás Free Full Full card - Change the theme and colors of the app - Look and feel + Změňte motiv a barvy aplikace + Vzhled a chování Žánr - Genres - Fork the project on GitHub + Žánry + Forkněte projekt na GitHubu Gradient 1 2 @@ -175,113 +175,113 @@ 6 7 8 - Grid style - Need more help? + Styl mřížky + Potřebujete další pomoc? Hinge Historie Domov - Horizontal flip - Image + Horizontální otočení + Obrázek Gradient image - Change artist image download settings - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Změňte nastavení stahování obrázků umělců + Importovat + Importovat seznam skladeb + Importuje všechny seznamy skladeb uvedené v Android Media store, pokud seznam již existuje, seznamy se sloučí. Do playlistu %2$s byly vloženy %1$d skladby. - Share your Retro Music setup to showcase on Instagram - Keyboard + Sdílejte své nastavení Retro Music na Instagramu + Klávesnice Datový tok Formát Název souboru Umístění souboru Velikost - More from %s + Více od %s Vzorkovací frekvence Délka Labeled Poslední - Last song + Poslední skladba Library categories Licence Velmi bílá - Listeners + Posluchači Výpis souborů Načítání produktů... - Login + Přihlásit se Text - Made with ❤️ in India + Vyrobeno s ❤️ v Indii Material - Error - Permission error - Name + Chyba + Chyba oprávnění + Název Moje top skladby Nikdy Nový seznam skladeb %S je nový úvodní adresář. - Next Song + Další Skladba Žádné alba žádní umělci "Přehrajte nejprve píseň a zkuste to znovu." Nebyl nalezen žádný ekvalizér. - You have no genres - No lyrics found - No songs playing + Nemáte žádné žánry + Text nenalezen + Nic nehraje Žádné playlisty - No purchase found. + Nebyl nalezen žádný nákup. Žádné výsledky Žádné písně - Normal - Normal lyrics + Normální + Normální texty %s není uveden v úložišti médií.]]> - Not recently played + Nepřehrané nedávno Nic pro skenování. - Nothing to see + Není tu nic k vidění Upozornění - Customize the notification style - Now playing + Upravte si styl oznámení + Nyní hraje Aktuální fronta - Customize the now playing screen - 9+ now playing themes + Přizpůsobte si obrazovku přehrávání + 9+ vzhledů pro stránku přehrávání Pouze přes Wifi - Advanced testing features - Other - Password + Pokročilé funkce + Jiné + Heslo Past 3 months Peak Povolení přístupu k externímu úložišti bylo zamítnuto. - The app needs permission to access your device storage for playing music - Storage Access + Aplikace potřebuje přístup k úložišti vašeho zařízení, aby mohla přehráváat hudbu + Přístup k úložišti Oprávnění byla odepřena. - Personalize - Customize your now playing and UI controls + Přizpůsobit si + Přizpůsobte si stránku přehrávání a UI ovládání Vyberte z místního úložiště Pinterest - Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. - Playing notification - Playlist is empty + Sledujte stránku Pinterest pro inspiraci designu Retro Music + Klasické + Oznámení o přehrávání poskytuje akce pro přehrávání/pauzu atd. + Oznámení o přehrávání + Seznam skladeb je prázdný Název playlistu Seznamy skladeb - Amount of blur applied for blur themes, lower is faster + Množství rozostření použité pro rozostřené motivy, nižší je rychlejší Blur amount - Filter songs by length + Filtrovat skladby podle délky Filter song duration - Advanced - Album style + Pokročilé + Styl alba Zvuk - Blacklist - Controls - Theme + Černá listina + Ovládání + Motiv Obrázky - Library + Knihovna Obrazovka uzamčení Seznamy skladeb Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app - Pause on zero + Pozastavit na nule Keep in mind that enabling this feature may affect battery life - Keep the screen on - Select language + Udržovat obrazovku zapnutou + Vybrat jazyk Používá současný obal alba písní jako tapetu zámku. Show Album Artists in the Artist category Oznámení, navigace atd. @@ -304,20 +304,20 @@ Use Retro Music\'s custom lockscreen controls License details for open source software Immersive mode - Start playing immediately after headphones are connected + Začít přehrávat ihned po připojení sluchátek Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Zobrazit obal alba Navigate by Album Artist - Album cover theme + Motiv obalu alba Album cover skip Barevné zkratky aplikace Snížit hlasitost při ztrátě zaostření Automatické stahování obrázků interpretů - Blacklist - Bluetooth playback - Blur album cover - Classic notification design + Černá listina + Přehrávání Bluetooth + Rozostřit obal alba + Klasický vzhled oznámení Adaptivní barva Barevné notifikace Desaturated color @@ -326,78 +326,78 @@ Song info Přehrávání bez mezery Hlavní téma - Album grid - Artist grid + Mřížka alb + Mřížka umělců Banner Ignorovat obaly v zařízení Last added playlist interval - Fullscreen controls + Ovládání na celou obrazovku Vzhled - Open source licences + Licence Open source Tab titles mode Carousel effect - Fullscreen app - Auto-play - Shuffle mode - Volume controls + Aplikace přes celou obrazovku + Automatické přehrávání + Režim zamíchání + Ovládání hlasitosti Pro - Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase + Černý motiv, motivy stránky přehrávání, kolotočový efekt a další.. + Profil + Koupit Fronta Ohodnoťte aplikaci Zanechte pozitivní hodnocení na Google Play pokud máte rádi Retro music. - Recent albums - Recent artists + Nedávná alba + Nedávní umělci Odstranit Odstranit obal - Remove from blacklist + Odstranit z černé listiny Smazat skladbu ze seznamu skladeb %1$s ze seznamu skladeb?]]> Smazat skladby ze seznamu skladeb %1$d skladby ze seznamu skladeb?]]> Přejmenovat seznam skladeb - Report an issue - Report bug - Reset - Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. + Nahlásit problém + Nahlásit chybu + Resetovat + Obnovit obrázek interpreta + Obnovit + Předchozí nákup byl obnoven. Restartujte aplikaci pro využití všech funkcí. Předchozí nákupy byly obnoveny. - Restoring purchase… - Retro Music Player + Obnovuji nákup… + Retro Music Přehrávač Retro Music Pro - The app needs permission to access your device settings in order to set music as Ringtone - Ringtone - File delete failed: %s + Aplikace potřebuje přístup k nastavení zařízení pro nastavení hudby jako vyzvánění + Vyzvánění + Odstranění souboru se nezdařilo: %s - Can\'t get SAF URI - Open navigation drawer + Nelze získat SAF URI + Otevřít navigační panel Enable \'Show SD card\' in overflow menu - %s needs SD card access - You need to select your SD card root directory - Select your SD card in navigation drawer - Do not open any sub-folders - Tap \'select\' button at the bottom of the screen - File write failed: %s - Save + %s potřebuje přístup k SD kartě + Musíte vybrat kořenový adresář SD karty + Vyberte SD kartu v navigační liště + Neotevírejte žádné podsložky + Vespod obrazovky klepněte na tlačítko \'vybrat\' + Zápis souboru selhal: %s + Uložit Uložit jako soubor - Save as files + Uložit jako soubory Seznam skladeb uložený do %s. Uložení změn - Scan media + Skenovat média Naskenované %1$d z %2$d souborů. Scrobbles - Select all + Vybrat vše Selected Set Set artist image - Share app - Share the app with your friends and family - Share to Stories + Sdílet aplikaci + Sdílejte aplikaci s přáteli a rodinou + Sdílet do příběhu Náhodně Simple Časovač vypnutí byl zrušen. @@ -405,68 +405,68 @@ Social Share story Skladba - Song duration + Délka skladby Písně Řazení - Ascending + Vzestupně Album Umělec - Composer - Date added - Date modified - Song count - Song count desc - Year - Descending + Skladatel + Datum přidání + Datum změny + Počet skladeb + Počet skladeb sestupně + Rok + Sestupně Promiňte! Vaše zařízení nepodporuje vstup řeči Prohledat knihovnu Stack - Start playing music. - Suggestions + Začít přehrávat hudbu. + Návrhy Podpora vývoje - Swipe to unlock - Synced lyrics + Odemkněte posunutím prstu + Synchronizované texty Telegram - Join the Telegram group to discuss bugs, make suggestions, show off and more + Připojte se ke skupině na Telegramu, abyste mohli diskutovat o chybách, předkládat návrhy, předvádět se a více Děkujeme! Audio soubor - This month - This week - This year + Tento měsíc + Tento týden + Tento rok Tiny - Tiny card - Title - Today - Top albums - Top artists + Malá karta + Název + Dnes + Nejlepší alba + Top umělci "Skladba (2 pro stopu 2 ​​nebo 3004 pro čtvrtou stopu z CD3)" - Track number + Číslo skladby Překlad - Help us translate the app to your language - Try Retro Music Premium + Pomožte nám přeložit tuto aplikaci do vašeho jazyka + Vyzkoušejte Retro Music Premium Twitter - Share your design with Retro Music - Unlabeled + Sdílejte svůj design s Retro Music + Bez štítku Tuto p\u00edse\u0148 se nepoda\u0159ilo p\u0159ehr\u00e1t. - Up next + Další Aktualizovat obrázek Aktualizace... - User Name - Username + Uživatelské Jméno + Uživatelské jméno Verze - Vertical flip - Volume + Vertikální otočení + Hlasitost Webové vyhledávání - Welcome, + Vítejte, Co chcete sdílet? - What\'s New - Window - Rounded corners + Co je nového + Okno + Zaoblené rohy Nastavit %1$s jako zvonění %1$d vybrané Rok - You have to select at least one category. - You will be forwarded to the issue tracker website. - Your account data is only used for authentication. + Musíte zvolit alespoň jednu kategorii. + Budete přesměrováni na webovou stránku pro zadání problému. + Vaše údaje k účtu jsou použity pouze k ověření. From d2298ff62ca608b69050797962c5c00035837326 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sun, 20 Jun 2021 09:38:02 +0530 Subject: [PATCH 0130/1603] New translations strings.xml (Persian) --- app/src/main/res/values-fa-rIR/strings.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 0a9a9d1f7..e5f04db92 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -1,18 +1,18 @@ - About %s - Team, social links + درباره‌ی%s + تیم، پیوندهای اجتماعی Accent color The theme accent color, defaults to purple - About + درباره Add to favorites Add to playing queue Add to playlist Clear playing queue Cycle repeat mode - Delete - Delete from device - Details + حذف + حذف از دستگاه + جزئيات Go to album Go to artist Go to genre From 55049bb342efddadfe6d1254d4040b8071f3b3a2 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sun, 20 Jun 2021 15:43:23 +0530 Subject: [PATCH 0131/1603] New translations strings.xml (Persian) --- app/src/main/res/values-fa-rIR/strings.xml | 94 +++++++++++----------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index e5f04db92..c1ba475e1 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -7,75 +7,75 @@ درباره Add to favorites Add to playing queue - Add to playlist + افزودن به لیست پخش Clear playing queue Cycle repeat mode حذف حذف از دستگاه جزئيات - Go to album + رفتن به آلبوم Go to artist Go to genre Go to start directory - Grant + اعطا کردن Grid size Grid size (land) - New playlist - Next - Play - Play all - Play next - Play/Pause - Previous - Remove from favorites - Remove from playing queue + فهرست پخش جدید %d + بعدی + پخش + پخش همه + پخش بعدی + پخش/توقف + قبلى + حذف از علاقه مندی ها + حذف از لیست پخش Remove from playlist - Rename - Save playing queue - Scan - Search - Start - Set as ringtone + تغییر نام + ذخیره صف پلی لیست + اسکن + جستجو + شروع + تنظیم به‌عنوان زنگ Set as start directory - "Settings" - Share - Shuffle all - Shuffle playlist - Sleep timer + "تنظیمات" + اشتراک ﮔﺬﺍﺭﯼ + پخش تصادفی همه + پخش تصادفی + تایمر خواب Sort order - Tag editor + ویرایشگر برچسب Toggle favorite Toggle shuffle mode - Adaptive - Add - "Add to playlist" + تطبیق + ﺍﻓﺰﻭﺩﻥ + "افزودن به لیست پخش" "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album - Song + آهنگ Songs Album artist - Albums + آلبوم‌ها - Album + آلبوم Albums - Always + همیشه Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big - Card - Classic - Small - Text - Artist + بزرگ + کارت + کلاسیک + كوچك + متن + هنرمند Artists Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto + خودکار Biography Just Black Blacklist @@ -86,7 +86,7 @@ Issues are not enabled for the selected repository. Please contact the app developer. An unexpected error occurred. Please contact the app developer. Wrong username or password - Issue + مسئله Send manually Please enter an issue description Please enter your valid GitHub password @@ -96,22 +96,22 @@ Send using GitHub account Buy now Cancel - Card + کارت Colored Card Square Card - Card + کارت Carousel effect on the now playing screen Cascading Changelog Changelog maintained on the Telegram channel Circle - Circular - Classic + دایره ای + کلاسیک Clear Clear blacklist Clear queue - Color - Colors + رنگ + رنگ ها Composer Copied device info to clipboard. Couldn\u2019t create playlist. @@ -212,7 +212,7 @@ Name Most played Never - New playlist + فهرست پخش جدید %d %s is the new start directory. Next Song You have no albums @@ -406,7 +406,7 @@ Sort order Ascending Album - Artist + هنرمند Composer Date added Date modified From 0e4585b9eadc8b3600b530d24905db7affdc1b38 Mon Sep 17 00:00:00 2001 From: Ross Nelson Date: Fri, 9 Jul 2021 20:18:35 -0500 Subject: [PATCH 0132/1603] Modernize repo links --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- CONTRIBUTING.md | 4 ++-- README.md | 8 ++++---- .../main/java/code/name/monkey/retromusic/Constants.kt | 6 +++--- .../retromusic/activities/bugreport/BugReportActivity.kt | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 0b5a8fd8d..97bdcf1f6 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,7 +7,7 @@ assignees: '' --- -**Have you read the [FAQ](https://www.github.com/h4h13/RetroMusicPlayer/tree/dev/FAQ.md)?** +**Have you read the [FAQ](https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/dev/FAQ.md)?** [Yes/No] **Has the bug already been reported? Please search in GitHub issue tab before creating an issue.** diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9c190e380..891374b6a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,7 +1,7 @@ # Contributing ## Using the issue tracker -The [issue tracker](https://github.com/h4h13/RetroMusicPlayer/issues) is the preferred channel for bug reports, feature requests and submitting pull requests, but please follow these rules: +The [issue tracker](https://github.com/RetroMusicPlayer/RetroMusicPlayer/issues) is the preferred channel for bug reports, feature requests and submitting pull requests, but please follow these rules: * Please **do not** derail or troll issues. Keep the discussion on topic and respect the opinions of others. @@ -30,6 +30,6 @@ Feature requests are welcome, please make sure to be as detailed as possible and **Please ask first** before embarking on any significant pull request (e.g. implementing features, refactoring code), otherwise you risk spending a lot of time working on something that developers might not want to merge into the project. To avoid that, you can join the official [Telegram group](https://t.me/retromusicapp) or open an issue. ## License -By contributing your code, you agree to license your contribution under the [GNU General Public License](https://github.com/h4h13/RetroMusicPlayer/blob/dev/LICENSE.md). +By contributing your code, you agree to license your contribution under the [GNU General Public License](https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/dev/LICENSE.md). Please note we have a code of conduct, please follow it in all your interactions with the project. diff --git a/README.md b/README.md index 45351fe29..ddcdc673d 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Retro Music Player 🎵 -[![Generic badge](https://img.shields.io/badge/Platform-Android-green.svg)](https://github.com/h4h13/RetroMusicPlayer) -[![Generic badge](https://img.shields.io/badge/minSdkVersion-21-green.svg)](https://github.com/h4h13/RetroMusicPlayer) +[![Generic badge](https://img.shields.io/badge/Platform-Android-green.svg)](https://github.com/RetroMusicPlayer/RetroMusicPlayer) +[![Generic badge](https://img.shields.io/badge/minSdkVersion-21-green.svg)](https://github.com/RetroMusicPlayer/RetroMusicPlayer) [![Generic badge](https://img.shields.io/badge/Download-Google_Play-green.svg)](https://play.google.com/store/apps/details?id=code.name.monkey.retromusic&hl=en_IN) -[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://github.com/h4h13/RetroMusicPlayer/blob/master/LICENSE.txt) +[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/dev/LICENSE.md) [![Twitter Follow](https://img.shields.io/twitter/follow/retromusicapp?style=social)](https://twitter.com/retromusicapp) [![Crowdin](https://badges.crowdin.net/retromusicplayer/localized.svg)](https://crowdin.com/project/retromusicplayer) @@ -71,7 +71,7 @@ favorite songs. No other music player has this feature. We are trying our best to bring you the best user experience. The app is regularly being updated for bug fixes and new features. ### ❓ FAQ -Please read the FAQ [here](https://github.com/h4h13/RetroMusicPlayer/blob/dev/FAQ.md) +Please read the FAQ [here](https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/dev/FAQ.md) In any case, you find or notice any bugs please report them by sending us an [e-mail](mailto:retromusicapp@gmail.com). We will fix bugs as soon as diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt index 011a98c08..e29a41bb7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -21,15 +21,15 @@ object Constants { const val PRO_VERSION_PRODUCT_ID = "pro_version" const val RATE_ON_GOOGLE_PLAY = "https://play.google.com/store/apps/details?id=code.name.monkey.retromusic" - const val TRANSLATE = "https://github.com/h4h13/RetroMusicPlayer" - const val GITHUB_PROJECT = "https://github.com/h4h13/RetroMusicPlayer" + const val TRANSLATE = "https://github.com/RetroMusicPlayer/RetroMusicPlayer" + const val GITHUB_PROJECT = "https://github.com/RetroMusicPlayer/RetroMusicPlayer" const val TELEGRAM_CHANGE_LOG = "https://t.me/retromusiclog" const val USER_PROFILE = "profile.jpg" const val USER_BANNER = "banner.jpg" const val APP_INSTAGRAM_LINK = "https://www.instagram.com/retromusicapp/" const val APP_TELEGRAM_LINK = "https://t.me/retromusicapp/" const val APP_TWITTER_LINK = "https://twitter.com/retromusicapp" - const val FAQ_LINK = "https://github.com/h4h13/RetroMusicPlayer/blob/master/FAQ.md" + const val FAQ_LINK = "https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/dev/FAQ.md" const val PINTEREST = "https://in.pinterest.com/retromusicapp/" const val AUDIO_SCROBBLER_URL = "https://ws.audioscrobbler.com/2.0/" diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt index 7c7eb81ed..358ddf82e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt @@ -230,7 +230,7 @@ open class BugReportActivity : AbsThemeActivity() { onSaveExtraInfo() val report = Report(bugTitle, bugDescription, deviceInfo, extraInfo) - val target = GithubTarget("h4h13", "RetroMusicPlayer") + val target = GithubTarget("RetroMusicPlayer", "RetroMusicPlayer") ReportIssueAsyncTask.report(this, report, target, login) } @@ -337,6 +337,6 @@ open class BugReportActivity : AbsThemeActivity() { private const val STATUS_BAD_CREDENTIALS = 401 private const val STATUS_ISSUES_NOT_ENABLED = 410 - private const val ISSUE_TRACKER_LINK = "https://github.com/h4h13/RetroMusicPlayer" + private const val ISSUE_TRACKER_LINK = "https://github.com/RetroMusicPlayer/RetroMusicPlayer" } } From 31f365ee26f62c7fe2bd1671f722c738bf9a7287 Mon Sep 17 00:00:00 2001 From: Ross Nelson Date: Fri, 9 Jul 2021 21:35:29 -0500 Subject: [PATCH 0133/1603] Update reference from dev branch to master branch --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- CONTRIBUTING.md | 2 +- README.md | 4 ++-- app/src/main/java/code/name/monkey/retromusic/Constants.kt | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 97bdcf1f6..1e177c793 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,7 +7,7 @@ assignees: '' --- -**Have you read the [FAQ](https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/dev/FAQ.md)?** +**Have you read the [FAQ](https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/master/FAQ.md)?** [Yes/No] **Has the bug already been reported? Please search in GitHub issue tab before creating an issue.** diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 891374b6a..2775d78f3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,6 +30,6 @@ Feature requests are welcome, please make sure to be as detailed as possible and **Please ask first** before embarking on any significant pull request (e.g. implementing features, refactoring code), otherwise you risk spending a lot of time working on something that developers might not want to merge into the project. To avoid that, you can join the official [Telegram group](https://t.me/retromusicapp) or open an issue. ## License -By contributing your code, you agree to license your contribution under the [GNU General Public License](https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/dev/LICENSE.md). +By contributing your code, you agree to license your contribution under the [GNU General Public License](https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/master/LICENSE.md). Please note we have a code of conduct, please follow it in all your interactions with the project. diff --git a/README.md b/README.md index ddcdc673d..3286447f4 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Generic badge](https://img.shields.io/badge/Platform-Android-green.svg)](https://github.com/RetroMusicPlayer/RetroMusicPlayer) [![Generic badge](https://img.shields.io/badge/minSdkVersion-21-green.svg)](https://github.com/RetroMusicPlayer/RetroMusicPlayer) [![Generic badge](https://img.shields.io/badge/Download-Google_Play-green.svg)](https://play.google.com/store/apps/details?id=code.name.monkey.retromusic&hl=en_IN) -[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/dev/LICENSE.md) +[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/master/LICENSE.md) [![Twitter Follow](https://img.shields.io/twitter/follow/retromusicapp?style=social)](https://twitter.com/retromusicapp) [![Crowdin](https://badges.crowdin.net/retromusicplayer/localized.svg)](https://crowdin.com/project/retromusicplayer) @@ -71,7 +71,7 @@ favorite songs. No other music player has this feature. We are trying our best to bring you the best user experience. The app is regularly being updated for bug fixes and new features. ### ❓ FAQ -Please read the FAQ [here](https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/dev/FAQ.md) +Please read the FAQ [here](https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/master/FAQ.md) In any case, you find or notice any bugs please report them by sending us an [e-mail](mailto:retromusicapp@gmail.com). We will fix bugs as soon as diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt index e29a41bb7..875d21480 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -29,7 +29,7 @@ object Constants { const val APP_INSTAGRAM_LINK = "https://www.instagram.com/retromusicapp/" const val APP_TELEGRAM_LINK = "https://t.me/retromusicapp/" const val APP_TWITTER_LINK = "https://twitter.com/retromusicapp" - const val FAQ_LINK = "https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/dev/FAQ.md" + const val FAQ_LINK = "https://github.com/RetroMusicPlayer/RetroMusicPlayer/blob/master/FAQ.md" const val PINTEREST = "https://in.pinterest.com/retromusicapp/" const val AUDIO_SCROBBLER_URL = "https://ws.audioscrobbler.com/2.0/" From 4509b001d8a660f7c978603d084ef4cc251166d5 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 11:49:34 +0530 Subject: [PATCH 0134/1603] Update strings.xml --- app/src/main/res/values/strings.xml | 68 ++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2b12cb0b8..26a604f68 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ - + About %s Team, social links @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -124,26 +128,40 @@ Currently listening to %1$s by %2$s. Kinda Dark Delete playlist - %1$s?]]> + + %1$s?]]> + Delete playlists Delete song - %1$s?]]> + + %1$s?]]> + Delete songs - %1$d playlists?]]> - %1$d songs?]]> + + %1$d playlists?]]> + + + %1$d songs?]]> + Deleted %1$d songs. + Deleting Songs Depth Description Device info Allow Retro Music to modify audio settings Set ringtone Do you want to clear the blacklist? - %1$s from the blacklist?]]> + + %1$s from the blacklist?]]> + Donate If you think I deserve to get paid for my work, you can leave some money here Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -184,8 +202,8 @@ Import playlist It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram Instagram + Share your Retro Music setup to showcase on Instagram Keyboard Bitrate Format @@ -229,7 +247,9 @@ You have no songs Normal Normal lyrics - %s is not listed in the media store.]]> + + %s is not listed in the media store.]]> + Not recently played Nothing to scan. Nothing to see @@ -244,6 +264,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -282,6 +304,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -300,6 +323,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -310,6 +335,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -331,6 +357,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -350,9 +378,13 @@ Remove cover Remove from blacklist Remove song from playlist - %1$s from the playlist?]]> + + %1$s from the playlist?]]> + Remove songs from playlist - %1$d songs from the playlist?]]> + + %1$d songs from the playlist?]]> + Rename playlist Report an issue Report bug @@ -365,7 +397,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -453,8 +485,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -466,4 +501,7 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist +{"mode":"full","isActive":false} From c87b5a736d798bfa1f185c6471e59f4e5891ee2c Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:03:48 +0530 Subject: [PATCH 0135/1603] Update strings.xml --- app/src/main/res/values/strings.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 26a604f68..caa31baf4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -504,4 +504,3 @@ Show Album Artists Add to Blacklist -{"mode":"full","isActive":false} From 49e012cf937542572ec68bc66db2b4853fec8de8 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:07 +0530 Subject: [PATCH 0136/1603] New translations strings.xml (Romanian) --- app/src/main/res/values-ro-rRO/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 2f992da57..c7cff275e 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -8,11 +8,13 @@ Adaugă la favorite Adaugă la coada de redare Adaugă la un playlist + Cast Curăță coada de redare Cycle repeat mode Șterge Șterge de pe dispozitiv Detalii + Edit Pagină album Pagină artist Go to genre @@ -49,6 +51,7 @@ Adaptive Adaugă "Adaugă la playlist" + Add Time Framed Lyrics "Adăugat 1 titlu la coada de redare." Adăugate %1$d titluri la coada de redare Album @@ -57,7 +60,7 @@ Songs Songs - Artistul albumului + Album Artist Albume Album @@ -68,13 +71,14 @@ Hey! încearcă acest music player la adresa: https://play.google.com/store/apps/details?id=%s Amestecă Top cântece - Big + Full Image Card Classic Mic - Text + Minimal Text Artist Artiști + Audio Fade Duration Folcalizarea audio a fost respinsă. Ajustați setările de sunet și comenzile egalizatorului Auto @@ -105,7 +109,7 @@ Carousel effect on the now playing screen Cascading Modificări - Lista de modificări păstrată din aplicația \"Telegram\" + Check out What\'s New Circle Circular Classic @@ -134,6 +138,7 @@ %1$d playlist-uri?]]> %1$d cântece?]]> Au fost șterse %1$d cântece. + Deleting Songs Depth Description Device info @@ -146,6 +151,9 @@ Cumpăraţi-mi o(un) Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Gol Egalizator FAQ @@ -245,6 +253,8 @@ Altele Password Ultimele 3 luni + Paste Lyrics Here + Paste timeframe lyrics here Peak Accesul la stocarea externă este respinsă. The app needs permission to access your device storage for playing music @@ -283,6 +293,7 @@ Folosește coperta de album curentă ca imagine de fundal pe ecranul de blocare. Show Album Artists in the Artist category Notificațiile, navigarea etc. + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Spălăcește coperta de album pe ecranul de blocare. Poate cauza probleme cu alte aplcicatii sau widget-uri. @@ -301,6 +312,8 @@ Configure visibility and order of library categories. Comenzi pe ecranul de blocare pentru Retro music. Detalii privind licența pentru software open source + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Mod imersiv Începe redarea imediat ce sunt conectate căștile. Shuffle mode will turn off when playing a new list of songs @@ -311,6 +324,7 @@ Album cover skip Comenzi rapide colorate Reduce volumul la pierderea focalizării + Fade Audio Descărcați automat imagini ale artistului Lista neagră Bluetooth playback @@ -332,6 +346,8 @@ Comenzi ecran complet Aspect Licențe open source + Show Lyrics + Show Suggestions Tab titles mode Efect de carusel Ecran complet @@ -366,7 +382,7 @@ Retro Music Player Cumpărați RetroMusic Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -454,8 +470,11 @@ Username Versiune Vertical flip + View on Telegram Volume Căutare pe internet + Website + Check out our Website Welcome, Ce doriți să expediați? What\'s New @@ -467,4 +486,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From cab950c77186a00c50d1f331041d65c93c009ca2 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:08 +0530 Subject: [PATCH 0137/1603] New translations strings.xml (Croatian) --- app/src/main/res/values-hr-rHR/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml index 1a1fb9a00..b8651a129 100644 --- a/app/src/main/res/values-hr-rHR/strings.xml +++ b/app/src/main/res/values-hr-rHR/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -57,7 +60,7 @@ Songs Songs - Album artist + Album Artist Albums Album @@ -68,13 +71,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -105,7 +109,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -134,6 +138,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -146,6 +151,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -245,6 +253,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -283,6 +293,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -301,6 +312,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -311,6 +324,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -332,6 +346,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -366,7 +382,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -454,8 +470,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -467,4 +486,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 88d3c5ac67b861d725f4d6b63441b5f92d6f206a Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:09 +0530 Subject: [PATCH 0138/1603] New translations strings.xml (Chinese Simplified) --- app/src/main/res/values-zh-rCN/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 01127dcf3..1c3c27883 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -8,11 +8,13 @@ 添加到收藏夹 添加到播放队列 添加到播放列表 + Cast 清空播放队列 循环重复模式 删除 从设备中移除 详情 + Edit 查看此专辑 查看艺术家 查看流派 @@ -49,13 +51,14 @@ 自适应 添加 "添加到播放列表" + Add Time Framed Lyrics "已添加1首歌到播放队列。" 已添加 %1$d 首歌到播放队列。 专辑 Songs - 专辑艺术家 + Album Artist 专辑 Albums @@ -64,13 +67,14 @@ 嘿,快来瞧瞧这个酷炫的音乐播放器:https://play.google.com/store/apps/details?id=%s 随机播放 热门曲目 - Big + Full Image 卡片模式 经典模式 - Text + Minimal Text 艺术家 艺术家 + Audio Fade Duration 音频焦点丢失。 更改声音设置或调整均衡器 自动 @@ -101,7 +105,7 @@ 在「正在播放」界面使用轮播效果 层叠 更新日志 - 在 Telegram 频道上维护更新日志 + Check out What\'s New 环形 圆形 古典 @@ -130,6 +134,7 @@ %1$d 吗?]]> %1$d 吗?]]> 已删除 %1$d 首歌曲。 + Deleting Songs 深度 详情 设备信息 @@ -142,6 +147,9 @@ 用以下方式捐赠: Done 驾驶模式 + Edit Button + Edit Lyrics + Edit Synced Lyrics 空空如也 均衡器 常见问题和解答 @@ -241,6 +249,8 @@ 其他 密码 最近三个月 + Paste Lyrics Here + Paste timeframe lyrics here 顶点 访问外部存储权限时被拒绝。 The app needs permission to access your device storage for playing music @@ -279,6 +289,7 @@ 将正在播放的歌曲专辑封面设置为锁屏壁纸 Show Album Artists in the Artist category 当系统播放声音或收到通知时降低音量 + Fade Audio when Song is Paused or Played 在媒体库中隐藏列入黑名单的文件夹内容。 连接到蓝牙设备后立即开始播放 在锁屏中显示模糊化的专辑封面 @@ -300,6 +311,8 @@ 配置媒体库的可见性和顺序 使用 Retro Music 的自定义锁屏 开源许可详情 + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen 沉浸模式 连接耳机后立即开始播放 播放新列表时关闭随机播放 @@ -310,6 +323,7 @@ 专辑封面跳过 着色应用快捷方式 焦点丢失时降低音量 + Fade Audio 自动下载艺术家图片 黑名单 蓝牙播放 @@ -331,6 +345,8 @@ 全屏控件 正在播放主题 开源许可 + Show Lyrics + Show Suggestions 标签标题模式 轮播效果 全屏应用 @@ -365,7 +381,7 @@ Retro Music Player Retro Music 高级版 The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) 文件删除失败:%s 无法获取 SAF URI @@ -453,8 +469,11 @@ 用户名 版本 垂直翻转 + View on Telegram 音量 网络搜索 + Website + Check out our Website 欢迎, 您想分享什么? 更新内容 @@ -466,4 +485,6 @@ 请至少选择一个分类。 将跳转至问题追踪网站。 您的账户数据仅用于验证。 + Show Album Artists + Add to Blacklist From cbf9d48732a8153e36226c5ba8a586f1a84208dd Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:10 +0530 Subject: [PATCH 0139/1603] New translations strings.xml (Chinese Traditional) --- app/src/main/res/values-zh-rTW/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index b65e1d896..24059c9e6 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -8,11 +8,13 @@ 加到最愛 加入播放佇列 加入播放清單... + Cast 清空播放佇列 Cycle repeat mode 刪除 刪除 詳細資訊 + Edit 開啟此專輯 前往此演唱者頁面 Go to genre @@ -49,13 +51,14 @@ Adaptive Add "加入播放清單" + Add Time Framed Lyrics "已將 1 首歌加到播放佇列" 已將 %1$d 首歌加到播放佇列。 專輯 Songs - 專輯演出者 + Album Artist 專輯 Albums @@ -64,13 +67,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s 隨機播放 最佳單曲 - Big + Full Image Card 經典 小型 - Text + Minimal Text 演唱者 演唱者 + Audio Fade Duration 無法控制音訊焦點。 Change the sound settings and adjust the equalizer controls Auto @@ -101,7 +105,7 @@ Carousel effect on the now playing screen Cascading 新功能 - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular 經典 @@ -130,6 +134,7 @@ %1$d 個播放清單?]]> %1$d 首歌嗎?]]> 已刪除 %1$d 首歌。 + Deleting Songs Depth Description Device info @@ -142,6 +147,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics 空的 等化器 FAQ @@ -241,6 +249,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak 無法取得存取外部儲存空間的權限。 The app needs permission to access your device storage for playing music @@ -279,6 +289,7 @@ 將播放中歌曲的專輯封面設為鎖定螢幕背景。 Show Album Artists in the Artist category 通知鈴聲、導航語音等。 + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device 在鎖定畫面上模糊化專輯圖片。第三方程式和小工具可能不正常運作。 @@ -297,6 +308,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -307,6 +320,7 @@ Album cover skip 彩色的應用快捷方式 在焦點音訊響起時降低音量 + Fade Audio 自動下載演唱者圖片 Blacklist Bluetooth playback @@ -328,6 +342,8 @@ Fullscreen controls 外觀 開源授權協議 + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -362,7 +378,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -450,8 +466,11 @@ Username 版本 Vertical flip + View on Telegram Volume 網路搜尋 + Website + Check out our Website Welcome, 你想分享哪些內容? What\'s New @@ -463,4 +482,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 80419dafd30e86f03a2621a79e7d472a6cc39e51 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:11 +0530 Subject: [PATCH 0140/1603] New translations strings.xml (Vietnamese) --- app/src/main/res/values-vi-rVN/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 03c9c922d..720c5e2c0 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -8,11 +8,13 @@ Thêm vào yêu thích Thêm vào hàng đợi Thêm vào danh sách phát + Cast Xoá hàng đợi Cycle repeat mode Xoá Xóa khỏi thiết bị Chi tiết + Edit Đi đến album Đi đến nghệ sĩ Chuyển đến thể loại @@ -49,13 +51,14 @@ Thích nghi Thêm "Thêm vào danh sách phát" + Add Time Framed Lyrics "Đã thêm 1 bài vào háng đợi phát." Đã thêm %1$d bài vào hàng đợi phát. Album Songs - Album của nghệ sĩ + Album Artist Album Albums @@ -64,13 +67,14 @@ Hãy dùng thử trình phát nhạc siêu chất này tại: https://play.google.com/store/apps/details?id=%s Ngẫu nhiên Bản nhạc hàng đầu - Big + Full Image Thẻ Cổ điển Nhỏ - Text + Minimal Text Nghệ sĩ Nghệ sĩ + Audio Fade Duration Tập trung âm thanh bị từ chối Thay đổi cài đặt âm thanh và điều chỉnh các điều khiển bộ chỉnh âm Tự động @@ -102,7 +106,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Hiệu ứng băng chuyền trên màn hình đang phát Xếp tầng Thay đổi - Nhật ký thay đổi được cập nhật trong ứng dụng Telegram + Check out What\'s New Circle Thông tư Cổ điển @@ -131,6 +135,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" %1$d danh sách phát?]]> %1$d bài hát?]]> Đã xoá %1$d bài hát. + Deleting Songs Độ sâu Mô tả Thông tin thiết bị @@ -143,6 +148,9 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Mua cho tôi một: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Trống Bộ chỉnh âm Câu hỏi thường gặp @@ -242,6 +250,8 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Khác Mật khẩu Mỗi tháng + Paste Lyrics Here + Paste timeframe lyrics here Peak Quyền truy cập bộ nhớ ngoài bị từ chối. The app needs permission to access your device storage for playing music @@ -280,6 +290,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Sử dụng ảnh bìa album bài hát đang phát làm ảnh nền màn hình khóa. Show Album Artists in the Artist category Giảm âm lượng khi có âm báo hệ thống hoặc khi bạn có thông báo + Fade Audio when Song is Paused or Played Nội dung của các thư mục trong danh sách đen được ẩn khỏi thư viện của bạn. Start playing as soon as connected to bluetooth device Làm mờ ảnh bìa album trên màn hình khóa. Có thể gây ra sự cố với các ứng dụng và tiện ích của bên thứ ba @@ -298,6 +309,8 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Khả năng hiển thị và thứ tự của các danh mục trong thư viện. Sử dụng các điều khiển màn hình khóa tùy chỉnh của Retro Music Chi tiết giấy phép của phần mềm mã nguồn mở + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Chế độ hoà nhập Tự động phát nhạc khi kết nối tai nghe Chế độ phát ngẫu nhiên sẽ tắt khi phát danh sách bài hát mới @@ -308,6 +321,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Kiểu bìa album đang phát Đổi màu lối tắt ứng dụng Giảm âm lượng khi có âm báo + Fade Audio Tự động tải xuống hình ảnh nghệ sĩ Danh sách đen Bluetooth playback @@ -329,6 +343,8 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Điều khiển toàn màn hình. Giao diện đang phát Giấy phép nguồn mở + Show Lyrics + Show Suggestions Chế độ tiêu đề thẻ Hiệu ứng quay vòng Toàn màn hình @@ -363,7 +379,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -451,8 +467,11 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Tên người dùng Phiên bản Vertical flip + View on Telegram Volume Tìm kiếm trên web + Website + Check out our Website Chào mừng, Bạn muốn chia sẻ gì? Có gì mới! @@ -464,4 +483,6 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Bạn phải chọn ít nhất một danh mục. Bạn sẽ được chuyển tiếp đến trang web theo dõi vấn đề. Dữ liệu tài khoản của bạn chỉ được sử dụng để xác thực. + Show Album Artists + Add to Blacklist From a3b58d96a43857b6c9ef9634458d1167204c678f Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:12 +0530 Subject: [PATCH 0141/1603] New translations strings.xml (Icelandic) --- app/src/main/res/values-is-rIS/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-is-rIS/strings.xml b/app/src/main/res/values-is-rIS/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-is-rIS/strings.xml +++ b/app/src/main/res/values-is-rIS/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 5468cfa1df7594849dfc0ecaf6e73e7dc2f2079d Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:13 +0530 Subject: [PATCH 0142/1603] New translations strings.xml (Portuguese, Brazilian) --- app/src/main/res/values-pt-rBR/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f47c3d1f3..3b2866e03 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -8,11 +8,13 @@ Adicionar aos favoritos Adicionar à lista de reprodução Adicionar à lista + Cast Limpar a atual fila de reprodução Alternar modo de repetição Excluir Excluir do dispositivo Detalhes + Edit Ir para o álbum Ir para o artista Ir para o gênero @@ -49,6 +51,7 @@ Adaptável Adicionar "Adicionar à lista" + Add Time Framed Lyrics "Uma música foi adicionada à fila de reprodução" Foram adicionadas %1$d músicas na fila de reprodução Álbum @@ -56,7 +59,7 @@ Song Songs - Álbum do artista + Album Artist Álbuns Album @@ -66,13 +69,14 @@ Ei, confira este reprodutor de música legal em: https://play.google.com/store/apps/details?id=%s Aleatório Músicas favoritas - Big + Full Image Música Retrô-Cartão Música Retrô-Clássico Música Retrô-Pequeno - Text + Minimal Text Artista Artistas + Audio Fade Duration Foco de áudio negado Altere as configurações de som e ajuste os controles do equalizador Automático @@ -103,7 +107,7 @@ Efeito carrossel na tela de reprodução Cascata Lista de mudanças - Lista de mudanças mantida no Canal no Telegram + Check out What\'s New Círculo Circular Clássico @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d músicas?]]> %1$d músicas foram excluídas. + Deleting Songs Profundidade Descrição Informação do dispositivo @@ -144,6 +149,9 @@ Compre-me um: Done Modo de direção + Edit Button + Edit Lyrics + Edit Synced Lyrics Vazio Equalizador Perguntas frequentes @@ -243,6 +251,8 @@ Outro Senha Últimos 3 meses + Paste Lyrics Here + Paste timeframe lyrics here Peak Permissão para acessar o armazenamento externo negada The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Usar a capa do álbum da música em reprodução como papel de parede na tela de bloqueio Show Album Artists in the Artist category Diminua o volume quando um som do sistema for reproduzido ou uma notificação for recebida + Fade Audio when Song is Paused or Played O conteúdo das pastas na lista negra está oculto da sua biblioteca. Comece a tocar assim que conectado ao dispositivo bluetooth Desfoque a capa do álbum na tela de bloqueio. Pode causar problemas com aplicativos e widgets de terceiros @@ -299,6 +310,8 @@ Configurar visibilidade e ordem de categorias da biblioteca. Usar controles personalizados do Retro Music na tela de bloqueio Detalhes da licença para software de código aberto + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Modo imersivo Comecar a reproduzir imediatamente quando os fones de ouvido forem conectados O modo aleatório será desativado ao reproduzir uma nova lista de músicas @@ -309,6 +322,7 @@ Pular a capa do álbum Colorir os atalhos do aplicativo Reduza o volume na perda de foco + Fade Audio Baixar automaticamente as imagens dos artistas Lista negra Reprodução Bluetooth @@ -330,6 +344,8 @@ Controles em tela cheia Tema da tela \"Reproduzindo agora\" Licenças de código aberto + Show Lyrics + Show Suggestions Modo de títulos nas abas Efeito carrossel Aplicativo em tela cheia @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) Falha ao excluir arquivo: %s Não foi possível obter URI SAF @@ -452,8 +468,11 @@ Nome de usuário Versão Giro vertical + View on Telegram Volume Pesquisar na internet + Website + Check out our Website Bem-vindo(a), O que você quer compartilhar? Novidades @@ -465,4 +484,6 @@ Você precisa selecionar ao menos uma categoria. Você será encaminhado para o website do rastreador de problemas. Os dados da sua conta são usados ​​apenas para autenticação. + Show Album Artists + Add to Blacklist From 1a218e4195bc546c06ce2fe0bf02807c5f093640 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:14 +0530 Subject: [PATCH 0143/1603] New translations strings.xml (Indonesian) --- app/src/main/res/values-in-rID/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 224b8d344..6bec2e83b 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,13 +51,14 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album Songs - Album artist + Album Artist Albums Albums @@ -64,13 +67,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -101,7 +105,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -130,6 +134,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -142,6 +147,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -241,6 +249,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -279,6 +289,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -297,6 +308,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -307,6 +320,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -328,6 +342,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -362,7 +378,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -450,8 +466,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -463,4 +482,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 2bc608048f4c74cc5dc3476bba49d128150187db Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:15 +0530 Subject: [PATCH 0144/1603] New translations strings.xml (Persian) --- app/src/main/res/values-fa-rIR/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index c1ba475e1..89957e130 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue افزودن به لیست پخش + Cast Clear playing queue Cycle repeat mode حذف حذف از دستگاه جزئيات + Edit رفتن به آلبوم Go to artist Go to genre @@ -49,6 +51,7 @@ تطبیق ﺍﻓﺰﻭﺩﻥ "افزودن به لیست پخش" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ آهنگ Songs - Album artist + Album Artist آلبوم‌ها آلبوم @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - بزرگ + Full Image کارت کلاسیک كوچك - متن + Minimal Text هنرمند Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls خودکار @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle دایره ای کلاسیک @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From e7142466d6c7658ba4b680f63abf2a4d26a43b0a Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:16 +0530 Subject: [PATCH 0145/1603] New translations strings.xml (Tamil) --- app/src/main/res/values-ta-rIN/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 56143a4732f02a5b0de18a36bd0114510a88cbc7 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:17 +0530 Subject: [PATCH 0146/1603] New translations strings.xml (Bengali) --- app/src/main/res/values-bn-rBD/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From e2986a225b7f90e184c655ea9734150c263fdcdc Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:18 +0530 Subject: [PATCH 0147/1603] New translations strings.xml (Thai) --- app/src/main/res/values-th-rTH/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index 224b8d344..6bec2e83b 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,13 +51,14 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album Songs - Album artist + Album Artist Albums Albums @@ -64,13 +67,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -101,7 +105,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -130,6 +134,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -142,6 +147,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -241,6 +249,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -279,6 +289,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -297,6 +308,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -307,6 +320,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -328,6 +342,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -362,7 +378,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -450,8 +466,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -463,4 +482,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 1ec211fde3e9e5352b48f7148c9201b10883cfa1 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:19 +0530 Subject: [PATCH 0148/1603] New translations strings.xml (Estonian) --- app/src/main/res/values-et-rEE/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-et-rEE/strings.xml +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 3efdb9f09eac8b1b258c0b91af6123fc5cbc1b78 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:20 +0530 Subject: [PATCH 0149/1603] New translations strings.xml (Turkish) --- app/src/main/res/values-tr-rTR/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 0e1d30562..c5d733e31 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -8,11 +8,13 @@ Favorilere ekle Oynatma kuyruğuna ekle Oynatma listesine ekle + Cast Oynatma kuyruğunu temizle Tekrarlı oynatma modu Sil Cihazdan sil Ayrıntılar + Edit Albüme git Sanatçıya git Şarkı türüne git @@ -49,6 +51,7 @@ Uyarlanabilir Ekle "Oynatma listesine ekle" + Add Time Framed Lyrics "Kuyruğa 1 parça eklendi." %1$d şarkı kuyruğuna eklendi. Albüm @@ -56,7 +59,7 @@ Şarkı Şarkılar - Albüm sanatçısı + Album Artist Albümler Albüm @@ -66,13 +69,14 @@ Hey, şu havalı müzik çalara şuradan bir göz atmaya ne dersin: https://play.google.com/store/apps/details?id=%s Karıştır Sık oynatılan parçalar - Big + Full Image Retro müzik - Kart Retro müzik - Klasik Retro müzik - Küçük - Text + Minimal Text Sanatçı Sanatçılar + Audio Fade Duration Ses odaklaması reddedildi. Ses ayarlarını değiştirin ve ekolayzır kontrollerini ayarlayın Otomatik @@ -103,7 +107,7 @@ Şimdi oynatılıyor ekranında atlıkarınca efekti Basamaklı Değişim kayıt günlüğü - Sürümlerdeki değişiklik kayıtları Telegram üzerinde tutulmaktadır. + Check out What\'s New Çember Dairesel Klasik @@ -132,6 +136,7 @@ %1$d çalma listeleri silinsin mi?]]> %1$d parçaları silinsin mi?]]> %1$d parça silindi. + Deleting Songs Derinlik Açıklama Cihaz Bilgisi @@ -144,6 +149,9 @@ Bağışlayacağınız tutar: Done Sürüş modu + Edit Button + Edit Lyrics + Edit Synced Lyrics Boş Ekolayzır SSS @@ -243,6 +251,8 @@ Diğer Şifre Son 3 ay + Paste Lyrics Here + Paste timeframe lyrics here Zirve Harici depolama izni reddedildi. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Çalmakta olan şarkı albüm kapağını kilit ekranı duvar kağıdı olarak kullanın Show Album Artists in the Artist category Sistem sesi çalındığında veya bir bildirim alındığında sesi kısın + Fade Audio when Song is Paused or Played Kara listedeki klasörlerin içeriği kütüphanenizden gizlenir. Bluetooth cihazına bağlanır bağlanmaz çalmaya başla Albüm kapağını kilit ekranında bulanıklaştır. Üçüncü taraf uygulamalar ve widget\'lar ile sorunlara neden olabilir @@ -299,6 +310,8 @@ Kütüphane kategorilerinin görünürlük ve sırasını yapılandırın Retro Müzik\'in özel kilit ekranı kontrollerini kullanın Açık kaynaklı yazılım için lisans detayları + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Sürükleyici modu Kulaklık bağlandıktan hemen sonra çalmaya başla Yeni bir şarkı listesi çalınırken karıştırma modu kapanacak @@ -309,6 +322,7 @@ Albüm kapağını atla Renkli uygulama kısayolları Odak kaybında ses hacmini azaltın + Fade Audio Sanatçı resimlerini otomatik indir Kara Liste Bluetooth playback @@ -330,6 +344,8 @@ Tam ekran kontrolleri Şimdi oynatılıyor teması Açık kaynak lisansları + Show Lyrics + Show Suggestions Sekme başlıkları modu Atlıkarınca efekti Uygulamayı tam ekran yapın @@ -364,7 +380,7 @@ Retro Müzik Çalar Retro Müzik Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) Dosya silme başarısız oldu: %s SAF url\'si alınamıyor. @@ -452,8 +468,11 @@ Kullanıcı Adı Sürüm Dikey çevir + View on Telegram Ses İnternette ara + Website + Check out our Website Hoşgeldiniz, Ne paylaşmak istiyorsunuz? Yenilikler @@ -465,4 +484,6 @@ En az bir kategori seçmek zorundasınız. Sorun izleyici web sitesine yönlendirileceksiniz. Hesap verileriniz sadece kimlik doğrulama için kullanılır. + Show Album Artists + Add to Blacklist From 2fd8beb476481e14f8a8443720fde5e17ab9325d Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:21 +0530 Subject: [PATCH 0150/1603] New translations strings.xml (Latvian) --- app/src/main/res/values-lv-rLV/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml index 94066b500..b8bb4109f 100644 --- a/app/src/main/res/values-lv-rLV/strings.xml +++ b/app/src/main/res/values-lv-rLV/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -57,7 +60,7 @@ Song Songs - Album artist + Album Artist Albums Albums @@ -68,13 +71,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -105,7 +109,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -134,6 +138,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -146,6 +151,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -245,6 +253,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -283,6 +293,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -301,6 +312,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -311,6 +324,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -332,6 +346,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -366,7 +382,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -454,8 +470,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -467,4 +486,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 8d0c9707228d0385068eec8f3593aa5b21731fbf Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:22 +0530 Subject: [PATCH 0151/1603] New translations strings.xml (Hindi) --- app/src/main/res/values-hi-rIN/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 23f1c258e..407c13373 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -8,11 +8,13 @@ पसंदीदा में जोड़े कतार में जोड़ें प्लेलिस्ट में जोड़ें + Cast कतार निकाल दे साइकिल रिपीट मोड हटाएं डिवाइस से हटाएं विवरण + Edit एल्बम पर जाएं कलाकार पर जाएं शैली पर जाएं @@ -49,6 +51,7 @@ अनुकूली जोड़ें "प्लेलिस्ट में जोड़ें" + Add Time Framed Lyrics "कतार मे 1 शीर्षक जोड़ा गया है।" कतार मे %1$d शीर्षक जोड़ा गया है। एल्बम @@ -56,7 +59,7 @@ Song Songs - एल्बम कलाकार + Album Artist एल्बम Album @@ -66,13 +69,14 @@ इस बढ़िया म्यूजिक प्लेयर को यहां देखें:https://play.google.com/store/apps/details?id=%s शफ़ल टॉप गीत - Big + Full Image रेट्रो म्यूजिक - कार्ड रेट्रो म्यूजिक - क्लासिक Small - Text + Minimal Text कलाकार कलाकार + Audio Fade Duration ऑडियो फोकस से इनकार किया। ध्वनि सेटिंग्स बदलें और तुल्यकारक नियंत्रण समायोजित करें ऑटो @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading चेंजलाग - साफ़ + Check out What\'s New Circle Circular रेट्रो म्यूजिक - क्लासिक @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images ब्लैकलिस्ट Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 3da7c2d5c3b6a376c396649eae9ce29ade4ca6c2 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:23 +0530 Subject: [PATCH 0152/1603] New translations strings.xml (Malay) --- app/src/main/res/values-ms-rMY/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-ms-rMY/strings.xml b/app/src/main/res/values-ms-rMY/strings.xml index 224b8d344..6bec2e83b 100644 --- a/app/src/main/res/values-ms-rMY/strings.xml +++ b/app/src/main/res/values-ms-rMY/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,13 +51,14 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album Songs - Album artist + Album Artist Albums Albums @@ -64,13 +67,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -101,7 +105,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -130,6 +134,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -142,6 +147,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -241,6 +249,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -279,6 +289,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -297,6 +308,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -307,6 +320,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -328,6 +342,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -362,7 +378,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -450,8 +466,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -463,4 +482,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 7fceb85821e46661270d214f507c5505b3562bd8 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:24 +0530 Subject: [PATCH 0153/1603] New translations strings.xml (Burmese) --- app/src/main/res/values-my-rMM/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index a53f6a15a..48d24b82d 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -8,11 +8,13 @@ အကြိုက်ဆုံးသို့ထည့်မည် နားထောင်နေသည့်စာရင်းထဲသို့ထည့်မည် Playlist သို့ထည့်မည် + Cast နားထောင်နေသည့်စာရင်းအားရှင်းမည် Cycle repeat mode ဖျက်မည် Device မှဖျက်မည် အသေးစိတ် + Edit Album သို့သွားမည် အဆိုတော်သို့သွားမည် အမျိုးအစားသို့သွားမည် @@ -49,13 +51,14 @@ Adaptive ထည့်မည် "အောက်ပါ Playlist သို့ထည့်မည်" + Add Time Framed Lyrics "နားထောင်နေသည့်စာရင်းထဲသို့ ၁ ပုဒ်ပေါင်းထည့်ခဲ့သည်" နားထောင်နေသည့်စာရင်းထဲသို့ %1$d ပုဒ်ပေါင်းထည့်ခဲ့သည် Album သီချင်းများ - Album အားသီဆိုသူ + Album Artist Albums Albums @@ -64,13 +67,14 @@ ဟေ့ အရမ်းမိုက်တဲ့ဒီ Music Player ကိုတစ်ချက်ကြည့်ကြည့်! https://play.google.com/store/apps/details?id=%s Shuffle ထိပ်ဆုံးသီချင်းများ - ပုံအပြည့် + Full Image ကတ် ရိုးရိုး အသေး - စာပါဝင်မှုနည်း + Minimal Text အဆိုတော် အဆိုတော်များ + Audio Fade Duration အသံအာရုံစိုက်ခြင်းအား ပယ်ဖျက်ခဲ့သည် အသံ Settings များပြောင်းလဲရန်နှင့် Equalizer ချိန်ညှိရန် အလိုအလျောက် @@ -101,7 +105,7 @@ Now Playing Screen ပေါ်တွင် Carousel effect Cascading ပြောင်းလဲမှုမှတ်တမ်း - Telegram channel ရှိ ပြောင်းလဲမှုမှတ်တမ်း + Check out What\'s New အဝိုင်း အဝိုင်း ရိုးရိုး @@ -130,6 +134,7 @@ %1$d ခုကိုဖျက်မှာလား]]> %1$d ပုဒ်ကိုဖျက်မှာလား]]> သီချင်း %1$d ပုဒ်ကိုဖျက်ပစ်ခဲ့သည် + Deleting Songs Depth အကြောင်းအရာအသေးစိတ် Device အချက်အလက် @@ -142,6 +147,9 @@ ဝယ်ပေးမယ်: ပြီးပြီ Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics ဘာမှမရှိပါ Equalizer မေးလေ့ရှိသောမေးခွန်းများ @@ -241,6 +249,8 @@ အခြား Password လွန်ခဲ့သော (၃)လ + Paste Lyrics Here + Paste timeframe lyrics here Peak ပုံစံ External Storage ကြည့်ရှုခွင့်အားငြင်းပယ်ခဲ့သည်။ သီချင်းဖွင့်ရန်အတွက် ယခု App အား Storage ကြည့်ရှုခွင့်ပေးရန်လိုသည်။ @@ -279,6 +289,7 @@ ယခု play နေသောသီချင်း Album cover ပုံအား Lockscreen wallpaper အဖြစ်ထားမည် Album သီဆိုသူများကိုလည်း အဆိုတော် Category တွင်ထားမည် System Sound (သို့) Notification တစ်ခုရောက်လာသည့်အခါ သီချင်းအသံကိုတိုးမည် + Fade Audio when Song is Paused or Played Blacklist folder သိို့သွင်းထားသည်များကို Library တွင်မြင်ရမည်မဟုတ်ပါ Bluetooth device နှင့်ချိတ်ဆက်လိုက်သည်နှင့် သီချင်းစဖွင့်မည် Lockscreen တွင် Album cover ပုံကိုဝါးထားမည်။ Third-party app နှင့် Widget များတွင် ပြဿနာတက်နိုင်သည်။ @@ -297,6 +308,8 @@ Library category များ ဖော်ခြင်း၊ ဖျောက်ခြင်းနှင့် အထားအသိုများ ချိန်ညှိမည် Retro Music ၏ ပြင်ဆင်ထားသော Lockscreen controls များကိုသုံးမည် Open Source software အတွက် လိုင်စင်အချက်အလက်များ + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode နားကြပ်နှင့်ချိတ်ဆက်ပြီးသည့်နှင့် စတင် play မည် သီချင်းဖွင့်မည့်စာရင်း\'အသစ်\'ကို play သည့်အခါ Shuffle Mode ပိတ်သွားပါမည် @@ -307,6 +320,7 @@ Album cover skip Colored App shortcuts Reduce volume on focus loss + Fade Audio အဆိုတော်ဓာတ်ပုံများကို အလိုအလျောက်ဒေါင်းလုဒ်ဆွဲခြင်း လစ်လျူရှုမည့်စာရင်း Bluetooth playback @@ -328,6 +342,8 @@ Lockscreen အပြည့် controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab ခေါင်းစဉ်ပြသခြင်း Carousel effect App ကို screen အပြည့်ထားမည် @@ -362,7 +378,7 @@ Retro Music Player Retro Music Pro သီချင်းများကို Ringtone ထားရန် app အား System Settings များကိုပြင်ဆင်ခွင့်ပေးရန်လိုသည်။ - Ringtone + Ringtone (Optional) ဖိုင်ဖျက်ခြင်းမအောင်မြင်ပါ: %s SAF URI ကိုမရယူနိုင်ပါ @@ -450,8 +466,11 @@ သုံးစွဲသူအမည် Version ဒေါင်လိုက်ဟိုဘက်ဒီဘက်လှန်ခြင်း + View on Telegram အသံအတိုးအကျယ် Web search + Website + Check out our Website မင်္ဂလာပါ ဘာများမျှဝေချင်ပါသလဲ ဘာအသစ်တွေရှိလဲ @@ -463,4 +482,6 @@ အနည်းဆုံး category တစ်ခုရွေးချယ်ရန်လိုအပ်သည် Issue tracker website သို့ခေါ်ဆောင်သွားပါမည် သင့်အကောင့်အချက်အလက်ကို အတည်ပြုရန်အတွက်သာအသုံးပြုပါသည်။ + Show Album Artists + Add to Blacklist From 5209c6ddb7fdaaaf86c9012c800b14381a8aa1bb Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:25 +0530 Subject: [PATCH 0154/1603] New translations strings.xml (Esperanto) --- app/src/main/res/values-eo-rUY/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-eo-rUY/strings.xml b/app/src/main/res/values-eo-rUY/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-eo-rUY/strings.xml +++ b/app/src/main/res/values-eo-rUY/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 7dd07f58dc755a015b081c7ad5c9c0c9c5d9bc0a Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:26 +0530 Subject: [PATCH 0155/1603] New translations strings.xml (Filipino) --- app/src/main/res/values-fil-rPH/strings.xml | 31 +++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 1d4c4c070c5fffc45ab133e5f121c83ca2f73de8 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:27 +0530 Subject: [PATCH 0156/1603] New translations strings.xml (Luxembourgish) --- app/src/main/res/values-lb-rLU/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-lb-rLU/strings.xml b/app/src/main/res/values-lb-rLU/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-lb-rLU/strings.xml +++ b/app/src/main/res/values-lb-rLU/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From d16a507064ec7ca92a0c7049c3203947a3a0631c Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:28 +0530 Subject: [PATCH 0157/1603] New translations strings.xml (Latin) --- app/src/main/res/values-la-rLA/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-la-rLA/strings.xml b/app/src/main/res/values-la-rLA/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-la-rLA/strings.xml +++ b/app/src/main/res/values-la-rLA/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From cda12f0e54776f23e1ab4dc655676018a5c44177 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:29 +0530 Subject: [PATCH 0158/1603] New translations strings.xml (Flemish) --- app/src/main/res/values-vls-rBE/strings.xml | 31 +++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-vls-rBE/strings.xml b/app/src/main/res/values-vls-rBE/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-vls-rBE/strings.xml +++ b/app/src/main/res/values-vls-rBE/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 547f5ace73ab22dde1d2462e7f0da1672bee9650 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:30 +0530 Subject: [PATCH 0159/1603] New translations strings.xml (Kannada) --- app/src/main/res/values-kn-rIN/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From e10bee13ff3dbb385dfa790df02f691894b25778 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:31 +0530 Subject: [PATCH 0160/1603] New translations strings.xml (Nepali) --- app/src/main/res/values-ne-rNP/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-ne-rNP/strings.xml +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From ae363d5a09652f935234285503656dc52e02c82d Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:32 +0530 Subject: [PATCH 0161/1603] New translations strings.xml (Ukrainian) --- app/src/main/res/values-uk-rUA/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 164bddf3b..4a842b4fb 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -8,11 +8,13 @@ Додати в обране Додати до черги відтворення Додати до списку відтворення + Cast Очистити чергу відтворення Циклічне повторення Видалити Видалити з пристрою Деталі + Edit Перейти до альбому Перейти до виконавця Перейти до жанру @@ -49,6 +51,7 @@ Адаптивний Додати "Додати до списку відтворення" + Add Time Framed Lyrics "Додано 1 композицію до черги відтворення." Додано %1$d композицій до черги відтворення. Альбом @@ -58,7 +61,7 @@ Пісні Пісні - Виконавець альбому + Album Artist Альбоми Альбом @@ -70,13 +73,14 @@ Привіт, перегляньте цей крутий музичний плеєр за адресою: https://play.google.com/store/apps/details?id=%s Перемішати Кращі треки - Big + Full Image Ретро музика - Картка Ретро-музика - Класичний Ретро-музика - Малий - Text + Minimal Text Виконавець Виконавці + Audio Fade Duration В отриманні аудіофокусу відмовлено. Змінити налаштування звуку та налаштувати параметри еквалайзера Автоматично @@ -107,7 +111,7 @@ Карусель на екрані відтворення Каскад Історія змін - Журнал змін доступний у каналі Telegram + Check out What\'s New Коло Круглий Класичний @@ -136,6 +140,7 @@ %1$d списки відтворення?]]> %1$d пісень?]]> Видалено %1$d пісень. + Deleting Songs Глибина Опис Інформація про пристрій @@ -148,6 +153,9 @@ Купіть мені: Done Режим водія + Edit Button + Edit Lyrics + Edit Synced Lyrics Порожньо Еквалайзер ЧаП @@ -247,6 +255,8 @@ Інше Пароль Останні 3 місяці + Paste Lyrics Here + Paste timeframe lyrics here Пік Відмовлено у доступі до зовнішнього сховища. The app needs permission to access your device storage for playing music @@ -285,6 +295,7 @@ Використовувати обкладинку альбому пісні як шпалери екрана блокування Show Album Artists in the Artist category Зменшення гучності при відтворенні системного звуку або сповіщення + Fade Audio when Song is Paused or Played Вміст тек чорного списку приховано з вашої бібліотеки. Почати відтворення відразу при під\'єднанні до Bluetooth пристрою Розмивати обкладинку альбому на екрані блокування. Можуть виникнути проблеми з сторонніми додатками та віджетами @@ -303,6 +314,8 @@ Налаштувати видимість та порядок категорій бібліотеки. Використовувати керування музикою на екрані блокування від Retro Music Деталі ліцензії для програмного забезпечення з відкритим кодом + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Режим занурення Почати відтворення відразу після підключення навушників Випадковий режим вимкнеться при відтворенні нового списку пісень @@ -313,6 +326,7 @@ Пропустити обкладинку альбому Кольорові ярлики додатків Зменшити гучність при сторонніх звуках + Fade Audio Автоматично завантажувати зображення виконавців Чорний список Відтворення Bluetooth @@ -334,6 +348,8 @@ Повноекранне керування Тема відтворення Ліцензії з відкритим кодом + Show Lyrics + Show Suggestions Режим назв вкладок Ефект Каруселі На весь екран @@ -368,7 +384,7 @@ Retro Music плеєр Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) Помилка видалення файлу: %s Неможливо отримати URI SAF @@ -456,8 +472,11 @@ Ім\'я користувача Версія додатку Вертикальне сальто + View on Telegram Гучність Пошук в інтернеті + Website + Check out our Website Вітаємо вас, Чим ви хочете поділитися? Що нового @@ -469,4 +488,6 @@ Виберіть принаймні одну категорію. Вас буде перенаправлено на сайт відстеження проблем. Дані вашого облікового запису використовуються лише для автентифікації. + Show Album Artists + Add to Blacklist From e87cc482a96da45d1862764d6dff212d0aa87ba5 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:33 +0530 Subject: [PATCH 0162/1603] New translations strings.xml (Swedish) --- app/src/main/res/values-sv-rSE/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index b2e9fb081..6eb256990 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -8,11 +8,13 @@ Lägg till i favoriter Lägg till i spelkön Lägg till i spellista + Cast Rensa spelkön Loopläge Radera Radera från enheten Info + Edit Gå till album Gå till artisten Gå till genren @@ -49,6 +51,7 @@ Adaptiv Lägg till "Lägg till i spellista" + Add Time Framed Lyrics "Lade till en titel i spelkön." Lade till %1$d titlar i spelkön. Album @@ -56,7 +59,7 @@ Låt Låtar - Albumartist + Album Artist Album Album @@ -66,13 +69,14 @@ Kolla in den här coola musikspelaren på: https://play.google.com/store/apps/details?id=%s Shuffle Topplåtar - Big + Full Image Kort Klassisk Liten - Text + Minimal Text Artist Artister + Audio Fade Duration Ljudfokus nekas. Ändra ljudinställningarna och justera equalizer-kontrollerna Auto @@ -103,7 +107,7 @@ Karuselleffekt på spelarskärmen Släng iväg Ändringslogg - Ändringsloggen befinner sig på Telegram + Check out What\'s New Cirkel Cirkulär Klassisk @@ -132,6 +136,7 @@ %1$d spellistor?]]> %1$d låtar?]]> %1$d låtar har raderats. + Deleting Songs Djup Beskrivning Enhetsinformation @@ -144,6 +149,9 @@ Köp mig en: Done Förarläge + Edit Button + Edit Lyrics + Edit Synced Lyrics Tom Equalizer FAQ @@ -243,6 +251,8 @@ Övrigt Lösenord De senaste 3 månaderna + Paste Lyrics Here + Paste timeframe lyrics here Peak Behörighet att få tillgång till extern lagring nekas. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Använd det spelade albumets omslag som låsskärmsbakgrund Show Album Artists in the Artist category Sänk volymen när ett systemljud spelas upp eller ett meddelande tas emot + Fade Audio when Song is Paused or Played Innehållet i svartlistade mappar döljs från ditt bibliotek. Börja spela direkt när en bluetooth-enhet ansluts Ger albumomslaget oskärpa på låsskärmen. Kan orsaka problem med tredjepartsappar och widgets @@ -299,6 +310,8 @@ Konfigurera synlighet och ordning för bibliotekskategorier. Använd Retro Music:s anpassade låsskärmskontroller Licensinformation för programvara med öppen källkod + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Uppslukande läge Börja spela direkt då hörlurar ansluts Shuffleläget stängs av när du spelar en ny lista med låtar @@ -309,6 +322,7 @@ Nästa albumomslag Färgade appgenvägar Minska volymen vid fokusförlust + Fade Audio Ladda ner artistbilder automatiskt Svartlista Bluetooth-uppspelning @@ -330,6 +344,8 @@ Helskärmskontroller Spelartema Licenser för öppen källkod + Show Lyrics + Show Suggestions Fliktitlar Karuselleffekt Helskärmsapp @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) Radering av fil misslyckades: %s Kan inte hämta SAF URI @@ -452,8 +468,11 @@ Användarnamn Version Vänd vertikalt + View on Telegram Volym Webbsökning + Website + Check out our Website Välkommen, Vad vill du dela? Vad är nytt? @@ -465,4 +484,6 @@ Du måste välja minst en kategori. You will be forwarded to the issue tracker website. Dina kontodata används endast för verifiering. + Show Album Artists + Add to Blacklist From fccfe516257a7cf27036638a8b1cf264f9d0eed3 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:35 +0530 Subject: [PATCH 0163/1603] New translations strings.xml (French) --- app/src/main/res/values-fr-rFR/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index bfa5e6502..e70e4e5e4 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -8,11 +8,13 @@ Ajouter aux favoris Ajouter à la file d\'attente Ajouter à la playlist + Cast Vider la file d\'attente Mode de répétition du cycle Supprimer Supprimer de l\'appareil Détails + Edit Aller à l\'album Aller à l\'artiste Aller au genre @@ -49,6 +51,7 @@ Adaptatif Ajouter "Ajouter à playlist" + Add Time Framed Lyrics "1 titre à été ajoutée à la file d'attente." %1$d titres ont été ajoutés à la file d\'attente. Album @@ -56,7 +59,7 @@ Song Songs - Artiste de l\'album + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey, jetez un coup d\'œil à ce super lecteur de musique : https://play.google.com/store/apps/details?id=%s Aléatoire Pistes préférées - Big + Full Image Retro Music – Carte Retro Music – Classique Retro Music – Petit - Text + Minimal Text Artiste Artistes + Audio Fade Duration Focus audio refusé. Changer les paramètres audio et ajuster l\'égaliseur Auto @@ -103,7 +107,7 @@ Effet carousel sur l\'écran de lecture en cours En cascade Liste des changements - Liste des changements maintenu sur la canal Telegram + Check out What\'s New Circle Circulaire Classique @@ -132,6 +136,7 @@ %1$d ?]]> %1$d ?]]> %1$d à été supprimé. + Deleting Songs Profondeur Description Infos sur l\'appareil @@ -144,6 +149,9 @@ Achetez moi : Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Vide Égaliseur FAQ @@ -243,6 +251,8 @@ Autre Mot de passe 3 derniers mois + Paste Lyrics Here + Paste timeframe lyrics here Peak La permission pour accéder au stockage externe a été refusée. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Utiliser la couverture d\'album de la piste en cours de lecture comme fond sur l\'écran de verrouillage Show Album Artists in the Artist category Baisser le volume quand un son système ou une notification est reçue + Fade Audio when Song is Paused or Played Le contenu des dossiers en liste noire est masqué de votre bibliothèque. Commencez à jouer dès que vous êtes connecté à un appareil Bluetooth Flouter la couverture de l\'album sur l\'écran de verrouillage. Cela peut poser des problèmes avec des applications et widgets tiers. @@ -299,6 +310,8 @@ Configurer la visibilité et l\'ordre des catégories de la librairie. Utiliser les contrôles personnalisés de Retro Music sur l\'écran de verrouillage Détails des licences pour les logiciels open source + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Mode immersif Commencer immédiatement la lecture lors du branchement d\'un casque Le mode aléatoire se désactivera lors de la lecture d\'une nouvelle liste de morceaux @@ -309,6 +322,7 @@ Style du balayage de l\'image d\'album Raccourcis d\'application colorés Réduire le volume à la perte de focus + Fade Audio Télécharger automatiquement les photos des artistes Liste noire Bluetooth playback @@ -330,6 +344,8 @@ Contrôles plein-écran Thème d\'écran de lecture Licences open source + Show Lyrics + Show Suggestions Mode Titres onglets Effet carousel App en plein écran @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Nom d\'utilisateur version Balayage vertical + View on Telegram Volume Recherche internet + Website + Check out our Website Bienvenue, Que souhaitez-vous partager ? Quoi de neuf @@ -465,4 +484,6 @@ Vous devez sélectionner au moins une catégorie. Vous allez être redirigé vers le site web de suivi des problèmes. Vos données de compte sont utilisées uniquement pour vous authentifier. + Show Album Artists + Add to Blacklist From cb4fb30f98344d206accb5752be0c7af7b4e4a14 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:36 +0530 Subject: [PATCH 0164/1603] New translations strings.xml (Gujarati) --- app/src/main/res/values-gu-rIN/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-gu-rIN/strings.xml b/app/src/main/res/values-gu-rIN/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-gu-rIN/strings.xml +++ b/app/src/main/res/values-gu-rIN/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From f2bd33694110542ada0217db8844f7628e058a78 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:37 +0530 Subject: [PATCH 0165/1603] New translations strings.xml (Spanish) --- app/src/main/res/values-es-rES/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index f8fe32a71..91be2cae7 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -8,11 +8,13 @@ Añadir a favoritos Añadir a la cola de reproducción Añadir a la lista de reproducción + Cast Vaciar cola de reproducción Modo de repetición Eliminar Eliminar del dispositivo Detalles + Edit Ir al álbum Ir al artista Ir al género @@ -49,6 +51,7 @@ Adaptativo Agregar "Agregar a lista de reproducción" + Add Time Framed Lyrics "Se ha agregado 1 canción a la cola de reproducción" %1$d canciones agregadas a la cola de reproducción Álbum @@ -56,7 +59,7 @@ Canción Canciones - Artista del álbum + Album Artist Álbumes Álbum @@ -66,13 +69,14 @@ Ve este cool reproductor de música en: https://play.google.com/store/apps/details?id=%s Aleatorio Canciones más reproducidas - Big + Full Image Tarjeta Clásico Pequeño - Text + Minimal Text Artista Artistas + Audio Fade Duration Enfoque de audio denegado Modifica los ajustes de sonido y ajusta los controles del ecualizador Automático @@ -103,7 +107,7 @@ Efecto carrusel en la pantalla de reproducción En cascada Registro de cambios - Registro de cambios disponible en el canal de Telegram + Check out What\'s New Círculo Circular Clásico @@ -132,6 +136,7 @@ %1$d listas de reproducción?]]> %1$d canciones?]]> %1$d canciones eliminadas. + Deleting Songs Profundidad Descripción Información del dispositivo @@ -144,6 +149,9 @@ Cómprame: Done Modo de conducir + Edit Button + Edit Lyrics + Edit Synced Lyrics Vacio Ecualizador Preguntas más frecuentes @@ -243,6 +251,8 @@ Otro Contraseña Más de 3 meses + Paste Lyrics Here + Paste timeframe lyrics here Pica Permiso de acceso al almacenamiento externo denegado. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Usar la portada del álbum de la canción en reproducción como fondo de la pantalla de bloqueo Show Album Artists in the Artist category Bajar el volumen cuando se reproduzca un sonido del sistema o se reciba una notificación + Fade Audio when Song is Paused or Played Las carpetas en la lista negra, serán ocultado de tu librería. Comienza a reproducir tan pronto como esté conectado al dispositivo bluetooth Desenfocar la portada el álbum en la pantalla de bloqueo. Puede causar problemas con aplicaciones y widgets de terceros @@ -299,6 +310,8 @@ Configure la visibilidad y el orden de las categorías de la biblioteca. Usar los controles personalizados de Retro Music en la pantalla de bloqueo Detalles de licencia para software de código abierto + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Modo inmersivo Comenzar a reproducir inmediatamente cuando se conecten audífonos El modo aleatorio se desactivará cuando se reproduzca una nueva lista de canciones @@ -309,6 +322,7 @@ Estilo de portada del álbum en reproducción Accesos directos de la aplicación coloreados Reducir el volumen cuando se pierda el enfoque + Fade Audio Descarga automática de imágenes de artistas Lista Negra Reproducción por Bluetooth @@ -330,6 +344,8 @@ Controles en pantalla completa Tema de la ventana de reproducción Licencias de código abierto + Show Lyrics + Show Suggestions Forma de los títulos de las pestañas Efecto Carrusel Aplicación en pantalla completa @@ -364,7 +380,7 @@ Reproductor de Retro Music Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) La eliminación del archivo falló No se puede obtener SAF URI @@ -452,8 +468,11 @@ Nombre de usuario Versión giro vertical + View on Telegram Volumen Búsqueda web + Website + Check out our Website Bienvenido, ¿Qué quieres compartir? Lo Nuevo @@ -465,4 +484,6 @@ Tienes que seleccionar al menos una categoría Será redirigido al sitio web para reportar problemas. Los datos de tu cuenta sólo se utilizan para la autenticación + Show Album Artists + Add to Blacklist From 0627daf8a8ea606e5922b5ef17ba36431669c09e Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:38 +0530 Subject: [PATCH 0166/1603] New translations strings.xml (Afrikaans) --- app/src/main/res/values-af-rZA/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From e969a480ba691e952199e65066b4dffaee914655 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:39 +0530 Subject: [PATCH 0167/1603] New translations strings.xml (Arabic) --- app/src/main/res/values-ar-rSA/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index a6fc9c870..d4fea6e12 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -8,11 +8,13 @@ اضافة الى المفضلة إضافة الى قائمة التشغيل الحالية أضف إلى قائمة التشغيل + Cast إخلاء قائمة التشغيل الحالية وضع تكرار الدورة حذف حذف من الجهاز تفاصيل + Edit إنتقل إلى الالبوم إنتقل إلى الفنان إنتقل إلى النوع @@ -49,6 +51,7 @@ متكيف إضافة "إضافة الى قائمة التشغيل" + Add Time Framed Lyrics "إضافة ١ من العناوين الى قائمة التشغيل الحالية" إضافة %1$d من العناوين الى قائمة التشغيل الحالية البوم @@ -60,7 +63,7 @@ Songs Songs - البوم الفنان + Album Artist الألبومات Albums @@ -74,13 +77,14 @@ مرحبا القي نظرة على مشغل الموسيقى الرائع هذا في: https://play.google.com/store/apps/details?id=%s عشوائي المسارات الاكثر شعبية - Big + Full Image ريترو ميوزك - بطاقة ريترو ميوزك - تقليدي ريترو ميوزك - صغير - Text + Minimal Text فنان فنانين + Audio Fade Duration تم منع تركيز الصوت تغيير إعدادات الصوت وضبط عناصر التحكم في موازن الصوت تلقائي @@ -111,7 +115,7 @@ التاثير الدائري على شاشة التشغيل الآن المتتالية سجل التغيرات - سجل التغيرات ثابت على قناة التيليجرام + Check out What\'s New دائرية دائري كلاسيكي @@ -140,6 +144,7 @@ %1$d؟]]> %1$d؟]]> تم حذف %1$d الأغاني. + Deleting Songs العمق الوصف معلومات الجهاز @@ -153,6 +158,9 @@ اشتري لي: Done وضع القيادة + Edit Button + Edit Lyrics + Edit Synced Lyrics فارغ موازن الصوت التعليمات @@ -252,6 +260,8 @@ آخر كلمة السر أخر 3 أشهر + Paste Lyrics Here + Paste timeframe lyrics here الذروة تم رفض إذن الوصول إلى وحدة التخزين الخارجي. The app needs permission to access your device storage for playing music @@ -290,6 +300,7 @@ استخدم غلاف ألبوم الأغنية قيد التشغيل حاليًا كخلفية لشاشة القفل Show Album Artists in the Artist category خفض مستوى الصوت عند تشغيل صوت نظام أو تلقي إشعارات + Fade Audio when Song is Paused or Played محتويات مجلدات القائمة السوداء يتم أخفائها من مكتبتك الموسيقية. بدء التشغيل بمجرد توصيل جهاز بلوتوث ظبابية غطاء الألبوم على شاشة القفل . يمكن أن يسبب مشاكل في تطبيقات وويدجت الطرف الثالث @@ -308,6 +319,8 @@ تكوين وعرض وترتيب فئات المكتبة. استخدم شاشة القفل المخصصة من ريترو ميوزك لتحكم بالتشغيل الرخصة والتفاصيل للبرمجيات مفتوحة المصدر + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen وضع الشاشة الكاملة تشغيل تلقائيا عند توصيل السماعة سوف يتم تعطيل وضع الخلط عند التشغيل من قائمة جديدة @@ -318,6 +331,7 @@ تخطي غطاء الالبوم تلوين اختصارات التطبيق خفض الصوت عند فقد التركيز + Fade Audio تحميل تلقائي لصور الالبومات القائمة السوداء تشغيل البلوتوث @@ -339,6 +353,8 @@ ازار التحكم في كامل الشاشة ثيم التشغيل الان التراخيص مفتوحة المصدر + Show Lyrics + Show Suggestions وضع عناوين التبويبات تاثير التتالي التطبيق في كامل الشاشة @@ -373,7 +389,7 @@ مشغل الموسيقى Retro ريترو ميوزك - الكامل The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) فشل حذف الملف: %s لا يمكن الحصول على URI SAF @@ -461,8 +477,11 @@ أسم المستخدم الإصدار تدوير رأسي + View on Telegram الصوت البحث عبر الانترنت + Website + Check out our Website مرحبا, مالذي تريد مشاركته? مالجديد @@ -474,4 +493,6 @@ عليك اختيار فئة واحدة على الأقل. سيتم تحويلك الى صفحة سجل الاخطاء بيانات حسابك تستخدم لتوثيق فقط. + Show Album Artists + Add to Blacklist From d047e897a1cdb03f845bfb3f3cc4dd428ce8746a Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:40 +0530 Subject: [PATCH 0168/1603] New translations strings.xml (Catalan) --- app/src/main/res/values-ca-rES/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From d88e4bda0552fad2853ad67a069da4d61640b1b6 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:41 +0530 Subject: [PATCH 0169/1603] New translations strings.xml (Czech) --- app/src/main/res/values-cs-rCZ/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 3d9a48daf..0d901ae4f 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -8,11 +8,13 @@ Přidat k oblíbeným Přidat do fronty Přidat do seznamu skladeb… + Cast Vyčistit frontu Cycle repeat mode Smazat Vymazat ze zařízení Podrobnosti + Edit Přejít na album Přejít na interpreta Přejít na žánr @@ -49,6 +51,7 @@ Adaptivní Přidat "Přidat do seznamu skladeb" + Add Time Framed Lyrics "Přidán 1 titul do fronty přehrávání." Přidány %1$d tituly do fronty přehrávání. Album @@ -58,7 +61,7 @@ Skladeb Skladeb - Umělec alba + Album Artist Alba Album @@ -70,13 +73,14 @@ Hej, podívejte se na tento skvělý hudební přehrávač na: https://play.google.com/store/apps/details?id=%s Zamíchat Nejlepší skladby - Velký + Full Image Karta Klasický Malý - Text + Minimal Text Umělec Umělci + Audio Fade Duration Zaměření zvuku bylo zamítnuto. Změňte nastavení zvuku a upravte ovládání ekvalizéru Auto @@ -107,7 +111,7 @@ Kolotočový efekt na obrazovce přehrávání Cascading Přehled změn - Seznam změn je veden v Telegram kanálu + Check out What\'s New Kruh Kruhový Klasický @@ -136,6 +140,7 @@ %1$d seznamů skladeb?]]> %1$d písní?]]> %1$d skladby byly smazány. + Deleting Songs Hloubka Popis Informace o zařízení @@ -148,6 +153,9 @@ Kupte mi: Hotovo Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Prázdný Ekvalizér Často kladené otázky @@ -247,6 +255,8 @@ Jiné Heslo Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Povolení přístupu k externímu úložišti bylo zamítnuto. Aplikace potřebuje přístup k úložišti vašeho zařízení, aby mohla přehráváat hudbu @@ -285,6 +295,7 @@ Používá současný obal alba písní jako tapetu zámku. Show Album Artists in the Artist category Oznámení, navigace atd. + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur obal alba na uzamčení obrazovky. Může způsobit problémy s aplikacemi třetích stran a widgety. @@ -303,6 +314,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Začít přehrávat ihned po připojení sluchátek Shuffle mode will turn off when playing a new list of songs @@ -313,6 +326,7 @@ Album cover skip Barevné zkratky aplikace Snížit hlasitost při ztrátě zaostření + Fade Audio Automatické stahování obrázků interpretů Černá listina Přehrávání Bluetooth @@ -334,6 +348,8 @@ Ovládání na celou obrazovku Vzhled Licence Open source + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Aplikace přes celou obrazovku @@ -368,7 +384,7 @@ Retro Music Přehrávač Retro Music Pro Aplikace potřebuje přístup k nastavení zařízení pro nastavení hudby jako vyzvánění - Vyzvánění + Ringtone (Optional) Odstranění souboru se nezdařilo: %s Nelze získat SAF URI @@ -456,8 +472,11 @@ Uživatelské jméno Verze Vertikální otočení + View on Telegram Hlasitost Webové vyhledávání + Website + Check out our Website Vítejte, Co chcete sdílet? Co je nového @@ -469,4 +488,6 @@ Musíte zvolit alespoň jednu kategorii. Budete přesměrováni na webovou stránku pro zadání problému. Vaše údaje k účtu jsou použity pouze k ověření. + Show Album Artists + Add to Blacklist From b952c5521bdefb4094e132a1d58006da792b78a9 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:42 +0530 Subject: [PATCH 0170/1603] New translations strings.xml (Danish) --- app/src/main/res/values-da-rDK/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 8722c267e1c7563a58ed12fad0031934585c2b90 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:42 +0530 Subject: [PATCH 0171/1603] New translations strings.xml (German) --- app/src/main/res/values-de-rDE/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 8542e5dd2..fb74acf2b 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -8,11 +8,13 @@ Zu Favoriten hinzufügen Zur Wiedergabeliste hinzufügen Zur Playlist hinzufügen... + Cast Wiedergabeliste leeren Wiederholungsmodus wechseln Löschen Vom Gerät löschen Details + Edit Zum Album gehen Zum Künstler gehen Zu Genre gehen @@ -49,6 +51,7 @@ Adaptiv Hinzufügen "Zur Playlist hinzufügen" + Add Time Framed Lyrics "1 Titel wurde zur Wiedergabeliste hinzugefügt." %1$d Titel wurden zur Wiedergabeliste hinzugefügt. Album @@ -56,7 +59,7 @@ Song Songs - Album Künstler + Album Artist Alben Album @@ -66,13 +69,14 @@ Hey, schau dir diesen coolen Music Player an: https://play.google.com/store/apps/details?id=%s Zufällig Top Songs - Big + Full Image Retro Musik - Karte Classic Klein - Text + Minimal Text Künstler Künstler + Audio Fade Duration Audio Fokus verweigert. Sound- und Equalizer-Optionen einstellen Automatisch @@ -103,7 +107,7 @@ Karussell-Effekt auf dem Abspielbildschirm Kaskadierend Änderungen - Changelog über Telegram-App verwaltet. + Check out What\'s New Kreis Rund Klassik @@ -132,6 +136,7 @@ %1$d Playlisten löschen?]]> %1$d Songs löschen?]]> %1$d Songs gelöscht. + Deleting Songs Tiefe Beschreibung Geräteinfo @@ -144,6 +149,9 @@ Kauf\' mir: Done Fahrmodus + Edit Button + Edit Lyrics + Edit Synced Lyrics Leer Equalizer FAQ @@ -243,6 +251,8 @@ Anderes Passwort Letzte 3 Monate + Paste Lyrics Here + Paste timeframe lyrics here Spitze Berechtigung für den Zugriff auf externen Speicher verweigert. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Aktuelles Album-Cover als Sperrbildschrim verwenden. Show Album Artists in the Artist category Benachrichtigungen, Benachrichtigung etc. + Fade Audio when Song is Paused or Played Die Musik in Ordnern von der schwarzen Liste wird nicht angezeigt. Wiedergabe starten, sobald mit dem Bluetooth-Gerät verbunden wurde Verunschärft das Album-Cover des Sperrbildschirm. Kann Probleme mit anderen Apps und Widgets verursachen. @@ -299,6 +310,8 @@ Stelle Sichtbarkeit und Reihenfolge der Bibliothekkategorien ein. Vollständige Musiksteuerung auf dem Sperrbildschirm einschalten. Details zu den Lizensen der Open Source Software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Schalte den immersiven Modus ein. Mit Wiedergabe starten, sobald Kopfhörer verbunden sind. Shufflemodus wird ausgeschaltet, sobald neue Wiedergabe gestartet wird @@ -309,6 +322,7 @@ Stil des Album-Covers Gefärbte App Shortcuts Lautstärke bei Fokusverlust reduzieren + Fade Audio Künstler Bild automatisch downloaden Schwarze Liste Bluetooth-Wiedergabe @@ -330,6 +344,8 @@ Vollbildschirmsteuerung Erscheinungsbild Open Source Lizenzen + Show Lyrics + Show Suggestions Beschriftung der Navigationselemente Karussell-Effekt Vollbild App @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) Löschen der Datei fehlgeschlagen: %s SAF-URI kann nicht geladen werden @@ -452,8 +468,11 @@ Benutzername Version Vertikale Drehung + View on Telegram Lautstärke Internetsuche + Website + Check out our Website Willkommen, Was möchtest du teilen? Neuigkeiten @@ -465,4 +484,6 @@ Du musst mindestens eine Kategorie auswählen Du wirst auf die Issue Tracker-Seite weitergeleitet. Deine Accountdaten werden ausschließlich zur Authentifizierung genutzt + Show Album Artists + Add to Blacklist From b3ccef2284ce46761422d755f976fd216dd89d65 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:43 +0530 Subject: [PATCH 0172/1603] New translations strings.xml (Greek) --- app/src/main/res/values-el-rGR/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 7422ae608..6c8215004 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -8,11 +8,13 @@ Προσθήκη στα αγαπημένα Προσθήκη στην ουρά αναπαραγωγής Προσθήκη στη λίστα αναπαραγωγής... + Cast Εκκαθάριση ουράς αναπαραγωγής Λειτουργία κυκλικής επανάληψης Διαγραφή Διαγραφή από την συσκευή Λεπτομέρειες + Edit Μετάβαση στο άλμπουμ Μετάβαση στον καλλιτέχνη Μετάβαση στο είδος @@ -49,6 +51,7 @@ Προσαρμοστικό Προσθήκη "Προσθήκη στη λίστα αναπαραγωγής" + Add Time Framed Lyrics "Προστέθηκε 1 κομμάτι στην ουρά αναπαραγωγής." Προστέθηκαν %1$d κομμάτια στην ουρά αναπαραγωγής. Άλμπουμ @@ -56,7 +59,7 @@ Κομμάτι Κομμάτια - Καλλιτέχνης Άλμπουμ + Album Artist Άλμπουμ Άλμπουμ @@ -66,13 +69,14 @@ Τσεκάρετε αυτό το κούλ music player στο:https://play.google.com/store/apps/details?id=%s Τυχαία αναπαραγωγή Κορυφαία Κομμάτια - Big + Full Image Κάρτα Κλασσικό Μικρό - Text + Minimal Text Καλλιτέχνης Καλλιτέχνες + Audio Fade Duration Η εστίαση ήχου απορρίφθηκε. Αλλάξτε τις ρυθμίσεις ήχου και προσαρμόστε τα χειριστήρια του ισοσταθμιστή Αυτόματο @@ -103,7 +107,7 @@ Εφέ καρουσέλ στην οθόνη του παίζει τώρα Με υπερχείλιση Λίστα Αλλαγών - Η Λίστα Αλλαγών συντηρείται από τη εφαρμογή Telegram + Check out What\'s New Κύκλος >Κυκλικό Κλασσικό @@ -132,6 +136,7 @@ %1$d λίστα αναπαραγωγής?]]> %1$d κομματιών?]]> Διαγράφηκαν %1$d κομμάτια. + Deleting Songs Βάθος Περιγραφή Πληροφορίες συσκευής @@ -144,6 +149,9 @@ Αγορασέ μου ένα Done Λειτουργία οδήγησης + Edit Button + Edit Lyrics + Edit Synced Lyrics Κενό Ισοσταθμιστής FAQ @@ -243,6 +251,8 @@ Άλλα Κωδικός πρόσβασης Τους περασμένους 3 μήνες + Paste Lyrics Here + Paste timeframe lyrics here Κορυφή Η άδεια για προσπέλαση του external storage δεν παραχωρήθηκε. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Χρησιμοποιεί το εξώφυλλο του τρέχων κομματιού ως φόντο οθόνης κλειδώματος. Show Album Artists in the Artist category Ειδοποιήσεις, πλοήγηση, κλπ. + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Ξεκινά να παίζει μόλις συνδεθείτε με συσκευή Bluetooth Θολώνει το εξώφυλλο άλμπουμ στην οθόνη κλειδώματος. Μπορεί να προκαλέσει προβλήματα με εφαρμογές και widgets. @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Ενεργοποίηση διακοπτών ρύθμισης στην οθόνη κλειδώματος. Λεπτομέρειες άδειας για τη χρήση open source λογισμικού + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Ενεργοποίηση της επιλογής για χρήση πλήρους οθόνης Όταν συνδεθούν ηχεία/ακουστικά , αρχίζει η αναπαραγωγή Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Χρωματιστά app shortcuts Μείωση έντασης όταν υπάρχουν εισερχόμενες ειδοποιήσεις + Fade Audio Αυτόματη λήψη εικόνων καλλιτεχνών Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Full screen Ρυθμίσεις Εμφάνιση Άδειες λογισμικού open source + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Full screen εφαρμογή @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) Η διαγραφή αρχείου απέτυχε: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Όνομα χρήστη Έκδοση Κάθετη αναστροφή + View on Telegram Ένταση Αναζήτηση στον ιστό + Website + Check out our Website Καλώς ήρθατε, Τι θα θέλατε να μοιραστείτε; What\'s New @@ -465,4 +484,6 @@ Πρέπει να επιλέξετε τουλάχιστον μία κατηγορία. Θα προωθηθείτε στον ιστότοπο παρακολούθησης ζητημάτων. Τα δεδομένα του λογαριασμού σας χρησιμοποιούνται μόνο για έλεγχο ταυτότητας. + Show Album Artists + Add to Blacklist From 61913e6bf8947327fbbbe92ae2a42155ff01e846 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:45 +0530 Subject: [PATCH 0173/1603] New translations strings.xml (Finnish) --- app/src/main/res/values-fi-rFI/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 85ea5c973c09e4b5a3a50fa05b2c35e22dd39f2d Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:45 +0530 Subject: [PATCH 0174/1603] New translations strings.xml (Irish) --- app/src/main/res/values-ga-rIE/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-ga-rIE/strings.xml b/app/src/main/res/values-ga-rIE/strings.xml index 5e822b9b8..742219d05 100644 --- a/app/src/main/res/values-ga-rIE/strings.xml +++ b/app/src/main/res/values-ga-rIE/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -59,7 +62,7 @@ Songs Songs - Album artist + Album Artist Albums Album @@ -72,13 +75,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -109,7 +113,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -138,6 +142,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -150,6 +155,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -249,6 +257,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -287,6 +297,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -305,6 +316,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -315,6 +328,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -336,6 +350,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -370,7 +386,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -458,8 +474,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -471,4 +490,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From a05601cffdd09eb466c2ac99fc3735762cfdb699 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:47 +0530 Subject: [PATCH 0175/1603] New translations strings.xml (Hebrew) --- app/src/main/res/values-iw-rIL/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index bd511cbd9..a33620798 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -58,7 +61,7 @@ Songs Songs - Album artist + Album Artist Albums Album @@ -70,13 +73,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -107,7 +111,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -136,6 +140,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -148,6 +153,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -247,6 +255,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -285,6 +295,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -303,6 +314,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -313,6 +326,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -334,6 +348,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -368,7 +384,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -456,8 +472,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -469,4 +488,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 4908e3335b860651685bff9ea07df9822107e743 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:48 +0530 Subject: [PATCH 0176/1603] New translations strings.xml (Serbian (Cyrillic)) --- app/src/main/res/values-sr-rSP/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 00f82c3a2..fecba6416 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -8,11 +8,13 @@ Dodaj u omiljene Dodaj u listu za pustanje Dodaj na plejlistu + Cast Izbrisi trenutnu plejlistu za pustanje Cycle repeat mode Obrisi Izbrisi sa uredjaja Detalji + Edit Vidi album Vidi izvodjaca Go to genre @@ -49,6 +51,7 @@ Adaptive Dodaj "Dodaj na plejlistu" + Add Time Framed Lyrics "Dodata je 1 pesma na plejlistu" Dodato %1$d pesama na plejlistu Album @@ -57,7 +60,7 @@ Songs Songs - Izvodjac albuma + Album Artist Albumi Album @@ -68,13 +71,14 @@ Isprobaj ovaj fantastican plejer na: https://play.google.com/store/apps/details?id=%s Reprodukuj nasumicno Najvise slusano - Big + Full Image Card Classic Small - Text + Minimal Text Izvodjac Izvodjac + Audio Fade Duration Zvuk se vec reprodukuje Change the sound settings and adjust the equalizer controls Auto @@ -105,7 +109,7 @@ Carousel effect on the now playing screen Cascading Izmene - Izmene odobrene za Telegram aplikacije + Check out What\'s New Circle Circular Classic @@ -134,6 +138,7 @@ %1$d plejliste?]]> %1$d numere?]]> Izbrisi %1$d numere. + Deleting Songs Depth Description Device info @@ -146,6 +151,9 @@ Kupi mi Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Nema pesama Ekvilajzer FAQ @@ -245,6 +253,8 @@ Other Password Prosla 3 meseca + Paste Lyrics Here + Paste timeframe lyrics here Peak Dozvola za pristup spoljasnjem skladistu je odbijena The app needs permission to access your device storage for playing music @@ -283,6 +293,7 @@ Koristi omot albuma kao pozadinu kada se reprodukuje muzika Show Album Artists in the Artist category Obavestenja, navigacija itd. + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Zamuti omot albuma na zakljucanom ekranu. (moze izazvati probleme sa drugim aplikacijama i vidzetima) @@ -301,6 +312,8 @@ Configure visibility and order of library categories. Prikazuj kontrole na zakljucanom ekranu Detalji o licencama za softver otvorenog izvora + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Omoguci ovo za impresivan mod. Kada se prikljuce slusalice automatki pusti pesme Shuffle mode will turn off when playing a new list of songs @@ -311,6 +324,7 @@ Album cover skip Obojene ikone aplikacije Utisaj zvuk prilikom poziva i drugih obavestenja. + Fade Audio Automatski preuzmi sliku izvodjaca Ne trazi muziku u... Bluetooth playback @@ -332,6 +346,8 @@ Kontrole preko celog ekrana Izgled Otvoren izvor licenca + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Aplikacija preko celog ekrana @@ -366,7 +382,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -454,8 +470,11 @@ Username Verzija Vertical flip + View on Telegram Volume Web pretraga + Website + Check out our Website Welcome, Sta zelis da podelis? What\'s New @@ -467,4 +486,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From bfb2cdbede0c87a5c0e3f1522328c2d63a31ed14 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:48 +0530 Subject: [PATCH 0177/1603] New translations strings.xml (Hungarian) --- app/src/main/res/values-hu-rHU/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 23518cc08..88d5af714 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -8,11 +8,13 @@ Hozzáadás a kedvencekhez Hozzáadás a lejátszási sorhoz Hozzáadás lejátszási listához + Cast Lejátszási sor törlése Ciklus ismétlés üzemmód Törlés Törlés az eszközről Részletek + Edit Ugrás az albumhoz Ugrás az előadóhoz Ugrás a műfajhoz @@ -49,6 +51,7 @@ AdaptÍv Hozzáad "Hozzáadás lejátszási listához" + Add Time Framed Lyrics "1 cím lett hozzáadva a lejátszási sorhoz." %1$d cím hozzáadva a lejátszási sorhoz. Album @@ -56,7 +59,7 @@ Dal Dalok - Album előadó + Album Artist Albumok Album @@ -66,13 +69,14 @@ Hé, nézd meg ezt a menő zenelejátszót itt: https://play.google.com/store/apps/details?id=%s Keverés Legjobb zeneszámok - Big + Full Image Kártya Retro zene - Klasszikus Retro zene - Kicsi - Text + Minimal Text Előadó Előadók + Audio Fade Duration Az audiofókusz megtagadva. Módosítsa a hangbeállításokat és állítsa be a hangszínszabályzó irányítását Autó @@ -103,7 +107,7 @@ Kőrhinta effekt a most játszik képernyőn Növelés Változtatási napló - A Változtatási napló a Telegram csatornán működik + Check out What\'s New Kör Kör alakú Klasszikus @@ -132,6 +136,7 @@ %1$d lejátszási listát?]]> %1$d zenéket?]]> Törölte a %1$d zenét. + Deleting Songs Mélység Leírás Eszköz információ @@ -144,6 +149,9 @@ Vegyél nekem egy: Done Vezetés mód + Edit Button + Edit Lyrics + Edit Synced Lyrics Üres Hangszínszabályzó GYIK @@ -243,6 +251,8 @@ Egyéb Jelszó 3 hónapnál túl + Paste Lyrics Here + Paste timeframe lyrics here Csúcs A külső tárolási hozzáférés engedélyezése tiltva. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ A jelenlegi zeneszámok albumborítóját zárolt háttérképként használja. Show Album Artists in the Artist category Hangerő csökkentése rendszerhang vagy értesítés érkezik + Fade Audio when Song is Paused or Played A feketelistán szereplő mappák tartalma el van rejtve a könyvtárban. Amint csatlakoztatta a bluetooth készüléket, kezdje el a lejátszást Elhomályosítja az album borítóját a zárolás képernyőjén. Problémákat okozhat harmadik féltől származó alkalmazásokkal és widgetekkel. @@ -299,6 +310,8 @@ A láthatóság és a könyvtári kategóriák sorrendjének beállítása. Retro zeneszámok zárolása a képernyőn. A nyílt forráskódú szoftverek licence részletei + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Kiterjesztett üzemmód Indítsa el a lejátszást, amikor a fejhallgató csatlakoztatva van. A véletlen sorrendű mód kikapcsol, ha új számlistát játszik le @@ -309,6 +322,7 @@ Most játszik album borító stílusa Színes alkalmazás parancsikonok Csökkentse a fókuszvesztés hangerejét + Fade Audio Automatikus letölti képeket Feketelista Bluetooth lejátszás @@ -330,6 +344,8 @@ Teljes képernyős vezérlők Megjelenés Nyílt forráskódú licencek + Show Lyrics + Show Suggestions Lap címek módja Carousel hatás Teljes képernyős alkalmazás @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) A fájl törlése sikertelen: %s Nem lehet SAF URI @@ -452,8 +468,11 @@ Felhasználónév Verzió Függőleges forgatás + View on Telegram Hangerő Webes keresés + Website + Check out our Website Üdvözöljük, Mit szeretne megosztani? Mi az újdonság? @@ -465,4 +484,6 @@ Legalább egy kategóriát kell kiválasztania Továbbítani fogjuk a problémakezelő weboldalra. Fiókja adatait kizárólag a hitelesítéshez fogjuk használni. + Show Album Artists + Add to Blacklist From e29f8aecc58843bebd71828c892809de39a53559 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:50 +0530 Subject: [PATCH 0178/1603] New translations strings.xml (Italian) --- app/src/main/res/values-it-rIT/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 364c7a5d7..bb2f2ebd2 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -8,11 +8,13 @@ Aggiungi ai preferiti Aggiungi alla coda Aggiungi alla playlist + Cast Cancella coda Modalità ripetizione continua Elimina Elimina dal dispositivo Dettagli + Edit Vai all\'album Vai all\'artista Vai al genere @@ -49,6 +51,7 @@ Adattivo Aggiungi "Aggiungi alla playlist" + Add Time Framed Lyrics "Aggiunto un brano alla coda." Aggiungi %1$d brani alla coda. Album @@ -56,7 +59,7 @@ Canzone Canzoni - Artista dell\'album + Album Artist Album Album @@ -67,13 +70,14 @@ https://play.google.com/store/apps/details?id=%s Casuale Tracce migliori - Big + Full Image Card Classico Piccolo - Text + Minimal Text Artista Artisti + Audio Fade Duration Focalizzazione audio negata. Modifica le impostazioni audio e regola i controlli dell\'equalizzatore Automatico @@ -104,7 +108,7 @@ https://play.google.com/store/apps/details?id=%s Effetto scorrimento sulla schermata di riproduzione Cascata Ultime modifiche - Per visualizzare le ultime modifiche, entra nel canale Telegram + Check out What\'s New Cerchio Circolare Classico @@ -133,6 +137,7 @@ https://play.google.com/store/apps/details?id=%s %1$d playlist?]]> %1$d brani?]]> Eliminati %1$d brani + Deleting Songs Profondità Descrizione Info dispositivo @@ -145,6 +150,9 @@ https://play.google.com/store/apps/details?id=%s Pagami un: Done Modalità alla guida + Edit Button + Edit Lyrics + Edit Synced Lyrics Vuoto Equalizzatore FAQ @@ -244,6 +252,8 @@ https://play.google.com/store/apps/details?id=%s Altro Password Ultimi 3 mesi + Paste Lyrics Here + Paste timeframe lyrics here Picco Autorizzazione ad accedere all\'archiviazione esterna negata. The app needs permission to access your device storage for playing music @@ -282,6 +292,7 @@ https://play.google.com/store/apps/details?id=%s Imposta la copertina del brano riprodotto come sfondo del blocco schermo Show Album Artists in the Artist category Riduce il volume quando viene riprodotto un suono di sistema o viene ricevuta una notifica + Fade Audio when Song is Paused or Played Il contenuto delle cartelle nella blacklist non compare nella raccolta Avvia la riproduzione non appena connesso al dispositivo bluetooth Sfoca la copertina dell\'album sulla schermata di blocco. Può causare problemi con app e widget di terze parti @@ -300,6 +311,8 @@ https://play.google.com/store/apps/details?id=%s Configura la visibilità e l\'ordine delle categorie Usa i comandi di Retro Music nella schermata di blocco Dettagli licenza per il software open source + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Modalità immersiva Inizia la riproduzione subito dopo aver collegato le cuffie La modalità casuale viene disattivata quando si riproduce un nuovo elenco di brani @@ -310,6 +323,7 @@ https://play.google.com/store/apps/details?id=%s Modalità cambio copertina dell\'album Scorciatoie app colorate Riduzione volume con perdita di focalizzazione audio + Fade Audio Scarica automaticamente immagini artista Blacklist Riproduzione bluetooth @@ -331,6 +345,8 @@ https://play.google.com/store/apps/details?id=%s Controlli a schermo intero Tema schermata riproduzione Licenze open source + Show Lyrics + Show Suggestions Modalità titoli schede Effetto scorrimento Applicazione a schermo intero @@ -365,7 +381,7 @@ https://play.google.com/store/apps/details?id=%s Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) Eliminazione file fallita: %s Impossibile ottenere l\'URI dal SAF @@ -453,8 +469,11 @@ https://play.google.com/store/apps/details?id=%s Nome utente Versione Flip verticale + View on Telegram Volume Ricerca web + Website + Check out our Website Benvenuto. Cosa vuoi condividere? Novità @@ -466,4 +485,6 @@ https://play.google.com/store/apps/details?id=%s Seleziona almeno una categoria. Verrai reindirizzato al sito web dei problemi. I dati del tuo account vengono utilizzati solo per l\'autenticazione. + Show Album Artists + Add to Blacklist From 3143ed6573a1c3341490d544392c88a000f91319 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:50 +0530 Subject: [PATCH 0179/1603] New translations strings.xml (Japanese) --- app/src/main/res/values-ja-rJP/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 821822bf9..4ef83b8e4 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -8,11 +8,13 @@ お気に入りに追加 再生キューに追加 プレイリストに追加… + Cast 再生キューをクリア Cycle repeat mode 削除 デバイスから削除 詳細 + Edit アルバムに移動 アーティストに移動 ジャンルに移動 @@ -49,13 +51,14 @@ アダプティブ 追加 "プレイリストに追加" + Add Time Framed Lyrics "1曲が再生キューに追加されました" %1$d 曲が再生キューに追加されました アルバム - アルバム アーティスト + Album Artist アルバム アルバム @@ -64,13 +67,14 @@ クールな音楽プレイヤーをチェックしよう: https://play.google.com/store/apps/details?id=%s シャッフル トップ曲 - Big + Full Image レトロミュージック - カード レトロミュージック - クラシック レトロミュージック - 小 - Text + Minimal Text アーティスト アーティスト + Audio Fade Duration オーディオのフォーカスが拒否されました。 サウンド設定を変更し、イコライザーコントロールを調整する 自動 @@ -102,7 +106,7 @@ 再生中画面でのカルーセル効果 重ねて表示 パッチノート - 電報チャネルで変更ログが維持されています + Check out What\'s New サークル クラシック @@ -131,6 +135,7 @@ %1$d を削除しますか?]]> %1$d 曲を削除しますか?]]> %1$d 曲を削除しました + Deleting Songs 深さ 説明 端末の情報 @@ -143,6 +148,9 @@ 俺を購入: Done 運転モード + Edit Button + Edit Lyrics + Edit Synced Lyrics 空の イコライザー よくある質問 @@ -242,6 +250,8 @@ その他 パスワード 過去3ヶ月 + Paste Lyrics Here + Paste timeframe lyrics here ピーク 外部ストレージへのアクセスが拒否されました The app needs permission to access your device storage for playing music @@ -280,6 +290,7 @@ 再生中のジャケットをロック画面の壁紙に適用する アーティストカテゴリ内にアルバムのアーティストを表示する システムでサウンドが再生されたとき、または通知が受信されたときに一時的に音量を下げる + Fade Audio when Song is Paused or Played ブラックリストに登録されたフォルダの内容はコレクションには表示されません。 端末にBluetoothデバイスが接続されたとき、再生を開始する ロック画面のジャケットをぼかします。他のアプリやウィジェットに問題を及ぼす可能性があります @@ -298,6 +309,8 @@ ライブラリに表示される項目と、順番を変更する Retro Musicのカスタムされたロック画面を使用する オープンソースライセンスの詳細 + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen アプリをフルスクリーン表示にする ヘッドフォンが接続されたら自動で再生を開始する 新しいリストの楽曲を再生する時にシャッフルは自動的にオフになります @@ -308,6 +321,7 @@ アルバムジャケットをスキップ 色のついたアプリショートカット フォーカスロス時に音量を下げる + Fade Audio アーティスト画像を自動でダウンロードする ブラックリスト Bluetooth接続時に再生 @@ -329,6 +343,8 @@ フルスクリーンコントロール 再生中のテーマ オープンソースライセンス + Show Lyrics + Show Suggestions タブのラベル カルーセルエフェクト フルスクリーン表示 @@ -363,7 +379,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -451,8 +467,11 @@ ユーザー名 バージョン 垂直方向に反転 + View on Telegram Volume ウェブで検索 + Website + Check out our Website ようこそ, 何を共有しますか? 更新内容 @@ -464,4 +483,6 @@ You have to select at least one category. issue trackerのウェブサイトに移動します あなたのアカウントは認証にのみ使用されます + Show Album Artists + Add to Blacklist From 9f5aa8bfbfeeccfbea68c75c7e11ae8e71c76a7f Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:51 +0530 Subject: [PATCH 0180/1603] New translations strings.xml (Korean) --- app/src/main/res/values-ko-rKR/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index e443fbe45..41a25dc21 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -8,11 +8,13 @@ 즐겨찾기에 추가 재생 대기열에 추가 재생목록에 추가... + Cast 재생 대기열 비우기 Cycle repeat mode 삭제 기기에서 삭제 세부 정보 + Edit 해당 앨범으로 이동 해당 아티스트로 이동 Go to genre @@ -49,13 +51,14 @@ Adaptive 추가 "재생목록에 추가" + Add Time Framed Lyrics "재생 대기열에 1곡이 추가되었습니다." 재생 대기열에 %1$d곡이 추가되었습니다. 앨범 Songs - 앨범 아티스트 + Album Artist 앨범 Albums @@ -64,13 +67,14 @@ 이 멋진 뮤직 플레이어를 한 번 써보세요!: https://play.google.com/store/apps/details?id=%s 무작위 자주 재생한 음악 - Big + Full Image 카드 클래식 소형 - Text + Minimal Text 아티스트 아티스트 + Audio Fade Duration 오디오 포커스가 거부되었습니다. 소리 설정 및 이퀄라이저 조정 Auto @@ -101,7 +105,7 @@ Carousel effect on the now playing screen Cascading 변경 사항 - 변경 사항은 Telegram을 통해 확인할 수 있습니다 + Check out What\'s New Circle Circular 클래식 @@ -130,6 +134,7 @@ %1$d개의 재생목록을 삭제하시겠습니까?]]> %1$d개의 노래를 삭제하시겠습니까?]]> %1$d개의 노래를 삭제했습니다. + Deleting Songs Depth Description Device info @@ -142,6 +147,9 @@ 사주세요! Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics 비어 있음 이퀄라이저 FAQ @@ -241,6 +249,8 @@ 기타 Password 이전 3개월 + Paste Lyrics Here + Paste timeframe lyrics here Peak 외부 저장소 접근 권한이 거부되었습니다. The app needs permission to access your device storage for playing music @@ -279,6 +289,7 @@ 현재 재생 중인 노래의 앨범 커버를 잠금 화면 배경화면으로 사용합니다. Show Album Artists in the Artist category 알림, 탐색 등 + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device 잠금 화면의 앨범 커버에 흐림 효과를 적용합니다. 서드 파티 앱 및 위젯에서 문제가 생길 수 있습니다. @@ -297,6 +308,8 @@ Configure visibility and order of library categories. Retro music에서 제공하는 자체 잠금 화면 사용 오픈소스 소프트웨어의 상세 라이센스 정보 + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen 몰입 모드 이어폰이 연결되면 바로 음악을 재생합니다. Shuffle mode will turn off when playing a new list of songs @@ -307,6 +320,7 @@ Album cover skip 앱 바로가기 색상 틴트 알림이 올 때 볼륨 감소 + Fade Audio 아티스트 이미지 자동 다운로드 블랙리스트 Bluetooth playback @@ -328,6 +342,8 @@ 전체 화면 컨트롤 테마 오픈소스 라이선스 + Show Lyrics + Show Suggestions Tab titles mode 회전 효과 전체 화면 @@ -362,7 +378,7 @@ Retro Music Player RetroMusic Pro 구매 The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -450,8 +466,11 @@ Username 버전 Vertical flip + View on Telegram Volume 웹 검색 + Website + Check out our Website Welcome, 무엇을 공유하시겠습니까? What\'s New @@ -463,4 +482,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 458904589967a3d8d2d2d51e2c44c70a5b7e3ab3 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:53 +0530 Subject: [PATCH 0181/1603] New translations strings.xml (Dutch) --- app/src/main/res/values-nl-rNL/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 1b469e123..7168a08b4 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -8,11 +8,13 @@ Toevoegen aan favorieten Voeg toe aan afspeel wachtrij Voeg toe aan afspeellijst... + Cast Afspeel wachtrij legen Cycle repeat mode Verwijder Verwijder van apparaat Details + Edit Ga naar album Ga naar artiest Go to genre @@ -49,6 +51,7 @@ Adaptive Toevoegen "Toevogen aan afspeellijst" + Add Time Framed Lyrics "1 titel aan afspeel wachtrij toegevoegd." %1$d titels toegevoegd aan afspeel wachtrij Album @@ -56,7 +59,7 @@ Song Songs - Album artiest + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey, bekijk deze coole muziekspeler op:https://play.google.com/store/apps/details?id=%s Shuffle Top tracks - Big + Full Image Kaart Klassiek Klein - Text + Minimal Text Artiest Artiesten + Audio Fade Duration Geluid focus geweigerd Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog onderhouden in Telegram + Check out What\'s New Circle Circular Klassiek @@ -132,6 +136,7 @@ %1$d?]]> %1$d?]]> Liedjes %1$d verwijderd. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Koop mij een Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Leeg Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Laatste 3 maanden + Paste Lyrics Here + Paste timeframe lyrics here Peak Permissie voor toegang tot extern opslag is afgewezen The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Gebruik de huidige cover als vergrendelscherm achtergrond. Show Album Artists in the Artist category Notificaties, bediening etc. + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Vervaagt de album cover op het vergrendelscherm. Kan problemen veroorzaken met apps van derde en widgets/ @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Zet besturing knoppen aan op vergrendelscherm Licentie details voor open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Zet dit aan voor immersive mode Wanneer headphones ingeplugd zijn, afspelen start automatisch Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Gekleurde app snelkoppelingen Beperk volume bij verliezen focus + Fade Audio Automatisch downloaden artisten afbeeldingen Zwarte lijst Bluetooth playback @@ -330,6 +344,8 @@ Volledig scherm besturing knoppen Uiterlijk Open source licenties + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Volledig scherm app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Versie Vertical flip + View on Telegram Volume Web zoekopdracht + Website + Check out our Website Welcome, Wat wil je delen? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 7ec16a705186b3e972de076d5c3016c8f6fe37a8 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:54 +0530 Subject: [PATCH 0182/1603] New translations strings.xml (Norwegian) --- app/src/main/res/values-no-rNO/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 969660dd4582d98c67c9f0abcd1d74fe0be645b5 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:55 +0530 Subject: [PATCH 0183/1603] New translations strings.xml (Punjabi) --- app/src/main/res/values-pa-rIN/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 12e83fce751f964ca6954d08767ec75d5c7192ac Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:55 +0530 Subject: [PATCH 0184/1603] New translations strings.xml (Polish) --- app/src/main/res/values-pl-rPL/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 80d6a062b..532da59ee 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -8,11 +8,13 @@ Dodaj do ulubionych Dodaj do kolejki Dodaj do playlisty + Cast Wyczyść kolejkę Przełącz tryb powtarzania Usuń Usuń z urządzenia Szczegóły + Edit Przejdź do albumu Przejdź do wykonawcy Idź do gatunku @@ -49,6 +51,7 @@ Adaptacyjny Dodaj "Dodaj do playlisty" + Add Time Framed Lyrics "Dodano tytuł do kolejki odtwarzania" Dodano %1$d tytułów do kolejki Album @@ -58,7 +61,7 @@ Utworów Utworów - Wykonawca albumu + Album Artist Albumy Album @@ -70,13 +73,14 @@ Hej, sprawdź ten fajny odtwarzacz muzyki na: https://play.google.com/store/apps/details?id=%s Losowo Najczęściej odtwarzane utwory - Big + Full Image Karta Klasyczny Mały - Text + Minimal Text Wykonawca Wykonawcy + Audio Fade Duration Odrzucono fokus dźwiękowy. Dostosuj ustawienia dźwięku i equalizera Automatyczny @@ -107,7 +111,7 @@ Efekt karuzeli na ekranie Teraz odtwarzane Kaskadowy Lista zmian - Lista zmian zarządzana z aplikacji Telegram + Check out What\'s New Okrąg Okrągły Klasyczny @@ -136,6 +140,7 @@ %1$d playlisty?]]> %1$d utwory?]]> Usunięto %1$d utworów. + Deleting Songs Głębia Opis Informacje o urządzeniu @@ -148,6 +153,9 @@ Kup mi: Done Tryb samochodowy + Edit Button + Edit Lyrics + Edit Synced Lyrics Pusto Korektor dźwięku Najczęściej zadawane pytania @@ -247,6 +255,8 @@ Inne ustawienia Hasło Ostatnie 3 miesiące + Paste Lyrics Here + Paste timeframe lyrics here Szczyt Odmowa dostępu do pamięci zewnętrznej. The app needs permission to access your device storage for playing music @@ -285,6 +295,7 @@ Używaj okładki aktualnie odtwarzanego albumu jako tła ekranu blokady Show Album Artists in the Artist category Zmniejsz głośność kiedy dostajesz powiadomienia + Fade Audio when Song is Paused or Played Foldery zawarte na czarnej listy są ukryte w Twojej bibliotece. Rozpocznij odtwarzanie po podłączeniu urządzenia Bluetooth Rozmyj okładkę albumu na ekranie blokady. Może powodować problemy z aplikacjami i widżetami innych firm @@ -303,6 +314,8 @@ Dostosuj widoczność i kolejność kategorii bibliotek. Użyj niestandardowych przycisków kontroli na ekranie blokady Szczegóły licencji oprogramowania typu open source + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Tryb imersji Rozpocznij odtwarzanie po podłączeniu zestawu słuchawkowego Odtwarzanie losowe zostanie wyłączone podczas odtwarzania nowej listy utworów @@ -313,6 +326,7 @@ Przesuwanie okładki albumu Kolorowe skróty aplikacji Zmniejsz głośność przy braku skupienia + Fade Audio Automatycznie pobierz grafiki wykonawców Czarna lista Odtwarzanie przez Bluetooth @@ -334,6 +348,8 @@ Sterowanie pełnoekranowe Wyglądodtwarzacza Licencje typu Open Source + Show Lyrics + Show Suggestions Wygląd tytułów kart Efekt karuzeli Aplikacja pełnoekranowa @@ -368,7 +384,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) Nie udało się usunąć pliku: %s Nie można uzyskać URI SAF @@ -456,8 +472,11 @@ Nazwa użytkownika Wersja Obrót pionowy + View on Telegram Głośność Przeszukaj sieć + Website + Check out our Website Witaj, Co chciałbyś udostępnić? Co nowego @@ -469,4 +488,6 @@ Zaznacz przynajmniej jedną kategorię Zostaniesz przekierowany do strony ze zgłoszeniami. Informacje o twoim koncie są używane tylko do autoryzacji. + Show Album Artists + Add to Blacklist From 6b4b76e9fcc3a7c72f132da2e817be122656d677 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:56 +0530 Subject: [PATCH 0185/1603] New translations strings.xml (Portuguese) --- app/src/main/res/values-pt-rPT/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 98cdb0006e09e42af9112c808643e043b8087db8 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:57 +0530 Subject: [PATCH 0186/1603] New translations strings.xml (Russian) --- app/src/main/res/values-ru-rRU/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 67daec4fb..6398bba0e 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -8,11 +8,13 @@ Добавить в избранное Добавить в очередь воспроизведения Добавить в плейлист + Cast Очистить очередь воспроизведения Режим циклического повтора Удалить Удалить с устройства Подробности + Edit Перейти к альбому Перейти к исполнителю Перейти к жанру @@ -49,6 +51,7 @@ Адаптированная Добавить "Добавить в плейлист" + Add Time Framed Lyrics "В очередь добавлен 1 трек" В очередь добавлено %1$d треков. Альбом @@ -58,7 +61,7 @@ Песни Песни - Исполнитель альбома + Album Artist Альбомы Альбом @@ -70,13 +73,14 @@ Эй, попробуй этот крутой музыкальный плеер на Android: https://play.google.com/store/apps/details?id=%s Перемешать Лучшие треки - Big + Full Image Компактный Классический Маленькое изображение - Text + Minimal Text Исполнитель Исполнители + Audio Fade Duration Фокус на аудио отключен. Измените настройки звука и отрегулируйте настройки эквалайзера Авто @@ -107,7 +111,7 @@ Эффект карусели на экране воспроизведения Каскадный Список изменений - Список изменений находится на канале Telegram + Check out What\'s New Круг Круговая Классическая @@ -136,6 +140,7 @@ %1$d плейлистов?]]> %1$d песен?]]> Удалено %1$d песен. + Deleting Songs Глубина Описание Информация об устройстве @@ -148,6 +153,9 @@ Купить мне: Готов Режим вождения + Edit Button + Edit Lyrics + Edit Synced Lyrics Пусто Эквалайзер ЧаВО @@ -247,6 +255,8 @@ Другое Пароль Последние 3 месяца + Paste Lyrics Here + Paste timeframe lyrics here Панель снизу Разрешение для доступа у внешнему хранилищу не получено. Приложению требуется разрешение на доступ к внутренней памяти вашего устройства для воспроизведения музыки. @@ -285,6 +295,7 @@ Использовать обложку альбома текущей песни в качестве обоев на экране блокировки. Только альбомы исполнителей Снизить громкость воспроизведения когда приходит звуковое уведомление + Fade Audio when Song is Paused or Played Содержимое черного списка скрыто из вашей библиотеки. Начать воспроизведение сразу же после подключения Bluetooth-устройства Размыть обложку альбома на экране блокировки. Может вызывать проблемы со сторонними приложениями и виджетами. @@ -303,6 +314,8 @@ Настроить вид и порядок категорий в библиотеке. Используйте собственный экран блокировки Retro Music Сведения о лицензии для программного обеспечения с открытым исходным кодом + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Полноэкранный режим Начать воспроизведение музыки сразу после подключения наушников Режим перемешивания выключится при проигрывании нового списка песен @@ -313,6 +326,7 @@ Стиль смены обложки альбома Цветные ярлыки Уменьшить громкость при получении уведомлении + Fade Audio Автозагрузка изображений исполнителя Черный список Воспроизведение при подключении Bluetooth @@ -334,6 +348,8 @@ Полноэкранное управление Тема экрана воспроизведения Лицензии с открытым кодом + Show Lyrics + Show Suggestions Название нижних кнопок Эффект карусели Полноэкранное приложение @@ -368,7 +384,7 @@ Retro Music Player Retro Music Pro Приложению требуется разрешение на доступ к настройкам вашего устройства, чтобы установить музыку в качестве рингтона. - Рингтон + Ringtone (Optional) Ошибка при удалении файла: %s Не удается получить SAF URI @@ -456,8 +472,11 @@ Имя пользователя Версия Вертикальный поворт + View on Telegram Громкость Поиск в интернете + Website + Check out our Website Добро пожаловать, Чем вы хотите поделиться? Что нового : @@ -469,4 +488,6 @@ Выберите хотя бы одну категорию. Вы будете перенаправлены на сайт системы отслеживания ошибок. Данные вашей учетной записи используются только для аутентификации. + Show Album Artists + Add to Blacklist From 6c333261b30b002ef545deb94bc1b0881ce6cf01 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:04:58 +0530 Subject: [PATCH 0187/1603] New translations strings.xml (Slovak) --- app/src/main/res/values-sk-rSK/strings.xml | 31 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index f7e20564c..1443b6607 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -58,7 +61,7 @@ Songs Songs - Album artist + Album Artist Albums Album @@ -70,13 +73,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -107,7 +111,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -136,6 +140,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -148,6 +153,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -247,6 +255,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -285,6 +295,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -303,6 +314,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -313,6 +326,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -334,6 +348,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -368,7 +384,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -456,8 +472,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -469,4 +488,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 76db19a13f8926615e4edd0bbb3e30ede71066f2 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 12:05:00 +0530 Subject: [PATCH 0188/1603] New translations strings.xml (Hawaiian) --- app/src/main/res/values-haw-rUS/strings.xml | 31 +++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-haw-rUS/strings.xml b/app/src/main/res/values-haw-rUS/strings.xml index 0a9a9d1f7..6003649bc 100644 --- a/app/src/main/res/values-haw-rUS/strings.xml +++ b/app/src/main/res/values-haw-rUS/strings.xml @@ -8,11 +8,13 @@ Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -49,6 +51,7 @@ Adaptive Add "Add to playlist" + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. Album @@ -56,7 +59,7 @@ Song Songs - Album artist + Album Artist Albums Album @@ -66,13 +69,14 @@ Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text + Minimal Text Artist Artists + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls Auto @@ -103,7 +107,7 @@ Carousel effect on the now playing screen Cascading Changelog - Changelog maintained on the Telegram channel + Check out What\'s New Circle Circular Classic @@ -132,6 +136,7 @@ %1$d playlists?]]> %1$d songs?]]> Deleted %1$d songs. + Deleting Songs Depth Description Device info @@ -144,6 +149,9 @@ Buy me a: Done Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty Equalizer FAQ @@ -243,6 +251,8 @@ Other Password Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here Peak Permission to access external storage denied. The app needs permission to access your device storage for playing music @@ -281,6 +291,7 @@ Use the currently playing song album cover as the lockscreen wallpaper Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -299,6 +310,8 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs @@ -309,6 +322,7 @@ Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -330,6 +344,8 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app @@ -364,7 +380,7 @@ Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -452,8 +468,11 @@ Username Version Vertical flip + View on Telegram Volume Web search + Website + Check out our Website Welcome, What do you want to share? What\'s New @@ -465,4 +484,6 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. + Show Album Artists + Add to Blacklist From 2f4365f848766c49e779f4b13a611d2d64355cd9 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 16 Jul 2021 18:11:42 +0530 Subject: [PATCH 0189/1603] New translations strings.xml (Hindi) --- app/src/main/res/values-hi-rIN/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 407c13373..d11a85cc5 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -59,7 +59,7 @@ Song Songs - Album Artist + एल्बम कलाकार एल्बम Album From 0d28b2ce4061b5c559f31cef540905fc1b5e4573 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sun, 18 Jul 2021 20:06:02 +0530 Subject: [PATCH 0190/1603] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3286447f4..abf162aca 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ ## 🆕 Material Design music player for Android music lovers +## ⚠ Join [@retromusiclog](https://t.me/retromusiclog) on Telegram for important updates. + ## Screenshots ### App Themes | | | | From a8d87fb91e41b456edec910024f2b8e1966b4c10 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Mon, 19 Jul 2021 01:37:57 +0530 Subject: [PATCH 0191/1603] New translations strings.xml (Spanish) --- app/src/main/res/values-es-rES/strings.xml | 90 +++++++++++----------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 91be2cae7..d2804c2dd 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -8,13 +8,13 @@ Añadir a favoritos Añadir a la cola de reproducción Añadir a la lista de reproducción - Cast + Enviar Vaciar cola de reproducción Modo de repetición Eliminar Eliminar del dispositivo Detalles - Edit + Editar Ir al álbum Ir al artista Ir al género @@ -51,7 +51,7 @@ Adaptativo Agregar "Agregar a lista de reproducción" - Add Time Framed Lyrics + Añadir letras sincronizadas "Se ha agregado 1 canción a la cola de reproducción" %1$d canciones agregadas a la cola de reproducción Álbum @@ -59,7 +59,7 @@ Canción Canciones - Album Artist + Artista de Álbum Álbumes Álbum @@ -69,14 +69,14 @@ Ve este cool reproductor de música en: https://play.google.com/store/apps/details?id=%s Aleatorio Canciones más reproducidas - Full Image + Imagen completa Tarjeta Clásico Pequeño - Minimal Text + Texto mínimo Artista Artistas - Audio Fade Duration + Duración del Fade-Out Enfoque de audio denegado Modifica los ajustes de sonido y ajusta los controles del ecualizador Automático @@ -102,12 +102,12 @@ Cancelar Tarjeta Tarjeta Coloreada - Square Card + Tarjeta cuadrada Tarjeta Efecto carrusel en la pantalla de reproducción En cascada Registro de cambios - Check out What\'s New + Consulta las novedades Círculo Circular Clásico @@ -136,7 +136,7 @@ %1$d listas de reproducción?]]> %1$d canciones?]]> %1$d canciones eliminadas. - Deleting Songs + Eliminar canciones Profundidad Descripción Información del dispositivo @@ -147,11 +147,11 @@ Donar Si crees que merezco que me paguen por mi trabajo, puedes dejar algo de dinero aquí Cómprame: - Done + Hecho Modo de conducir - Edit Button - Edit Lyrics - Edit Synced Lyrics + Editar botón + Editar letras + Editar letras sincronizadas Vacio Ecualizador Preguntas más frecuentes @@ -170,7 +170,7 @@ Género Géneros Haz Fork del proyecto en GitHub - Gradient + Gradiente 1 2 3 @@ -180,7 +180,7 @@ 7 8 Cuadrícula y estilo - Need more help? + ¿Necesitas más ayuda? Giro Historial Inicio @@ -188,9 +188,9 @@ Imagen Imagen de degradado Cambiar la configuración de descarga de imágenes del artista - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Importar + Importar lista de reproducción + Importa todas las listas de reproducción del almacenamiento Android con canciones, si las listas ya existen, las canciones se fusionarán. %1$d canciones agregadas a la lista de reproducción %2$s. Comparte tu configuración de Retro Music para exhibirlo en Instagram Teclado @@ -237,7 +237,7 @@ Normal Letras normales %s no aparece en la lista de medios.]]> - Not recently played + No reproducido recientemente Nada para escanear. Nada para escanear Notificaciones @@ -251,12 +251,12 @@ Otro Contraseña Más de 3 meses - Paste Lyrics Here - Paste timeframe lyrics here + Pega la letra aquí + Pegar las letras con marcas de tiempo aquí Pica Permiso de acceso al almacenamiento externo denegado. - The app needs permission to access your device storage for playing music - Storage Access + La aplicación necesita permiso para acceder al almacenamiento y reproducir música + Acceso al Almacenamiento Permiso denegado. Personalizar Personalizar la ventana de reproducción y los controles de la interfaz @@ -289,9 +289,9 @@ Mantener la pantalla encendida Seleccionar lenguaje Usar la portada del álbum de la canción en reproducción como fondo de la pantalla de bloqueo - Show Album Artists in the Artist category + Mostrar Artistas de Álbum en la categoría Artista Bajar el volumen cuando se reproduzca un sonido del sistema o se reciba una notificación - Fade Audio when Song is Paused or Played + Fundir audio cuando la canción está pausada o reproduciéndose Las carpetas en la lista negra, serán ocultado de tu librería. Comienza a reproducir tan pronto como esté conectado al dispositivo bluetooth Desenfocar la portada el álbum en la pantalla de bloqueo. Puede causar problemas con aplicaciones y widgets de terceros @@ -310,19 +310,19 @@ Configure la visibilidad y el orden de las categorías de la biblioteca. Usar los controles personalizados de Retro Music en la pantalla de bloqueo Detalles de licencia para software de código abierto - Display Synced Lyrics over Album Cover - Show New Music Mix on Homescreen + Mostrar letras sincronizadas sobre la portada del álbum + Mostrar el Mix de Música Nueva en la pantalla de inicio Modo inmersivo Comenzar a reproducir inmediatamente cuando se conecten audífonos El modo aleatorio se desactivará cuando se reproduzca una nueva lista de canciones Mostrar controles de volumen si hay suficiente espacio disponible. Mostrar/Ocultar portada del álbum - Navigate by Album Artist + Navegar por artista de álbum Tema de la portada del álbum Estilo de portada del álbum en reproducción Accesos directos de la aplicación coloreados Reducir el volumen cuando se pierda el enfoque - Fade Audio + Atenuar audio Descarga automática de imágenes de artistas Lista Negra Reproducción por Bluetooth @@ -336,7 +336,7 @@ Información de la canción Reproducción sin pausas Tema de la aplicación - Album grid + Cuadrícula de álbum Cuadrícula de los artistas en inicio Banner de Inicio Ignorar las portadas de la biblioteca de medios @@ -344,8 +344,8 @@ Controles en pantalla completa Tema de la ventana de reproducción Licencias de código abierto - Show Lyrics - Show Suggestions + Mostrar letras + Mostrar sugerencias Forma de los títulos de las pestañas Efecto Carrusel Aplicación en pantalla completa @@ -379,8 +379,8 @@ Restaurando compra... Reproductor de Retro Music Retro Music Pro - The app needs permission to access your device settings in order to set music as Ringtone - Ringtone (Optional) + La aplicación necesita permiso para acceder a la configuración de tu dispositivo para establecer música como tono de llamada + Tono de llamada (opcional) La eliminación del archivo falló No se puede obtener SAF URI @@ -402,13 +402,13 @@ Guardando cambios Escanear medios %1$d de %2$d archivos escaneados. - Scrobbles + Enviar a Seleccionar todos Seleccionado Establecer Establecer imagen del artista Compartir app - Share the app with your friends and family + Comparte la app con tus amigos y familia Compartir en historias Aleatorio Sencillo @@ -426,8 +426,8 @@ Compositor Fecha Fecha de modificación - Song count - Song count desc + Número de canciones + Número de canciones desc Año Descendente ¡Lo siento! Su dispositivo no es compatible con la entrada de voz @@ -464,15 +464,15 @@ A continuación Actualizar imagen Actualizando... - User Name + Nombre de usuario Nombre de usuario Versión giro vertical - View on Telegram + Ver en Telegram Volumen Búsqueda web - Website - Check out our Website + Sitio Web + Echa un vistazo a nuestra página web Bienvenido, ¿Qué quieres compartir? Lo Nuevo @@ -484,6 +484,6 @@ Tienes que seleccionar al menos una categoría Será redirigido al sitio web para reportar problemas. Los datos de tu cuenta sólo se utilizan para la autenticación - Show Album Artists - Add to Blacklist + Mostrar artistas del álbum + Añadir a la lista negra From 8460d3c2fb1a5ab1982ca8e651755ef5fda34c8a Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Mon, 19 Jul 2021 01:37:58 +0530 Subject: [PATCH 0192/1603] New translations strings.xml (Hungarian) --- app/src/main/res/values-hu-rHU/strings.xml | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 88d5af714..933924405 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -8,13 +8,13 @@ Hozzáadás a kedvencekhez Hozzáadás a lejátszási sorhoz Hozzáadás lejátszási listához - Cast + Tartalomátküldés Lejátszási sor törlése Ciklus ismétlés üzemmód Törlés Törlés az eszközről Részletek - Edit + Szerkesztés Ugrás az albumhoz Ugrás az előadóhoz Ugrás a műfajhoz @@ -51,7 +51,7 @@ AdaptÍv Hozzáad "Hozzáadás lejátszási listához" - Add Time Framed Lyrics + Időzített dalszöveg hozzáadása "1 cím lett hozzáadva a lejátszási sorhoz." %1$d cím hozzáadva a lejátszási sorhoz. Album @@ -59,7 +59,7 @@ Dal Dalok - Album Artist + Album előadó Albumok Album @@ -69,14 +69,14 @@ Hé, nézd meg ezt a menő zenelejátszót itt: https://play.google.com/store/apps/details?id=%s Keverés Legjobb zeneszámok - Full Image + Teljes kép Kártya Retro zene - Klasszikus Retro zene - Kicsi - Minimal Text + Minimális szöveg Előadó Előadók - Audio Fade Duration + Hangáttünés hossza Az audiofókusz megtagadva. Módosítsa a hangbeállításokat és állítsa be a hangszínszabályzó irányítását Autó @@ -102,12 +102,12 @@ Mégse Kártya Színes Kártya - Square Card + Négyzet Kártya Kártya Kőrhinta effekt a most játszik képernyőn Növelés Változtatási napló - Check out What\'s New + Nézd meg az újdonságokat Kör Kör alakú Klasszikus @@ -136,7 +136,7 @@ %1$d lejátszási listát?]]> %1$d zenéket?]]> Törölte a %1$d zenét. - Deleting Songs + Zenék törlése Mélység Leírás Eszköz információ @@ -147,11 +147,11 @@ Támogatás Ha úgy gondolja, hogy megérdemlem fizetni a munkámért, hagyhatsz néhányat pénzt itt Vegyél nekem egy: - Done + Kész Vezetés mód - Edit Button - Edit Lyrics - Edit Synced Lyrics + Szerkesztés gomb + Dalszöveg szerkesztése + Szinkronizált dalszöveg szerkesztése Üres Hangszínszabályzó GYIK @@ -170,7 +170,7 @@ Műfaj Műfajok Szerezd meg a projektet a githubon - Gradient + Színátmenet 1 2 3 @@ -180,7 +180,7 @@ 7 8 Rácsok és stílus - Need more help? + További segítségre van szüksége? Zsanér Előzmény Kezdőlap @@ -188,8 +188,8 @@ Kép Színátmenet kép A művészképek letöltésének megváltoztatása. - Import - Import playlist + Importálás + Lejátszólista importálása It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. %1$d dalt betett a %2$s lejátszási listába. Ossza meg Retro Music beállításait, hogy bemutassa a Instagram-on From 7062571d0a7579bcf9aad156c292f74a8b45b7d6 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Mon, 19 Jul 2021 01:37:59 +0530 Subject: [PATCH 0193/1603] New translations strings.xml (Italian) --- app/src/main/res/values-it-rIT/strings.xml | 98 +++++++++++----------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index bb2f2ebd2..8208b1ee6 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -8,13 +8,13 @@ Aggiungi ai preferiti Aggiungi alla coda Aggiungi alla playlist - Cast + Trasmetti Cancella coda Modalità ripetizione continua Elimina Elimina dal dispositivo Dettagli - Edit + Modifica Vai all\'album Vai all\'artista Vai al genere @@ -51,15 +51,15 @@ Adattivo Aggiungi "Aggiungi alla playlist" - Add Time Framed Lyrics + Aggiungi testi sincronizzati "Aggiunto un brano alla coda." Aggiungi %1$d brani alla coda. Album - Canzone - Canzoni + Brano + Brani - Album Artist + Artista album Album Album @@ -70,14 +70,14 @@ https://play.google.com/store/apps/details?id=%s Casuale Tracce migliori - Full Image + Immagine intera Card Classico Piccolo - Minimal Text + Testo minimale Artista Artisti - Audio Fade Duration + Durata dissolvenza audio Focalizzazione audio negata. Modifica le impostazioni audio e regola i controlli dell\'equalizzatore Automatico @@ -103,12 +103,12 @@ https://play.google.com/store/apps/details?id=%s Annulla Card Card colorata - Square Card + Card quadrata Card Effetto scorrimento sulla schermata di riproduzione Cascata Ultime modifiche - Check out What\'s New + Scopri le novità Cerchio Circolare Classico @@ -137,7 +137,7 @@ https://play.google.com/store/apps/details?id=%s %1$d playlist?]]> %1$d brani?]]> Eliminati %1$d brani - Deleting Songs + Eliminazione brani Profondità Descrizione Info dispositivo @@ -148,11 +148,11 @@ https://play.google.com/store/apps/details?id=%s Dona Se pensi che io meriti di essere pagato per il mio lavoro, puoi lasciarmi qualche soldo qui Pagami un: - Done + Fatto Modalità alla guida - Edit Button - Edit Lyrics - Edit Synced Lyrics + Pulsante modifica + Modifica testi + Modifica testi sincronizzati Vuoto Equalizzatore FAQ @@ -171,7 +171,7 @@ https://play.google.com/store/apps/details?id=%s Genere Generi Sviluppa il progetto su GitHub - Gradient + Sfumatura 1 2 3 @@ -181,7 +181,7 @@ https://play.google.com/store/apps/details?id=%s 7 8 Griglie e stile - Need more help? + Serve altro aiuto? Cerniera Cronologia Homepage @@ -189,9 +189,9 @@ https://play.google.com/store/apps/details?id=%s Immagine Immagine sfumata Modifica le impostazioni di download delle immagini - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Importa + Importa playlist + Importa tutte le playlist elencate nell\'Android Media Store con le canzoni. Se le playlist già esistono, le canzoni verranno unite. Inseriti %1$d brani nella playlist %2$s. Condividi la tua configurazione di Retro Music per mostrarla su Instagram Tastiera @@ -238,7 +238,7 @@ https://play.google.com/store/apps/details?id=%s Normale Testi normali %s non è presente nel Media Store.]]> - Not recently played + Non riprodotto recentemente Niente da rilevare Non c\'è niente da vedere Notifica @@ -252,12 +252,12 @@ https://play.google.com/store/apps/details?id=%s Altro Password Ultimi 3 mesi - Paste Lyrics Here - Paste timeframe lyrics here + Incolla i testi qui + Incolla i testi sincronizzati qui Picco Autorizzazione ad accedere all\'archiviazione esterna negata. - The app needs permission to access your device storage for playing music - Storage Access + L\'app necessita dell\'autorizzazione ad accedere all\'archiviazione del dispositivo per riprodurre musica + Accesso all\'archiviazione Autorizzazione negata. Personalizza Personalizza i comandi riproduzione @@ -290,40 +290,40 @@ https://play.google.com/store/apps/details?id=%s Mantieni lo schermo acceso Seleziona lingua Imposta la copertina del brano riprodotto come sfondo del blocco schermo - Show Album Artists in the Artist category + Mostra gli artisti degli album nella categoria Artista Riduce il volume quando viene riprodotto un suono di sistema o viene ricevuta una notifica - Fade Audio when Song is Paused or Played + Dissolvenza audio quando il brano è in pausa o riprodotto Il contenuto delle cartelle nella blacklist non compare nella raccolta Avvia la riproduzione non appena connesso al dispositivo bluetooth Sfoca la copertina dell\'album sulla schermata di blocco. Può causare problemi con app e widget di terze parti - Effetto scorrimento della copertina nella schermata in riproduzione. Non funziona con i temi Scheda e Scheda sfocata + Effetto scorrimento della copertina nella schermata in riproduzione. Non funziona con i temi Card e Card sfocata Usa il design classico delle notifiche Lo sfondo e il pulsante di riproduzione cambiano colore in base alla copertina dell\'album in riproduzione Colora le scorciatoie dell\'app con il colore in rilievo. Ogni volta che cambi colore attiva questo perché abbia effetto "Colora la notifica con il colore principale della copertina dell'album" Secondo le linee guida del Material Design, in modalità scura i colori devono essere desaturati - Cliccando sulla notifica verrà visualizzata la schermata di riproduzione invece della schermata home + Cliccando sulla notifica verrà visualizzata la schermata di riproduzione invece della homepage Aggiungi controlli extra nel mini player Mostra informazioni extra sul brano come formato del file, bitrate e frequenza "Può causare problemi di riproduzione su alcuni dispositivi" - Attiva banner nella home + Mostra/nascondi banner nella homepage Può aumentare la qualità delle copertine degli album, ma causa un rallentamento nel caricamento delle immagini. Abilita solo se hai problemi con la bassa qualità delle copertine Configura la visibilità e l\'ordine delle categorie Usa i comandi di Retro Music nella schermata di blocco Dettagli licenza per il software open source - Display Synced Lyrics over Album Cover - Show New Music Mix on Homescreen + Mostra i testi sincronizzati sulla copertina dell\'album + Mostra il nuovo mix musicale nella homepage Modalità immersiva Inizia la riproduzione subito dopo aver collegato le cuffie La modalità casuale viene disattivata quando si riproduce un nuovo elenco di brani Se c\'è spazio sufficiente, mostra i controlli del volume nella schermata in riproduzione Mostra la copertina dell\'album - Navigate by Album Artist + Naviga per artista album Tema copertina dell\'album Modalità cambio copertina dell\'album Scorciatoie app colorate Riduzione volume con perdita di focalizzazione audio - Fade Audio + Dissolvenza audio Scarica automaticamente immagini artista Blacklist Riproduzione bluetooth @@ -337,7 +337,7 @@ https://play.google.com/store/apps/details?id=%s Informazioni brano Riproduzione senza interruzioni Tema generale - Album grid + Griglia schermata album Griglia schermata artista Banner Ignora le copertine del Media Store @@ -345,8 +345,8 @@ https://play.google.com/store/apps/details?id=%s Controlli a schermo intero Tema schermata riproduzione Licenze open source - Show Lyrics - Show Suggestions + Mostra testi + Mostra suggerimenti Modalità titoli schede Effetto scorrimento Applicazione a schermo intero @@ -380,8 +380,8 @@ https://play.google.com/store/apps/details?id=%s Ripristino acquisto... Retro Music Player Retro Music Pro - The app needs permission to access your device settings in order to set music as Ringtone - Ringtone (Optional) + L\'app necessita dell\'autorizzazione ad accedere alle impostazioni del dispositivo per impostare musica come suoneria + Suoneria (opzionale) Eliminazione file fallita: %s Impossibile ottenere l\'URI dal SAF @@ -409,7 +409,7 @@ https://play.google.com/store/apps/details?id=%s Imposta Imposta immagine artista Condividi app - Share the app with your friends and family + Condividi l\'app con amici e familiari Condividi nelle Storie Casuale Semplice @@ -427,8 +427,8 @@ https://play.google.com/store/apps/details?id=%s Compositore Data Ultima modifica - Song count - Song count desc + Numero brani + Numero brani decrescente Anno Decrescente Il tuo dispositivo non supporta l\'input vocale @@ -465,15 +465,15 @@ https://play.google.com/store/apps/details?id=%s Prossimo Aggiorna immagine Aggiornamento... - User Name + Nome utente Nome utente Versione Flip verticale - View on Telegram + Visualizza su Telegram Volume Ricerca web - Website - Check out our Website + Sito web + Visita il nostro sito Benvenuto. Cosa vuoi condividere? Novità @@ -485,6 +485,6 @@ https://play.google.com/store/apps/details?id=%s Seleziona almeno una categoria. Verrai reindirizzato al sito web dei problemi. I dati del tuo account vengono utilizzati solo per l\'autenticazione. - Show Album Artists - Add to Blacklist + Mostra artisti album + Aggiungi alla blacklist From 7e791a37fb08de46276aba167a6798459196761f Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Mon, 19 Jul 2021 01:38:00 +0530 Subject: [PATCH 0194/1603] New translations strings.xml (Chinese Simplified) --- app/src/main/res/values-zh-rCN/strings.xml | 94 +++++++++++----------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1c3c27883..2113c944d 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -8,13 +8,13 @@ 添加到收藏夹 添加到播放队列 添加到播放列表 - Cast + 投屏 清空播放队列 循环重复模式 删除 从设备中移除 详情 - Edit + 编辑 查看此专辑 查看艺术家 查看流派 @@ -51,30 +51,30 @@ 自适应 添加 "添加到播放列表" - Add Time Framed Lyrics + 添加时段歌词 "已添加1首歌到播放队列。" 已添加 %1$d 首歌到播放队列。 专辑 - Songs + 歌曲 - Album Artist + 专辑艺术家 专辑 - Albums + 专辑 始终 嘿,快来瞧瞧这个酷炫的音乐播放器:https://play.google.com/store/apps/details?id=%s 随机播放 热门曲目 - Full Image + 完整图像 卡片模式 经典模式 - Minimal Text + 极简文字 艺术家 艺术家 - Audio Fade Duration + 音频淡入淡出时长 音频焦点丢失。 更改声音设置或调整均衡器 自动 @@ -100,12 +100,12 @@ 取消 卡片 彩色卡片 - Square Card + 方形卡片 卡片 在「正在播放」界面使用轮播效果 层叠 更新日志 - Check out What\'s New + 查看新内容 环形 圆形 古典 @@ -134,7 +134,7 @@ %1$d 吗?]]> %1$d 吗?]]> 已删除 %1$d 首歌曲。 - Deleting Songs + 正在删除歌曲 深度 详情 设备信息 @@ -145,11 +145,11 @@ 捐赠 如果您认为应用还不错,可以通过捐赠支持我们 用以下方式捐赠: - Done + 完成 驾驶模式 - Edit Button - Edit Lyrics - Edit Synced Lyrics + 编辑按钮 + 编辑歌词 + 编辑同步歌词 空空如也 均衡器 常见问题和解答 @@ -168,7 +168,7 @@ 流派 流派 在 GitHub 上克隆项目 - Gradient + 渐变色 1 2 3 @@ -178,7 +178,7 @@ 7 8 网格样式 - Need more help? + 需要更多帮助? 关键 历史记录 主页 @@ -186,9 +186,9 @@ 图片 渐变图片 更改下载艺术家图像方式 - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + 导入 + 导入播放列表 + 这会导入 Android 媒体存储中的所有播放列表,并合并重复的播放列表 将歌曲 %1$d 加入 %2$s 列表。 将您的设置分享到 Instagram 键盘 @@ -235,7 +235,7 @@ 正常 正常歌词 %s 未在媒体存储中列出。]]> - Not recently played + 最近未播放歌曲 检索不到任何东西。 空空如也 通知栏 @@ -249,12 +249,12 @@ 其他 密码 最近三个月 - Paste Lyrics Here - Paste timeframe lyrics here + 在此粘贴歌词 + 在此粘贴时段歌词 顶点 访问外部存储权限时被拒绝。 - The app needs permission to access your device storage for playing music - Storage Access + 应用需要设备存储访问权限来播放音乐 + 存储空间权限 权限被拒绝。 个性化 自定义正在播放控件和UI控件 @@ -287,9 +287,9 @@ 保持屏幕常亮 选择语言 将正在播放的歌曲专辑封面设置为锁屏壁纸 - Show Album Artists in the Artist category + 在艺术家类别中显示专辑艺术家 当系统播放声音或收到通知时降低音量 - Fade Audio when Song is Paused or Played + 当歌曲暂停或播放时淡入淡出音频 在媒体库中隐藏列入黑名单的文件夹内容。 连接到蓝牙设备后立即开始播放 在锁屏中显示模糊化的专辑封面 @@ -311,19 +311,19 @@ 配置媒体库的可见性和顺序 使用 Retro Music 的自定义锁屏 开源许可详情 - Display Synced Lyrics over Album Cover - Show New Music Mix on Homescreen + 在专辑封面上显示同步歌词 + 在主屏幕上显示新歌单 沉浸模式 连接耳机后立即开始播放 播放新列表时关闭随机播放 空间充足时在播放界面显示音量控制控件 显示专辑封面 - Navigate by Album Artist + 按专辑艺术家排序 专辑封面主题 专辑封面跳过 着色应用快捷方式 焦点丢失时降低音量 - Fade Audio + 音频淡入淡出 自动下载艺术家图片 黑名单 蓝牙播放 @@ -337,7 +337,7 @@ 歌曲信息 无缝播放 应用主题 - Album grid + 专辑网格 主页艺术家网格 主页横幅 忽略媒体存储封面 @@ -345,8 +345,8 @@ 全屏控件 正在播放主题 开源许可 - Show Lyrics - Show Suggestions + 显示歌词 + 显示建议 标签标题模式 轮播效果 全屏应用 @@ -380,8 +380,8 @@ 恢复购买中... Retro Music Player Retro Music 高级版 - The app needs permission to access your device settings in order to set music as Ringtone - Ringtone (Optional) + 应用需要系统设置访问权限,才能将音乐设置为为铃声 + 铃声(可选) 文件删除失败:%s 无法获取 SAF URI @@ -409,7 +409,7 @@ 设置 设置艺术家图片 分享应用 - Share the app with your friends and family + 与您的朋友和家人分享此应用 分享到故事 随机播放 简单 @@ -427,8 +427,8 @@ 作曲家 日期 修改日期 - Song count - Song count desc + 歌曲数量 + 歌曲数量降序 年份 降序 抱歉!您的设备不支持语音输入 @@ -457,7 +457,7 @@ 音轨编号 翻译 帮助我们将应用翻译成您的语言 - Try Retro Music Premium + 试试 Retro Music 高级版 Twitter 与 Retro Music 分享您的设计 未标记 @@ -465,15 +465,15 @@ 下一首 更新图片 更新中... - User Name + 用户名 用户名 版本 垂直翻转 - View on Telegram + 在 Telegram 上查看 音量 网络搜索 - Website - Check out our Website + 网站 + 查看我们的网站 欢迎, 您想分享什么? 更新内容 @@ -485,6 +485,6 @@ 请至少选择一个分类。 将跳转至问题追踪网站。 您的账户数据仅用于验证。 - Show Album Artists - Add to Blacklist + 显示专辑艺术家 + 添加至黑名单 From caabf6ddccfb3f4f9ff5189e0568d8817c6129da Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Tue, 20 Jul 2021 08:22:15 +0530 Subject: [PATCH 0195/1603] New Crowdin updates (#1091) * New translations strings.xml (Arabic) * New translations strings.xml (Arabic) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Portuguese, Brazilian) --- app/src/main/res/values-ar-rSA/strings.xml | 36 +++--- app/src/main/res/values-pt-rBR/strings.xml | 130 ++++++++++----------- 2 files changed, 83 insertions(+), 83 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index d4fea6e12..119ebf62e 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -14,7 +14,7 @@ حذف حذف من الجهاز تفاصيل - Edit + تعديل إنتقل إلى الالبوم إنتقل إلى الفنان إنتقل إلى النوع @@ -156,10 +156,10 @@ إذا كنت تعتقد أنني أستحق الحصول على المال مقابل عملي ، يمكنك ترك بعض المال هنا. اشتري لي: - Done + تم وضع القيادة - Edit Button - Edit Lyrics + زر التعديل + تعديل كلمات الأغنية Edit Synced Lyrics فارغ موازن الصوت @@ -180,14 +180,14 @@ فئات اجلب المشروع على GitHub Gradient - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 + ١ + ٢ + ٣ + ٤ + ٥ + ٦ + ٧ + ٨ الشبكة والأسلوب Need more help? مفصل @@ -354,7 +354,7 @@ ثيم التشغيل الان التراخيص مفتوحة المصدر Show Lyrics - Show Suggestions + عرض الإقتراحات وضع عناوين التبويبات تاثير التتالي التطبيق في كامل الشاشة @@ -388,8 +388,8 @@ استرداد عملية الشراء... مشغل الموسيقى Retro ريترو ميوزك - الكامل - The app needs permission to access your device settings in order to set music as Ringtone - Ringtone (Optional) + يحتاج التطبيق إلى إذن للوصول إلى إعدادات جهازك من أجل تعيين الموسيقى كنغمة رنين + نغمة الرنين (إختياري) فشل حذف الملف: %s لا يمكن الحصول على URI SAF @@ -417,7 +417,7 @@ تعيين اختيار صورة الفنان مشاركة التطبيق - Share the app with your friends and family + شارك التطبيق مع أصدقائك وأسرتك شارك في القصص خلط بسيط @@ -435,7 +435,7 @@ المؤلف التاريخ تاريخ التعديل - Song count + عدد الأغاني Song count desc السنة تنازلي @@ -473,7 +473,7 @@ التالي تحديث الصورة تحديث... - User Name + إسم المستخدم أسم المستخدم الإصدار تدوير رأسي diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 3b2866e03..a8d581a1a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1,6 +1,6 @@ - About %s + Sobre %s Time, links sociais Cor de destaque A cor de destaque do tema, o padrão é verde @@ -8,13 +8,13 @@ Adicionar aos favoritos Adicionar à lista de reprodução Adicionar à lista - Cast + Transmitir Limpar a atual fila de reprodução Alternar modo de repetição Excluir Excluir do dispositivo Detalhes - Edit + Editar Ir para o álbum Ir para o artista Ir para o gênero @@ -26,8 +26,8 @@ Próxima Reproduzir Reproduzir tudo - Reproduzir a próxima - Reproduzir/Pausar + Tocar a próxima + Tocar/Pausar Anterior Remover dos favoritos Remover da fila de reprodução @@ -51,32 +51,32 @@ Adaptável Adicionar "Adicionar à lista" - Add Time Framed Lyrics + Adicione Letras no Período de Tempo "Uma música foi adicionada à fila de reprodução" Foram adicionadas %1$d músicas na fila de reprodução Álbum - Song - Songs + Música + Músicas - Album Artist + Artista do Álbum Álbuns - Album - Albums + Álbum + Álbuns Sempre Ei, confira este reprodutor de música legal em: https://play.google.com/store/apps/details?id=%s Aleatório Músicas favoritas - Full Image - Música Retrô-Cartão - Música Retrô-Clássico - Música Retrô-Pequeno - Minimal Text + Imagem inteira + Card + Clássico + Pequeno + Texto mínimo Artista Artistas - Audio Fade Duration + Duração do Aumento Gradual Foco de áudio negado Altere as configurações de som e ajuste os controles do equalizador Automático @@ -102,12 +102,12 @@ Cancelar Cartão Cartão colorido - Square Card + Cartão Quadrado Cartão Efeito carrossel na tela de reprodução Cascata Lista de mudanças - Check out What\'s New + Veja o que há de novo Círculo Circular Clássico @@ -136,7 +136,7 @@ %1$d playlists?]]> %1$d músicas?]]> %1$d músicas foram excluídas. - Deleting Songs + Apagando músicas Profundidade Descrição Informação do dispositivo @@ -147,11 +147,11 @@ Doar Se você acha que eu mereço ser recompensado pelo meu trabalho, você pode me deixar algum dinheiro aqui Compre-me um: - Done + Concluído Modo de direção - Edit Button - Edit Lyrics - Edit Synced Lyrics + Botão editar + Editar letra + Editar Letras Sincronizadas Vazio Equalizador Perguntas frequentes @@ -170,7 +170,7 @@ Gênero Gêneros Fork o projeto no GitHub - Gradient + Degradê 1 2 3 @@ -180,7 +180,7 @@ 7 8 Grades & Estilos - Need more help? + Precisa de mais ajuda? Dobradiça Histórico Início @@ -188,9 +188,9 @@ Imagem Imagem degradê Alterar as configurações de download das imagens dos artistas - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Importar + Importar Playlist + Ele importa todas as playlists listadas na Mídia do Android com músicas, se as listas de reprodução já existirem, as músicas serão mescladas. %1$d músicas adicionadas na playlist %2$s. Compartilhe seu perfil do Retro Music para mostrá-lo no Instagram Teclado @@ -237,7 +237,7 @@ Normal Letras normais %s não está listado no armazenamento de mídia]]> - Not recently played + Não reproduzido recentemente Nada para escanear. Nada para escanear Notificação @@ -251,12 +251,12 @@ Outro Senha Últimos 3 meses - Paste Lyrics Here - Paste timeframe lyrics here - Peak + Colar letras aqui + Cole as letras do cronograma aqui + Pico Permissão para acessar o armazenamento externo negada - The app needs permission to access your device storage for playing music - Storage Access + O aplicativo precisa de permissão para acessar seu dispositivo de armazenamento para reproduzir músicas + Acesso ao Armazenamento Permissões negadas. Personalizar Personalizar os controles em Reproduzindo agora e Interface do Usuário @@ -268,7 +268,7 @@ Notificação de reprodução A playlist está vazia Nome da playlist - Playlists + Lista de Reprodução Quantidade de desfoque aplicada a temas de desfoque, menor é mais rápido Quantidade de desfoque Filtrar músicas por duração @@ -282,16 +282,16 @@ Imagens Biblioteca Tela de bloqueio - Playlists + Lista de Reprodução Pausa a reprodução quando o volume é zerado e reproduz novamente quando o volume aumentar. Também funciona fora do aplicativo Pausar quando o volume for zerado Tenha em mente que ativar este recurso pode afetar a duração da bateria Manter a tela ligada - Select language + Selecione o idioma Usar a capa do álbum da música em reprodução como papel de parede na tela de bloqueio - Show Album Artists in the Artist category + Mostrar artistas do álbum na categoria do artista Diminua o volume quando um som do sistema for reproduzido ou uma notificação for recebida - Fade Audio when Song is Paused or Played + Fade áudio quando a música é pausada ou reproduzida O conteúdo das pastas na lista negra está oculto da sua biblioteca. Comece a tocar assim que conectado ao dispositivo bluetooth Desfoque a capa do álbum na tela de bloqueio. Pode causar problemas com aplicativos e widgets de terceiros @@ -301,7 +301,7 @@ Colore os atalhos do aplicativo na cor de destaque. Toda vez que você mudar a cor alterne essa opção para ter efeito "Colore a notifica\u00e7\u00e3o na cor vibrante da capa do \u00e1lbum" Conforme o guia do Material Design as cores devem ser dessaturadas no modo escuro - Clicking on the notification will show now playing screen instead of the home screen + Clicando na notificação mostrará a tela inicial em vez da tela inicial Adicionar botões extras para o mini reprodutor Mostrar informações extras da música, como formato de arquivo, taxa de bits e frequência "Pode causar problemas de reprodução em alguns dispositivos" @@ -310,19 +310,19 @@ Configurar visibilidade e ordem de categorias da biblioteca. Usar controles personalizados do Retro Music na tela de bloqueio Detalhes da licença para software de código aberto - Display Synced Lyrics over Album Cover - Show New Music Mix on Homescreen + Mostrar letras sincronizadas sobre a capa do álbum + Mostrar novo Mix na tela inicial Modo imersivo Comecar a reproduzir imediatamente quando os fones de ouvido forem conectados O modo aleatório será desativado ao reproduzir uma nova lista de músicas Se houver espaço suficiente, mostre os controles de volume na tela que está sendo reproduzida Exibir a capa do álbum - Navigate by Album Artist + Navegar pelo artista do álbum Tema da capa do álbum Pular a capa do álbum Colorir os atalhos do aplicativo Reduza o volume na perda de foco - Fade Audio + Áudio de Transição Baixar automaticamente as imagens dos artistas Lista negra Reprodução Bluetooth @@ -331,12 +331,12 @@ Cor adaptável Notificações coloridas Cor dessaturada - Show now playing screen + Mostrar tela de reprodução Controles extras Informações da música Reprodução contínua Tema do aplicativo - Album grid + Álbum em grade Grade de artistas na tela inicial Mural na tela inicial Ignorar capas do Armazenamento de Mídia @@ -344,8 +344,8 @@ Controles em tela cheia Tema da tela \"Reproduzindo agora\" Licenças de código aberto - Show Lyrics - Show Suggestions + Mostrar letras + Exibir Sugestões Modo de títulos nas abas Efeito carrossel Aplicativo em tela cheia @@ -379,8 +379,8 @@ Restaurando compra... Retro Music Player Retro Music Pro - The app needs permission to access your device settings in order to set music as Ringtone - Ringtone (Optional) + O aplicativo precisa de permissão para acessar as configurações do seu dispositivo para definir músicas como Ringtone + Toque (opcional) Falha ao excluir arquivo: %s Não foi possível obter URI SAF @@ -408,14 +408,14 @@ Definir Definir imagem do artista Compartilhar o aplicativo - Share the app with your friends and family - Share to Stories + Compartilhe-os com amigos e familiares + Compartilhe no Stories Aleatório Simples Temporizador cancelado Temporizador definido para %d minutos a partir de agora Social - Share story + Compartilhar história Música Duração da música Músicas @@ -425,9 +425,9 @@ Artista Compositor Data - Date modified - Song count - Song count desc + Data modificada + Contagem de músicas + Contagem de músicas decrescente Ano Decrescente Desculpe! O seu dispositivo não suporta entrada de voz @@ -447,7 +447,7 @@ Esta semana Este ano Minúsculo - Tiny card + Cartão pequeno Título Hoje Melhores albuns @@ -456,7 +456,7 @@ Número da música Traduzir Ajude-nos a traduzir o aplicativo para seu idioma - Try Retro Music Premium + Experimente o Retro Music Premium Twitter Compartilhe seu design com o Retro Music Não rotulado @@ -464,15 +464,15 @@ A seguir Atualizar imagem Atualizando... - User Name + Nome do usuário Nome de usuário Versão Giro vertical - View on Telegram + Ver no Telegram Volume Pesquisar na internet - Website - Check out our Website + Site + Confira nosso site Bem-vindo(a), O que você quer compartilhar? Novidades @@ -484,6 +484,6 @@ Você precisa selecionar ao menos uma categoria. Você será encaminhado para o website do rastreador de problemas. Os dados da sua conta são usados ​​apenas para autenticação. - Show Album Artists - Add to Blacklist + Mostrar artistas do álbum + Adicionar à lista negra From 32a8d762def9c1671867f9336d2768cf19e06c23 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Wed, 21 Jul 2021 18:47:04 +0530 Subject: [PATCH 0196/1603] New translations strings.xml (Portuguese, Brazilian) (#1092) --- app/src/main/res/values-pt-rBR/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index a8d581a1a..77aa2db62 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -148,7 +148,7 @@ Se você acha que eu mereço ser recompensado pelo meu trabalho, você pode me deixar algum dinheiro aqui Compre-me um: Concluído - Modo de direção + Modo Carro Botão editar Editar letra Editar Letras Sincronizadas From da584aafc3974ef0333b2aa268ad011185d3aeb2 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 22 Jul 2021 18:39:16 +0530 Subject: [PATCH 0197/1603] New translations strings.xml (Russian) (#1094) --- app/src/main/res/values-ru-rRU/strings.xml | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 6398bba0e..88ce6997b 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -8,13 +8,13 @@ Добавить в избранное Добавить в очередь воспроизведения Добавить в плейлист - Cast + Трансляция Очистить очередь воспроизведения Режим циклического повтора Удалить Удалить с устройства Подробности - Edit + Изменить Перейти к альбому Перейти к исполнителю Перейти к жанру @@ -51,7 +51,7 @@ Адаптированная Добавить "Добавить в плейлист" - Add Time Framed Lyrics + Добавить синхронизированный текст "В очередь добавлен 1 трек" В очередь добавлено %1$d треков. Альбом @@ -61,7 +61,7 @@ Песни Песни - Album Artist + Исполнитель альбома Альбомы Альбом @@ -73,14 +73,14 @@ Эй, попробуй этот крутой музыкальный плеер на Android: https://play.google.com/store/apps/details?id=%s Перемешать Лучшие треки - Full Image + Полное Изображение Компактный Классический Маленькое изображение - Minimal Text + Минималистичный текст Исполнитель Исполнители - Audio Fade Duration + Длительность затухания аудио Фокус на аудио отключен. Измените настройки звука и отрегулируйте настройки эквалайзера Авто @@ -111,7 +111,7 @@ Эффект карусели на экране воспроизведения Каскадный Список изменений - Check out What\'s New + Узнайте, что нового Круг Круговая Классическая @@ -135,12 +135,12 @@ %1$s?]]> Удалить плейлисты Удалить песню - %1$s?]]> + %1$s?]]> Удалить песни %1$d плейлистов?]]> %1$d песен?]]> Удалено %1$d песен. - Deleting Songs + Удаление песен Глубина Описание Информация об устройстве @@ -153,9 +153,9 @@ Купить мне: Готов Режим вождения - Edit Button - Edit Lyrics - Edit Synced Lyrics + Кнопка редактирования + Редактировать текст + Редактировать синхронизированный текст Пусто Эквалайзер ЧаВО @@ -255,8 +255,8 @@ Другое Пароль Последние 3 месяца - Paste Lyrics Here - Paste timeframe lyrics here + Вставьте текст песни + Вставьте синхронизированный текст песни Панель снизу Разрешение для доступа у внешнему хранилищу не получено. Приложению требуется разрешение на доступ к внутренней памяти вашего устройства для воспроизведения музыки. @@ -295,7 +295,7 @@ Использовать обложку альбома текущей песни в качестве обоев на экране блокировки. Только альбомы исполнителей Снизить громкость воспроизведения когда приходит звуковое уведомление - Fade Audio when Song is Paused or Played + Затухать звук, когда песня заканчивает или начинает проигрываться Содержимое черного списка скрыто из вашей библиотеки. Начать воспроизведение сразу же после подключения Bluetooth-устройства Размыть обложку альбома на экране блокировки. Может вызывать проблемы со сторонними приложениями и виджетами. From 8be6e043ed8189779322334df4295762dfd6d985 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 23 Jul 2021 13:44:24 +0530 Subject: [PATCH 0198/1603] New translations strings.xml (Russian) (#1095) --- app/src/main/res/values-ru-rRU/strings.xml | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 88ce6997b..5b78acc31 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -314,8 +314,8 @@ Настроить вид и порядок категорий в библиотеке. Используйте собственный экран блокировки Retro Music Сведения о лицензии для программного обеспечения с открытым исходным кодом - Display Synced Lyrics over Album Cover - Show New Music Mix on Homescreen + Показывать синхронизированный текст песни поверх обложки альбома + Показывать миксы новый музыки на главном экране Полноэкранный режим Начать воспроизведение музыки сразу после подключения наушников Режим перемешивания выключится при проигрывании нового списка песен @@ -326,7 +326,7 @@ Стиль смены обложки альбома Цветные ярлыки Уменьшить громкость при получении уведомлении - Fade Audio + Затухание аудио Автозагрузка изображений исполнителя Черный список Воспроизведение при подключении Bluetooth @@ -341,15 +341,15 @@ Непрерывное воспроизведение Тема приложения Сетка альбома на Главной странице - Artist grid + Сетка исполнителей Кнопка Домой Игнорировать обложки из хранилища Дата последнего добавления плейлиста Полноэкранное управление Тема экрана воспроизведения Лицензии с открытым кодом - Show Lyrics - Show Suggestions + Показать текст песни + Показывать советы Название нижних кнопок Эффект карусели Полноэкранное приложение @@ -384,7 +384,7 @@ Retro Music Player Retro Music Pro Приложению требуется разрешение на доступ к настройкам вашего устройства, чтобы установить музыку в качестве рингтона. - Ringtone (Optional) + Мелодия звонка (необязательно) Ошибка при удалении файла: %s Не удается получить SAF URI @@ -472,11 +472,11 @@ Имя пользователя Версия Вертикальный поворт - View on Telegram + Смотреть в Telegram Громкость Поиск в интернете - Website - Check out our Website + Сайт + Посмотрите наш веб-сайт Добро пожаловать, Чем вы хотите поделиться? Что нового : @@ -488,6 +488,6 @@ Выберите хотя бы одну категорию. Вы будете перенаправлены на сайт системы отслеживания ошибок. Данные вашей учетной записи используются только для аутентификации. - Show Album Artists - Add to Blacklist + Показать исполнителей альбома + Добавить в чёрный список From b57109b24d204326b17d30990f2b66ad03e5b2d2 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Mon, 26 Jul 2021 14:05:27 +0530 Subject: [PATCH 0199/1603] New Crowdin updates (#1096) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Chinese Simplified) --- app/src/main/res/values-zh-rCN/strings.xml | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 2113c944d..085f78257 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -79,7 +79,7 @@ 更改声音设置或调整均衡器 自动 简介 - A屏黑 + 纯黑 黑名单 模糊 模糊卡片 @@ -108,7 +108,7 @@ 查看新内容 环形 圆形 - 古典 + 经典 清空 清空黑名单 清空队列 @@ -124,15 +124,15 @@ 已创建播放列表 %1$s。 开发团队和贡献者 正通过 %2$s 收听 %1$s。 - 暗夜黑 + 略暗 删除播放列表 %1$s 吗?]]> 删除播放列表 删除歌曲 - %1$s吗?]]> + %1$s?]]> 删除歌曲 - %1$d 吗?]]> - %1$d 吗?]]> + %1$d 个播放列表?]]> + %1$d 首歌曲?]]> 已删除 %1$d 首歌曲。 正在删除歌曲 深度 @@ -196,7 +196,7 @@ 格式 文件名 文件路径 - 尺寸大小 + 文件大小 来自 %s 的更多信息 采样率 长度 @@ -205,7 +205,7 @@ 最后一首 媒体库分类 许可 - 质感白 + 纯白 监听器 正在罗列所有文件 加载产品... @@ -236,13 +236,13 @@ 正常歌词 %s 未在媒体存储中列出。]]> 最近未播放歌曲 - 检索不到任何东西。 + 无可检索。 空空如也 - 通知栏 - 自定义通知栏风格 + 通知 + 定制通知样式 正在播放 正在播放队列 - 自定义播放界面 + 定制播放界面 多于 9 种播放主题 仅限 Wi-Fi 网络 高级测试功能 @@ -262,13 +262,13 @@ Pinterest 在 Pintrest 页面关注 Retro Music 的设计灵感 简洁 - 播放通知栏提供播放/暂停等操作。 - 通知栏播放 + 播放通知提供播放暂停等操作。 + 播放通知 播放列表为空 播放列表名 播放列表 应用于模糊主题,数值越低加载越快 - 模糊值 + 模糊度 按长度筛选歌曲 筛选歌曲时长 高级 From 9afe4769ea5880ec9564db2825928aa74beb3e3f Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Tue, 27 Jul 2021 18:54:35 +0530 Subject: [PATCH 0200/1603] New Crowdin updates (#1098) * New translations strings.xml (Persian) * New translations strings.xml (Hindi) --- app/src/main/res/values-fa-rIR/strings.xml | 2 +- app/src/main/res/values-hi-rIN/strings.xml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 89957e130..ce7a2aa86 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -99,7 +99,7 @@ An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account Buy now - Cancel + انصراف کارت Colored Card Square Card diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index d11a85cc5..27ed5549f 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -3,17 +3,17 @@ About %s टीम, सामाजिक लिंक एक्सेंट रंग - एक्सेंट विषयवस्तु रंग, डिफ़ॉल्ट हरा है। - इसके बारे में + The theme accent color, defaults to purple + जानकारी पसंदीदा में जोड़े - कतार में जोड़ें + Add to playing queue प्लेलिस्ट में जोड़ें Cast - कतार निकाल दे - साइकिल रिपीट मोड + Clear playing queue + Cycle repeat mode हटाएं डिवाइस से हटाएं - विवरण + Details Edit एल्बम पर जाएं कलाकार पर जाएं From ec0bf9aaa35bd62bb160a594b254a639c8136b40 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Thu, 29 Jul 2021 19:02:11 +0530 Subject: [PATCH 0201/1603] New translations strings.xml (Spanish) --- app/src/main/res/values-es-rES/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index d2804c2dd..820d254a9 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -4,7 +4,7 @@ Equipo, enlaces sociales Color de énfasis El color de énfasis del tema, es morado por defecto - Acerca de Retro Music Player + Acerca de Añadir a favoritos Añadir a la cola de reproducción Añadir a la lista de reproducción From 6a4a73dac3015ba4005f6c61e0831897501c9fff Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 30 Jul 2021 01:03:18 +0530 Subject: [PATCH 0202/1603] New translations strings.xml (Spanish) --- app/src/main/res/values-es-rES/strings.xml | 316 ++++++++++----------- 1 file changed, 158 insertions(+), 158 deletions(-) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 820d254a9..cf3fadfa8 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -8,8 +8,8 @@ Añadir a favoritos Añadir a la cola de reproducción Añadir a la lista de reproducción - Enviar - Vaciar cola de reproducción + Emitir + Limpiar cola de reproducción Modo de repetición Eliminar Eliminar del dispositivo @@ -20,7 +20,7 @@ Ir al género Ir al directorio de inicio Permitir - Tamaño de la cuadricula + Tamaño de cuadrícula Tamaño de cuadrícula (horizontal) Nueva lista de reproducción Siguiente @@ -34,10 +34,10 @@ Eliminar de la lista de reproducción Renombrar Guardar lista de reproducción - Escanear + Examinar Buscar Iniciar - Establecer como tono de llamada + Establecer como tono Establecer como directorio de inicio "Ajustes" Compartir @@ -48,25 +48,25 @@ Editor de etiquetas Alternar favoritos Alternar el modo aleatorio - Adaptativo + Adaptable Agregar "Agregar a lista de reproducción" Añadir letras sincronizadas - "Se ha agregado 1 canción a la cola de reproducción" - %1$d canciones agregadas a la cola de reproducción + "Se ha agregado 1 canción a la cola de reproducción." + %1$d canciones agregadas a la cola de reproducción. Álbum Canción Canciones - Artista de Álbum + Artista del álbum Álbumes Álbum Álbumes Siempre - Ve este cool reproductor de música en: https://play.google.com/store/apps/details?id=%s + Mira este genial reproductor de música en: https://play.google.com/store/apps/details?id=%s Aleatorio Canciones más reproducidas Imagen completa @@ -76,85 +76,85 @@ Texto mínimo Artista Artistas - Duración del Fade-Out - Enfoque de audio denegado + Duración de fundido de audio + Enfoque de audio denegado. Modifica los ajustes de sonido y ajusta los controles del ecualizador Automático Biografía Negro - Lista Negra - Desenfoque + Lista negra + Desenfocado Tarjeta con desenfoque - Enviando el reporte a GitHub... - Token de acceso inválido. Por favor, contacta con el desarrollador de la aplicación - El problema no está habilitado para el repositorio seleccionado. Por favor, contacta con el desarrollador de la app. - Se ha producido un error inesperado. Por favor, contacta con el desarrollador de la aplicación + No se puede enviar el informe + Token de acceso inválido. Por favor, contacta al desarrollador de la aplicación. + Las incidencias no están habilitadas para el repositorio seleccionado. Por favor, contacta al desarrollador de la aplicación. + Se ha producido un error inesperado. Por favor, contacta al desarrollador de la aplicación. Usuario o contraseña incorrectos - Problema + Incidencia Enviar manualmente - Por favor, describe el problema - Por favor, introduce tu contraseña de GitHub - Por favor, introduce un título para el problema - Por favor, introduce tu nombre de usuario de GitHub - Ocurrió un error inesperado. Lamento que hayas encontrado este error, si sigue fallando \"Borra los datos de la aplicación\" - Enviar usando la cuenta de Github + Por favor, describe la incidencia + Por favor, introduce tu contraseña de GitHub válida + Por favor, introduce un título para la incidencia + Por favor, introduce tu nombre de usuario de GitHub válido + Ocurrió un error inesperado. Lamento que hayas encontrado este error, si sigue fallando \"Borra los datos de la aplicación\" o envía un correo electrónico + Enviar usando una cuenta de GitHub Comprar ahora Cancelar Tarjeta Tarjeta Coloreada - Tarjeta cuadrada + Tarjeta Cuadrada Tarjeta Efecto carrusel en la pantalla de reproducción - En cascada + Cascada Registro de cambios - Consulta las novedades + Consulta las Novedades Círculo Circular Clásico Limpiar Limpiar lista negra - Limpiar la cola + Limpiar cola Color Colores Compositor - Información del dispositivo copiada al portapapeles + Información del dispositivo copiada al portapapeles. No se pudo crear la lista de reproducción. "No se pudo descargar una portada de álbum coincidente." No se pudo restaurar la compra. - No se pudieron escanear %d archivos + No se pudieron escanear %d archivos. Crear - Lista de reproducción %1$s creada - Miembros y colaboradores + Lista de reproducción %1$s creada. + Miembros y colaboradores Actualmente estás escuchando %1$s de %2$s. - Un poco oscuro + Un poco Oscuro Eliminar lista de reproducción - %1$s?]]> + %1$s?]]> Eliminar listas de reproducción Eliminar canción %1$s?]]> Eliminar canciones - %1$d listas de reproducción?]]> - %1$d canciones?]]> + %1$d listas de reproducción?]]> + %1$d canciones?]]> %1$d canciones eliminadas. - Eliminar canciones + Eliminando canciones Profundidad Descripción Información del dispositivo Permitir a Retro Music modificar los ajustes de audio Establecer como tono - ¿Deseas limpiar la lista negra? + ¿Quieres limpiar la lista negra? %1$s de la lista negra?]]> Donar - Si crees que merezco que me paguen por mi trabajo, puedes dejar algo de dinero aquí + Si piensas que merezco recibir un pago por mi trabajo, puedes dejarme un poco de dinero aquí Cómprame: - Hecho + Listo Modo de conducir - Editar botón + Botón Editar Editar letras - Editar letras sincronizadas - Vacio + Editar Letras Sincronizadas + Vacío Ecualizador - Preguntas más frecuentes + Preguntas Más Frecuentes Favoritos Termina la última canción Ajustado @@ -163,14 +163,14 @@ Seguir al sistema Para ti Gratuito - Completo + Completa Tarjeta completa Cambiar el tema y colores de la aplicación - Aspecto y la sensación + Apariencia y funcionamiento Género Géneros - Haz Fork del proyecto en GitHub - Gradiente + Bifurca el proyecto en GitHub + Degradado 1 2 3 @@ -179,7 +179,7 @@ 6 7 8 - Cuadrícula y estilo + Estilo de cuadrícula ¿Necesitas más ayuda? Giro Historial @@ -194,200 +194,200 @@ %1$d canciones agregadas a la lista de reproducción %2$s. Comparte tu configuración de Retro Music para exhibirlo en Instagram Teclado - Velocidad de bits + Tasa de bits Formato Nombre del archivo Ruta del archivo Tamaño Más de %s - Frecuencia de muestreo + Tasa de muestreo Duración Etiquetado Añadidos recientemente Última canción Categorías de la Biblioteca Licencias - Blanco claro + Claramente Blanco Oyentes Listando archivos - Cargando productos... - Iniciar Sección - Letras + Cargando productos… + Iniciar sesión + Letras Hecho con ❤️ en India Material Error Error de permisos - Nombre + Nombre Más reproducidas Nunca - Nueva lista - %s es el nuevo directorio de inicio - Próxima canción - No hay Álbumes - No hay Artistas - "Primero reproduce una canción, luego intenta de nuevo." + Nueva lista de reproducción + %s es el nuevo directorio de inicio. + Próxima Canción + No tienes álbumes + No tienes artistas + "Reproduce primero una canción y vuelve a intentarlo." No se encontró ningún ecualizador - No hay Géneros - No se encontró la letra - No hay canciones tocando - No hay Listas de Reproducción + No tienes géneros + No se encontraron letras + No se está reproduciendo ninguna canción + No tienes listas de reproducción No se encontraron compras. Sin resultados - No hay Canciones + No tienes canciones Normal Letras normales - %s no aparece en la lista de medios.]]> + %s no aparece en el almacén de medios.]]> No reproducido recientemente Nada para escanear. - Nada para escanear - Notificaciones + Nada para ver + Notificación Personaliza el estilo de la notificación Reproduciendo ahora Cola de reproducción actual - Personalizar la ventana de reproducción - Más de 9 temas para la ventana de reproducción + Personalizar la ventana de reproducción actual + Más de 9 temas para la ventana de reproducción actual Solo con Wi-Fi Funciones avanzadas experimentales Otro Contraseña Más de 3 meses - Pega la letra aquí + Pega las Letras Aquí Pegar las letras con marcas de tiempo aquí - Pica - Permiso de acceso al almacenamiento externo denegado. - La aplicación necesita permiso para acceder al almacenamiento y reproducir música + Pico + Permiso para acceder al almacenamiento externo denegado. + La aplicación necesita permiso para acceder al almacenamiento de tu dispositivo y reproducir música Acceso al Almacenamiento Permiso denegado. Personalizar - Personalizar la ventana de reproducción y los controles de la interfaz + Personalizar la ventana de reproducción actual y los controles de la interfaz Elegir del almacenamiento local Pinterest - Síguenos en Pinterest para inspirarte en el diseño de Retro Music. - Simple + Síguenos en Pinterest para inspirarte en el diseño de Retro Music + Plano La notificación de reproducción proporciona acciones para reproducir/pausar, etc. Notificación de reproducción La lista de reproducción está vacía - Nombre de la lista + Nombre de la lista de reproducción Listas de reproducción Cantidad de desenfoque aplicado a los temas desenfocados, más bajo es más rápido Cantidad de desenfoque Filtrar canciones por longitud - Filtro por duración de la canción + Filtrar duración de la canción Avanzado Estilo del álbum Audio - Lista Negra + Lista negra Controles Tema Imágenes Biblioteca Pantalla de bloqueo Listas de reproducción - Pausar la reproducción cuando se está en silencio y reproducir cuando se aumenta el volumen. ¡Cuidado! Cuando se aumenta el volumen se empezará la reproducción aunque se esté fuera de la app. + Pausa la canción cuando el volumen disminuye a cero y vuelve a reproducir cuando se aumenta el volumen. También funciona fuera de la aplicación Pausar en cero Tenga en cuenta que habilitar esta función puede afectar la duración de la batería Mantener la pantalla encendida - Seleccionar lenguaje + Seleccionar idioma Usar la portada del álbum de la canción en reproducción como fondo de la pantalla de bloqueo Mostrar Artistas de Álbum en la categoría Artista Bajar el volumen cuando se reproduzca un sonido del sistema o se reciba una notificación - Fundir audio cuando la canción está pausada o reproduciéndose - Las carpetas en la lista negra, serán ocultado de tu librería. + Fundir Audio cuando la Canción está Pausada o Reproduciéndose + El contenido de las carpetas en la lista negra está oculto en su biblioteca. Comienza a reproducir tan pronto como esté conectado al dispositivo bluetooth Desenfocar la portada el álbum en la pantalla de bloqueo. Puede causar problemas con aplicaciones y widgets de terceros Efecto carrusel para la portada del álbum en la ventana de reproducción. En los temas \"Tarjeta\" y \"Tarjeta Desenfocada\" no funcionará Usar el diseño de notificación clásico El color del fondo y los botones de control cambian de acuerdo a la portada del álbum para la ventana de reproducción - Colorea los accesos directos de la aplicación en el color de énfasis. Cada vez que cambie el color, active esta opción + Colorea los accesos directos de la aplicación en el color de énfasis. Cada vez que cambie el color, activa esta opción para que surta efecto "Colorea la notificación con el color vibrante de la portada del álbum" Según las líneas de la guía Material Design en los colores del modo oscuro deben ser desaturados Al hacer clic en la notificación se mostrará la pantalla de reproducción en lugar de la pantalla de inicio Añadir controles extra al mini reproductor Mostrar información extra de canciones, como el formato de archivo, tasa de bits y frecuencia - "Puede causar problemas de reproducción en algunos dispositivos" - Mostrar/Ocultar banner en Inicio + "Puede causar problemas de reproducción en algunos dispositivos." + Mostrar u ocultar el banner de inicio Puede aumentar la calidad de la portada del álbum, pero provoca tiempos de carga de imágenes más lentos. Solo habilite esto si tiene problemas con portadas de baja resolución Configure la visibilidad y el orden de las categorías de la biblioteca. Usar los controles personalizados de Retro Music en la pantalla de bloqueo Detalles de licencia para software de código abierto - Mostrar letras sincronizadas sobre la portada del álbum - Mostrar el Mix de Música Nueva en la pantalla de inicio + Mostrar Letras Sincronizadas sobre la Portada del Álbum + Mostrar Mix de Música Nueva en la Pantalla de Inicio Modo inmersivo Comenzar a reproducir inmediatamente cuando se conecten audífonos El modo aleatorio se desactivará cuando se reproduzca una nueva lista de canciones - Mostrar controles de volumen si hay suficiente espacio disponible. - Mostrar/Ocultar portada del álbum - Navegar por artista de álbum + Mostrar controles de volumen si hay suficiente espacio disponible + Mostrar la portada del álbum + Navegar por Artista del Álbum Tema de la portada del álbum - Estilo de portada del álbum en reproducción + Saltar portada de álbum Accesos directos de la aplicación coloreados Reducir el volumen cuando se pierda el enfoque - Atenuar audio + Atenuar Audio Descarga automática de imágenes de artistas - Lista Negra + Lista negra Reproducción por Bluetooth Desenfocar portada del álbum Diseño de notificación clásico - Color Adaptativo + Color adaptable Notificación coloreada - Color Desaturado - Mostrar en pantalla de reproducción - Controles extra + Color desaturado + Mostrar en pantalla de reproducción actual + Controles extras Información de la canción Reproducción sin pausas Tema de la aplicación Cuadrícula de álbum - Cuadrícula de los artistas en inicio - Banner de Inicio - Ignorar las portadas de la biblioteca de medios + Cuadrícula del artista + Banner + Ignorar las portadas del Almacén de Medios Intervalo de la lista \"Añadidos Recientemente\" Controles en pantalla completa - Tema de la ventana de reproducción + Tema de la ventana de reproducción actual Licencias de código abierto Mostrar letras - Mostrar sugerencias - Forma de los títulos de las pestañas + Mostrar Sugerencias + Modo de los títulos de las pestañas Efecto Carrusel Aplicación en pantalla completa Reproducir automáticamente - Aleatorio + Modo aleatorio Controles de volumen Pro - Temas en reproducción, efecto Carrusel, tema de color y más ... + Tema Negro, temas para la ventana de reproducción actual, Efecto Carrusel y mucho más.. Perfil Comprar - Cola + Reproduciendo Cola Califica la aplicación ¿Te encanta la aplicación? Haznos saber en Google Play Store cómo podemos hacerla aún mejor Álbumes recientes Artistas recientes Eliminar Eliminar portada - Eliminar de la Lista Negra - Eliminar canción de la lista - %1$s de la lista?]]> - Eliminar canciones de la lista - %1$d canciones de la lista?]]> - Renombrar lista - Reporta un problema - Reportar un error + Eliminar de la lista negra + Eliminar canción de la lista de reproducción + %1$s de la lista de reproducción?]]> + Eliminar canciones de la lista de reproducción + %1$d canciones de la lista de reproducción?]]> + Renombrar lista de reproducción + Reportar una incidencia + Reportar un fallo Restablecer Reiniciar imagen del artista Restaurar Compra anterior restaurada. Por favor, reinicie la aplicación para hacer uso de todas las funciones. Compras anteriores restauradas. - Restaurando compra... - Reproductor de Retro Music + Restaurando compra… + Reproductor Retro Music Retro Music Pro - La aplicación necesita permiso para acceder a la configuración de tu dispositivo para establecer música como tono de llamada - Tono de llamada (opcional) - La eliminación del archivo falló + La aplicación necesita permiso para acceder a la configuración de tu dispositivo para establecer música como Tono de Llamada + Tono de Llamada (Opcional) + La eliminación del archivo: %s falló No se puede obtener SAF URI - Abrir panel de navegación + Abrir el cajón de navegación Activar \"Mostrar tarjeta SD\" en el menú - %s necesita acceder a la tarjeta SD + %s necesita acceso a la tarjeta SD Debes seleccionar el directorio raíz de tu tarjeta SD Selecciona tu tarjeta SD en el cajón de navegación No abra ninguna sub-carpeta @@ -398,23 +398,23 @@ Guardar como archivo Guardar como archivos - Guardar lista de reproducción a %s + Guardar lista de reproducción a %s. Guardando cambios Escanear medios %1$d de %2$d archivos escaneados. Enviar a - Seleccionar todos + Seleccionar todo Seleccionado Establecer Establecer imagen del artista - Compartir app - Comparte la app con tus amigos y familia - Compartir en historias + Compartir aplicación + Comparte la aplicación con tus amigos y familia + Compartir en Historias Aleatorio - Sencillo + Simple Temporizador cancelado. - Temporizador de apagado establecido para %d minutos desde ahora. - Social + Temporizado establecido para %d minutos desde ahora. + Redes Sociales Compartir historia Canción Duración de la canción @@ -424,30 +424,30 @@ Álbum Artista Compositor - Fecha + Fecha agregada Fecha de modificación Número de canciones - Número de canciones desc + Número de canciones descendente Año Descendente - ¡Lo siento! Su dispositivo no es compatible con la entrada de voz - Busca en tu biblioteca + ¡Lo siento! Tu dispositivo no es compatible con la entrada de voz + Buscar en tu biblioteca Apilado Comenzar a reproducir música. - Recomendaciones + Sugerencias Apoya el desarrollo - Desbloquear + Deslizar para desbloquear Letras sincronizadas Telegram - Únete al grupo de Telegram para discutir los errores, hacer sugerencias, presumir y más + Únete al grupo de Telegram para discutir los fallos, hacer sugerencias, presumir y más ¡Gracias! El archivo de audio Este mes Esta semana Este año - Pequeño - Tarjeta pequeña + Diminuto + Tarjeta diminuta Titulo Hoy Álbumes más reproducidos @@ -455,35 +455,35 @@ "Pista (2 para pista 2 o 3004 para CD3 pista 4)" Número de pista Traducir - Ayúdanos a traducir la aplicación a tu lenguaje - Pruebe Retro Music Premium + Ayúdanos a traducir la aplicación a tu idioma + Prueba Retro Music Premium Twitter Comparte tu diseño con Retro Music Sin etiqueta - No se pudo reproducir esta canción + No se pudo reproducir esta canción. A continuación Actualizar imagen - Actualizando... - Nombre de usuario - Nombre de usuario + Actualizando… + Nombre de Usuario + Usuario Versión - giro vertical + Giro vertical Ver en Telegram Volumen - Búsqueda web + Buscar en la Web Sitio Web - Echa un vistazo a nuestra página web + Echa un vistazo a nuestro Sitio Web Bienvenido, ¿Qué quieres compartir? Lo Nuevo Ventana Esquinas redondeadas - %1$s establecido como tono de llamada. - %1$d seleccionados + %1$s establecido como Tono de Llamada. + %1$d seleccionado(s) Año - Tienes que seleccionar al menos una categoría + Tienes que seleccionar al menos una categoría. Será redirigido al sitio web para reportar problemas. - Los datos de tu cuenta sólo se utilizan para la autenticación - Mostrar artistas del álbum - Añadir a la lista negra + Los datos de tu cuenta sólo se utilizan para la autenticación. + Mostrar Artistas del Álbum + Añadir a la Lista negra From 9fdb637e0e56da47283af20b426d0afcdf50b5bb Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 30 Jul 2021 01:03:20 +0530 Subject: [PATCH 0203/1603] New translations strings.xml (Tamil) --- app/src/main/res/values-ta-rIN/strings.xml | 98 +++++++++++----------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index 6003649bc..5a87c3a42 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -1,56 +1,56 @@ - About %s - Team, social links - Accent color - The theme accent color, defaults to purple - About - Add to favorites - Add to playing queue - Add to playlist - Cast - Clear playing queue - Cycle repeat mode - Delete - Delete from device - Details - Edit - Go to album - Go to artist - Go to genre - Go to start directory - Grant - Grid size - Grid size (land) - New playlist - Next - Play - Play all - Play next - Play/Pause - Previous - Remove from favorites - Remove from playing queue - Remove from playlist - Rename - Save playing queue - Scan - Search - Start - Set as ringtone - Set as start directory - "Settings" - Share - Shuffle all - Shuffle playlist - Sleep timer - Sort order - Tag editor + எங்களை பற்றி %s + குழு, சமூக வலைத்தளங்களில் + பொத்தான் நிறம் + பொத்தான்_நிறம்_பற்றி + எங்களை பற்றி + பிடித்தவையில் சேமி + பாடல் வரிசையில் சேர் + பாடல் வரிசையில் சேர் + ஒப்பனை + பாடல் வரிசையை நீக்கு + திரும்பச் செய் + நீக்கு + கருவியில் இருந்து நீக்கு + தகவல் + திருத்து + பாடல் படப்பட்டியல் செல் + கலைஞரை காணவும் + தொகுப்பு செல் + துவக்கப் பட்டியல் செல் + அனுமதி + பகுதி அளவு + பகுதி அளவு (இடம்) + புதிய இசைப்பட்டியல் + அடுத்து + இசை இயக்கு + அனைத்து பாடலையும் ஒளி + அடுத்ததை இயக்கு + இயக்கு/நிறுத்து + முந்தைய + பிடித்தவையிலிருந்து நீக்கு + பாடல்வரிசையிலிருந்து_நீக்கு + இசைப்பட்டியலில் இருந்து நீக்கு + பெயர் மாற்று + பாடல் வரிசையை சேமி + தேடு + தேடு + துவங்கு + அலைபேசி ஒளியாக அமை + துவக்கப் பாதையாக சேமி + "அமைப்பு" + பகிர் + அனைத்தையும் குழுக்கு + பாடல் பட்டியல் குழை + உறக்க கடிகாரம் + வரிசை பட்டியல் + பாடல் அமைப்பை மாற்று Toggle favorite Toggle shuffle mode Adaptive Add - "Add to playlist" + "பாடல் வரிசையில் சேர்" Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. @@ -220,7 +220,7 @@ Name Most played Never - New playlist + புதிய இசைப்பட்டியல் %s is the new start directory. Next Song You have no albums @@ -419,7 +419,7 @@ Song Song duration Songs - Sort order + வரிசை பட்டியல் Ascending Album Artist From cb070329dcde7a4612508ab8d376d42b1631c009 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 30 Jul 2021 07:00:54 +0530 Subject: [PATCH 0204/1603] New translations strings.xml (Spanish) --- app/src/main/res/values-es-rES/strings.xml | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index cf3fadfa8..8f40ef826 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -37,17 +37,17 @@ Examinar Buscar Iniciar - Establecer como tono + Establecer como tono de llamada Establecer como directorio de inicio "Ajustes" Compartir Mezclar todo Mezclar lista de reproducción - Temporizador de apagado + Temporizador Ordenar por Editor de etiquetas Alternar favoritos - Alternar el modo aleatorio + Alternar modo aleatorio Adaptable Agregar "Agregar a lista de reproducción" @@ -96,7 +96,7 @@ Por favor, introduce tu contraseña de GitHub válida Por favor, introduce un título para la incidencia Por favor, introduce tu nombre de usuario de GitHub válido - Ocurrió un error inesperado. Lamento que hayas encontrado este error, si sigue fallando \"Borra los datos de la aplicación\" o envía un correo electrónico + Ocurrió un error inesperado. Lamentamos que hayas encontrado este error, si sigue fallando \"Borra los datos de la aplicación\" o envía un correo electrónico Enviar usando una cuenta de GitHub Comprar ahora Cancelar @@ -121,7 +121,7 @@ No se pudo crear la lista de reproducción. "No se pudo descargar una portada de álbum coincidente." No se pudo restaurar la compra. - No se pudieron escanear %d archivos. + No se pudo examinar %d archivos. Crear Lista de reproducción %1$s creada. Miembros y colaboradores @@ -141,7 +141,7 @@ Descripción Información del dispositivo Permitir a Retro Music modificar los ajustes de audio - Establecer como tono + Establecer tono de llamada ¿Quieres limpiar la lista negra? %1$s de la lista negra?]]> Donar @@ -238,7 +238,7 @@ Letras normales %s no aparece en el almacén de medios.]]> No reproducido recientemente - Nada para escanear. + Nada para examinar. Nada para ver Notificación Personaliza el estilo de la notificación @@ -293,7 +293,7 @@ Bajar el volumen cuando se reproduzca un sonido del sistema o se reciba una notificación Fundir Audio cuando la Canción está Pausada o Reproduciéndose El contenido de las carpetas en la lista negra está oculto en su biblioteca. - Comienza a reproducir tan pronto como esté conectado al dispositivo bluetooth + Comienza a reproducir tan pronto como esté conectado al dispositivo Bluetooth Desenfocar la portada el álbum en la pantalla de bloqueo. Puede causar problemas con aplicaciones y widgets de terceros Efecto carrusel para la portada del álbum en la ventana de reproducción. En los temas \"Tarjeta\" y \"Tarjeta Desenfocada\" no funcionará Usar el diseño de notificación clásico @@ -370,7 +370,7 @@ %1$d canciones de la lista de reproducción?]]> Renombrar lista de reproducción Reportar una incidencia - Reportar un fallo + Reportar fallo Restablecer Reiniciar imagen del artista Restaurar @@ -400,8 +400,8 @@ Guardar como archivos Guardar lista de reproducción a %s. Guardando cambios - Escanear medios - %1$d de %2$d archivos escaneados. + Examinar medios + %1$d de %2$d archivos examinados. Enviar a Seleccionar todo Seleccionado @@ -478,11 +478,11 @@ Lo Nuevo Ventana Esquinas redondeadas - %1$s establecido como Tono de Llamada. + %1$s establecido como tu tono de llamada. %1$d seleccionado(s) Año Tienes que seleccionar al menos una categoría. - Será redirigido al sitio web para reportar problemas. + Serás redirigido al sitio web para reportar incidencias. Los datos de tu cuenta sólo se utilizan para la autenticación. Mostrar Artistas del Álbum Añadir a la Lista negra From 40e741779d81227673d05570a89e415eb9f93cb4 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sat, 31 Jul 2021 12:37:36 +0530 Subject: [PATCH 0205/1603] New translations strings.xml (Arabic) --- app/src/main/res/values-ar-rSA/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 119ebf62e..cfcbe16d6 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -8,7 +8,7 @@ اضافة الى المفضلة إضافة الى قائمة التشغيل الحالية أضف إلى قائمة التشغيل - Cast + ممثلين إخلاء قائمة التشغيل الحالية وضع تكرار الدورة حذف @@ -51,13 +51,13 @@ متكيف إضافة "إضافة الى قائمة التشغيل" - Add Time Framed Lyrics + أضف وقت كلمات الأغاني "إضافة ١ من العناوين الى قائمة التشغيل الحالية" إضافة %1$d من العناوين الى قائمة التشغيل الحالية البوم - Songs - Song + الاغاني + الاغنية Songs Songs Songs From d43f94d5918fb05124c843774e64545009179141 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sat, 31 Jul 2021 18:42:27 +0530 Subject: [PATCH 0206/1603] New translations strings.xml (Arabic) --- app/src/main/res/values-ar-rSA/strings.xml | 92 +++++++++++----------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index cfcbe16d6..4185d2cc7 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -1,7 +1,7 @@ حول %s - الفريق, الروابط للتواصل + الفريق، الروابط الاجتماعية اللون الأساسي لون تمييز المظهر ، يتم تعيينه إلى اللون الأرجواني حول @@ -56,35 +56,37 @@ إضافة %1$d من العناوين الى قائمة التشغيل الحالية البوم - الاغاني - الاغنية - Songs - Songs - Songs - Songs + الأغاني + الأغاني + الأغاني + أغنية + +أغاني + الأغاني + الاغاني - Album Artist + ألبوم الفنان الألبومات - Albums - Album - Albums - Albums - Albums - Albums + الألبومات + الألبوم + الألبومات + الألبومات + الألبومات + الألبومات دائما مرحبا القي نظرة على مشغل الموسيقى الرائع هذا في: https://play.google.com/store/apps/details?id=%s عشوائي المسارات الاكثر شعبية - Full Image + صورة كاملة ريترو ميوزك - بطاقة ريترو ميوزك - تقليدي ريترو ميوزك - صغير - Minimal Text + الحد الأدنى للنص فنان فنانين - Audio Fade Duration + مدة تلاشي الصوت تم منع تركيز الصوت تغيير إعدادات الصوت وضبط عناصر التحكم في موازن الصوت تلقائي @@ -110,12 +112,12 @@ إلغاء بطاقة بطاقة ملونة - Square Card + بطاقة مربعة بطاقة التاثير الدائري على شاشة التشغيل الآن المتتالية سجل التغيرات - Check out What\'s New + تحقق من الجديد دائرية دائري كلاسيكي @@ -144,7 +146,7 @@ %1$d؟]]> %1$d؟]]> تم حذف %1$d الأغاني. - Deleting Songs + حذف الأغاني العمق الوصف معلومات الجهاز @@ -160,7 +162,7 @@ وضع القيادة زر التعديل تعديل كلمات الأغنية - Edit Synced Lyrics + كلمات الأغنية متزامنة فارغ موازن الصوت التعليمات @@ -179,7 +181,7 @@ فئة فئات اجلب المشروع على GitHub - Gradient + متدرج ١ ٢ ٣ @@ -189,7 +191,7 @@ ٧ ٨ الشبكة والأسلوب - Need more help? + بحاجة للمزيد من المساعدة؟ مفصل السجل الشاشة الرئيسية @@ -197,9 +199,9 @@ صورة الصورة المتدرجة تغيير إعدادات تنزيل صور الفنان - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + إستيراد + استيراد قائمة التشغيل + يستورد جميع قوائم التشغيل المدرجة في متجر وسائط الأندرويد مع الأغاني ، إذا كانت قوائم التشغيل موجودة بالفعل ، سيتم دمج الأغاني. إدراج %1$d الأغاني في قائمة التشغيل %2$s. شارك إعداد Retro Music الخاص بك للعرض على إنستقرام الكيبورد @@ -246,7 +248,7 @@ الافتراضي كلمات عادية %s غير مدرج في مخزن الوسائط]]> - Not recently played + لم تشغّل مؤخراً لاشيء لفحصه. لاشيء لفحصه إشعارات @@ -260,12 +262,12 @@ آخر كلمة السر أخر 3 أشهر - Paste Lyrics Here - Paste timeframe lyrics here + لصق كلمات الاغنية هنا + لصق كلمات الإطار الزمني هنا الذروة تم رفض إذن الوصول إلى وحدة التخزين الخارجي. - The app needs permission to access your device storage for playing music - Storage Access + يحتاج التطبيق إلى إذن للوصول إلى وحدة تخزين جهازك لتشغيل الموسيقى + الوصول إلى التخزين تم رفض الأذونات. تخصيص تخصيص المشغل و الواجهة @@ -298,9 +300,9 @@ ابقاء الشاشة تعمل حدد اللغة استخدم غلاف ألبوم الأغنية قيد التشغيل حاليًا كخلفية لشاشة القفل - Show Album Artists in the Artist category + إظهار ألبوم الفنان في فئة الفنانين خفض مستوى الصوت عند تشغيل صوت نظام أو تلقي إشعارات - Fade Audio when Song is Paused or Played + تلاشي الصوت عندما يتم إيقاف الأغنية أو تشغيلها محتويات مجلدات القائمة السوداء يتم أخفائها من مكتبتك الموسيقية. بدء التشغيل بمجرد توصيل جهاز بلوتوث ظبابية غطاء الألبوم على شاشة القفل . يمكن أن يسبب مشاكل في تطبيقات وويدجت الطرف الثالث @@ -319,19 +321,19 @@ تكوين وعرض وترتيب فئات المكتبة. استخدم شاشة القفل المخصصة من ريترو ميوزك لتحكم بالتشغيل الرخصة والتفاصيل للبرمجيات مفتوحة المصدر - Display Synced Lyrics over Album Cover - Show New Music Mix on Homescreen + عرض كلمات الأغاني المتزامنة عبر غلاف الألبوم + إظهار خليط موسيقي جديد على الشاشة الرئيسية وضع الشاشة الكاملة تشغيل تلقائيا عند توصيل السماعة سوف يتم تعطيل وضع الخلط عند التشغيل من قائمة جديدة في حال توفر مساحة كافية قم بعرض شريط التحكم بالصوت في شاشة التشغيل الآن عرض غطاء الالبوم - Navigate by Album Artist + التنقل بواسطة ألبوم الفنان ثيم غطاء الالبوم تخطي غطاء الالبوم تلوين اختصارات التطبيق خفض الصوت عند فقد التركيز - Fade Audio + تلاشي الصوت تحميل تلقائي لصور الالبومات القائمة السوداء تشغيل البلوتوث @@ -345,7 +347,7 @@ معلومات الأغنية تشغيل متتابع سمات التطبيق - Album grid + صورة الألبوم شبكة الفنان الرئيسية صورة الواجهة تجاهل صور تخزين الميديا @@ -353,7 +355,7 @@ ازار التحكم في كامل الشاشة ثيم التشغيل الان التراخيص مفتوحة المصدر - Show Lyrics + عرض الكلمات عرض الإقتراحات وضع عناوين التبويبات تاثير التتالي @@ -436,7 +438,7 @@ التاريخ تاريخ التعديل عدد الأغاني - Song count desc + العد التنازلي للاغنية السنة تنازلي عذرا! جهازك لايدعم الادخال الصوتي @@ -477,11 +479,11 @@ أسم المستخدم الإصدار تدوير رأسي - View on Telegram + عرض على تيليجرام الصوت البحث عبر الانترنت - Website - Check out our Website + الموقع الإلكتروني + تحقق من موقعنا مرحبا, مالذي تريد مشاركته? مالجديد @@ -493,6 +495,6 @@ عليك اختيار فئة واحدة على الأقل. سيتم تحويلك الى صفحة سجل الاخطاء بيانات حسابك تستخدم لتوثيق فقط. - Show Album Artists - Add to Blacklist + إظهار ألبوم الفنان + إضافة إلى القائمة السوداء From 21fd6414bf9ef624f8000131ff0635bca634b57e Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Tue, 3 Aug 2021 16:42:28 +0530 Subject: [PATCH 0207/1603] New translations strings.xml (Georgian) --- app/src/main/res/values-ka-rGE/strings.xml | 489 +++++++++++++++++++++ 1 file changed, 489 insertions(+) create mode 100644 app/src/main/res/values-ka-rGE/strings.xml diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml new file mode 100644 index 000000000..6003649bc --- /dev/null +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -0,0 +1,489 @@ + + + About %s + Team, social links + Accent color + The theme accent color, defaults to purple + About + Add to favorites + Add to playing queue + Add to playlist + Cast + Clear playing queue + Cycle repeat mode + Delete + Delete from device + Details + Edit + Go to album + Go to artist + Go to genre + Go to start directory + Grant + Grid size + Grid size (land) + New playlist + Next + Play + Play all + Play next + Play/Pause + Previous + Remove from favorites + Remove from playing queue + Remove from playlist + Rename + Save playing queue + Scan + Search + Start + Set as ringtone + Set as start directory + "Settings" + Share + Shuffle all + Shuffle playlist + Sleep timer + Sort order + Tag editor + Toggle favorite + Toggle shuffle mode + Adaptive + Add + "Add to playlist" + Add Time Framed Lyrics + "Added 1 title to the playing queue." + Added %1$d titles to the playing queue. + Album + + Song + Songs + + Album Artist + Albums + + Album + Albums + + Always + Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s + Shuffle + Top Tracks + Full Image + Card + Classic + Small + Minimal Text + Artist + Artists + Audio Fade Duration + Audio focus denied. + Change the sound settings and adjust the equalizer controls + Auto + Biography + Just Black + Blacklist + Blur + Blur Card + Unable to send report + Invalid access token. Please contact the app developer. + Issues are not enabled for the selected repository. Please contact the app developer. + An unexpected error occurred. Please contact the app developer. + Wrong username or password + Issue + Send manually + Please enter an issue description + Please enter your valid GitHub password + Please enter an issue title + Please enter your valid GitHub username + An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email + Send using GitHub account + Buy now + Cancel + Card + Colored Card + Square Card + Card + Carousel effect on the now playing screen + Cascading + Changelog + Check out What\'s New + Circle + Circular + Classic + Clear + Clear blacklist + Clear queue + Color + Colors + Composer + Copied device info to clipboard. + Couldn\u2019t create playlist. + "Couldn\u2019t download a matching album cover." + Could not restore purchase. + Could not scan %d files. + Create + Created playlist %1$s. + Members and contributors + Currently listening to %1$s by %2$s. + Kinda Dark + Delete playlist + %1$s?]]> + Delete playlists + Delete song + %1$s?]]> + Delete songs + %1$d playlists?]]> + %1$d songs?]]> + Deleted %1$d songs. + Deleting Songs + Depth + Description + Device info + Allow Retro Music to modify audio settings + Set ringtone + Do you want to clear the blacklist? + %1$s from the blacklist?]]> + Donate + If you think I deserve to get paid for my work, you can leave some money here + Buy me a: + Done + Drive mode + Edit Button + Edit Lyrics + Edit Synced Lyrics + Empty + Equalizer + FAQ + Favorites + Finish last song + Fit + Flat + Folders + Follow system + For you + Free + Full + Full card + Change the theme and colors of the app + Look and feel + Genre + Genres + Fork the project on GitHub + Gradient + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + Grid style + Need more help? + Hinge + History + Home + Horizontal flip + Image + Gradient image + Change artist image download settings + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Inserted %1$d songs into the playlist %2$s. + Share your Retro Music setup to showcase on Instagram + Keyboard + Bitrate + Format + File name + File path + Size + More from %s + Sampling rate + Length + Labeled + Last added + Last song + Library categories + Licenses + Clearly White + Listeners + Listing files + Loading products… + Login + Lyrics + Made with ❤️ in India + Material + Error + Permission error + Name + Most played + Never + New playlist + %s is the new start directory. + Next Song + You have no albums + You have no artists + "Play a song first, then try again." + No equalizer found + You have no genres + No lyrics found + No songs playing + You have no playlists + No purchase found. + No results + You have no songs + Normal + Normal lyrics + %s is not listed in the media store.]]> + Not recently played + Nothing to scan. + Nothing to see + Notification + Customize the notification style + Now playing + Now playing queue + Customize the now playing screen + 9+ now playing themes + Only on Wi-Fi + Advanced testing features + Other + Password + Past 3 months + Paste Lyrics Here + Paste timeframe lyrics here + Peak + Permission to access external storage denied. + The app needs permission to access your device storage for playing music + Storage Access + Permissions denied. + Personalize + Customize your now playing and UI controls + Pick from local storage + Pinterest + Follow Pinterest page for Retro Music design inspiration + Plain + The playing notification provides actions for play/pause etc. + Playing notification + Playlist is empty + Playlist name + Playlists + Amount of blur applied for blur themes, lower is faster + Blur amount + Filter songs by length + Filter song duration + Advanced + Album style + Audio + Blacklist + Controls + Theme + Images + Library + Lockscreen + Playlists + Pauses the song when the volume decreases to zero and starts playing back when the volume level rises. Also works outside the app + Pause on zero + Keep in mind that enabling this feature may affect battery life + Keep the screen on + Select language + Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category + Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played + The content of blacklisted folders is hidden from your library. + Start playing as soon as connected to bluetooth device + Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets + Carousel effect for the album art in the now playing screen. Note that Card and Blur Card themes won\'t work + Use the classic notification design + The background and control button colors change according to the album art from the now playing screen + Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect + "Colors the notification in the album cover\u2019s vibrant color" + As per Material Design guide lines in dark mode colors should be desaturated + Clicking on the notification will show now playing screen instead of the home screen + Add extra controls for mini player + Show extra Song information, such as file format, bitrate and frequency + "Can cause playback issues on some devices." + Show or hide the home banner + Can increase the album cover quality, but causes slower image loading times. Only enable this if you have problems with low resolution artworks + Configure visibility and order of library categories. + Use Retro Music\'s custom lockscreen controls + License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen + Immersive mode + Start playing immediately after headphones are connected + Shuffle mode will turn off when playing a new list of songs + If enough space is available, show volume controls in the now playing screen + Show album cover + Navigate by Album Artist + Album cover theme + Album cover skip + Colored app shortcuts + Reduce volume on focus loss + Fade Audio + Auto-download artist images + Blacklist + Bluetooth playback + Blur album cover + Classic notification design + Adaptive color + Colored notification + Desaturated color + Show now playing screen + Extra controls + Song info + Gapless playback + App theme + Album grid + Artist grid + Banner + Ignore Media Store covers + Last added playlist interval + Fullscreen controls + Now playing theme + Open source licences + Show Lyrics + Show Suggestions + Tab titles mode + Carousel effect + Fullscreen app + Auto-play + Shuffle mode + Volume controls + Pro + Black theme, Now playing themes, Carousel effect and more.. + Profile + Purchase + Playing Queue + Rate the app + Love this app? Let us know in the Google Play Store how we can make it even better + Recent albums + Recent artists + Remove + Remove cover + Remove from blacklist + Remove song from playlist + %1$s from the playlist?]]> + Remove songs from playlist + %1$d songs from the playlist?]]> + Rename playlist + Report an issue + Report bug + Reset + Reset artist image + Restore + Restored previous purchase. Please restart the app to make use of all features. + Restored previous purchases. + Restoring purchase… + Retro Music Player + Retro Music Pro + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone (Optional) + File delete failed: %s + + Can\'t get SAF URI + Open navigation drawer + Enable \'Show SD card\' in overflow menu + + %s needs SD card access + You need to select your SD card root directory + Select your SD card in navigation drawer + Do not open any sub-folders + Tap \'select\' button at the bottom of the screen + File write failed: %s + Save + + + Save as file + Save as files + Saved playlist to %s. + Saving changes + Scan media + Scanned %1$d of %2$d files. + Scrobbles + Select all + Selected + Set + Set artist image + Share app + Share the app with your friends and family + Share to Stories + Shuffle + Simple + Sleep timer canceled. + Sleep timer set for %d minutes from now. + Social + Share story + Song + Song duration + Songs + Sort order + Ascending + Album + Artist + Composer + Date added + Date modified + Song count + Song count desc + Year + Descending + Sorry! Your device doesn\'t support speech input + Search your library + Stack + Start playing music. + Suggestions + Support development + Swipe to unlock + Synced lyrics + + Telegram + Join the Telegram group to discuss bugs, make suggestions, show off and more + Thank you! + The audio file + This month + This week + This year + Tiny + Tiny card + Title + Today + Top albums + Top artists + "Track (2 for track 2 or 3004 for CD3 track 4)" + Track number + Translate + Help us translate the app to your language + Try Retro Music Premium + Twitter + Share your design with Retro Music + Unlabeled + Couldn\u2019t play this song. + Up next + Update image + Updating… + User Name + Username + Version + Vertical flip + View on Telegram + Volume + Web search + Website + Check out our Website + Welcome, + What do you want to share? + What\'s New + Window + Rounded corners + Set %1$s as your ringtone. + %1$d selected + Year + You have to select at least one category. + You will be forwarded to the issue tracker website. + Your account data is only used for authentication. + Show Album Artists + Add to Blacklist + From 42feb0447af5052af20cf33bdb3d544bb3f43a4a Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sat, 7 Aug 2021 05:15:29 +0530 Subject: [PATCH 0208/1603] New translations strings.xml (Portuguese, Brazilian) --- app/src/main/res/values-pt-rBR/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 77aa2db62..1045f719f 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1,9 +1,9 @@ - Sobre %s - Time, links sociais - Cor de destaque - A cor de destaque do tema, o padrão é verde + Sobre %s + Time, links sociais + Cor de destaque + A cor de destaque do tema, o padrão é verde Sobre Adicionar aos favoritos Adicionar à lista de reprodução From 8cb5603ebf77364fac954e34e9ca86d688dee232 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sat, 7 Aug 2021 15:48:32 +0530 Subject: [PATCH 0209/1603] New translations strings.xml (Portuguese, Brazilian) --- app/src/main/res/values-pt-rBR/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 1045f719f..77aa2db62 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1,9 +1,9 @@ - Sobre %s - Time, links sociais - Cor de destaque - A cor de destaque do tema, o padrão é verde + Sobre %s + Time, links sociais + Cor de destaque + A cor de destaque do tema, o padrão é verde Sobre Adicionar aos favoritos Adicionar à lista de reprodução From 275caa14a58431324b45039ec3256607adb39a75 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sun, 8 Aug 2021 08:01:43 +0530 Subject: [PATCH 0210/1603] New translations strings.xml (Dutch) --- app/src/main/res/values-nl-rNL/strings.xml | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 7168a08b4..c4aa8de69 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -1,6 +1,6 @@ - About %s + Over %s Team, social links Accent kleur De accent kleur, standaard naar groen @@ -14,18 +14,18 @@ Verwijder Verwijder van apparaat Details - Edit + Bewerk Ga naar album Ga naar artiest - Go to genre + Ga naar genre Ga naar begin directory Geef toestemming Raster grootte Raster grootte (land) - New playlist + Nieuwe afspeellijst Volgende Afspelen. - Play all + Speel alles Volgende afspelen Afspelen/pauzeren Vorige @@ -34,7 +34,7 @@ Verwijder van afspeellijst Hernoem Afspeel wachtrij opslaan - Scan + Scannen Zoek Instellen Stel in als ringtone @@ -46,9 +46,9 @@ Slaap timer Sort order Tags aanpassen - Toggle favorite - Toggle shuffle mode - Adaptive + Favorieten in-/uitschakelen + Shuffle mode in-/uitschakelen + Adaptief Toevoegen "Toevogen aan afspeellijst" Add Time Framed Lyrics @@ -57,9 +57,9 @@ Album Song - Songs + Nummers - Album Artist + Albumartiest Albums Album @@ -69,14 +69,14 @@ Hey, bekijk deze coole muziekspeler op:https://play.google.com/store/apps/details?id=%s Shuffle Top tracks - Full Image + Volledige Afbeelding Kaart Klassiek Klein Minimal Text Artiest Artiesten - Audio Fade Duration + Audio Fade Duur Geluid focus geweigerd Change the sound settings and adjust the equalizer controls Auto From b9b7a31991f63fe4201cf772e2d792c99f518059 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sun, 8 Aug 2021 14:13:26 +0530 Subject: [PATCH 0211/1603] New translations strings.xml (Dutch) --- app/src/main/res/values-nl-rNL/strings.xml | 158 ++++++++++----------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index c4aa8de69..4f9c90f30 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -78,27 +78,27 @@ Artiesten Audio Fade Duur Geluid focus geweigerd - Change the sound settings and adjust the equalizer controls - Auto + Wijzig de geluidsinstellingen en pas de equalizer aan + Automatisch Biografie Gewoon zwart Zwarte lijst - Blur + Vervagen Blur Card - Unable to send report - Invalid access token. Please contact the app developer. + Mislukt om het rapport te verzenden + Ongeldige toegangstoken. Neem alsjeblieft contact op met de app-ontwikkelaar. Issues are not enabled for the selected repository. Please contact the app developer. - An unexpected error occurred. Please contact the app developer. - Wrong username or password - Issue - Send manually - Please enter an issue description - Please enter your valid GitHub password - Please enter an issue title - Please enter your valid GitHub username - An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email - Send using GitHub account - Buy now + Er is een onverwachte fout opgetreden. Neem alsjeblieft contact op met de app-ontwikkelaar. + Verkeerde gebruikersnaam of wachtwoord + Probleem + Verstuur handmatig + Vul alsjeblieft een beschrijving voor het probleem in + Vul alsjeblieft je geldig GitHub-wachtwoord in + Vul alsjeblieft een titel voor het probleem in + Vul alsjeblieft je geldig GitHub-gebruikersnaam in + Een onverwachte fout is opgetreden. Het spijt me dat je deze bug tegengekomen bent. Als het blijft crashen, kies dan \"Clear app data\" of verstuur een email + Verstuur door middel van je GitHub-account + Kopen Annuleer huidige timer Kaart Colored Card @@ -106,10 +106,10 @@ Kaart Carousel effect on the now playing screen Cascading - Changelog - Check out What\'s New - Circle - Circular + Logboek + Bekijk wat er nieuw is + Cirkel + Rond Klassiek Legen Leeg zwarte lijst @@ -179,86 +179,86 @@ 6 7 8 - Grid style - Need more help? + Rasterstijl + Meer hulp nodig? Hinge Geschiedenis Start - Horizontal flip - Image + Flip horizontaal + Afbeelding Gradient image Change artist image download settings - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Importeren + Importeer afspeellijst + Het importeert alle afspeellijsten binnenin de Android Media Store met nummers. Als de afspeellijst al bestaat, worden de nummers samengevoegd. %1$d liedjes toegevoegd aan afspeellijst %2$s. - Share your Retro Music setup to showcase on Instagram + Deel jouw Retro Music setup om anderen te emotioneren op Instagram Keyboard Bitrate Formaat Bestandsnaam Bestandslocatie Grootte - More from %s - Sampling rate + Meer van %s + Samplingfrequentie Duur Labeled Laatst toegevoegd - Last song + Vorige nummer Library categories Licenties Clearly wit - Listeners + Luisteraars Luister bestanden Podcasts laden... - Login - Lyrics - Made with ❤️ in India - Material - Error - Permission error + Inloggen + Tekst/Lyrics + Gemaakt met ❤🤍💙 in India + Materiaal + Fout + Toegangsfout Mijn naam Mijn top tracks Nooit Nieuwe afspeellijst %s is de nieuwe start folder - Next Song + Volgend Nummer Geen albums Geen artiesten "Laat eerst een liedje afspelen, probeer dan opniew." Geen equalizer gevonden. - You have no genres + Je hebt geen genres Geen lyrics gevonden - No songs playing + Geen nummer draaiend Geen afspeellijsten - No purchase found. + Geen aankoop gevonden. Geen resultaten Geen liedjes Normaal - Normal lyrics + Normale tekst/lyrics %s staat niet in de media store]]> - Not recently played + Al een tijdje niet beluisterd Niets om te scannen - Nothing to see + Niks te zien hier, enkel leegte Notificatie - Customize the notification style - Now playing + Pas de notificatiestijl aan + Speelt nu Nu afspeel wachtrij - Customize the now playing screen - 9+ now playing themes + Pas het \"speelt nu\"-scherm aan + 9+ \"speelt nu\" thema\'s Alleen Wi-Fi - Advanced testing features - Other - Password + Geavanceerde beveiligingsfuncties + Anders + Wachtwoord Laatste 3 maanden - Paste Lyrics Here - Paste timeframe lyrics here - Peak + Plak tekst/lyrics hier + Plak timeframe tekst/lyrics hier + Piek Permissie voor toegang tot extern opslag is afgewezen - The app needs permission to access your device storage for playing music - Storage Access + De app heeft toestemming nodig tot je apparaat\'s opslag om muziek af te kunnen spelen + Toegang tot opslag Permissies afgewezen - Personalize + Personaliseer Customize your now playing and UI controls Kies van local storage Pinterest @@ -347,20 +347,20 @@ Show Lyrics Show Suggestions Tab titles mode - Carousel effect + Carrousel-effect Volledig scherm app Automatisch afspelen - Shuffle mode + Shufflemodus Volume knoppen Pro - Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase + Donker thema, \"speelt nu\" thema\'s, Carrousel-effect en nog veel meer.. + Profiel + Kopen Wachtrij App beoordelen Vind je deze app leuk? Laat het ons weten in de Google Play Store om de ervaring te verbeteren - Recent albums - Recent artists + Recente albums + Recente artiesten Verwijderen Verwijder cover Verwijder van zwarte lijst @@ -369,45 +369,45 @@ Verwijder liedjes van afspeellijst %1$d van de afspeellijst?]]> Hernoem afspeellijst - Report an issue - Report bug - Reset + Een probleem melden + Een bug rapporteren + Resetten Reset artiest afbeelding - Restore + Herstellen Restored previous purchase. Please restart the app to make use of all features. Teruggezette aankopen - Restoring purchase… + Aankoop herstellen… Retro Music Player Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone (Optional) - File delete failed: %s + Beltoon (Optioneel) + Bestand verwijderen gefaald: %s Can\'t get SAF URI Open navigation drawer Enable \'Show SD card\' in overflow menu - %s needs SD card access + %s heeft toegang tot de SD-kaart nodig You need to select your SD card root directory Select your SD card in navigation drawer Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save + Opslaan Opslaan als bestand - Save as files + Opslaan als bestanden Afspeellijst opgeslagen in %s. Aanpassingen opslaan - Scan media + Media scannen %1$d van de %2$d bestanden gescant Scrobbles - Select all - Selected + Alles selecteren + Geselecteerd Set Stel artiest afbeelding in - Share app + App delen Share the app with your friends and family Share to Stories Shuffle From 204873e70ba0333d5c8c29e28c01fd4f0ac5e12f Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Mon, 9 Aug 2021 03:45:20 +0530 Subject: [PATCH 0212/1603] New translations strings.xml (Dutch) --- app/src/main/res/values-nl-rNL/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 4f9c90f30..d4009cfd5 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -8,7 +8,7 @@ Toevoegen aan favorieten Voeg toe aan afspeel wachtrij Voeg toe aan afspeellijst... - Cast + Casten Afspeel wachtrij legen Cycle repeat mode Verwijder From 190baa6fdf524a00af321a7e7481be2cad0cfa29 Mon Sep 17 00:00:00 2001 From: vladrevers Date: Mon, 9 Aug 2021 02:26:51 +0300 Subject: [PATCH 0213/1603] Added option to hide profile on home page --- .../code/name/monkey/retromusic/Constants.kt | 2 +- .../retromusic/activities/MainActivity.kt | 4 +- .../retromusic/fragments/home/HomeFragment.kt | 47 ++++++++++++------- .../monkey/retromusic/util/PreferenceUtil.kt | 9 ++-- app/src/main/res/values-ru-rRU/strings.xml | 7 ++- app/src/main/res/values-uk-rUA/strings.xml | 3 ++ app/src/main/res/values/arrays.xml | 12 +++++ app/src/main/res/values/strings.xml | 3 ++ app/src/main/res/xml/pref_ui.xml | 16 ++++--- 9 files changed, 71 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt index 875d21480..ed4b38da2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -66,7 +66,7 @@ const val EXTRA_SONG_INFO = "extra_song_info" const val DESATURATED_COLOR = "desaturated_color" const val BLACK_THEME = "black_theme" const val KEEP_SCREEN_ON = "keep_screen_on" -const val TOGGLE_HOME_BANNER = "toggle_home_banner" +const val TYPE_HOME_BANNER = "type_home_banner" const val NOW_PLAYING_SCREEN_ID = "now_playing_screen_id" const val CAROUSEL_EFFECT = "carousel_effect" const val COLORED_NOTIFICATION = "colored_notification" diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt index 5787295f4..27dd70788 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt @@ -45,7 +45,7 @@ import code.name.monkey.retromusic.TAB_TEXT_MODE import code.name.monkey.retromusic.TOGGLE_ADD_CONTROLS import code.name.monkey.retromusic.TOGGLE_FULL_SCREEN import code.name.monkey.retromusic.TOGGLE_GENRE -import code.name.monkey.retromusic.TOGGLE_HOME_BANNER +import code.name.monkey.retromusic.TYPE_HOME_BANNER import code.name.monkey.retromusic.TOGGLE_SEPARATE_LINE import code.name.monkey.retromusic.TOGGLE_VOLUME import code.name.monkey.retromusic.USER_NAME @@ -123,7 +123,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), OnSharedPreferenceChangeLis } override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { - if (key == GENERAL_THEME || key == BLACK_THEME || key == ADAPTIVE_COLOR_APP || key == USER_NAME || key == TOGGLE_FULL_SCREEN || key == TOGGLE_VOLUME || key == ROUND_CORNERS || key == CAROUSEL_EFFECT || key == NOW_PLAYING_SCREEN_ID || key == TOGGLE_GENRE || key == BANNER_IMAGE_PATH || key == PROFILE_IMAGE_PATH || key == CIRCULAR_ALBUM_ART || key == KEEP_SCREEN_ON || key == TOGGLE_SEPARATE_LINE || key == TOGGLE_HOME_BANNER || key == TOGGLE_ADD_CONTROLS || key == ALBUM_COVER_STYLE || key == HOME_ARTIST_GRID_STYLE || key == ALBUM_COVER_TRANSFORM || key == DESATURATED_COLOR || key == EXTRA_SONG_INFO || key == TAB_TEXT_MODE || key == LANGUAGE_NAME || key == LIBRARY_CATEGORIES) { + if (key == GENERAL_THEME || key == BLACK_THEME || key == ADAPTIVE_COLOR_APP || key == USER_NAME || key == TOGGLE_FULL_SCREEN || key == TOGGLE_VOLUME || key == ROUND_CORNERS || key == CAROUSEL_EFFECT || key == NOW_PLAYING_SCREEN_ID || key == TOGGLE_GENRE || key == BANNER_IMAGE_PATH || key == PROFILE_IMAGE_PATH || key == CIRCULAR_ALBUM_ART || key == KEEP_SCREEN_ON || key == TOGGLE_SEPARATE_LINE || key == TYPE_HOME_BANNER || key == TOGGLE_ADD_CONTROLS || key == ALBUM_COVER_STYLE || key == HOME_ARTIST_GRID_STYLE || key == ALBUM_COVER_TRANSFORM || key == DESATURATED_COLOR || key == EXTRA_SONG_INFO || key == TAB_TEXT_MODE || key == LANGUAGE_NAME || key == LIBRARY_CATEGORIES) { postRecreate() } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt index aab4f5d09..72e9800b6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt @@ -44,7 +44,7 @@ import kotlinx.android.synthetic.main.fragment_banner_home.* import kotlinx.android.synthetic.main.home_content.* class HomeFragment : - AbsMainActivityFragment(if (PreferenceUtil.isHomeBanner) R.layout.fragment_banner_home else R.layout.fragment_home) { + AbsMainActivityFragment(if (PreferenceUtil.typeHomeBanner == 1) R.layout.fragment_banner_home else R.layout.fragment_home) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -52,13 +52,21 @@ class HomeFragment : mainActivity.setSupportActionBar(toolbar) mainActivity.supportActionBar?.title = null setStatusBarColorAuto(view) - bannerImage?.setOnClickListener { - val options = ActivityOptions.makeSceneTransitionAnimation( - mainActivity, - userImage, - getString(R.string.transition_user_image) - ) - NavigationUtil.goToUserInfo(requireActivity(), options) + val needShowProfileOrBanner = (PreferenceUtil.typeHomeBanner != 2) + + if (needShowProfileOrBanner) { + bannerImage?.setOnClickListener { + val options = ActivityOptions.makeSceneTransitionAnimation( + mainActivity, + userImage, + getString(R.string.transition_user_image) + ) + NavigationUtil.goToUserInfo(requireActivity(), options) + } + } else { + userImage?.visibility = View.GONE + titleWelcome?.visibility = View.GONE + text?.visibility = View.GONE } lastAdded.setOnClickListener { @@ -86,15 +94,17 @@ class HomeFragment : ) } - userImage.setOnClickListener { - val options = ActivityOptions.makeSceneTransitionAnimation( - mainActivity, - userImage, - getString(R.string.transition_user_image) - ) - NavigationUtil.goToUserInfo(requireActivity(), options) + if (needShowProfileOrBanner) { + userImage.setOnClickListener { + val options = ActivityOptions.makeSceneTransitionAnimation( + mainActivity, + userImage, + getString(R.string.transition_user_image) + ) + NavigationUtil.goToUserInfo(requireActivity(), options) + } + titleWelcome?.text = String.format("%s", PreferenceUtil.userName) } - titleWelcome?.text = String.format("%s", PreferenceUtil.userName) val homeAdapter = HomeAdapter(mainActivity) recyclerView.apply { @@ -106,7 +116,10 @@ class HomeFragment : homeAdapter.swapData(it) }) - loadProfile() + if (needShowProfileOrBanner) { + loadProfile() + } + setupTitle() } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt index e68590c9d..8cca0eeda 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt @@ -218,10 +218,11 @@ object PreferenceUtil { TOGGLE_ADD_CONTROLS, false ) - val isHomeBanner - get() = sharedPreferences.getBoolean( - TOGGLE_HOME_BANNER, false - ) + val typeHomeBanner + get() = sharedPreferences.getStringOrDefault( + TYPE_HOME_BANNER, "0" + ).toInt() + var isClassicNotification get() = sharedPreferences.getBoolean(CLASSIC_NOTIFICATION, false) set(value) = sharedPreferences.edit { putBoolean(CLASSIC_NOTIFICATION, value) } diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 5b78acc31..135032cd2 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -309,7 +309,7 @@ Добавить дополнительные элементы управления для мини-плеера Показать дополнительную информацию о песне, такую как формат файла, битрейт и частота "Может вызвать проблемы с воспроизведением на некоторых устройствах." - Показывать кнопку Домой + Баннер на домашней странице Может повысить качество обложки альбома, но привести к более медленной загрузки изображения. Включите это только в том случае, если у вас есть картинки с низким разрешением Настроить вид и порядок категорий в библиотеке. Используйте собственный экран блокировки Retro Music @@ -342,7 +342,7 @@ Тема приложения Сетка альбома на Главной странице Сетка исполнителей - Кнопка Домой + Баннер Игнорировать обложки из хранилища Дата последнего добавления плейлиста Полноэкранное управление @@ -490,4 +490,7 @@ Данные вашей учетной записи используются только для аутентификации. Показать исполнителей альбома Добавить в чёрный список + Только профиль + Изображение и профиль + Скрыть diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 4a842b4fb..7c1c64e2b 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -490,4 +490,7 @@ Дані вашого облікового запису використовуються лише для автентифікації. Show Album Artists Add to Blacklist + Тільки профіль + Зображення і профіль + Приховати diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 5a7dfe816..0f0cbb4de 100755 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -98,6 +98,18 @@ this_year + + @string/home_only_profile + @string/home_banner_full + @string/home_no_profile + + + + 0 + 1 + 2 + + System default diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index caa31baf4..9594855da 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -503,4 +503,7 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Only profile + Image and profile + Hide diff --git a/app/src/main/res/xml/pref_ui.xml b/app/src/main/res/xml/pref_ui.xml index 54af84920..614d80ec9 100644 --- a/app/src/main/res/xml/pref_ui.xml +++ b/app/src/main/res/xml/pref_ui.xml @@ -27,12 +27,16 @@ android:title="@string/pref_title_home_album_grid_style" /> - + From 7f0dffb24233d6ce78d4ec3157d2f7bf340673f6 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Wed, 11 Aug 2021 11:08:22 +0530 Subject: [PATCH 0214/1603] New translations strings.xml (Dutch) --- app/src/main/res/values-nl-rNL/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index d4009cfd5..61b2c5021 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -213,7 +213,7 @@ Podcasts laden... Inloggen Tekst/Lyrics - Gemaakt met ❤🤍💙 in India + Gemaakt met ❤️ in India Materiaal Fout Toegangsfout From a41a29f44b9241e4751d8da810f76a1681150102 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Fri, 13 Aug 2021 07:59:04 +0530 Subject: [PATCH 0215/1603] New Crowdin updates (#1109) * New translations strings.xml (Italian) * New translations strings.xml (Croatian) * New translations strings.xml (Croatian) * New translations strings.xml (Chinese Simplified) --- app/src/main/res/values-hr-rHR/strings.xml | 194 ++++++++++----------- app/src/main/res/values-it-rIT/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 26 +-- 3 files changed, 111 insertions(+), 111 deletions(-) diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml index b8651a129..1df81ff50 100644 --- a/app/src/main/res/values-hr-rHR/strings.xml +++ b/app/src/main/res/values-hr-rHR/strings.xml @@ -1,56 +1,56 @@ - About %s - Team, social links + O %s + Tim, društvene poveznice Accent color The theme accent color, defaults to purple - About - Add to favorites - Add to playing queue - Add to playlist - Cast - Clear playing queue + Više informacija + Dodaj u favorite + Dodaj u red čekanja + Dodaj na popis + Emitiraj + Očisti red čekanja Cycle repeat mode - Delete - Delete from device - Details - Edit - Go to album - Go to artist - Go to genre + Izbriši + Izbriši s uređaja + Detalji + Uredi + Idi na album + Idi na izvođača + Idi na žanr Go to start directory - Grant - Grid size + Odobri + Veličina mreže Grid size (land) - New playlist - Next - Play - Play all - Play next - Play/Pause - Previous - Remove from favorites - Remove from playing queue - Remove from playlist - Rename - Save playing queue - Scan - Search + Novi popis + Sljedeće + Reproduciraj + Reproduciraj sve + Reproduciraj sljedeće + Reprodukcija/Pauza + Prethodno + Ukloni iz favorita + Ukloni iz reda čekanja + Ukloni s popisa + Preimenuj + Spremi red čekanja + Skeniraj + Pretraži Start - Set as ringtone + Postavi kao zvuk zvona Set as start directory - "Settings" - Share + "Postavke" + Podijeli Shuffle all Shuffle playlist Sleep timer - Sort order + Redoslijed sortiranja Tag editor Toggle favorite Toggle shuffle mode Adaptive - Add - "Add to playlist" + Dodaj + "Dodaj na popis" Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. @@ -100,24 +100,24 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel + Kupi sada + Odustani Card Colored Card Square Card Card Carousel effect on the now playing screen Cascading - Changelog + Popis promjena Check out What\'s New Circle Circular Classic - Clear + Očisti Clear blacklist - Clear queue - Color - Colors + Očisti red čekanja + Boja + Boje Composer Copied device info to clipboard. Couldn\u2019t create playlist. @@ -140,10 +140,10 @@ Deleted %1$d songs. Deleting Songs Depth - Description - Device info + Opis + Informacije o uređaju Allow Retro Music to modify audio settings - Set ringtone + Postavi zvuk zvona Do you want to clear the blacklist? %1$s from the blacklist?]]> Donate @@ -155,22 +155,22 @@ Edit Lyrics Edit Synced Lyrics Empty - Equalizer + Ekvalizator FAQ - Favorites + Favoriti Finish last song Fit Flat Folders - Follow system - For you + Slijedi sustav + Za vas Free Full Full card Change the theme and colors of the app Look and feel - Genre - Genres + Žanr + Žanrovi Fork the project on GitHub Gradient 1 @@ -181,8 +181,8 @@ 6 7 8 - Grid style - Need more help? + Stil mreže + Trebate još pomoći? Hinge History Home @@ -198,12 +198,12 @@ Keyboard Bitrate Format - File name - File path - Size + Naziv datoteke + Putanja datoteke + Veličina More from %s Sampling rate - Length + Trajanje Labeled Last added Last song @@ -215,14 +215,14 @@ Loading products… Login Lyrics - Made with ❤️ in India + Stvoreno sa ❤️ u Indiji Material Error Permission error Name Most played Never - New playlist + Novi popis %s is the new start directory. Next Song You have no albums @@ -383,7 +383,7 @@ Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone Ringtone (Optional) - File delete failed: %s + Brisanje datoteke nije uspjelo: %s Can\'t get SAF URI Open navigation drawer @@ -394,44 +394,44 @@ Select your SD card in navigation drawer Do not open any sub-folders Tap \'select\' button at the bottom of the screen - File write failed: %s - Save + Pisanje datoteke nije uspjelo: %s + Spremi - Save as file - Save as files - Saved playlist to %s. - Saving changes - Scan media + Spremi kao datoteku + Spremi kao datoteke + Popis spremljen u %s. + Spremanje izmjena + Skeniraj medije Scanned %1$d of %2$d files. Scrobbles - Select all - Selected - Set - Set artist image - Share app + Odaberi sve + Odabrano + Postavi + Postavi sliku izvođača + Podijeli aplikaciju Share the app with your friends and family Share to Stories Shuffle Simple Sleep timer canceled. Sleep timer set for %d minutes from now. - Social + Društveno Share story - Song - Song duration - Songs - Sort order - Ascending + Pjesma + Trajanje pjesme + Pjesme + Redoslijed sortiranja + Uzlazno Album - Artist - Composer - Date added - Date modified - Song count + Izvođač + Skladatelj + Datum dodavanja + Datum izmjene + Broj pjesama Song count desc - Year - Descending + Godina + Silazno Sorry! Your device doesn\'t support speech input Search your library Stack @@ -443,7 +443,7 @@ Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! + Hvala Vam! The audio file This month This week @@ -455,8 +455,8 @@ Top albums Top artists "Track (2 for track 2 or 3004 for CD3 track 4)" - Track number - Translate + Broj pjesme + Prevedite Help us translate the app to your language Try Retro Music Premium Twitter @@ -465,24 +465,24 @@ Couldn\u2019t play this song. Up next Update image - Updating… - User Name - Username - Version + Ažuriranje… + Korisničko ime + Korisničko ime + Verzija Vertical flip - View on Telegram + Vidi na Telegramu Volume Web search Website Check out our Website Welcome, What do you want to share? - What\'s New + Što je novo Window Rounded corners Set %1$s as your ringtone. %1$d selected - Year + Godina You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 8208b1ee6..618247c05 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -474,7 +474,7 @@ https://play.google.com/store/apps/details?id=%s Ricerca web Sito web Visita il nostro sito - Benvenuto. + Benvenuto, Cosa vuoi condividere? Novità Finestra diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 085f78257..8104d3989 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -52,7 +52,7 @@ 添加 "添加到播放列表" 添加时段歌词 - "已添加1首歌到播放队列。" + "已添加 1 首歌到播放队列。" 已添加 %1$d 首歌到播放队列。 专辑 @@ -85,7 +85,7 @@ 模糊卡片 无法提交报告 无效的访问令牌,请联系应用开发者。 - 目的仓库的 Issues 未启用,请联系应用开发者。 + 所选仓库未启用 issues,请联系应用开发者。 发生未知错误,请联系应用开发者。 错误的用户名或密码 问题 @@ -94,7 +94,7 @@ 请您输入有效的 GitHub 密码 请输入问题标题 请您输入有效的 GitHub 用户名 - 出错了,如一直崩溃请尝试清除应用数据或发送邮件给开发者 + 发生未知错误。很抱歉让您遇到此错误,如一直崩溃,请尝试“清除应用数据”或发送邮件 使用 GitHub 帐户发送 立即购买 取消 @@ -123,7 +123,7 @@ 创建 已创建播放列表 %1$s。 开发团队和贡献者 - 正通过 %2$s 收听 %1$s。 + 正在收听 %2$s 的 %1$s。 略暗 删除播放列表 %1$s 吗?]]> @@ -185,12 +185,12 @@ 水平翻转 图片 渐变图片 - 更改下载艺术家图像方式 + 更改艺术家图像下载设置 导入 导入播放列表 这会导入 Android 媒体存储中的所有播放列表,并合并重复的播放列表 - 将歌曲 %1$d 加入 %2$s 列表。 - 将您的设置分享到 Instagram + 将 %1$d 首歌曲加入列表 %2$s。 + 将您的 Retro Music 配置晒到 Instagram 键盘 比特率 格式 @@ -206,12 +206,12 @@ 媒体库分类 许可 纯白 - 监听器 - 正在罗列所有文件 - 加载产品... + 听众 + 正在列出文件 + 正在加载产品... 登录 歌词 - 印度 ❤️ 制造 + 用❤️创造,印度出品 质感 错误 权限错误 @@ -252,7 +252,7 @@ 在此粘贴歌词 在此粘贴时段歌词 顶点 - 访问外部存储权限时被拒绝。 + 访问外部存储权限被拒绝。 应用需要设备存储访问权限来播放音乐 存储空间权限 权限被拒绝。 @@ -403,7 +403,7 @@ 保存修改 扫描媒体 已扫描 %1$d 个,共计 %2$d 个文件。 - 滚动条 + 音乐记录 全选 已选中 设置 From 815e0a235e9ca0c0153612a379abdc658dc4eb04 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Wed, 18 Aug 2021 09:11:19 +0530 Subject: [PATCH 0216/1603] New Crowdin updates (#1110) * New translations strings.xml (Polish) * New translations strings.xml (Dutch) --- app/src/main/res/values-nl-rNL/strings.xml | 6 +-- app/src/main/res/values-pl-rPL/strings.xml | 48 +++++++++++----------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 61b2c5021..def825463 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -1,7 +1,7 @@ Over %s - Team, social links + Team, sociale linkjes Accent kleur De accent kleur, standaard naar groen Over @@ -10,7 +10,7 @@ Voeg toe aan afspeellijst... Casten Afspeel wachtrij legen - Cycle repeat mode + Wissel herhalingmodus Verwijder Verwijder van apparaat Details @@ -44,7 +44,7 @@ Shuffle alles Shuffle afspeellijst Slaap timer - Sort order + Sorteer volgorde Tags aanpassen Favorieten in-/uitschakelen Shuffle mode in-/uitschakelen diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 532da59ee..0c86275eb 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -14,7 +14,7 @@ Usuń Usuń z urządzenia Szczegóły - Edit + Edytuj Przejdź do albumu Przejdź do wykonawcy Idź do gatunku @@ -51,7 +51,7 @@ Adaptacyjny Dodaj "Dodaj do playlisty" - Add Time Framed Lyrics + Dodaj tekst z ramką czasową "Dodano tytuł do kolejki odtwarzania" Dodano %1$d tytułów do kolejki Album @@ -61,7 +61,7 @@ Utworów Utworów - Album Artist + Wykonawca albumu Albumy Album @@ -73,14 +73,14 @@ Hej, sprawdź ten fajny odtwarzacz muzyki na: https://play.google.com/store/apps/details?id=%s Losowo Najczęściej odtwarzane utwory - Full Image + Duży Karta Klasyczny Mały Minimal Text Wykonawca Wykonawcy - Audio Fade Duration + Czas zanikania dźwięku Odrzucono fokus dźwiękowy. Dostosuj ustawienia dźwięku i equalizera Automatyczny @@ -106,12 +106,12 @@ Anuluj Karta Kolorowa Karta - Square Card + Kwadratowa karta Karta Efekt karuzeli na ekranie Teraz odtwarzane Kaskadowy Lista zmian - Check out What\'s New + Sprawdź, co nowego Okrąg Okrągły Klasyczny @@ -140,7 +140,7 @@ %1$d playlisty?]]> %1$d utwory?]]> Usunięto %1$d utworów. - Deleting Songs + Usuwanie utworów Głębia Opis Informacje o urządzeniu @@ -151,11 +151,11 @@ Wesprzyj nas Jeżeli uważasz, że zasługuje na zapłatę za moją pracę możesz zostawić tu drobną sumę Kup mi: - Done + Gotowe Tryb samochodowy - Edit Button - Edit Lyrics - Edit Synced Lyrics + Przycisk Edytuj + Edytuj tekst + Edytuj zsynchronizowany tekst Pusto Korektor dźwięku Najczęściej zadawane pytania @@ -184,7 +184,7 @@ 7 8 Styl siatki - Need more help? + Potrzebujesz dodatkowej pomocy? Zawias Historia Strona główna @@ -192,8 +192,8 @@ Grafika Grafika gradientowy Zmień ustawienia pobierania grafiki wykonawcy - Import - Import playlist + Importuj + Importuj playlistę It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Dodano %1$d utworów do playlisty %2$s. Udostępnij swój desigm aplikacji Retro Music na Instagramie @@ -241,7 +241,7 @@ Normalne Normalny tekst utworu %s nie znajduje się w magazynie multimediów.]]> - Not recently played + Ostatnio nieodtwarzane Brak elementów do przeskanowania. Pusto Powiadomienie @@ -255,7 +255,7 @@ Inne ustawienia Hasło Ostatnie 3 miesiące - Paste Lyrics Here + Wklej tekst tutaj Paste timeframe lyrics here Szczyt Odmowa dostępu do pamięci zewnętrznej. @@ -381,10 +381,10 @@ Przywrócono poprzedni zakup. Zrestartuj aplikacje aby korzystać z wszystkich funkcji. Przywrócono poprzednie zakupy. Przywracanie zakupu... - Retro Music Player + Odtwarzacz Retro Music Retro Music Pro The app needs permission to access your device settings in order to set music as Ringtone - Ringtone (Optional) + Dzwonek (opcjonalny) Nie udało się usunąć pliku: %s Nie można uzyskać URI SAF @@ -430,7 +430,7 @@ Kompozytor Data dodania Data modyfikacji - Song count + Liczba utworów Song count desc Rok Malejąco @@ -475,8 +475,8 @@ View on Telegram Głośność Przeszukaj sieć - Website - Check out our Website + Strona internetowa + Odwiedź naszą stronę internetową Witaj, Co chciałbyś udostępnić? Co nowego @@ -488,6 +488,6 @@ Zaznacz przynajmniej jedną kategorię Zostaniesz przekierowany do strony ze zgłoszeniami. Informacje o twoim koncie są używane tylko do autoryzacji. - Show Album Artists - Add to Blacklist + Pokaż wykonawców albumu + Dodaj do czarnej listy From d3d885c979aa82146bc9590182b3c3d41af0659b Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Mon, 23 Aug 2021 18:39:57 +0530 Subject: [PATCH 0217/1603] Update strings.xml --- app/src/main/res/values/strings.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9594855da..7c1268e74 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -503,7 +503,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist - Only profile - Image and profile - Hide + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music From 9c72d3bd43516501398ff7e7e4f29c2bebcc7d01 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Mon, 23 Aug 2021 18:46:28 +0530 Subject: [PATCH 0218/1603] New Crowdin updates (#1113) * New translations strings.xml (Czech) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Thai) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Ukrainian) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Vietnamese) * New translations strings.xml (Icelandic) * New translations strings.xml (Indonesian) * New translations strings.xml (Persian) * New translations strings.xml (Tamil) * New translations strings.xml (Bengali) * New translations strings.xml (Estonian) * New translations strings.xml (Slovak) * New translations strings.xml (Latvian) * New translations strings.xml (Hindi) * New translations strings.xml (Malay) * New translations strings.xml (Burmese) * New translations strings.xml (Esperanto) * New translations strings.xml (Filipino) * New translations strings.xml (Luxembourgish) * New translations strings.xml (Latin) * New translations strings.xml (Flemish) * New translations strings.xml (Kannada) * New translations strings.xml (Nepali) * New translations strings.xml (Serbian (Cyrillic)) * New translations strings.xml (Russian) * New translations strings.xml (Dutch) * New translations strings.xml (Danish) * New translations strings.xml (Italian) * New translations strings.xml (Croatian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Polish) * New translations strings.xml (Czech) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Arabic) * New translations strings.xml (Catalan) * New translations strings.xml (German) * New translations strings.xml (Portuguese) * New translations strings.xml (Greek) * New translations strings.xml (Finnish) * New translations strings.xml (Irish) * New translations strings.xml (Gujarati) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Japanese) * New translations strings.xml (Georgian) * New translations strings.xml (Korean) * New translations strings.xml (Norwegian) * New translations strings.xml (Punjabi) * New translations strings.xml (Hawaiian) * Update source file strings.xml * New translations strings.xml (Italian) * New translations strings.xml (Greek) * New translations strings.xml (Greek) * New translations strings.xml (Odia) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Estonian) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Ukrainian) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Vietnamese) * New translations strings.xml (Icelandic) * New translations strings.xml (Indonesian) * New translations strings.xml (Persian) * New translations strings.xml (Tamil) * New translations strings.xml (Bengali) * New translations strings.xml (Thai) * New translations strings.xml (Latvian) * New translations strings.xml (Slovak) * New translations strings.xml (Hindi) * New translations strings.xml (Malay) * New translations strings.xml (Burmese) * New translations strings.xml (Esperanto) * New translations strings.xml (Filipino) * New translations strings.xml (Luxembourgish) * New translations strings.xml (Latin) * New translations strings.xml (Flemish) * New translations strings.xml (Kannada) * New translations strings.xml (Nepali) * New translations strings.xml (Hawaiian) * New translations strings.xml (Serbian (Cyrillic)) * New translations strings.xml (Russian) * New translations strings.xml (Dutch) * New translations strings.xml (Danish) * New translations strings.xml (Italian) * New translations strings.xml (Croatian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Polish) * New translations strings.xml (Czech) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Arabic) * New translations strings.xml (Catalan) * New translations strings.xml (German) * New translations strings.xml (Portuguese) * New translations strings.xml (Greek) * New translations strings.xml (Finnish) * New translations strings.xml (Irish) * New translations strings.xml (Gujarati) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Japanese) * New translations strings.xml (Georgian) * New translations strings.xml (Korean) * New translations strings.xml (Norwegian) * New translations strings.xml (Punjabi) * New translations strings.xml (Odia) --- app/src/main/res/values-af-rZA/strings.xml | 4 + app/src/main/res/values-ar-rSA/strings.xml | 4 + app/src/main/res/values-bn-rBD/strings.xml | 4 + app/src/main/res/values-ca-rES/strings.xml | 4 + app/src/main/res/values-cs-rCZ/strings.xml | 6 +- app/src/main/res/values-da-rDK/strings.xml | 4 + app/src/main/res/values-de-rDE/strings.xml | 4 + app/src/main/res/values-el-rGR/strings.xml | 94 ++++---- app/src/main/res/values-eo-rUY/strings.xml | 4 + app/src/main/res/values-es-rES/strings.xml | 4 + app/src/main/res/values-et-rEE/strings.xml | 4 + app/src/main/res/values-fa-rIR/strings.xml | 4 + app/src/main/res/values-fi-rFI/strings.xml | 4 + app/src/main/res/values-fil-rPH/strings.xml | 4 + app/src/main/res/values-fr-rFR/strings.xml | 4 + app/src/main/res/values-ga-rIE/strings.xml | 4 + app/src/main/res/values-gu-rIN/strings.xml | 4 + app/src/main/res/values-haw-rUS/strings.xml | 4 + app/src/main/res/values-hi-rIN/strings.xml | 4 + app/src/main/res/values-hr-rHR/strings.xml | 4 + app/src/main/res/values-hu-rHU/strings.xml | 4 + app/src/main/res/values-in-rID/strings.xml | 4 + app/src/main/res/values-is-rIS/strings.xml | 4 + app/src/main/res/values-it-rIT/strings.xml | 4 + app/src/main/res/values-iw-rIL/strings.xml | 4 + app/src/main/res/values-ja-rJP/strings.xml | 4 + app/src/main/res/values-ka-rGE/strings.xml | 4 + app/src/main/res/values-kn-rIN/strings.xml | 4 + app/src/main/res/values-ko-rKR/strings.xml | 4 + app/src/main/res/values-la-rLA/strings.xml | 4 + app/src/main/res/values-lb-rLU/strings.xml | 4 + app/src/main/res/values-lv-rLV/strings.xml | 4 + app/src/main/res/values-ms-rMY/strings.xml | 4 + app/src/main/res/values-my-rMM/strings.xml | 4 + app/src/main/res/values-ne-rNP/strings.xml | 4 + app/src/main/res/values-nl-rNL/strings.xml | 4 + app/src/main/res/values-no-rNO/strings.xml | 4 + app/src/main/res/values-or-rIN/strings.xml | 236 ++++---------------- app/src/main/res/values-pa-rIN/strings.xml | 4 + app/src/main/res/values-pl-rPL/strings.xml | 4 + app/src/main/res/values-pt-rBR/strings.xml | 4 + app/src/main/res/values-pt-rPT/strings.xml | 4 + app/src/main/res/values-ro-rRO/strings.xml | 4 + app/src/main/res/values-ru-rRU/strings.xml | 7 +- app/src/main/res/values-sk-rSK/strings.xml | 4 + app/src/main/res/values-sr-rSP/strings.xml | 4 + app/src/main/res/values-sv-rSE/strings.xml | 4 + app/src/main/res/values-ta-rIN/strings.xml | 4 + app/src/main/res/values-th-rTH/strings.xml | 4 + app/src/main/res/values-tr-rTR/strings.xml | 4 + app/src/main/res/values-uk-rUA/strings.xml | 7 +- app/src/main/res/values-vi-rVN/strings.xml | 4 + app/src/main/res/values-vls-rBE/strings.xml | 4 + app/src/main/res/values-zh-rCN/strings.xml | 4 + app/src/main/res/values-zh-rTW/strings.xml | 4 + 55 files changed, 310 insertions(+), 240 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 4185d2cc7..962494747 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -497,4 +497,8 @@ بيانات حسابك تستخدم لتوثيق فقط. إظهار ألبوم الفنان إضافة إلى القائمة السوداء + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 0d901ae4f..e89bcf1df 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -8,7 +8,7 @@ Přidat k oblíbeným Přidat do fronty Přidat do seznamu skladeb… - Cast + Hliník Vyčistit frontu Cycle repeat mode Smazat @@ -490,4 +490,8 @@ Vaše údaje k účtu jsou použity pouze k ověření. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index fb74acf2b..84f2dc843 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -486,4 +486,8 @@ Deine Accountdaten werden ausschließlich zur Authentifizierung genutzt Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 6c8215004..0fa8b93cb 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -2,19 +2,19 @@ Σχετικά με %s Ομάδα, κοινωνικοί σύνδεσμοι - Χρώμα Τονισμού - Το χρώμα τονισμού του θέματος, η προεπιλογή είναι το πράσινο. - Σχετικά με... + Χρώμα έμφασης + Το χρώμα έμφασης του θέματος, η προεπιλογή είναι το μωβ + Σχετικά με Προσθήκη στα αγαπημένα Προσθήκη στην ουρά αναπαραγωγής - Προσθήκη στη λίστα αναπαραγωγής... - Cast + Προσθήκη στη λίστα αναπαραγωγής + Μετάδοση Εκκαθάριση ουράς αναπαραγωγής Λειτουργία κυκλικής επανάληψης Διαγραφή Διαγραφή από την συσκευή Λεπτομέρειες - Edit + Επεξεργασία Μετάβαση στο άλμπουμ Μετάβαση στον καλλιτέχνη Μετάβαση στο είδος @@ -51,7 +51,7 @@ Προσαρμοστικό Προσθήκη "Προσθήκη στη λίστα αναπαραγωγής" - Add Time Framed Lyrics + Προσθήκη Στίχων Με Χρονικό Πλαίσιο "Προστέθηκε 1 κομμάτι στην ουρά αναπαραγωγής." Προστέθηκαν %1$d κομμάτια στην ουρά αναπαραγωγής. Άλμπουμ @@ -59,7 +59,7 @@ Κομμάτι Κομμάτια - Album Artist + Καλλιτέχνης Άλμπουμ Άλμπουμ Άλμπουμ @@ -69,20 +69,20 @@ Τσεκάρετε αυτό το κούλ music player στο:https://play.google.com/store/apps/details?id=%s Τυχαία αναπαραγωγή Κορυφαία Κομμάτια - Full Image + Πλήρης εικόνα Κάρτα Κλασσικό Μικρό - Minimal Text + Ελάχιστο Κείμενο Καλλιτέχνης Καλλιτέχνες - Audio Fade Duration + Διάρκεια Εξασθένισης Ήχου Η εστίαση ήχου απορρίφθηκε. Αλλάξτε τις ρυθμίσεις ήχου και προσαρμόστε τα χειριστήρια του ισοσταθμιστή Αυτόματο Βιογραφία Απλά Μαύρο - Blacklist + Μαύρη λίστα Θολούρα Κάρτα θαμπώματος Δεν είναι δυνατή η αποστολή αναφοράς @@ -102,12 +102,12 @@ Ακύρωση τρέχων χρονοδιακόπτη Κάρτα Έγχρωμη κάρτα - Square Card + Τετράγωνη Κάρτα Κάρτα Εφέ καρουσέλ στην οθόνη του παίζει τώρα Με υπερχείλιση Λίστα Αλλαγών - Check out What\'s New + Δείτε τι νέο υπάρχει Κύκλος >Κυκλικό Κλασσικό @@ -120,7 +120,7 @@ Οι πληροφοριές συσκευής αντιγράφηκαν στο πρόχειρο. \u0391\u03b4\u03c5\u03bd\u03b1\u03bc\u03af\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2 playlist. "\u0391\u03b4\u03c5\u03bd\u03b1\u03bc\u03af\u03b1 \u03bb\u03ae\u03c8\u03b7\u03c2 \u03c4\u03b1\u03b9\u03c1\u03b9\u03b1\u03c3\u03c4\u03bf\u03cd \u03b5\u03be\u03c9\u03c6\u03cd\u03bb\u03bb\u03bf\u03c5 \u03ac\u03bb\u03bc\u03c0\u03bf\u03c5\u03bc." - Could not restore purchase. + Δεν ήταν δυνατή η επαναφορά της αγοράς. Αδυναμία στη σάρωση %d αρχείων. Δημιουργία Δημιουργήθηκε η λίστα αναπαραγωγής %1$s. @@ -130,13 +130,13 @@ Διαγραφή playlist %1$s?]]> Διαγραφή αυτών των λιστών αναπαραγωγής - Delete song + Διαγραφή κομματιού %1$s?]]> Διαγραφή κομματιών %1$d λίστα αναπαραγωγής?]]> %1$d κομματιών?]]> Διαγράφηκαν %1$d κομμάτια. - Deleting Songs + Διαγραφή τραγουδιών Βάθος Περιγραφή Πληροφορίες συσκευής @@ -147,17 +147,17 @@ Δώρισε Αν σου άρεσε η εφαρμογή μπορείς να δωρίσεις εδώ. Αγορασέ μου ένα - Done + Ολοκληρώθηκε Λειτουργία οδήγησης - Edit Button - Edit Lyrics - Edit Synced Lyrics + Κουμπί Επεξεργασίας + Επεξεργασία Στίχων + Επεξεργασία Συγχρονισμένων Στίχων Κενό Ισοσταθμιστής - FAQ + Συχνές ερωτήσεις Αγαπημένα Τελειώσε το τελευταίο κομμάτι - Fit + Προσαρμογή Επίπεδο Φάκελοι Βάση του συστήματος @@ -170,7 +170,7 @@ Είδος Είδη Fork το έργο στο GitHub - Gradient + Διαβάθμιση 1 2 3 @@ -180,7 +180,7 @@ 7 8 Στυλ πλέγματος - Need more help? + Χρειάζεστε περισσότερη βοήθεια; Hinge Ιστορικό Αρχική @@ -188,13 +188,13 @@ Εικόνα Διαβαθμισμένη Εικόνα Αλλαγή των ρυθμίσεων λήψης εικόνων καλλιτέχνη - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Εισαγωγή + Εισαγωγή λίστας αναπαραγωγής + Εισάγει όλες τις λίστες αναπαραγωγής του Android Media Store με τραγούδια, αν οι λίστες αναπαραγωγής υπάρχουν ήδη, τα τραγούδια θα συγχωνευτούν. Προστέθηκαν %1$d κομμάτια στη λίστα αναπαραγωγής %2$s. Μοιραστείτε το setup του Retro Music σας για προβολή στο Instagram Πληκτρολόγιο - Bitrate + Ρυθμός μετάδοσης bit Μορφή Όνομα Αρχείου Διαδρομή Αρχείου @@ -237,7 +237,7 @@ Κανονικό Κανονικοί στίχοι %s δεν υπάρχει στο media store.]]> - Not recently played + Δεν παίχτηκαν πρόσφατα Δεν υπάρχει στοιχείο προς σάρωση. Τίποτα για να δείτε Ειδοποίηση @@ -251,12 +251,12 @@ Άλλα Κωδικός πρόσβασης Τους περασμένους 3 μήνες - Paste Lyrics Here - Paste timeframe lyrics here + Επικολλήστε τους στίχους εδω + Επικόλληση στίχων χρονικού πλαισίου εδώ Κορυφή Η άδεια για προσπέλαση του external storage δεν παραχωρήθηκε. - The app needs permission to access your device storage for playing music - Storage Access + Η εφαρμογή χρειάζεται άδεια για πρόσβαση στον αποθηκευτικό χώρο της συσκευής σας για την αναπαραγωγή μουσικής + Πρόσβαση Χώρου Αποθήκευσης Οι άδειες δεν παραχωρήθηκαν. Προσωποποιήση Προσαρμόστε τα στοιχεία ελέγχου του παίζετε τώρα και του περιβάλλοντως χρήστη @@ -276,8 +276,8 @@ Προηγμένες Στυλ άλμπουμ Ήχος - Blacklist - Controls + Μαύρη λίστα + Στοιχεία ελέγχου Θέμα Εικόνες Βιβλιοθήκη @@ -289,10 +289,10 @@ Διατηρήστε την οθόνη ενεργή πιλέξτε γλώσσα Χρησιμοποιεί το εξώφυλλο του τρέχων κομματιού ως φόντο οθόνης κλειδώματος. - Show Album Artists in the Artist category + Εμφάνιση Καλλιτεχνών Άλμπουμ στην κατηγορία Καλλιτέχνης Ειδοποιήσεις, πλοήγηση, κλπ. - Fade Audio when Song is Paused or Played - The content of blacklisted folders is hidden from your library. + Σβήσιμο ήχου όταν το τραγούδι είναι σε παύση ή σε αναπαραγωγή + Το περιεχόμενο των φακέλων στη μαύρη λίστα είναι κρυμμένο από τη βιβλιοθήκη σας. Ξεκινά να παίζει μόλις συνδεθείτε με συσκευή Bluetooth Θολώνει το εξώφυλλο άλμπουμ στην οθόνη κλειδώματος. Μπορεί να προκαλέσει προβλήματα με εφαρμογές και widgets. Εφέ καρουζέλ για το εξώφυλλο του άλμπουμ στην οθόνη του παίζει τώρα. Σημειώστε ότι τα θέματα Κάρτας και Θαμπές Κάρτες δεν θα λειτουργήσουν @@ -300,10 +300,10 @@ Το φόντο και το κουμπί ελέγχου αλλάζουν σύμφωνα με το εξώφυλλο άλμπουμ Χρωματίζει τα app shortcuts με το επιλεγμένο χρώμα τονισμού. "\u03a7\u03c1\u03c9\u03bc\u03b1\u03c4\u03af\u03b6\u03b5\u03b9 \u03c4\u03b7\u03bd \u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03bc\u03b5 \u03c4\u03bf \u03b6\u03c9\u03bd\u03c4\u03b1\u03bd\u03cc \u03c7\u03c1\u03ce\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03b5\u03be\u03c9\u03c6\u03cd\u03bb\u03bb\u03bf\u03c5 \u03ac\u03bb\u03bc\u03c0\u03bf\u03c5\u03bc." - As per Material Design guide lines in dark mode colors should be desaturated - Clicking on the notification will show now playing screen instead of the home screen - Add extra controls for mini player - Show extra Song information, such as file format, bitrate and frequency + Σύμφωνα με τις γραμμές οδηγών του Material Design τα χρώματα θα πρέπει να αποκορεσθούν σε σκοτεινή λειτουργία + Κάνοντας κλικ στην ειδοποίηση θα εμφανίζεται η οθόνη αναπαραγωγής αντί της αρχικής οθόνης + Προσθήκη επιπλέον ελέγχων για τον μίνι αναπαραγωγέα + Εμφάνιση επιπλέον πληροφοριών τραγουδιού, όπως μορφή αρχείου, bitrate και συχνότητα "Μπορεί να προκαλέσει προβλήματα με την αναπαραγωγή σε κάποιες συσκευές." Show or hide the home banner Μπορεί να αυξήσει την ποιότητα των εξωφύλλων άλμπουμ, αλλά προκαλεί αργή φόρτωση εικόνων. Ενεργοποιήστε αυτή την επίλογη μόνο εαν αντιμετωπίζετε προβλήματα με εξώφυλλα χαμηλής ανάλυσης. @@ -324,7 +324,7 @@ Μείωση έντασης όταν υπάρχουν εισερχόμενες ειδοποιήσεις Fade Audio Αυτόματη λήψη εικόνων καλλιτεχνών - Blacklist + Μαύρη λίστα Bluetooth playback Θόλωμα εξωφύλλων άλμπουμ Κλασσικό design ειδοποίησης @@ -485,5 +485,9 @@ Θα προωθηθείτε στον ιστότοπο παρακολούθησης ζητημάτων. Τα δεδομένα του λογαριασμού σας χρησιμοποιούνται μόνο για έλεγχο ταυτότητας. Show Album Artists - Add to Blacklist + Προσθήκη στην μαύρη λίστα + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-eo-rUY/strings.xml b/app/src/main/res/values-eo-rUY/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-eo-rUY/strings.xml +++ b/app/src/main/res/values-eo-rUY/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 8f40ef826..695435767 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -486,4 +486,8 @@ Los datos de tu cuenta sólo se utilizan para la autenticación. Mostrar Artistas del Álbum Añadir a la Lista negra + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-et-rEE/strings.xml +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index ce7a2aa86..39a25bc24 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index e70e4e5e4..b0a93bf41 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -486,4 +486,8 @@ Vos données de compte sont utilisées uniquement pour vous authentifier. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-ga-rIE/strings.xml b/app/src/main/res/values-ga-rIE/strings.xml index 742219d05..9823dffd0 100644 --- a/app/src/main/res/values-ga-rIE/strings.xml +++ b/app/src/main/res/values-ga-rIE/strings.xml @@ -492,4 +492,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-gu-rIN/strings.xml b/app/src/main/res/values-gu-rIN/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-gu-rIN/strings.xml +++ b/app/src/main/res/values-gu-rIN/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-haw-rUS/strings.xml b/app/src/main/res/values-haw-rUS/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-haw-rUS/strings.xml +++ b/app/src/main/res/values-haw-rUS/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 27ed5549f..f3aa4d329 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml index 1df81ff50..9f8ee7285 100644 --- a/app/src/main/res/values-hr-rHR/strings.xml +++ b/app/src/main/res/values-hr-rHR/strings.xml @@ -488,4 +488,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 933924405..39303da30 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -486,4 +486,8 @@ Fiókja adatait kizárólag a hitelesítéshez fogjuk használni. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 6bec2e83b..6249797ba 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -484,4 +484,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-is-rIS/strings.xml b/app/src/main/res/values-is-rIS/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-is-rIS/strings.xml +++ b/app/src/main/res/values-is-rIS/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 618247c05..69051e015 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -487,4 +487,8 @@ https://play.google.com/store/apps/details?id=%s I dati del tuo account vengono utilizzati solo per l\'autenticazione. Mostra artisti album Aggiungi alla blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index a33620798..51bda2973 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -490,4 +490,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 4ef83b8e4..4337fb1e3 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -485,4 +485,8 @@ あなたのアカウントは認証にのみ使用されます Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-ka-rGE/strings.xml +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 41a25dc21..4563d0957 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -484,4 +484,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-la-rLA/strings.xml b/app/src/main/res/values-la-rLA/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-la-rLA/strings.xml +++ b/app/src/main/res/values-la-rLA/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-lb-rLU/strings.xml b/app/src/main/res/values-lb-rLU/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-lb-rLU/strings.xml +++ b/app/src/main/res/values-lb-rLU/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml index b8bb4109f..9c5f6a7f9 100644 --- a/app/src/main/res/values-lv-rLV/strings.xml +++ b/app/src/main/res/values-lv-rLV/strings.xml @@ -488,4 +488,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-ms-rMY/strings.xml b/app/src/main/res/values-ms-rMY/strings.xml index 6bec2e83b..6249797ba 100644 --- a/app/src/main/res/values-ms-rMY/strings.xml +++ b/app/src/main/res/values-ms-rMY/strings.xml @@ -484,4 +484,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index 48d24b82d..358b7da3c 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -484,4 +484,8 @@ သင့်အကောင့်အချက်အလက်ကို အတည်ပြုရန်အတွက်သာအသုံးပြုပါသည်။ Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-ne-rNP/strings.xml +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index def825463..f3754aee9 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-or-rIN/strings.xml b/app/src/main/res/values-or-rIN/strings.xml index b599615cf..4eab06753 100644 --- a/app/src/main/res/values-or-rIN/strings.xml +++ b/app/src/main/res/values-or-rIN/strings.xml @@ -2,19 +2,19 @@ About %s Team, social links - Accent color The theme accent color, defaults to purple - About Add to favorites Add to playing queue Add to playlist + Cast Clear playing queue Cycle repeat mode Delete Delete from device Details + Edit Go to album Go to artist Go to genre @@ -48,59 +48,43 @@ Tag editor Toggle favorite Toggle shuffle mode - Adaptive - Add "Add to playlist" - + Add Time Framed Lyrics "Added 1 title to the playing queue." Added %1$d titles to the playing queue. - Album - Song Songs - - Album artist - + Album Artist Albums Album Albums - Always - Hey check out this cool music player at: https://play.google.com/store/apps/details?id=%s Shuffle Top Tracks - Big + Full Image Card Classic Small - Text - + Minimal Text Artist - Artists - + Audio Fade Duration Audio focus denied. Change the sound settings and adjust the equalizer controls - Auto - Biography - Just Black - Blacklist - Blur Blur Card - Unable to send report Invalid access token. Please contact the app developer. Issues are not enabled for the selected repository. Please contact the app developer. @@ -114,55 +98,35 @@ Please enter your valid GitHub username An unexpected error occurred. Sorry you found this bug, if it keeps crashing \"Clear app data\" or send an Email Send using GitHub account - Buy now - Cancel - Card Colored Card + Square Card Card - Carousel effect on the now playing screen - Cascading - Changelog - Changelog maintained on the Telegram channel - + Check out What\'s New Circle - Circular - Classic - Clear Clear blacklist Clear queue - Color - Colors - Composer - Copied device info to clipboard. - Couldn\u2019t create playlist. "Couldn\u2019t download a matching album cover." Could not restore purchase. Could not scan %d files. - Create - Created playlist %1$s. - Members and contributors - Currently listening to %1$s by %2$s. - Kinda Dark - Delete playlist %1$s?]]> Delete playlists @@ -171,62 +135,42 @@ Delete songs %1$d playlists?]]> %1$d songs?]]> - Deleted %1$d songs. - + Deleting Songs Depth - Description - Device info - Allow Retro Music to modify audio settings Set ringtone - Do you want to clear the blacklist? %1$s from the blacklist?]]> - Donate If you think I deserve to get paid for my work, you can leave some money here - Buy me a: - + Done Drive mode - + Edit Button + Edit Lyrics + Edit Synced Lyrics Empty - Equalizer - FAQ - Favorites - Finish last song - Fit - Flat - Folders - Follow system - For you - Free - Full Full card - Change the theme and colors of the app Look and feel - Genre - Genres - Fork the project on GitHub - + Gradient 1 2 3 @@ -236,25 +180,20 @@ 7 8 Grid style - + Need more help? Hinge - History - Home - Horizontal flip - Image Gradient image Change artist image download settings - + Import + Import playlist + It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. Inserted %1$d songs into the playlist %2$s. - Share your Retro Music setup to showcase on Instagram - Keyboard - Bitrate Format File name @@ -263,45 +202,27 @@ More from %s Sampling rate Length - Labeled - Last added Last song - Library categories - Licenses - Clearly White - Listeners - Listing files - Loading products… - Login - Lyrics - Made with ❤️ in India - Material - Error Permission error - Name Most played - Never - New playlist %s is the new start directory. - Next Song - You have no albums You have no artists "Play a song first, then try again." @@ -313,57 +234,41 @@ No purchase found. No results You have no songs - Normal Normal lyrics - %s is not listed in the media store.]]> - + Not recently played Nothing to scan. Nothing to see - Notification Customize the notification style - Now playing Now playing queue Customize the now playing screen 9+ now playing themes - Only on Wi-Fi - Advanced testing features - Other - Password - Past 3 months - + Paste Lyrics Here + Paste timeframe lyrics here Peak - Permission to access external storage denied. - + The app needs permission to access your device storage for playing music + Storage Access Permissions denied. - Personalize Customize your now playing and UI controls - Pick from local storage - Pinterest Follow Pinterest page for Retro Music design inspiration - Plain - The playing notification provides actions for play/pause etc. Playing notification - Playlist is empty Playlist name - Playlists - Amount of blur applied for blur themes, lower is faster Blur amount Filter songs by length @@ -384,7 +289,9 @@ Keep the screen on Select language Use the currently playing song album cover as the lockscreen wallpaper + Show Album Artists in the Artist category Lower the volume when a system sound is played or a notification is received + Fade Audio when Song is Paused or Played The content of blacklisted folders is hidden from your library. Start playing as soon as connected to bluetooth device Blur the album cover on the lockscreen. Can cause problems with third party apps and widgets @@ -403,15 +310,19 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Display Synced Lyrics over Album Cover + Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen Show album cover + Navigate by Album Artist Album cover theme Album cover skip Colored app shortcuts Reduce volume on focus loss + Fade Audio Auto-download artist images Blacklist Bluetooth playback @@ -425,6 +336,7 @@ Song info Gapless playback App theme + Album grid Artist grid Banner Ignore Media Store covers @@ -432,28 +344,23 @@ Fullscreen controls Now playing theme Open source licences + Show Lyrics + Show Suggestions Tab titles mode Carousel effect Fullscreen app Auto-play Shuffle mode Volume controls - Pro Black theme, Now playing themes, Carousel effect and more.. - Profile - Purchase - Playing Queue - Rate the app Love this app? Let us know in the Google Play Store how we can make it even better - Recent albums Recent artists - Remove Remove cover Remove from blacklist @@ -461,25 +368,19 @@ %1$s from the playlist?]]> Remove songs from playlist %1$d songs from the playlist?]]> - Rename playlist - Report an issue Report bug - Reset Reset artist image - Restore - Restored previous purchase. Please restart the app to make use of all features. Restored previous purchases. - Restoring purchase… - Retro Music Player Retro Music Pro - + The app needs permission to access your device settings in order to set music as Ringtone + Ringtone (Optional) File delete failed: %s Can\'t get SAF URI @@ -492,48 +393,32 @@ Do not open any sub-folders Tap \'select\' button at the bottom of the screen File write failed: %s - Save Save as file Save as files - Saved playlist to %s. - Saving changes - Scan media - Scanned %1$d of %2$d files. - Scrobbles - Select all - Selected - Set Set artist image - Share app + Share the app with your friends and family Share to Stories - Shuffle - Simple - Sleep timer canceled. Sleep timer set for %d minutes from now. - Social Share story - Song Song duration - Songs - Sort order Ascending Album @@ -541,93 +426,68 @@ Composer Date added Date modified + Song count + Song count desc Year Descending - Sorry! Your device doesn\'t support speech input Search your library - Stack - Start playing music. - Suggestions - Support development - Swipe to unlock - Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more - Thank you! - The audio file - This month This week This year - Tiny Tiny card - Title - Today - Top albums Top artists - "Track (2 for track 2 or 3004 for CD3 track 4)" Track number - Translate Help us translate the app to your language - Try Retro Music Premium - Twitter Share your design with Retro Music - Unlabeled - Couldn\u2019t play this song. - Up next - Update image - Updating… - + User Name Username - Version - Vertical flip - + View on Telegram Volume - Web search - + Website + Check out our Website Welcome, - What do you want to share? - What\'s New - Window Rounded corners - Set %1$s as your ringtone. %1$d selected - Year - You have to select at least one category. You will be forwarded to the issue tracker website. - Your account data is only used for authentication. + Show Album Artists + Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 0c86275eb..e82fcb614 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -490,4 +490,8 @@ Informacje o twoim koncie są używane tylko do autoryzacji. Pokaż wykonawców albumu Dodaj do czarnej listy + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 77aa2db62..fba97a531 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -486,4 +486,8 @@ Os dados da sua conta são usados ​​apenas para autenticação. Mostrar artistas do álbum Adicionar à lista negra + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index c7cff275e..97f15657d 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -488,4 +488,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 135032cd2..9e861de96 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -490,7 +490,8 @@ Данные вашей учетной записи используются только для аутентификации. Показать исполнителей альбома Добавить в чёрный список - Только профиль - Изображение и профиль - Скрыть + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 1443b6607..570fa7171 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -490,4 +490,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index fecba6416..d10605c53 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -488,4 +488,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 6eb256990..9a720c58b 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -486,4 +486,8 @@ Dina kontodata används endast för verifiering. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index 5a87c3a42..6d301b92b 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index 6bec2e83b..6249797ba 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -484,4 +484,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index c5d733e31..0d7b8302b 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -486,4 +486,8 @@ Hesap verileriniz sadece kimlik doğrulama için kullanılır. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 7c1c64e2b..e6aa65d93 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -490,7 +490,8 @@ Дані вашого облікового запису використовуються лише для автентифікації. Show Album Artists Add to Blacklist - Тільки профіль - Зображення і профіль - Приховати + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 720c5e2c0..ff9745c83 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -485,4 +485,8 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Dữ liệu tài khoản của bạn chỉ được sử dụng để xác thực. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-vls-rBE/strings.xml b/app/src/main/res/values-vls-rBE/strings.xml index 6003649bc..4eab06753 100644 --- a/app/src/main/res/values-vls-rBE/strings.xml +++ b/app/src/main/res/values-vls-rBE/strings.xml @@ -486,4 +486,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 8104d3989..e09d18b1a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -487,4 +487,8 @@ 您的账户数据仅用于验证。 显示专辑艺术家 添加至黑名单 + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 24059c9e6..7f8b8f4bd 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -484,4 +484,8 @@ Your account data is only used for authentication. Show Album Artists Add to Blacklist + Remember Last Tab + Navigate to the last used tab on start + Only show music from /Music Folder + Whitelist Music From 3895c07a3c5945043deed0149666876ab35916ba Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Mon, 23 Aug 2021 18:49:38 +0530 Subject: [PATCH 0219/1603] New translations strings.xml (Russian) (#1117) --- app/src/main/res/values-ru-rRU/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 9e861de96..6c90efd02 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -309,7 +309,7 @@ Добавить дополнительные элементы управления для мини-плеера Показать дополнительную информацию о песне, такую как формат файла, битрейт и частота "Может вызвать проблемы с воспроизведением на некоторых устройствах." - Баннер на домашней странице + Показывать кнопку Домой Может повысить качество обложки альбома, но привести к более медленной загрузки изображения. Включите это только в том случае, если у вас есть картинки с низким разрешением Настроить вид и порядок категорий в библиотеке. Используйте собственный экран блокировки Retro Music @@ -342,7 +342,7 @@ Тема приложения Сетка альбома на Главной странице Сетка исполнителей - Баннер + Кнопка Домой Игнорировать обложки из хранилища Дата последнего добавления плейлиста Полноэкранное управление From 1e546d5f728121d888d4fde40f115b2118c6358c Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Tue, 31 Aug 2021 13:02:00 +0530 Subject: [PATCH 0220/1603] New Crowdin updates (#1118) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Italian) * New translations strings.xml (French) * New translations strings.xml (Italian) * New translations strings.xml (Spanish) * New translations strings.xml (German) * New translations strings.xml (German) * New translations strings.xml (Vietnamese) * New translations strings.xml (Vietnamese) * New translations strings.xml (Vietnamese) * New translations strings.xml (Vietnamese) --- app/src/main/res/values-de-rDE/strings.xml | 102 ++++++------ app/src/main/res/values-es-rES/strings.xml | 8 +- app/src/main/res/values-fr-rFR/strings.xml | 36 ++-- app/src/main/res/values-it-rIT/strings.xml | 8 +- app/src/main/res/values-vi-rVN/strings.xml | 182 ++++++++++----------- app/src/main/res/values-zh-rCN/strings.xml | 8 +- 6 files changed, 172 insertions(+), 172 deletions(-) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 84f2dc843..8623a4b37 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -1,6 +1,6 @@ - About %s + Über %s Team, soziale Netzwerke Akzentfarbe Akzentfarbe des Farbthemas, Standard ist Grün @@ -8,13 +8,13 @@ Zu Favoriten hinzufügen Zur Wiedergabeliste hinzufügen Zur Playlist hinzufügen... - Cast + Übertragen Wiedergabeliste leeren Wiederholungsmodus wechseln Löschen Vom Gerät löschen Details - Edit + Bearbeiten Zum Album gehen Zum Künstler gehen Zu Genre gehen @@ -47,7 +47,7 @@ Sortierreihenfolge Tag-Editor Favorit umschalten - Toggle shuffle mode + Shuffle Modus aktivieren Adaptiv Hinzufügen "Zur Playlist hinzufügen" @@ -56,10 +56,10 @@ %1$d Titel wurden zur Wiedergabeliste hinzugefügt. Album - Song + Lied Songs - Album Artist + Album-Interpret Alben Album @@ -69,14 +69,14 @@ Hey, schau dir diesen coolen Music Player an: https://play.google.com/store/apps/details?id=%s Zufällig Top Songs - Full Image + Vollständiges Bild Retro Musik - Karte - Classic + Klassik Klein - Minimal Text + Minimaler Text Künstler Künstler - Audio Fade Duration + Audio Ausblenddauer Audio Fokus verweigert. Sound- und Equalizer-Optionen einstellen Automatisch @@ -102,12 +102,12 @@ Timer stoppen Karte Karte (Farbe) - Square Card + Quadratische Karte Karte Karussell-Effekt auf dem Abspielbildschirm Kaskadierend Änderungen - Check out What\'s New + Sieh dir an, was neu ist Kreis Rund Klassik @@ -136,7 +136,7 @@ %1$d Playlisten löschen?]]> %1$d Songs löschen?]]> %1$d Songs gelöscht. - Deleting Songs + Titel werden gelöscht Tiefe Beschreibung Geräteinfo @@ -147,11 +147,11 @@ Spenden Falls du denkst ich habe mir etwas für meine Arbeit verdient, kannst du hier gerne ein bisschen Geld hinterlassen. Kauf\' mir: - Done + Fertig Fahrmodus - Edit Button - Edit Lyrics - Edit Synced Lyrics + Edit Taste + Lyrics bearbeiten + Synchronisierte Lyrics bearbeiten Leer Equalizer FAQ @@ -180,7 +180,7 @@ 7 8 Vorschaubilder - Need more help? + Benötigst du weitere Hilfe? Scharnier Verlauf Zuhause @@ -188,9 +188,9 @@ Bild Bild mit Farbverlauf Download-Verhalten für Interpretenbilder ändern - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Importieren + Playlist importieren + Es importiert alle im Android Media Store aufgelisteten Playlists, falls die Playlists bereits existieren, werden die Songs zusammengeführt. %1$d Song(s) in Playlist %2$s eingefügt. Teile dein Retro Music-Design auf Instagram Tastatur @@ -211,7 +211,7 @@ Zuhörer Gelistete Dateien Produkte werden geladen... - Login + Anmelden Songtext Hergestellt mit ❤ in Indien Material @@ -237,7 +237,7 @@ Normal Normaler Songtext %s ist nicht im Medienspeicher aufgeführt.]]> - Not recently played + Nicht kürzlich gespielt Nichts zu scannen. Nichts zu sehen Benachrichtigung @@ -251,12 +251,12 @@ Anderes Passwort Letzte 3 Monate - Paste Lyrics Here - Paste timeframe lyrics here + Songtext hier einfügen + Songtexte mit Zeitfenster hier einfügen Spitze Berechtigung für den Zugriff auf externen Speicher verweigert. - The app needs permission to access your device storage for playing music - Storage Access + Die App benötigt die Berechtigung für den Zugriff auf den Gerätespeicher, um Musik abspielen zu können + Speicherzugriff Berechtigung verweigert. Personalisieren Abspiel-Bildschirm und Interface bearbeiten @@ -287,11 +287,11 @@ Bei Stummstellung pausieren Beachte, dass diese Funktion sich auf die Akkulaufzeit auswirkt. Bildschirm anlassen - Select language + Sprachauswahl Aktuelles Album-Cover als Sperrbildschrim verwenden. - Show Album Artists in the Artist category + Album-Interpreten in der Kategorie Interpret anzeigen Benachrichtigungen, Benachrichtigung etc. - Fade Audio when Song is Paused or Played + Audio verblassem, wenn Lied pausiert oder wiedergegeben wird Die Musik in Ordnern von der schwarzen Liste wird nicht angezeigt. Wiedergabe starten, sobald mit dem Bluetooth-Gerät verbunden wurde Verunschärft das Album-Cover des Sperrbildschirm. Kann Probleme mit anderen Apps und Widgets verursachen. @@ -310,14 +310,14 @@ Stelle Sichtbarkeit und Reihenfolge der Bibliothekkategorien ein. Vollständige Musiksteuerung auf dem Sperrbildschirm einschalten. Details zu den Lizensen der Open Source Software - Display Synced Lyrics over Album Cover - Show New Music Mix on Homescreen + Synchronisierte Songtexte über Albumcover anzeigen + Neue Musik-Mix auf dem Startbildschirm anzeigen Schalte den immersiven Modus ein. Mit Wiedergabe starten, sobald Kopfhörer verbunden sind. Shufflemodus wird ausgeschaltet, sobald neue Wiedergabe gestartet wird Falls Platz vorhanden ist, Lautstärkeregler auf Derzeit gespielt-Bildschirm zeigen Album Cover anzeigen - Navigate by Album Artist + Navigiere nach Album-Interpret Aussehen des Albumcovers Stil des Album-Covers Gefärbte App Shortcuts @@ -336,7 +336,7 @@ Song-Info Lückenlose Wiedergabe Hauptthema - Album grid + Album Raster Künstlerbilder auf der Startseite Home-Banner Media Store Cover ignorieren @@ -344,8 +344,8 @@ Vollbildschirmsteuerung Erscheinungsbild Open Source Lizenzen - Show Lyrics - Show Suggestions + Lyrics anzeigen + Vorschläge anzeigen Beschriftung der Navigationselemente Karussell-Effekt Vollbild App @@ -379,8 +379,8 @@ Kauf wird wiederhergestellt... Retro Music Player Retro Music Pro - The app needs permission to access your device settings in order to set music as Ringtone - Ringtone (Optional) + Die App benötigt die Berechtigung, auf Ihre Geräte-Einstellungen zuzugreifen, um Musik als Klingelton festlegen zu können + Klingelton (optional) Löschen der Datei fehlgeschlagen: %s SAF-URI kann nicht geladen werden @@ -408,7 +408,7 @@ Setzen Wähle ein Interpretenbild App teilen - Share the app with your friends and family + Teile die App mit deinen Freunden und Verwandten In Stories teilen Zufall Einfach @@ -426,7 +426,7 @@ Komponist Datum Änderungsdatum - Song count + Songanzahl Song count desc Jahr Absteigend @@ -456,7 +456,7 @@ Songnummer Übersetzen Hilf\' uns, die App in deine Sprache zu übersetzen! - Try Retro Music Premium + Retro Music Premium testen Twitter-Seite Teile dein Design mit RetroMusic Unbeschriftet @@ -464,15 +464,15 @@ Als Nächstes Bild aktualisieren Aktualisieren... - User Name + Benutzername Benutzername Version Vertikale Drehung - View on Telegram + Auf Telegram ansehen Lautstärke Internetsuche - Website - Check out our Website + Webseite + Besuchen Sie unsere Website Willkommen, Was möchtest du teilen? Neuigkeiten @@ -484,10 +484,10 @@ Du musst mindestens eine Kategorie auswählen Du wirst auf die Issue Tracker-Seite weitergeleitet. Deine Accountdaten werden ausschließlich zur Authentifizierung genutzt - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music + Album-Interpreten anzeigen + Zur Blacklist hinzufügen + Letzten Tab merken + Navigiere zum zuletzt verwendeten Tab beim Start + Nur Musik aus /Music Ordner anzeigen + Whitelist Musik diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 695435767..973677141 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -486,8 +486,8 @@ Los datos de tu cuenta sólo se utilizan para la autenticación. Mostrar Artistas del Álbum Añadir a la Lista negra - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music + Recordar última pestaña + Navegar a la última pestaña usada al iniciar + Mostrar solo música de la carpeta /Music + Música de Lista Blanca diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index b0a93bf41..60f186132 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -1,6 +1,6 @@ - About %s + À propos de %s Équipe, liens sociaux Couleur d\'accentuation La couleur d\'accentuation du thème, verte par défaut @@ -8,13 +8,13 @@ Ajouter aux favoris Ajouter à la file d\'attente Ajouter à la playlist - Cast + Diffuser Vider la file d\'attente Mode de répétition du cycle Supprimer Supprimer de l\'appareil Détails - Edit + Modifier Aller à l\'album Aller à l\'artiste Aller au genre @@ -51,15 +51,15 @@ Adaptatif Ajouter "Ajouter à playlist" - Add Time Framed Lyrics + Ajouter des paroles synchronisée "1 titre à été ajoutée à la file d'attente." %1$d titres ont été ajoutés à la file d\'attente. Album Song - Songs + Musiques - Album Artist + Artiste de l\'album Albums Album @@ -69,17 +69,17 @@ Hey, jetez un coup d\'œil à ce super lecteur de musique : https://play.google.com/store/apps/details?id=%s Aléatoire Pistes préférées - Full Image + Image complète Retro Music – Carte Retro Music – Classique Retro Music – Petit - Minimal Text + Texte Minimum Artiste Artistes - Audio Fade Duration + Durée du fondu audio Focus audio refusé. Changer les paramètres audio et ajuster l\'égaliseur - Auto + Automatique Biographie Juste noir Liste noire @@ -102,13 +102,13 @@ Annuler Carte Cartes colorées - Square Card + Carte carrée Carte Effet carousel sur l\'écran de lecture en cours En cascade Liste des changements - Check out What\'s New - Circle + Découvrez les nouveautés + Cercle Circulaire Classique Effacer @@ -136,19 +136,19 @@ %1$d ?]]> %1$d ?]]> %1$d à été supprimé. - Deleting Songs + Suppression des musiques Profondeur Description Infos sur l\'appareil Autoriser la musique Retro pour modifier les paramètres audio - Set ringtone + Définir une sonnerie Voulez vous vraiment vider la liste noire ? %1$s de la liste noire ?]]> Faire un don Si vous pensez que je mérite d\'être payé pour mon travail, vous pouvez me donner quelques dollars ici Achetez moi : - Done - Drive mode + Terminé + Mode conduite Edit Button Edit Lyrics Edit Synced Lyrics @@ -214,7 +214,7 @@ Se connecter Paroles Fait avec ❤️ en Inde - Material + Matériel Erreur Erreur d\'autorisation Mon nom diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 69051e015..f67fd786e 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -487,8 +487,8 @@ https://play.google.com/store/apps/details?id=%s I dati del tuo account vengono utilizzati solo per l\'autenticazione. Mostra artisti album Aggiungi alla blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music + Ricorda ultima scheda + All\'avvio apri l\'ultima scheda usata + Mostra solo i brani dalla cartella /Music + Whitelist diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index ff9745c83..c1595686d 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -1,20 +1,20 @@ - About %s - Đường dẫn tổ đội, mạng xã hội - Màu sắc nhấn mạnh - Màu sắc chủ đạo của chủ đề, mặc định là xanh ngọc + Thông tin về %s + Liên kết đến nhóm, mạng xã hội + Màu chủ đạo + Màu chủ đạo của chủ đề, mặc định là màu tía Về chúng tôi Thêm vào yêu thích - Thêm vào hàng đợi + Thêm vào danh sách chờ phát Thêm vào danh sách phát - Cast - Xoá hàng đợi + Truyền màn hình + Xoá danh sách chờ phát Cycle repeat mode Xoá Xóa khỏi thiết bị Chi tiết - Edit + Sửa Đi đến album Đi đến nghệ sĩ Chuyển đến thể loại @@ -23,51 +23,51 @@ Kích thước lưới Kích thước lưới (chiều ngang) Danh sách phát mới - Tiếp - Chơi - Chơi tất cả - Chơi kế tiếp + Tiếp theo + Phát + Phát tất cả + Phát tiếp theo Phát/Tạm dừng - Trước - Loại bỏ khỏi mục yêu thích - Xoá khỏi hàng đợi - Xoá khỏi danh sách phát + Trước đó + Xóa khỏi mục yêu thích + Xóa khỏi danh sách chờ phát + Xóa khỏi danh sách phát Đổi tên - Lưu hàng đợi phát + Lưu danh sách chờ phát Quét Tìm kiếm Bắt đầu Đặt làm nhạc chuông - Đặt làm trang bắt đầu + Đặt làm thư mục bắt đầu "Cài đặt" Chia sẻ Phát ngẫu nhiên tất cả Phát ngẫu nhiên theo danh sách phát Hẹn giờ ngủ Thứ tự sắp xếp - Chỉnh sửa thẻ - Toggle favorite - Toggle shuffle mode + Sửa thẻ + Chuyển đổi mục yêu thích + Chuyển đổi chế độ phát ngẫu nhiên Thích nghi Thêm "Thêm vào danh sách phát" Add Time Framed Lyrics - "Đã thêm 1 bài vào háng đợi phát." - Đã thêm %1$d bài vào hàng đợi phát. + "Đã thêm 1 bài vào danh sách chờ phát." + Đã thêm %1$d bài vào danh sách chờ phát. Album - Songs + Bài hát - Album Artist - Album + Album nghệ sĩ + Các album - Albums + Album Luôn luôn Hãy dùng thử trình phát nhạc siêu chất này tại: https://play.google.com/store/apps/details?id=%s Ngẫu nhiên Bản nhạc hàng đầu - Full Image + Hình ảnh đầy đủ Thẻ Cổ điển Nhỏ @@ -97,22 +97,22 @@ Đã xảy ra lỗi không mong muốn. Xin lỗi bạn vì lỗi này, nếu nó tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Gửi bằng tài khoản GitHub - Buy now + Mua ngay Hủy Thẻ Thẻ màu - Square Card + Thẻ vuông Thẻ Hiệu ứng băng chuyền trên màn hình đang phát Xếp tầng Thay đổi - Check out What\'s New - Circle - Thông tư + Xem có gì mới + Vòng tròn + Dạng tròn Cổ điển Xóa Xóa danh sách đen - Xóa hàng đợi + Xoá danh sách Màu sắc Màu sắc Tác giả @@ -123,7 +123,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Không thể quét %d tập tin. Tạo Đã tạo danh sách phát %1$s. - Thành viên và cộng tác viên + Thành viên và cộng tác viên Đang nghe %1$s bởi %2$s. Xám đen Xoá danh sách phát @@ -146,11 +146,11 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Ủng hộ Nếu bạn nghĩ rằng tôi xứng đáng được thưởng cho công việc này, bạn có thể để lại một số tiền ở đây. Cảm ơn bạn! :D Mua cho tôi một: - Done - Drive mode - Edit Button - Edit Lyrics - Edit Synced Lyrics + Xong + Chế độ lái xe + Sửa nút + Sửa lời + Sửa Lời Đồng bộ Trống Bộ chỉnh âm Câu hỏi thường gặp @@ -159,9 +159,9 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Phù hợp Phẳng Thư mục - Follow system + Theo hệ thống Cho bạn - Free + Miễn phí Toàn bộ Thẻ đầy đủ Thay đổi chủ đề và màu sắc của ứng dụng @@ -179,7 +179,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" 7 8 Bố trí lưới - Need more help? + Bạn cần hỗ trợ thêm? Bản lề Lịch sử Trang chủ @@ -187,18 +187,18 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Hình ảnh Ảnh màu chuyển sắc Thay đổi cài đặt tải xuống hình ảnh nghệ sĩ - Import - Import playlist - It imports all playlists listed in the Android Media Store with songs, if the playlists already exists, the songs will get merged. + Nhập + Nhập danh sách phát + Nhập tất cả danh sách phát có trong Android Media Store cùng với các bài hát, nếu danh sách phát đã tồn tại, các bài hát sẽ được gộp lại. Đã chèn %1$d bài hát vào danh sách phát %2$s. Chia sẻ thiết lập Retro Music của bạn trong Instagram Bàn phím - Bitrate + Tốc độ bit Định dạng Tên tệp Đường dẫn tệp Kích thước - More from %s + Thêm thông tin từ %s Tần số lấy mẫu Độ dài Được dán nhãn @@ -207,7 +207,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Danh mục thư viện Giấy phép Hoàn toàn trắng - Listeners + Người nghe Danh sách tập tin Đang tải sản phẩm... Đăng nhập @@ -216,19 +216,19 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Material Lỗi Lỗi quyền truy cập - Tên của bạn + Tên Phát nhiều nhất Không bao giờ Danh sách phát mới %s là trang bắt đầu mới. - Bài kế + Bài tiếp theo Không có album Không có nghệ sĩ "Phát một bài hát trước, sau đó thử lại." Không tìm thấy bộ chỉnh âm Không có thể loại Không tìm thấy lời bài hát - No songs playing + Không có bài hát nào đang phát Không có danh sách phát Không tìm thấy giao dịch mua. Không có kết quả @@ -236,32 +236,32 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Tiêu chuẩn Lời chuẩn %s không được liệt kê trong thư mục nhạc.]]> - Not recently played + Không phát gần đây Không có gì để quét. - Nothing to see + Không có gì để hiển thị Thông báo Tùy chỉnh kiểu thông báo Đang phát - Đang phát hàng đợi + Đang phát danh sách chờ Tùy chỉnh màn hình đang phát - Hơn 9 giao diện đang phát + Hơn 9 giao diện phát nhạc Chỉ khi dùng Wi-Fi Tính năng nâng cao đang kiểm thử Khác Mật khẩu Mỗi tháng - Paste Lyrics Here + Dán lời ở đây Paste timeframe lyrics here Peak Quyền truy cập bộ nhớ ngoài bị từ chối. The app needs permission to access your device storage for playing music - Storage Access + Truy cập bộ nhớ Quyền đã bị từ chối. Cá nhân hoá Tùy chỉnh màn hình phát và giao diện người dùng Chọn từ bộ nhớ trong Pinterest - Follow Pinterest page for Retro Music design inspiration + Theo dõi trang Pinterest để lấy cảm hứng thiết kế Retro Music Giản dị Thanh thông báo đang phát sẽ cho phép bạn phát nhạc/tạm dừng, chuyển bài,... Thông báo đang phát @@ -270,9 +270,9 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Danh sách phát Độ mờ được áp dụng cho các chủ đề mờ, thấp hơn là nhanh hơn Độ mờ - Filter songs by length + Lọc bài hát theo độ dài Lọc theo thời lượng bài hát - Advanced + Nâng cao Kiểu Album Âm thanh Danh sách đen @@ -286,13 +286,13 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Tạm dừng phát khi tắt âm lượng Lưu ý rằng việc bật tính năng này có thể ảnh hưởng đến tuổi thọ pin Giữ màn hình luôn bật - Select language + Chọn ngôn ngữ Sử dụng ảnh bìa album bài hát đang phát làm ảnh nền màn hình khóa. Show Album Artists in the Artist category Giảm âm lượng khi có âm báo hệ thống hoặc khi bạn có thông báo Fade Audio when Song is Paused or Played Nội dung của các thư mục trong danh sách đen được ẩn khỏi thư viện của bạn. - Start playing as soon as connected to bluetooth device + Phát nhạc ngay sau khi kết nối với thiết bị Bluetooth Làm mờ ảnh bìa album trên màn hình khóa. Có thể gây ra sự cố với các ứng dụng và tiện ích của bên thứ ba Hiệu ứng băng chuyền cho ảnh bìa album trong màn hình đang phát. Lưu ý rằng nó không hoạt động với chủ đề Thẻ và Thẻ mờ Dùng thiết kế thông báo cổ điển @@ -332,7 +332,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Desaturated color Show now playing screen Điều khiển bổ sung - Song info + Thông tin bài hát Phát không gián đoạn Chủ đề ứng dụng Album grid @@ -343,8 +343,8 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Điều khiển toàn màn hình. Giao diện đang phát Giấy phép nguồn mở - Show Lyrics - Show Suggestions + Hiển thị lời + Hiển thị đề xuất Chế độ tiêu đề thẻ Hiệu ứng quay vòng Toàn màn hình @@ -355,7 +355,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Black theme, Now playing themes, Carousel effect and more.. Hồ sơ Mua - Hàng đợi + Danh sách chờ phát Đánh giá ứng dụng Bạn thích ứng dụng này không? Hãy cho chúng tôi biết suy nghĩ của bạn trên Cửa hàng Play để chúng tôi có thể làm cho nó tốt hơn nữa Album mới thêm @@ -378,20 +378,20 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Đang khôi phục mua hàng... Retro Music Player Retro Music Pro - The app needs permission to access your device settings in order to set music as Ringtone - Ringtone (Optional) - File delete failed: %s + Ứng dụng cần quyền truy cập cài đặt thiết bị của bạn để đặt nhạc làm Nhạc chuông + Nhạc chuông (Tùy chọn) + Xóa tệp thất bại: %s Can\'t get SAF URI Open navigation drawer - Enable \'Show SD card\' in overflow menu + Cho phép \"hiển thị \'thẻ nhớ\" trong menu tùy chọn - %s needs SD card access - You need to select your SD card root directory + %s cần quyền truy cập thẻ nhớ + Bạn cần chọn thư mục thẻ nhớ gốc của mình Select your SD card in navigation drawer Do not open any sub-folders - Tap \'select\' button at the bottom of the screen - File write failed: %s + Nhấn vào nút \'chọn\' ở cuối màn hình + Ghi tệp thất bại: %s Lưu @@ -414,7 +414,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Đã huỷ hẹn giờ ngủ. Dừng phát nhạc sau %d phút kể từ bây giờ. Xã hội - Share story + Chia sẻ câu chuyện Bài hát Thời lượng bài hát Bài hát @@ -424,9 +424,9 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Nghệ sĩ Tác giả Ngày - Date modified - Song count - Song count desc + Ngày chỉnh sửa + Số bài hát + Số bài hát giảm Năm Giảm dần Xin lỗi! Thiết bị không hỗ trợ nhập liệu bằng giọng nói @@ -435,7 +435,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Bắt đầu chơi nhạc Đề nghị Hỗ trợ nhà phát triển - Swipe to unlock + Trượt để mở khóa Karaoke Telegram @@ -446,7 +446,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Mỗi tuần Mỗi năm Nhỏ - Tiny card + Thẻ nhỏ Tiêu đề Hôm nay Album hàng đầu @@ -455,7 +455,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Số rãnh Dịch Giúp chúng tôi dịch ứng dụng sang ngôn ngữ của bạn - Try Retro Music Premium + Thử Retro Music Premium Twitter Chia sẻ thiết kế của bạn với Retro Music Chưa gắn nhãn @@ -463,15 +463,15 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Tiếp theo Cập nhật hình ảnh Đang cập nhật... - User Name + Tên người dùng Tên người dùng Phiên bản - Vertical flip - View on Telegram - Volume + Lật dọc + Xem trên Telegram + Âm lượng Tìm kiếm trên web Website - Check out our Website + Xem Website của chúng tôi Chào mừng, Bạn muốn chia sẻ gì? Có gì mới! @@ -483,10 +483,10 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Bạn phải chọn ít nhất một danh mục. Bạn sẽ được chuyển tiếp đến trang web theo dõi vấn đề. Dữ liệu tài khoản của bạn chỉ được sử dụng để xác thực. - Show Album Artists - Add to Blacklist - Remember Last Tab + Hiển thị Album Nghệ sĩ + Thêm vào danh sách đen + Ghi nhớ tab cuối cùng Navigate to the last used tab on start - Only show music from /Music Folder + Chỉ hiện thị nhạc từ /Thư mục Nhạc Whitelist Music diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index e09d18b1a..d34c9eb1b 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -487,8 +487,8 @@ 您的账户数据仅用于验证。 显示专辑艺术家 添加至黑名单 - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music + 记住最后打开页面 + 启动时打开上次使用的页面 + 仅显示 /Music 目录的音乐 + 白名单音乐 From 5359c22e52a38801edf2d6c7e61f712c2548d46e Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sat, 4 Sep 2021 11:53:41 +0530 Subject: [PATCH 0221/1603] New translations strings.xml (Vietnamese) (#1120) --- app/src/main/res/values-vi-rVN/strings.xml | 120 ++++++++++----------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index c1595686d..ee8afc240 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -2,15 +2,15 @@ Thông tin về %s Liên kết đến nhóm, mạng xã hội - Màu chủ đạo - Màu chủ đạo của chủ đề, mặc định là màu tía + Màu sắc chủ đạo + Màu sắc chủ đạo của chủ đề, mặc định là màu tía Về chúng tôi Thêm vào yêu thích Thêm vào danh sách chờ phát Thêm vào danh sách phát Truyền màn hình Xoá danh sách chờ phát - Cycle repeat mode + Chế độ lặp lại chu kỳ Xoá Xóa khỏi thiết bị Chi tiết @@ -43,7 +43,7 @@ Chia sẻ Phát ngẫu nhiên tất cả Phát ngẫu nhiên theo danh sách phát - Hẹn giờ ngủ + Hẹn giờ ngừng phát Thứ tự sắp xếp Sửa thẻ Chuyển đổi mục yêu thích @@ -51,7 +51,7 @@ Thích nghi Thêm "Thêm vào danh sách phát" - Add Time Framed Lyrics + Thêm lời theo thời gian "Đã thêm 1 bài vào danh sách chờ phát." Đã thêm %1$d bài vào danh sách chờ phát. Album @@ -71,10 +71,10 @@ Thẻ Cổ điển Nhỏ - Minimal Text + Văn bản nhỏ nhất Nghệ sĩ Nghệ sĩ - Audio Fade Duration + Thời lượng làm mượt âm thanh Tập trung âm thanh bị từ chối Thay đổi cài đặt âm thanh và điều chỉnh các điều khiển bộ chỉnh âm Tự động @@ -135,7 +135,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" %1$d danh sách phát?]]> %1$d bài hát?]]> Đã xoá %1$d bài hát. - Deleting Songs + Xóa Các bài hát Độ sâu Mô tả Thông tin thiết bị @@ -160,7 +160,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Phẳng Thư mục Theo hệ thống - Cho bạn + Dành cho bạn Miễn phí Toàn bộ Thẻ đầy đủ @@ -241,20 +241,20 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Không có gì để hiển thị Thông báo Tùy chỉnh kiểu thông báo - Đang phát + Màn hình phát Đang phát danh sách chờ - Tùy chỉnh màn hình đang phát - Hơn 9 giao diện phát nhạc + Tùy chỉnh màn hình phát + Hơn 9 giao diện màn hình phát Chỉ khi dùng Wi-Fi - Tính năng nâng cao đang kiểm thử + Tính năng nâng cao đang kiểm tra Khác Mật khẩu Mỗi tháng Dán lời ở đây - Paste timeframe lyrics here - Peak + Dán lời theo thời gian ở đây + Thu nhỏ Quyền truy cập bộ nhớ ngoài bị từ chối. - The app needs permission to access your device storage for playing music + Ứng dụng cần quyền truy cập bộ nhớ thiết bị của bạn để phát nhạc Truy cập bộ nhớ Quyền đã bị từ chối. Cá nhân hoá @@ -263,7 +263,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Pinterest Theo dõi trang Pinterest để lấy cảm hứng thiết kế Retro Music Giản dị - Thanh thông báo đang phát sẽ cho phép bạn phát nhạc/tạm dừng, chuyển bài,... + Thanh thông báo đang phát sẽ cho phép bạn phát/tạm dừng, chuyển bài, v.v. Thông báo đang phát Danh sách phát trống Tên danh sách phát @@ -282,66 +282,66 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Thư viện Màn hình khoá Danh sách phát - Tạm dừng phát khi tắt âm lượng và phát lại sau khi tăng âm lượng. Cảnh báo: Khi bạn tăng âm lượng, nó sẽ bắt đầu phát ngay cả khi bạn ở ngoài ứng dụng + Tạm dừng phát khi tắt âm lượng và phát lại sau khi tăng âm lượng. Cảnh báo: Khi bạn tăng âm lượng, bài hát sẽ phát kể cả khi bạn ở ngoài ứng dụng Tạm dừng phát khi tắt âm lượng Lưu ý rằng việc bật tính năng này có thể ảnh hưởng đến tuổi thọ pin Giữ màn hình luôn bật Chọn ngôn ngữ Sử dụng ảnh bìa album bài hát đang phát làm ảnh nền màn hình khóa. - Show Album Artists in the Artist category + Hiển thị Album Nghệ sĩ trong danh mục Nghệ sĩ Giảm âm lượng khi có âm báo hệ thống hoặc khi bạn có thông báo - Fade Audio when Song is Paused or Played + Làm mượt âm thanh khi tạm dừng hoặc phát Bài hát Nội dung của các thư mục trong danh sách đen được ẩn khỏi thư viện của bạn. - Phát nhạc ngay sau khi kết nối với thiết bị Bluetooth + Tự động phát nhạc sau khi kết nối với thiết bị Bluetooth Làm mờ ảnh bìa album trên màn hình khóa. Có thể gây ra sự cố với các ứng dụng và tiện ích của bên thứ ba - Hiệu ứng băng chuyền cho ảnh bìa album trong màn hình đang phát. Lưu ý rằng nó không hoạt động với chủ đề Thẻ và Thẻ mờ - Dùng thiết kế thông báo cổ điển - Màu nền và các nút điều khiển sẽ thay đổi theo màu sắc ảnh bìa album đang phát + Hiệu ứng băng chuyền cho ảnh bìa album trong màn hình phát. Lưu ý rằng nó không hoạt động với chủ đề Thẻ và Thẻ mờ + Dùng thiết kế thông báo kiểu cổ điển + Màu nền và các nút điều khiển sẽ thay đổi theo màu sắc ảnh bìa album từ màn hình phát Màu sắc trong lối tắt ứng dụng dùng màu sắc chủ đạo. Mỗi khi bạn thay đổi màu chủ đạo, hãy bật/tắt lại công tắc này để thay đổi có hiệu lực "M\u00e0u s\u1eafc th\u00f4ng b\u00e1o thay \u0111\u1ed5i theo m\u00e0u s\u1eafc chi ph\u1ed1i \u1ea3nh b\u00eca album" - As per Material Design guide lines in dark mode colors should be desaturated - Clicking on the notification will show now playing screen instead of the home screen + Để phù hợp với Thiết kế Material, màu sắc sẽ được điều chỉnh để tương thích với chế độ tối + Nhấn vào thông báo sẽ hiển thị màn hình phát nhạc thay vì màn hình chính Thêm điều khiển bổ sung cho trình phát mini - Show extra Song information, such as file format, bitrate and frequency + Hiển thị thêm thông tin Bài hát, như là định dạng, tốc độ bit và tần số "Có thể gây ra vấn đề phát lại trên một số thiết bị." - Ẩn/hiện biểu ngữ trong trang chủ - Có thể tăng chất lượng hiển thị ảnh bìa album, nhưng thời gian tải hình ảnh chậm hơn. Chỉ bật tính năng này nếu bạn không hài lòng với chất lượng ảnh hiện tại + Hiện hoặc ẩn banner màn hình chính + Có thể tăng chất lượng hiển thị ảnh bìa album, nhưng sẽ làm thời gian tải hình ảnh chậm hơn. Chỉ bật tính năng này nếu bạn không thích chất lượng ảnh gốc Khả năng hiển thị và thứ tự của các danh mục trong thư viện. Sử dụng các điều khiển màn hình khóa tùy chỉnh của Retro Music Chi tiết giấy phép của phần mềm mã nguồn mở - Display Synced Lyrics over Album Cover - Show New Music Mix on Homescreen + Hiển thị Lời Đồng bộ trên bìa Album + Hiển thị Danh sách nhạc kết hợp mới trên Màn hình chính Chế độ hoà nhập Tự động phát nhạc khi kết nối tai nghe Chế độ phát ngẫu nhiên sẽ tắt khi phát danh sách bài hát mới - Hiện thanh điều chỉnh âm lượng nếu có không gian trống trong màn hình đang phát + Hiện thanh điều chỉnh âm lượng nếu có không gian trống trong màn hình phát Hiện ảnh bìa album - Navigate by Album Artist + Điều hướng theo Album Nghệ sĩ Chủ đề bìa album Kiểu bìa album đang phát Đổi màu lối tắt ứng dụng Giảm âm lượng khi có âm báo - Fade Audio + Làm mượt âm thanh Tự động tải xuống hình ảnh nghệ sĩ Danh sách đen - Bluetooth playback + Tự động phát Bluetooth Làm mờ bìa album Thiết kế thông báo cổ điển Màu sắc thích nghi Đổi màu thông báo - Desaturated color - Show now playing screen + Màu sắc tương thích + Hiển thị màn hình phát nhạc Điều khiển bổ sung Thông tin bài hát Phát không gián đoạn Chủ đề ứng dụng - Album grid + Lưới Album Lưới nghệ sĩ trang chủ - Biểu ngữ trang chủ - Ảnh bìa chất lượng nguyên bản + Banner + Ảnh bìa chất lượng cao Làm mới danh sách thêm gần đây sau Điều khiển toàn màn hình. - Giao diện đang phát + Giao diện màn hình phát Giấy phép nguồn mở Hiển thị lời Hiển thị đề xuất @@ -352,12 +352,12 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Chế độ ngẫu nhiên Điều khiển âm lượng Pro - Black theme, Now playing themes, Carousel effect and more.. + Chủ đề đen, Chủ đề màn hình phát, Hiệu ứng băng chuyền, v.v. Hồ sơ Mua Danh sách chờ phát Đánh giá ứng dụng - Bạn thích ứng dụng này không? Hãy cho chúng tôi biết suy nghĩ của bạn trên Cửa hàng Play để chúng tôi có thể làm cho nó tốt hơn nữa + Bạn thích ứng dụng này chứ? Hãy cho chúng tôi biết cảm nhận của bạn trên Cửa hàng Google Play để chúng tôi có thể hoàn thiện sản phẩm tốt hơn nữa nhé Album mới thêm Nghệ sĩ mới thêm Loại bỏ @@ -382,14 +382,14 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Nhạc chuông (Tùy chọn) Xóa tệp thất bại: %s - Can\'t get SAF URI - Open navigation drawer + Không thể lấy SAF URI + Mở ngăn điều hướng Cho phép \"hiển thị \'thẻ nhớ\" trong menu tùy chọn %s cần quyền truy cập thẻ nhớ Bạn cần chọn thư mục thẻ nhớ gốc của mình - Select your SD card in navigation drawer - Do not open any sub-folders + Chọn thẻ nhớ của bạn trong ngăn điều hướng + Không được mở bất kỳ thư mục con nào Nhấn vào nút \'chọn\' ở cuối màn hình Ghi tệp thất bại: %s Lưu @@ -407,14 +407,14 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Cấu hình Đặt ảnh nghệ sĩ thủ công Chia sẽ ứng dụng - Share the app with your friends and family - Share to Stories + Chia sẻ ứng dụng với bạn bè và gia đình của bạn + Chia sẻ đến Các story Ngẫu nhiên Đơn giản - Đã huỷ hẹn giờ ngủ. - Dừng phát nhạc sau %d phút kể từ bây giờ. + Đã huỷ hẹn giờ ngừng phát. + Ngừng phát nhạc sau %d phút kể từ bây giờ. Xã hội - Chia sẻ câu chuyện + Chia sẻ story Bài hát Thời lượng bài hát Bài hát @@ -436,11 +436,11 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Đề nghị Hỗ trợ nhà phát triển Trượt để mở khóa - Karaoke + Lời Đồng bộ Telegram Tham gia nhóm Telegram để thảo luận về lỗi, đưa ra đề xuất, và hơn thế nữa - Cảm ơn! + Cảm ơn bạn! Tệp âm thanh Mỗi tháng Mỗi tuần @@ -454,16 +454,16 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" "Rãnh (2 cho bài số 2 hoặc 3004 cho CD3 bài số 4)" Số rãnh Dịch - Giúp chúng tôi dịch ứng dụng sang ngôn ngữ của bạn + Hãy giúp chúng tôi dịch ứng dụng sang ngôn ngữ của bạn nhé Thử Retro Music Premium Twitter Chia sẻ thiết kế của bạn với Retro Music Chưa gắn nhãn - Kh\u00f4ng th\u1ec3 ph\u00e1t b\u00e0i h\u00e1t n\u00e0y. + Không thể phát bài hát này. Tiếp theo Cập nhật hình ảnh Đang cập nhật... - Tên người dùng + Người dùng Tên người dùng Phiên bản Lật dọc @@ -476,7 +476,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Bạn muốn chia sẻ gì? Có gì mới! Cửa sổ - Góc tròn + Bo góc Đặt %1$s làm nhạc chuông. %1$d đã chọn Năm @@ -486,7 +486,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Hiển thị Album Nghệ sĩ Thêm vào danh sách đen Ghi nhớ tab cuối cùng - Navigate to the last used tab on start + Điều hướng đến tab được sử dụng gần nhất lúc bắt đầu Chỉ hiện thị nhạc từ /Thư mục Nhạc - Whitelist Music + Danh sách trắng From 6c515aede6c182d298c07bee4fd7b50ed449dfe3 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sat, 4 Sep 2021 19:22:20 +0530 Subject: [PATCH 0222/1603] Update strings.xml --- app/src/main/res/values/strings.xml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7c1268e74..a9235b048 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -313,6 +314,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -323,12 +325,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -343,6 +347,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -357,6 +362,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -365,6 +371,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -427,6 +434,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -455,7 +463,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -501,10 +508,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music From f2c294dc4c15bd3565efe65aff04f2108ffa4552 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sun, 5 Sep 2021 08:51:44 +0530 Subject: [PATCH 0223/1603] New Crowdin updates (#1122) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Estonian) * New translations strings.xml (Swedish) * New translations strings.xml (Turkish) * New translations strings.xml (Ukrainian) * New translations strings.xml (Chinese Traditional) * New translations strings.xml (Vietnamese) * New translations strings.xml (Icelandic) * New translations strings.xml (Indonesian) * New translations strings.xml (Persian) * New translations strings.xml (Tamil) * New translations strings.xml (Bengali) * New translations strings.xml (Thai) * New translations strings.xml (Latvian) * New translations strings.xml (Slovak) * New translations strings.xml (Hindi) * New translations strings.xml (Malay) * New translations strings.xml (Burmese) * New translations strings.xml (Esperanto) * New translations strings.xml (Filipino) * New translations strings.xml (Luxembourgish) * New translations strings.xml (Latin) * New translations strings.xml (Flemish) * New translations strings.xml (Kannada) * New translations strings.xml (Nepali) * New translations strings.xml (Hawaiian) * New translations strings.xml (Serbian (Cyrillic)) * New translations strings.xml (Russian) * New translations strings.xml (Dutch) * New translations strings.xml (Danish) * New translations strings.xml (Italian) * New translations strings.xml (Croatian) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Polish) * New translations strings.xml (Czech) * New translations strings.xml (Romanian) * New translations strings.xml (French) * New translations strings.xml (Spanish) * New translations strings.xml (Afrikaans) * New translations strings.xml (Arabic) * New translations strings.xml (Catalan) * New translations strings.xml (German) * New translations strings.xml (Portuguese) * New translations strings.xml (Greek) * New translations strings.xml (Finnish) * New translations strings.xml (Irish) * New translations strings.xml (Gujarati) * New translations strings.xml (Hebrew) * New translations strings.xml (Hungarian) * New translations strings.xml (Japanese) * New translations strings.xml (Georgian) * New translations strings.xml (Korean) * New translations strings.xml (Norwegian) * New translations strings.xml (Punjabi) * New translations strings.xml (Odia) * Update source file strings.xml * New translations strings.xml (Portuguese, Brazilian) --- app/src/main/res/values-af-rZA/strings.xml | 15 ++++++++------- app/src/main/res/values-ar-rSA/strings.xml | 15 ++++++++------- app/src/main/res/values-bn-rBD/strings.xml | 15 ++++++++------- app/src/main/res/values-ca-rES/strings.xml | 15 ++++++++------- app/src/main/res/values-cs-rCZ/strings.xml | 15 ++++++++------- app/src/main/res/values-da-rDK/strings.xml | 15 ++++++++------- app/src/main/res/values-de-rDE/strings.xml | 15 ++++++++------- app/src/main/res/values-el-rGR/strings.xml | 15 ++++++++------- app/src/main/res/values-eo-rUY/strings.xml | 15 ++++++++------- app/src/main/res/values-es-rES/strings.xml | 15 ++++++++------- app/src/main/res/values-et-rEE/strings.xml | 15 ++++++++------- app/src/main/res/values-fa-rIR/strings.xml | 15 ++++++++------- app/src/main/res/values-fi-rFI/strings.xml | 15 ++++++++------- app/src/main/res/values-fil-rPH/strings.xml | 15 ++++++++------- app/src/main/res/values-fr-rFR/strings.xml | 15 ++++++++------- app/src/main/res/values-ga-rIE/strings.xml | 15 ++++++++------- app/src/main/res/values-gu-rIN/strings.xml | 15 ++++++++------- app/src/main/res/values-haw-rUS/strings.xml | 15 ++++++++------- app/src/main/res/values-hi-rIN/strings.xml | 15 ++++++++------- app/src/main/res/values-hr-rHR/strings.xml | 15 ++++++++------- app/src/main/res/values-hu-rHU/strings.xml | 15 ++++++++------- app/src/main/res/values-in-rID/strings.xml | 15 ++++++++------- app/src/main/res/values-is-rIS/strings.xml | 15 ++++++++------- app/src/main/res/values-it-rIT/strings.xml | 15 ++++++++------- app/src/main/res/values-iw-rIL/strings.xml | 15 ++++++++------- app/src/main/res/values-ja-rJP/strings.xml | 15 ++++++++------- app/src/main/res/values-ka-rGE/strings.xml | 15 ++++++++------- app/src/main/res/values-kn-rIN/strings.xml | 15 ++++++++------- app/src/main/res/values-ko-rKR/strings.xml | 15 ++++++++------- app/src/main/res/values-la-rLA/strings.xml | 15 ++++++++------- app/src/main/res/values-lb-rLU/strings.xml | 15 ++++++++------- app/src/main/res/values-lv-rLV/strings.xml | 15 ++++++++------- app/src/main/res/values-ms-rMY/strings.xml | 15 ++++++++------- app/src/main/res/values-my-rMM/strings.xml | 15 ++++++++------- app/src/main/res/values-ne-rNP/strings.xml | 15 ++++++++------- app/src/main/res/values-nl-rNL/strings.xml | 15 ++++++++------- app/src/main/res/values-no-rNO/strings.xml | 15 ++++++++------- app/src/main/res/values-or-rIN/strings.xml | 15 ++++++++------- app/src/main/res/values-pa-rIN/strings.xml | 15 ++++++++------- app/src/main/res/values-pl-rPL/strings.xml | 15 ++++++++------- app/src/main/res/values-pt-rBR/strings.xml | 16 +++++++++------- app/src/main/res/values-pt-rPT/strings.xml | 15 ++++++++------- app/src/main/res/values-ro-rRO/strings.xml | 15 ++++++++------- app/src/main/res/values-ru-rRU/strings.xml | 15 ++++++++------- app/src/main/res/values-sk-rSK/strings.xml | 15 ++++++++------- app/src/main/res/values-sr-rSP/strings.xml | 15 ++++++++------- app/src/main/res/values-sv-rSE/strings.xml | 15 ++++++++------- app/src/main/res/values-ta-rIN/strings.xml | 15 ++++++++------- app/src/main/res/values-th-rTH/strings.xml | 15 ++++++++------- app/src/main/res/values-tr-rTR/strings.xml | 15 ++++++++------- app/src/main/res/values-uk-rUA/strings.xml | 15 ++++++++------- app/src/main/res/values-vi-rVN/strings.xml | 15 ++++++++------- app/src/main/res/values-vls-rBE/strings.xml | 15 ++++++++------- app/src/main/res/values-zh-rCN/strings.xml | 15 ++++++++------- app/src/main/res/values-zh-rTW/strings.xml | 15 ++++++++------- 55 files changed, 441 insertions(+), 385 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 962494747..7ac96b055 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -5,6 +5,7 @@ اللون الأساسي لون تمييز المظهر ، يتم تعيينه إلى اللون الأرجواني حول + إضافة إلى القائمة السوداء اضافة الى المفضلة إضافة الى قائمة التشغيل الحالية أضف إلى قائمة التشغيل @@ -311,6 +312,7 @@ تتغير ألوان أزرار الخلفية والتحكم وفقًا لصورة الألبوم من شاشة التشغيل الآن تلوين اختصارات التطبيق باللون الثانوي . في كل مرة تقوم فيها بتغيير اللون ، يرجى تفعيل هذا الخيار ليتم تطبيق التغييرات "تلوين الإشعارات في غلاف الألبوم\u2019لون نشط" + Duration to crossfade between songs حسب خطوط دليل تصميم المواد بالألوان في الوضع المظلم يجب أن لاتكون مشتته النقر على الإشعار سيظهر الآن مايتم تشغيله بدلاً من الشاشة الرئيسية لتطبيق اضافة المزيد من التحكم في المشغل المصغر @@ -321,12 +323,14 @@ تكوين وعرض وترتيب فئات المكتبة. استخدم شاشة القفل المخصصة من ريترو ميوزك لتحكم بالتشغيل الرخصة والتفاصيل للبرمجيات مفتوحة المصدر + Navigate to the last used tab on start عرض كلمات الأغاني المتزامنة عبر غلاف الألبوم إظهار خليط موسيقي جديد على الشاشة الرئيسية وضع الشاشة الكاملة تشغيل تلقائيا عند توصيل السماعة سوف يتم تعطيل وضع الخلط عند التشغيل من قائمة جديدة في حال توفر مساحة كافية قم بعرض شريط التحكم بالصوت في شاشة التشغيل الآن + Only show music from /Music Folder عرض غطاء الالبوم التنقل بواسطة ألبوم الفنان ثيم غطاء الالبوم @@ -341,6 +345,7 @@ تصميم التنبيهات الكلاسيكي اللون المتكيف التنبيهات الملونة + Crossfade (Beta) لون مفصّل إظهار شاشة التشغيل المزيد من أزرار التحكم @@ -355,6 +360,7 @@ ازار التحكم في كامل الشاشة ثيم التشغيل الان التراخيص مفتوحة المصدر + Remember Last Tab عرض الكلمات عرض الإقتراحات وضع عناوين التبويبات @@ -363,6 +369,7 @@ التشغيل التلقائي وضع الخلط التحكم بالصوت + Whitelist Music الكامل تشغيل الآن السمات ، وتأثير التكدس ، وموضوع اللون وأكثر من ذلك .. الملف الشخصي @@ -421,6 +428,7 @@ مشاركة التطبيق شارك التطبيق مع أصدقائك وأسرتك شارك في القصص + إظهار ألبوم الفنان خلط بسيط تم إلغاء مؤقت النوم. @@ -449,7 +457,6 @@ دعم التطوير اسخب للفتح مزامنة الكلمات - تيليجرام انضم لمجموعة التيليجرام لمناقشة المشاكل, و طرح اقتراحات والمزيد شكرا @@ -495,10 +502,4 @@ عليك اختيار فئة واحدة على الأقل. سيتم تحويلك الى صفحة سجل الاخطاء بيانات حسابك تستخدم لتوثيق فقط. - إظهار ألبوم الفنان - إضافة إلى القائمة السوداء - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index e89bcf1df..fa268cbfc 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -5,6 +5,7 @@ Barva akcentů Barva motivu akcentu je výchozí k růžové barvě. Informace + Add to Blacklist Přidat k oblíbeným Přidat do fronty Přidat do seznamu skladeb… @@ -304,6 +305,7 @@ Pozadí, barva ovládacích tlačítek se mění podle vzhledu alb z obrazovky přehrávače Vybarvit zkratky aplikací v barvě odstínu. Pokaždé, když změníte barvu, přepněte toto nastavení, aby se projevil efekt "Vybarv\u00ed ozn\u00e1men\u00ed v \u017eiv\u00e9 barv\u011b krytu alba." + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -314,12 +316,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Začít přehrávat ihned po připojení sluchátek Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Zobrazit obal alba Navigate by Album Artist Motiv obalu alba @@ -334,6 +338,7 @@ Klasický vzhled oznámení Adaptivní barva Barevné notifikace + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -348,6 +353,7 @@ Ovládání na celou obrazovku Vzhled Licence Open source + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -356,6 +362,7 @@ Automatické přehrávání Režim zamíchání Ovládání hlasitosti + Whitelist Music Pro Černý motiv, motivy stránky přehrávání, kolotočový efekt a další.. Profil @@ -414,6 +421,7 @@ Sdílet aplikaci Sdílejte aplikaci s přáteli a rodinou Sdílet do příběhu + Show Album Artists Náhodně Simple Časovač vypnutí byl zrušen. @@ -442,7 +450,6 @@ Podpora vývoje Odemkněte posunutím prstu Synchronizované texty - Telegram Připojte se ke skupině na Telegramu, abyste mohli diskutovat o chybách, předkládat návrhy, předvádět se a více Děkujeme! @@ -488,10 +495,4 @@ Musíte zvolit alespoň jednu kategorii. Budete přesměrováni na webovou stránku pro zadání problému. Vaše údaje k účtu jsou použity pouze k ověření. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 8623a4b37..ac3226c02 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -5,6 +5,7 @@ Akzentfarbe Akzentfarbe des Farbthemas, Standard ist Grün Über + Zur Blacklist hinzufügen Zu Favoriten hinzufügen Zur Wiedergabeliste hinzufügen Zur Playlist hinzufügen... @@ -300,6 +301,7 @@ Hintergrund und Bedienelemente färben sich je nach Album-Cover Färbt die App-Verknüpfungen in der Akzentfarbe. Bitte bei Änderung der Akzentfarbe erneut einschalten. "F\u00e4rbt die Benachrichtigung passend zum Albumcover" + Duration to crossfade between songs Wie nach Material Design Leitfaden sollten Linien in dunklen Modusfarben desaturatiert werden Wenn Sie auf die Benachrichtigung klicken, wird das \"Now Playing\" Bildschirms statt des Startbildschirms angezeigt Zusätzliche Schaltflächen für den Mini-Player @@ -310,12 +312,14 @@ Stelle Sichtbarkeit und Reihenfolge der Bibliothekkategorien ein. Vollständige Musiksteuerung auf dem Sperrbildschirm einschalten. Details zu den Lizensen der Open Source Software + Navigiere zum zuletzt verwendeten Tab beim Start Synchronisierte Songtexte über Albumcover anzeigen Neue Musik-Mix auf dem Startbildschirm anzeigen Schalte den immersiven Modus ein. Mit Wiedergabe starten, sobald Kopfhörer verbunden sind. Shufflemodus wird ausgeschaltet, sobald neue Wiedergabe gestartet wird Falls Platz vorhanden ist, Lautstärkeregler auf Derzeit gespielt-Bildschirm zeigen + Nur Musik aus /Music Ordner anzeigen Album Cover anzeigen Navigiere nach Album-Interpret Aussehen des Albumcovers @@ -330,6 +334,7 @@ Klassisches Design für Benachrichtigungen. selbstanpassende Farbe Gefärbte Benachrichtigung + Crossfade (Beta) Desaturatierte Farbe \"Now Playing\" Bildschirm anzeigen Zusätzliche Schaltflächen @@ -344,6 +349,7 @@ Vollbildschirmsteuerung Erscheinungsbild Open Source Lizenzen + Letzten Tab merken Lyrics anzeigen Vorschläge anzeigen Beschriftung der Navigationselemente @@ -352,6 +358,7 @@ Automatische Wiedergabe Shuffle-Modus Lautstärkeregler + Whitelist Musik Pro Themes für \"Now Playing\", Karussell-Effekte und mehr Profil @@ -410,6 +417,7 @@ App teilen Teile die App mit deinen Freunden und Verwandten In Stories teilen + Album-Interpreten anzeigen Zufall Einfach Sleep-Timer abgebrochen @@ -438,7 +446,6 @@ Entwickler unterstützen Wischen zum Entsperren Synchronisierter Songtext - Telegram Betritt die Telegram-Gruppe um über Fehler zu diskutieren, um Vorschläge zu geben usw. Vielen Dank! @@ -484,10 +491,4 @@ Du musst mindestens eine Kategorie auswählen Du wirst auf die Issue Tracker-Seite weitergeleitet. Deine Accountdaten werden ausschließlich zur Authentifizierung genutzt - Album-Interpreten anzeigen - Zur Blacklist hinzufügen - Letzten Tab merken - Navigiere zum zuletzt verwendeten Tab beim Start - Nur Musik aus /Music Ordner anzeigen - Whitelist Musik diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 0fa8b93cb..c745a44be 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -5,6 +5,7 @@ Χρώμα έμφασης Το χρώμα έμφασης του θέματος, η προεπιλογή είναι το μωβ Σχετικά με + Προσθήκη στην μαύρη λίστα Προσθήκη στα αγαπημένα Προσθήκη στην ουρά αναπαραγωγής Προσθήκη στη λίστα αναπαραγωγής @@ -300,6 +301,7 @@ Το φόντο και το κουμπί ελέγχου αλλάζουν σύμφωνα με το εξώφυλλο άλμπουμ Χρωματίζει τα app shortcuts με το επιλεγμένο χρώμα τονισμού. "\u03a7\u03c1\u03c9\u03bc\u03b1\u03c4\u03af\u03b6\u03b5\u03b9 \u03c4\u03b7\u03bd \u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03bc\u03b5 \u03c4\u03bf \u03b6\u03c9\u03bd\u03c4\u03b1\u03bd\u03cc \u03c7\u03c1\u03ce\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03b5\u03be\u03c9\u03c6\u03cd\u03bb\u03bb\u03bf\u03c5 \u03ac\u03bb\u03bc\u03c0\u03bf\u03c5\u03bc." + Duration to crossfade between songs Σύμφωνα με τις γραμμές οδηγών του Material Design τα χρώματα θα πρέπει να αποκορεσθούν σε σκοτεινή λειτουργία Κάνοντας κλικ στην ειδοποίηση θα εμφανίζεται η οθόνη αναπαραγωγής αντί της αρχικής οθόνης Προσθήκη επιπλέον ελέγχων για τον μίνι αναπαραγωγέα @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Ενεργοποίηση διακοπτών ρύθμισης στην οθόνη κλειδώματος. Λεπτομέρειες άδειας για τη χρήση open source λογισμικού + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Ενεργοποίηση της επιλογής για χρήση πλήρους οθόνης Όταν συνδεθούν ηχεία/ακουστικά , αρχίζει η αναπαραγωγή Shuffle mode will turn off when playing a new list of songs Εαν υπάρχει χώρος στην οθόνη αναπαραγωγής, ενεργοποιήστε τον πίνακα ελέγχου έντασης. + Only show music from /Music Folder Εμφάνιση εξωφύλλου άλμπουμ. Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Κλασσικό design ειδοποίησης Προσαρμοστικό Χρώμα Χρωματιστή ειδοποίηση + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Full screen Ρυθμίσεις Εμφάνιση Άδειες λογισμικού open source + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Αυτόματη αναπαραγωγή Τυχαία λειτουργία Πίνακας Ελέγχου Έντασης + Whitelist Music Pro Μαύρο θέμα, Θέματα στο Τώρα παίζει, εφέ Καρουσέλ και πολλά άλλα.. Προφίλ @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Τυχαία Αναπαραγωγή Απλό Χρονοδιακόπτης ύπνου ακυρώθηκε. @@ -438,7 +446,6 @@ Υποστήριξη ανάπτυξης της εφαρμογής Σύρετε για ξεκλείδωμα Συγχρονισμένοι στίχοι - Telegram Γίνετε μέλος της ομάδας Telegram για να συζητήσετε σφάλματα, να κάνετε προτάσεις, να επιδείξετε και άλλα Σας ευχαριστούμε! @@ -484,10 +491,4 @@ Πρέπει να επιλέξετε τουλάχιστον μία κατηγορία. Θα προωθηθείτε στον ιστότοπο παρακολούθησης ζητημάτων. Τα δεδομένα του λογαριασμού σας χρησιμοποιούνται μόνο για έλεγχο ταυτότητας. - Show Album Artists - Προσθήκη στην μαύρη λίστα - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-eo-rUY/strings.xml b/app/src/main/res/values-eo-rUY/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-eo-rUY/strings.xml +++ b/app/src/main/res/values-eo-rUY/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 973677141..3efa2b806 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -5,6 +5,7 @@ Color de énfasis El color de énfasis del tema, es morado por defecto Acerca de + Añadir a la Lista negra Añadir a favoritos Añadir a la cola de reproducción Añadir a la lista de reproducción @@ -300,6 +301,7 @@ El color del fondo y los botones de control cambian de acuerdo a la portada del álbum para la ventana de reproducción Colorea los accesos directos de la aplicación en el color de énfasis. Cada vez que cambie el color, activa esta opción para que surta efecto "Colorea la notificación con el color vibrante de la portada del álbum" + Duration to crossfade between songs Según las líneas de la guía Material Design en los colores del modo oscuro deben ser desaturados Al hacer clic en la notificación se mostrará la pantalla de reproducción en lugar de la pantalla de inicio Añadir controles extra al mini reproductor @@ -310,12 +312,14 @@ Configure la visibilidad y el orden de las categorías de la biblioteca. Usar los controles personalizados de Retro Music en la pantalla de bloqueo Detalles de licencia para software de código abierto + Navegar a la última pestaña usada al iniciar Mostrar Letras Sincronizadas sobre la Portada del Álbum Mostrar Mix de Música Nueva en la Pantalla de Inicio Modo inmersivo Comenzar a reproducir inmediatamente cuando se conecten audífonos El modo aleatorio se desactivará cuando se reproduzca una nueva lista de canciones Mostrar controles de volumen si hay suficiente espacio disponible + Mostrar solo música de la carpeta /Music Mostrar la portada del álbum Navegar por Artista del Álbum Tema de la portada del álbum @@ -330,6 +334,7 @@ Diseño de notificación clásico Color adaptable Notificación coloreada + Crossfade (Beta) Color desaturado Mostrar en pantalla de reproducción actual Controles extras @@ -344,6 +349,7 @@ Controles en pantalla completa Tema de la ventana de reproducción actual Licencias de código abierto + Recordar última pestaña Mostrar letras Mostrar Sugerencias Modo de los títulos de las pestañas @@ -352,6 +358,7 @@ Reproducir automáticamente Modo aleatorio Controles de volumen + Música de Lista Blanca Pro Tema Negro, temas para la ventana de reproducción actual, Efecto Carrusel y mucho más.. Perfil @@ -410,6 +417,7 @@ Compartir aplicación Comparte la aplicación con tus amigos y familia Compartir en Historias + Mostrar Artistas del Álbum Aleatorio Simple Temporizador cancelado. @@ -438,7 +446,6 @@ Apoya el desarrollo Deslizar para desbloquear Letras sincronizadas - Telegram Únete al grupo de Telegram para discutir los fallos, hacer sugerencias, presumir y más ¡Gracias! @@ -484,10 +491,4 @@ Tienes que seleccionar al menos una categoría. Serás redirigido al sitio web para reportar incidencias. Los datos de tu cuenta sólo se utilizan para la autenticación. - Mostrar Artistas del Álbum - Añadir a la Lista negra - Recordar última pestaña - Navegar a la última pestaña usada al iniciar - Mostrar solo música de la carpeta /Music - Música de Lista Blanca diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-et-rEE/strings.xml +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 39a25bc24..0b04ff011 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple درباره + Add to Blacklist Add to favorites Add to playing queue افزودن به لیست پخش @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 60f186132..9e40c1dcc 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -5,6 +5,7 @@ Couleur d\'accentuation La couleur d\'accentuation du thème, verte par défaut À propos + Add to Blacklist Ajouter aux favoris Ajouter à la file d\'attente Ajouter à la playlist @@ -300,6 +301,7 @@ La couleur du fond et des boutons de contrôles change en fonction de l\'image d\'album sur l\'écran de lecture en cours Les raccourcis rapides de l\'application prendront la couleur d\'accent. Chaque fois que vous changez de couleur, veuillez activer ceci afin que le changement soit pris en compte "Colorer la notification avec la couleur dominante des couvertures d'albums" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Ajouter des contrôles supplémentaires pour le mini lecteur @@ -310,12 +312,14 @@ Configurer la visibilité et l\'ordre des catégories de la librairie. Utiliser les contrôles personnalisés de Retro Music sur l\'écran de verrouillage Détails des licences pour les logiciels open source + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Mode immersif Commencer immédiatement la lecture lors du branchement d\'un casque Le mode aléatoire se désactivera lors de la lecture d\'une nouvelle liste de morceaux Si vous avez assez de place, affiche les contrôle du volume sur l\'écran de lecture + Only show music from /Music Folder Afficher la couverture de l\'album Navigate by Album Artist Thème de la couverture d\'album @@ -330,6 +334,7 @@ Design de notification classique Couleur adaptative Notification colorée + Crossfade (Beta) Desaturated color Show now playing screen Contrôles supplémentaires @@ -344,6 +349,7 @@ Contrôles plein-écran Thème d\'écran de lecture Licences open source + Remember Last Tab Show Lyrics Show Suggestions Mode Titres onglets @@ -352,6 +358,7 @@ Lecture automatique Mode aléatoire Contrôles de volume + Whitelist Music Pro Maintenant les thèmes de jeu, L\'effet de carrousel, thème de couleur et plus.. Profil @@ -410,6 +417,7 @@ Partager l\'app Share the app with your friends and family Share to Stories + Show Album Artists Aléatoire Simple Minuteur d\'extinction annulé. @@ -438,7 +446,6 @@ Aider le développement Glisser pour déverrouiller Paroles synchronisées - Telegram Rejoignez le groupe Telegram pour discuter des bugs, faire des suggestions, montrer votre configuration, etc. Merci ! @@ -484,10 +491,4 @@ Vous devez sélectionner au moins une catégorie. Vous allez être redirigé vers le site web de suivi des problèmes. Vos données de compte sont utilisées uniquement pour vous authentifier. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-ga-rIE/strings.xml b/app/src/main/res/values-ga-rIE/strings.xml index 9823dffd0..cb3ea9a6b 100644 --- a/app/src/main/res/values-ga-rIE/strings.xml +++ b/app/src/main/res/values-ga-rIE/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -306,6 +307,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -316,12 +318,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -336,6 +340,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -350,6 +355,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -358,6 +364,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -416,6 +423,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -444,7 +452,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -490,10 +497,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-gu-rIN/strings.xml b/app/src/main/res/values-gu-rIN/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-gu-rIN/strings.xml +++ b/app/src/main/res/values-gu-rIN/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-haw-rUS/strings.xml b/app/src/main/res/values-haw-rUS/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-haw-rUS/strings.xml +++ b/app/src/main/res/values-haw-rUS/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index f3aa4d329..61179fda7 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -5,6 +5,7 @@ एक्सेंट रंग The theme accent color, defaults to purple जानकारी + Add to Blacklist पसंदीदा में जोड़े Add to playing queue प्लेलिस्ट में जोड़ें @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists शफ़ल Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml index 9f8ee7285..aba7e513e 100644 --- a/app/src/main/res/values-hr-rHR/strings.xml +++ b/app/src/main/res/values-hr-rHR/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple Više informacija + Add to Blacklist Dodaj u favorite Dodaj u red čekanja Dodaj na popis @@ -302,6 +303,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -312,12 +314,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -332,6 +336,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -346,6 +351,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -354,6 +360,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -412,6 +419,7 @@ Podijeli aplikaciju Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -440,7 +448,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Hvala Vam! @@ -486,10 +493,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 39303da30..768354c10 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -5,6 +5,7 @@ Kiemelő szín Az kiemelő téma színe alapértelmezés szerint színtiszta Rólunk + Add to Blacklist Hozzáadás a kedvencekhez Hozzáadás a lejátszási sorhoz Hozzáadás lejátszási listához @@ -300,6 +301,7 @@ A háttér és a vezérlőgombok színe a most játszott képernyőn megjelenő albumborító szerint változik Színek az alkalmazás parancsikonjai az akcentus színében. Minden alkalommal, amikor megváltoztatta a színét, kérjük, kapcsolja be ezt a hatást "Sz\u00ednek az \u00e9rtes\u00edt\u00e9st az albumbor\u00edt\u00f3 \u00e9l\u00e9nk sz\u00edn\u00e9ben." + Duration to crossfade between songs Az Anyagtervezés szerint a sötét módban a színeket deszaturálni kell Az értesítésre kattintva a kezdőképernyő helyett a lejátszási képernyő jelenik meg Extra irányítás a mini lejátszóhoz @@ -310,12 +312,14 @@ A láthatóság és a könyvtári kategóriák sorrendjének beállítása. Retro zeneszámok zárolása a képernyőn. A nyílt forráskódú szoftverek licence részletei + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Kiterjesztett üzemmód Indítsa el a lejátszást, amikor a fejhallgató csatlakoztatva van. A véletlen sorrendű mód kikapcsol, ha új számlistát játszik le Ha van szabad hely a képernyőn engedélyezett hangerőszabályzókkal + Only show music from /Music Folder Az album borítójának megjelenítése Navigate by Album Artist Album borító téma @@ -330,6 +334,7 @@ Klasszikus értesítési terv Adaptív szín Színes értesítés + Crossfade (Beta) Deszaturált szín Jelenítse meg a most játszó képernyőt Extra vezérlők @@ -344,6 +349,7 @@ Teljes képernyős vezérlők Megjelenés Nyílt forráskódú licencek + Remember Last Tab Show Lyrics Show Suggestions Lap címek módja @@ -352,6 +358,7 @@ Automatikus lejátszás Kevert mód Hangerőszabályzók + Whitelist Music Pro Jelenleg témákat játszik, körhinta effektus és még sok más .. Profil @@ -410,6 +417,7 @@ Alkalmazás megosztása Share the app with your friends and family Ossza meg a Történet-ben + Show Album Artists Keverés Egyszerű Az elalváskapcsoló kikapcsolva. @@ -438,7 +446,6 @@ Támogatás fejlesztése Csúsztasd fel a feloldáshoz Szinkronizált dalszövegek - Telegram Csatlakozz a Telegram csoporthoz hogy megbeszélhesd a hibákat, ajánlásokat tegyél, bemutass valamit stb... Köszönöm! @@ -484,10 +491,4 @@ Legalább egy kategóriát kell kiválasztania Továbbítani fogjuk a problémakezelő weboldalra. Fiókja adatait kizárólag a hitelesítéshez fogjuk használni. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 6249797ba..657bd304a 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -298,6 +299,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -308,12 +310,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -328,6 +332,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -342,6 +347,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -350,6 +356,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -408,6 +415,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -436,7 +444,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -482,10 +489,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-is-rIS/strings.xml b/app/src/main/res/values-is-rIS/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-is-rIS/strings.xml +++ b/app/src/main/res/values-is-rIS/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index f67fd786e..a6fc86ad7 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -5,6 +5,7 @@ Colore in rilievo Il colore secondario del tema, il predefinito è verde Informazioni + Aggiungi alla blacklist Aggiungi ai preferiti Aggiungi alla coda Aggiungi alla playlist @@ -301,6 +302,7 @@ https://play.google.com/store/apps/details?id=%s Lo sfondo e il pulsante di riproduzione cambiano colore in base alla copertina dell\'album in riproduzione Colora le scorciatoie dell\'app con il colore in rilievo. Ogni volta che cambi colore attiva questo perché abbia effetto "Colora la notifica con il colore principale della copertina dell'album" + Duration to crossfade between songs Secondo le linee guida del Material Design, in modalità scura i colori devono essere desaturati Cliccando sulla notifica verrà visualizzata la schermata di riproduzione invece della homepage Aggiungi controlli extra nel mini player @@ -311,12 +313,14 @@ https://play.google.com/store/apps/details?id=%s Configura la visibilità e l\'ordine delle categorie Usa i comandi di Retro Music nella schermata di blocco Dettagli licenza per il software open source + All\'avvio apri l\'ultima scheda usata Mostra i testi sincronizzati sulla copertina dell\'album Mostra il nuovo mix musicale nella homepage Modalità immersiva Inizia la riproduzione subito dopo aver collegato le cuffie La modalità casuale viene disattivata quando si riproduce un nuovo elenco di brani Se c\'è spazio sufficiente, mostra i controlli del volume nella schermata in riproduzione + Mostra solo i brani dalla cartella /Music Mostra la copertina dell\'album Naviga per artista album Tema copertina dell\'album @@ -331,6 +335,7 @@ https://play.google.com/store/apps/details?id=%s Design classico per le notifiche Colore adattivo Notifica colorata + Crossfade (Beta) Colori desaturati Mostra la schermata riproduzione Controlli extra @@ -345,6 +350,7 @@ https://play.google.com/store/apps/details?id=%s Controlli a schermo intero Tema schermata riproduzione Licenze open source + Ricorda ultima scheda Mostra testi Mostra suggerimenti Modalità titoli schede @@ -353,6 +359,7 @@ https://play.google.com/store/apps/details?id=%s Riproduzione automatica Modalità casuale Controlli volume + Whitelist Pro Temi in riproduzione, effetto scorrimento e molto altro... Profilo @@ -411,6 +418,7 @@ https://play.google.com/store/apps/details?id=%s Condividi app Condividi l\'app con amici e familiari Condividi nelle Storie + Mostra artisti album Casuale Semplice Timer sonno cancellato. @@ -439,7 +447,6 @@ https://play.google.com/store/apps/details?id=%s Sostieni lo sviluppo Scorri per sbloccare Testi sincronizzati - Telegram Unisciti al gruppo Telegram per discutere dei bug, dare suggerimenti e molto altro Grazie! @@ -485,10 +492,4 @@ https://play.google.com/store/apps/details?id=%s Seleziona almeno una categoria. Verrai reindirizzato al sito web dei problemi. I dati del tuo account vengono utilizzati solo per l\'autenticazione. - Mostra artisti album - Aggiungi alla blacklist - Ricorda ultima scheda - All\'avvio apri l\'ultima scheda usata - Mostra solo i brani dalla cartella /Music - Whitelist diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 51bda2973..028519e6b 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -304,6 +305,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -314,12 +316,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -334,6 +338,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -348,6 +353,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -356,6 +362,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -414,6 +421,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -442,7 +450,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -488,10 +495,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 4337fb1e3..2f41facc7 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -5,6 +5,7 @@ アクセントカラー テーマのアクセントカラー、既定は青緑色です。 このアプリについて + Add to Blacklist お気に入りに追加 再生キューに追加 プレイリストに追加… @@ -299,6 +300,7 @@ ジャケットから抽出された色が背景と再生ボタンに適用されます アプリのショートカットアイコンをアクセントカラーに切り替えます。アクセントカラーを変更した場合はトグルを切り替えて設定を適用してください "\u30b8\u30e3\u30b1\u30c3\u30c8\u304b\u3089\u62bd\u51fa\u3055\u308c\u305f\u8272\u3067\u901a\u77e5\u3092\u7740\u8272\u3059\u308b" + Duration to crossfade between songs マテリアルデザインのガイドラインに従いダークモードで彩度の低い色を使用する 通知をタップすることでアプリのトップ画面ではなく、再生画面を表示するようにする ミニプレイヤー専用のコントロールボタンを追加する @@ -309,12 +311,14 @@ ライブラリに表示される項目と、順番を変更する Retro Musicのカスタムされたロック画面を使用する オープンソースライセンスの詳細 + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen アプリをフルスクリーン表示にする ヘッドフォンが接続されたら自動で再生を開始する 新しいリストの楽曲を再生する時にシャッフルは自動的にオフになります 再生画面に十分なスペースがある場合に音量コントロールを追加する + Only show music from /Music Folder アルバムジャケットを表示 アルバムのアーティストを表示 アルバムカバーのテーマ @@ -329,6 +333,7 @@ 古い通知デザイン アダプティブカラー 色付きの通知 + Crossfade (Beta) 彩度の低い色 通知から再生画面を開く 追加コントロール @@ -343,6 +348,7 @@ フルスクリーンコントロール 再生中のテーマ オープンソースライセンス + Remember Last Tab Show Lyrics Show Suggestions タブのラベル @@ -351,6 +357,7 @@ 自動再生 シャッフルモード ボリュームコントロール + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. プロフィール @@ -409,6 +416,7 @@ アプリを共有する Share the app with your friends and family Share to Stories + Show Album Artists シャッフル シンプル スリープタイマーがキャンセルされました @@ -437,7 +445,6 @@ 開発を支援 スワイプしてアンロック 連動した歌詞 - Telegram Telegram のグループに参加して、バグについて話し合ったり、提案したりしましょう ありがとう! @@ -483,10 +490,4 @@ You have to select at least one category. issue trackerのウェブサイトに移動します あなたのアカウントは認証にのみ使用されます - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-ka-rGE/strings.xml +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 4563d0957..807496cb3 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -5,6 +5,7 @@ 강조 색상 강조 색상을 지정합니다. 기본값은 녹색입니다. 정보 + Add to Blacklist 즐겨찾기에 추가 재생 대기열에 추가 재생목록에 추가... @@ -298,6 +299,7 @@ 배경과 조작 버튼의 색상을 재생 화면의 앨범 사진에 따라 바꿉니다. 강조 색상의 앱 바로 가기 색상을 지정합니다. 색깔을 바꿀 때마다 이 설정을 다시 켜주세요 "\uc568\ubc94 \uc544\ud2b8\ub85c\ubd80\ud130 \ucd94\ucd9c\ud55c \uc0c9\uc0c1\uc73c\ub85c \uc54c\ub9bc \uc0c9\uc0c1\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4." + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -308,12 +310,14 @@ Configure visibility and order of library categories. Retro music에서 제공하는 자체 잠금 화면 사용 오픈소스 소프트웨어의 상세 라이센스 정보 + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen 몰입 모드 이어폰이 연결되면 바로 음악을 재생합니다. Shuffle mode will turn off when playing a new list of songs 음악 재생 화면에서 공간이 있을 시 볼륨 컨트롤을 보입니다 + Only show music from /Music Folder 앨범 커버 표시 Navigate by Album Artist Album cover theme @@ -328,6 +332,7 @@ 클래식 알림 디자인 반응형 색상 지정 알림 색상 틴트 + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -342,6 +347,7 @@ 전체 화면 컨트롤 테마 오픈소스 라이선스 + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -350,6 +356,7 @@ 자동 재생 Shuffle mode 볼륨 조절 + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -408,6 +415,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists 무작위 재생 심플 수면 타이머가 취소되었습니다. @@ -436,7 +444,6 @@ 개발 지원 Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more 감사합니다! @@ -482,10 +489,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-la-rLA/strings.xml b/app/src/main/res/values-la-rLA/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-la-rLA/strings.xml +++ b/app/src/main/res/values-la-rLA/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-lb-rLU/strings.xml b/app/src/main/res/values-lb-rLU/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-lb-rLU/strings.xml +++ b/app/src/main/res/values-lb-rLU/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml index 9c5f6a7f9..1bcafb1f2 100644 --- a/app/src/main/res/values-lv-rLV/strings.xml +++ b/app/src/main/res/values-lv-rLV/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -302,6 +303,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -312,12 +314,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -332,6 +336,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -346,6 +351,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -354,6 +360,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -412,6 +419,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -440,7 +448,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -486,10 +493,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-ms-rMY/strings.xml b/app/src/main/res/values-ms-rMY/strings.xml index 6249797ba..657bd304a 100644 --- a/app/src/main/res/values-ms-rMY/strings.xml +++ b/app/src/main/res/values-ms-rMY/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -298,6 +299,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -308,12 +310,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -328,6 +332,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -342,6 +347,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -350,6 +356,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -408,6 +415,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -436,7 +444,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -482,10 +489,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index 358b7da3c..7bb770de5 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -5,6 +5,7 @@ Accent Color The theme accent color (ခရမ်းရောင်သည်မူလအရောင်) About + Add to Blacklist အကြိုက်ဆုံးသို့ထည့်မည် နားထောင်နေသည့်စာရင်းထဲသို့ထည့်မည် Playlist သို့ထည့်မည် @@ -298,6 +299,7 @@ နောက်ခံအရောင်နှင့်ထိန်းချုပ်ခလုတ်အရောင်များသည် Now Playing screen မှ Album cover အရောင်အတိုင်း ပြောင်းလဲပါမည် Accent color မှ App shortcuts များကိုအရောင်ပြောင်းလဲသည်။ Accent color ပြောင်းသည့်အခါတိုင်း App ကိုသက်ရောက်မှုရှိစေရန် ဤခလုတ်ကိုအဖွင့်၊အပိတ်လုပ်ပေးပါ။ "Notification အရောင်ကို Album cover မှထင်ရှားသည့်အရောင်အတိုင်း ပြောင်းမည်" + Duration to crossfade between songs Material ဒီဇိုင်းညွှန်ကြားချက်များအရ Dark Mode ဖွင့်ထားချိန်တွင်အရောင်များမှိန်နေသင့်သည် Notification ကိုနှိပ်သည့်အခါ Home screen သို့ရောက်မည့်အစား Now Playing screen သို့တိုက်ရိုက်ရောက်သွားမည် Mini player တွင် ထိန်းချုပ်ခလုတ်အပိုများထပ်ပေါင်းမည် @@ -308,12 +310,14 @@ Library category များ ဖော်ခြင်း၊ ဖျောက်ခြင်းနှင့် အထားအသိုများ ချိန်ညှိမည် Retro Music ၏ ပြင်ဆင်ထားသော Lockscreen controls များကိုသုံးမည် Open Source software အတွက် လိုင်စင်အချက်အလက်များ + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode နားကြပ်နှင့်ချိတ်ဆက်ပြီးသည့်နှင့် စတင် play မည် သီချင်းဖွင့်မည့်စာရင်း\'အသစ်\'ကို play သည့်အခါ Shuffle Mode ပိတ်သွားပါမည် နေရာလုံလုံလောက်လောက်ရှိပါက Now Playing screen တွင် အသံအတိုးအကျယ်ခလုတ်များပြသမည် + Only show music from /Music Folder Album cover ပြသခြင်း Album သီဆိုသူဖြင့် ရှာဖွေခြင်း Album cover theme @@ -328,6 +332,7 @@ Notification ဒီဇိုင်းအဟောင်း Adaptive color အရောင်ပါသော notification + Crossfade (Beta) Desaturated color Now Playing screen ပြသခြင်း အပိုထိန်းချုပ်မှုများ @@ -342,6 +347,7 @@ Lockscreen အပြည့် controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab ခေါင်းစဉ်ပြသခြင်း @@ -350,6 +356,7 @@ အလိုအလျောက် play ခြင်း Shuffle mode အသံထိန်းချုပ်မှု + Whitelist Music Pro Black theme ၊ Now playing themes နှင့် Carousel effect စသည်များ... Profile @@ -408,6 +415,7 @@ App ကိုမျှဝေမည် သင့်မိသားစုနှင့် သူငယ်ချင်းများကိုပြန်လည်မျှဝေလိုက်ပါ Stories သို့မျှဝေမည် + Show Album Artists Shuffle ရိုးရိုးရှင်းရှင်း Sleep timer ကိုဖျက်ပြီးပါပြီ @@ -436,7 +444,6 @@ Support development Swipe to unlock ချိန်ကိုက်ထားသောသီချင်းစာသား - Telegram Bugs များကို ဆွေးနွေးရန်၊ အကြံပြုချက်များပေးရန်၊ ကြွားရန်နှင့် စသည်များ... ကျေးဇူးတင်ပါတယ် @@ -482,10 +489,4 @@ အနည်းဆုံး category တစ်ခုရွေးချယ်ရန်လိုအပ်သည် Issue tracker website သို့ခေါ်ဆောင်သွားပါမည် သင့်အကောင့်အချက်အလက်ကို အတည်ပြုရန်အတွက်သာအသုံးပြုပါသည်။ - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-ne-rNP/strings.xml +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index f3754aee9..3d211fbaa 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -5,6 +5,7 @@ Accent kleur De accent kleur, standaard naar groen Over + Add to Blacklist Toevoegen aan favorieten Voeg toe aan afspeel wachtrij Voeg toe aan afspeellijst... @@ -300,6 +301,7 @@ Achtergrond, de kleur van de besturingstoetsen verandert overeenstemmend met de album opmaak van het afspeelscherm Kleurt de app snelkoppelingen naar de accent kleur. Elker keer wanneer je de kleur verandert, toggle dit om de changes te zien "Kleurt de notificatie in de kleur van de album cover" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Zet besturing knoppen aan op vergrendelscherm Licentie details voor open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Zet dit aan voor immersive mode Wanneer headphones ingeplugd zijn, afspelen start automatisch Shuffle mode will turn off when playing a new list of songs Als er ruimte is in het nu afspelen scherm, zet volume knoppen aan + Only show music from /Music Folder Laat album cover zien Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Klassiek notificatie design Aangepaste kleur Gekleurde notificatie + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Volledig scherm besturing knoppen Uiterlijk Open source licenties + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Automatisch afspelen Shufflemodus Volume knoppen + Whitelist Music Pro Donker thema, \"speelt nu\" thema\'s, Carrousel-effect en nog veel meer.. Profiel @@ -410,6 +417,7 @@ App delen Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simpel Slaap timer geannuleerd @@ -438,7 +446,6 @@ Ondersteun ontwikkelaars Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Bedankt! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-or-rIN/strings.xml b/app/src/main/res/values-or-rIN/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-or-rIN/strings.xml +++ b/app/src/main/res/values-or-rIN/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index e82fcb614..32bdce3d3 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -5,6 +5,7 @@ Kolor wiodący Kolor wiodący motywu, domyślnie morski O aplikacji + Dodaj do czarnej listy Dodaj do ulubionych Dodaj do kolejki Dodaj do playlisty @@ -304,6 +305,7 @@ Tło oraz kolory przycisków sterujących będą zmieniać się zgodnie z okładką albumu na ekranie odtwarzacza Koloruje skróty aplikacji w kolorze wiodącym. Za każdym razem, gdy zmieniasz kolor, włącz tę opcję, aby zmiany odniosły skutek. "Koloruje powiadomienie dominującym kolorem okładki albumu." + Duration to crossfade between songs Podążaj za zaleceniami Material Design; w trybie ciemnym kolory powinny być mniej nasycone Kliknięcie powiadomienia pokaże odtwarzacz zamiast ekranu głównego Dodaj dodatkowe przyciski do miniodtwarzacza @@ -314,12 +316,14 @@ Dostosuj widoczność i kolejność kategorii bibliotek. Użyj niestandardowych przycisków kontroli na ekranie blokady Szczegóły licencji oprogramowania typu open source + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Tryb imersji Rozpocznij odtwarzanie po podłączeniu zestawu słuchawkowego Odtwarzanie losowe zostanie wyłączone podczas odtwarzania nowej listy utworów Pokaż sterowanie głośnością w odtwarzaczu, gdy jest wystarczająco wolnego miejsca + Only show music from /Music Folder Pokaż okładkę albumu Navigate by Album Artist Wygląd okładki albumu @@ -334,6 +338,7 @@ Klasyczny wygląd powiadomień Kolor adaptacyjny Kolorowe powiadomienia + Crossfade (Beta) Mniej nasycony kolor Wyświetl teraz odtwarzane Dodatkowe przyciski kontroli @@ -348,6 +353,7 @@ Sterowanie pełnoekranowe Wyglądodtwarzacza Licencje typu Open Source + Remember Last Tab Show Lyrics Show Suggestions Wygląd tytułów kart @@ -356,6 +362,7 @@ Autoodtwarzanie Tryb losowy Sterowanie głośnością + Whitelist Music Pro Efekt karuzeli, tryb czarny i wiele więcej... Profil @@ -414,6 +421,7 @@ Udostępnij aplikację Share the app with your friends and family Udostępnik jako Stories + Pokaż wykonawców albumu Losowo Prosty Wyłącznik czasowy wyłączony. @@ -442,7 +450,6 @@ Wspieraj rozwój Przesuń, aby odblokować Synchronizowany tekst utworu - Telegram Dołącz do grupy Telegram, aby zgłosić błędy lub zasugerować zmiany Dziękuję! @@ -488,10 +495,4 @@ Zaznacz przynajmniej jedną kategorię Zostaniesz przekierowany do strony ze zgłoszeniami. Informacje o twoim koncie są używane tylko do autoryzacji. - Pokaż wykonawców albumu - Dodaj do czarnej listy - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index fba97a531..1e8ac09ae 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -5,6 +5,7 @@ Cor de destaque A cor de destaque do tema, o padrão é verde Sobre + Adicionar à lista negra Adicionar aos favoritos Adicionar à lista de reprodução Adicionar à lista @@ -300,6 +301,7 @@ As cores de fundo e do botão de controle mudam de acordo com a capa do álbum a partir da tela que está sendo reproduzida Colore os atalhos do aplicativo na cor de destaque. Toda vez que você mudar a cor alterne essa opção para ter efeito "Colore a notifica\u00e7\u00e3o na cor vibrante da capa do \u00e1lbum" + Duration to crossfade between songs Conforme o guia do Material Design as cores devem ser dessaturadas no modo escuro Clicando na notificação mostrará a tela inicial em vez da tela inicial Adicionar botões extras para o mini reprodutor @@ -310,12 +312,14 @@ Configurar visibilidade e ordem de categorias da biblioteca. Usar controles personalizados do Retro Music na tela de bloqueio Detalhes da licença para software de código aberto + Navigate to the last used tab on start Mostrar letras sincronizadas sobre a capa do álbum Mostrar novo Mix na tela inicial Modo imersivo Comecar a reproduzir imediatamente quando os fones de ouvido forem conectados O modo aleatório será desativado ao reproduzir uma nova lista de músicas Se houver espaço suficiente, mostre os controles de volume na tela que está sendo reproduzida + Only show music from /Music Folder Exibir a capa do álbum Navegar pelo artista do álbum Tema da capa do álbum @@ -330,6 +334,8 @@ Design de notificação clássico Cor adaptável Notificações coloridas + Transição (Beta) +Description: Duração de transição entre músicas Cor dessaturada Mostrar tela de reprodução Controles extras @@ -344,6 +350,7 @@ Controles em tela cheia Tema da tela \"Reproduzindo agora\" Licenças de código aberto + Remember Last Tab Mostrar letras Exibir Sugestões Modo de títulos nas abas @@ -352,6 +359,7 @@ Execuções automática Modo aleatório Controles do volume + Whitelist Music Pro Temas do reproduzindo agora, Efeito carrossel, Tema de cor e mais... Perfil @@ -410,6 +418,7 @@ Compartilhar o aplicativo Compartilhe-os com amigos e familiares Compartilhe no Stories + Mostrar artistas do álbum Aleatório Simples Temporizador cancelado @@ -438,7 +447,6 @@ Apoiar o desenvolvimento Deslize para desbloquear Letras sincronizadas - Telegram Junte-se ao grupo no Telegram para discutir bugs, fazer sugestões e muito mais Obrigado! @@ -484,10 +492,4 @@ Você precisa selecionar ao menos uma categoria. Você será encaminhado para o website do rastreador de problemas. Os dados da sua conta são usados ​​apenas para autenticação. - Mostrar artistas do álbum - Adicionar à lista negra - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 97f15657d..d5054aeb5 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -5,6 +5,7 @@ Culoare ton Culoarea de accent, implicit, se face verde. Despre + Add to Blacklist Adaugă la favorite Adaugă la coada de redare Adaugă la un playlist @@ -302,6 +303,7 @@ Culoarea fundalului și a butonului de control se schimbă în dependență de coperta albumului din ecranul de redare Colorează comenzile rapide în culoarea de accent. De fiecare dată cînd schimbați culoarea, comutați această opțiune pentru effect "Coloreaz\u0103 notificarea dup\u0103 culoarea copertei de album." + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -312,12 +314,14 @@ Configure visibility and order of library categories. Comenzi pe ecranul de blocare pentru Retro music. Detalii privind licența pentru software open source + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Mod imersiv Începe redarea imediat ce sunt conectate căștile. Shuffle mode will turn off when playing a new list of songs Dacă aveți spațiu pe ecranul de redare, activați controalele de volum + Only show music from /Music Folder Afișați coperta albumului Navigate by Album Artist Album cover theme @@ -332,6 +336,7 @@ Design classic de notificare Culoare adaptivă Notificare colorată + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -346,6 +351,7 @@ Comenzi ecran complet Aspect Licențe open source + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -354,6 +360,7 @@ Redare automată Shuffle mode Controale volum + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -412,6 +419,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Amestecare Simplu Temporizatorul a fost anulat. @@ -440,7 +448,6 @@ Susţineţi dezvoltarea Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Mulțumesc! @@ -486,10 +493,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 6c90efd02..f354420ac 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -5,6 +5,7 @@ Основной цвет Основной цвет, по умолчанию фиолетовый О программe + Добавить в чёрный список Добавить в избранное Добавить в очередь воспроизведения Добавить в плейлист @@ -304,6 +305,7 @@ Цвет кнопок фона и кнопок управления изменяется в соответствии с обложкой альбома с экрана воспроизведения Окрашивает ярлыки в основной цвет. Каждый раз, когда вы меняете цвет, вкл-выкл эту настройку, чтобы изменение вступило в силу "Окрашивает уведомление в доминирубщий цвет обложки альбома" + Duration to crossfade between songs Согласно Material Design в темном режиме цвета должны быть немного обесцвечены Нажатие на уведомление будет показывать экран воспроизведения вместо домашнего экрана Добавить дополнительные элементы управления для мини-плеера @@ -314,12 +316,14 @@ Настроить вид и порядок категорий в библиотеке. Используйте собственный экран блокировки Retro Music Сведения о лицензии для программного обеспечения с открытым исходным кодом + Navigate to the last used tab on start Показывать синхронизированный текст песни поверх обложки альбома Показывать миксы новый музыки на главном экране Полноэкранный режим Начать воспроизведение музыки сразу после подключения наушников Режим перемешивания выключится при проигрывании нового списка песен Если доступно достаточно места, показывать регулировку громкости на экране воспроизведения + Only show music from /Music Folder Показать обложку альбома Показывать обложку альбома в разделе исполнители Тема обложки альбома @@ -334,6 +338,7 @@ Классический дизайн уведомлений Адаптированный цвет Цветное уведомление + Crossfade (Beta) Немного обесцвеченный цвет Показать экран воспроизведения Дополнительные элементы управления @@ -348,6 +353,7 @@ Полноэкранное управление Тема экрана воспроизведения Лицензии с открытым кодом + Remember Last Tab Показать текст песни Показывать советы Название нижних кнопок @@ -356,6 +362,7 @@ Автовоспроизведение Режим перемешивания Регулировка громкости + Whitelist Music Pro Черная тема, Темы экрана воспроизведения, Эффект карусели и многое другое.. Профиль @@ -414,6 +421,7 @@ Поделиться приложением Поделитесь приложением со своими друзьями и родственниками Поделиться в Историях + Показать исполнителей альбома Перемешать Простая Таймер отключения отменен. @@ -442,7 +450,6 @@ Поддержать разработку Проведите, чтобы разблокировать Синхронизируемый текст - Telegram Присоединяйтесь к группе Telegram, чтобы обсуждать ошибки, предлагать улучшения, хвастаться и т.д. Спасибо ! @@ -488,10 +495,4 @@ Выберите хотя бы одну категорию. Вы будете перенаправлены на сайт системы отслеживания ошибок. Данные вашей учетной записи используются только для аутентификации. - Показать исполнителей альбома - Добавить в чёрный список - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 570fa7171..5edfe7efe 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -304,6 +305,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -314,12 +316,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -334,6 +338,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -348,6 +353,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -356,6 +362,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -414,6 +421,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -442,7 +450,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -488,10 +495,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index d10605c53..574e312c1 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -5,6 +5,7 @@ Boja detalja Boja plejera, uobičajena je zelena O programerima + Add to Blacklist Dodaj u omiljene Dodaj u listu za pustanje Dodaj na plejlistu @@ -302,6 +303,7 @@ Pozadina i pusti/pauziraj dugme menjaju boju u zavisnosti od boje omota albuma Oboj precice aplikacije u akcentovanu boju. Svaki puta kada promenis boju molim te omoguci ovo opet kako bi imalo efekta "Oboj obavestenja u boju omota albuma" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -312,12 +314,14 @@ Configure visibility and order of library categories. Prikazuj kontrole na zakljucanom ekranu Detalji o licencama za softver otvorenog izvora + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Omoguci ovo za impresivan mod. Kada se prikljuce slusalice automatki pusti pesme Shuffle mode will turn off when playing a new list of songs Ukoliko imas prostora na ekranu za pustanje omoguci kontroler jacine zvuka. + Only show music from /Music Folder Prikazi omot albuma Navigate by Album Artist Album cover theme @@ -332,6 +336,7 @@ Klasican stil obavestenja Prilagodive boje Obojena obavestenja + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -346,6 +351,7 @@ Kontrole preko celog ekrana Izgled Otvoren izvor licenca + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -354,6 +360,7 @@ Automatsko reprodukovanje Shuffle mode Kontroler jacine zvuka + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -412,6 +419,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Nasumicno pusti Jednostavan Tajmer za iskljucivanje je otkazan @@ -440,7 +448,6 @@ Podrzi programera Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Hvala! @@ -486,10 +493,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 9a720c58b..4c69d1831 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -5,6 +5,7 @@ Accentfärg Temats accentfärg, standard är lila Om + Add to Blacklist Lägg till i favoriter Lägg till i spelkön Lägg till i spellista @@ -300,6 +301,7 @@ Bakgrunds- och kontrollknapparnas färger ändras enligt albumomslaget från spelarskärmen Färgar appens genvägar i accentfärgen. Se till att aktivera detta varje gång du ändrar färg, för att ändringen ska träda i kraft "Färgar notisen i albumomslagets framträdande färg" + Duration to crossfade between songs I enlighet med riktlinjer för Material Design ska färger desatureras i mörkt läge När du klickar på notisen visas spelarskärmen istället för hemskärmen Lägg till extra kontroller för minispelaren @@ -310,12 +312,14 @@ Konfigurera synlighet och ordning för bibliotekskategorier. Använd Retro Music:s anpassade låsskärmskontroller Licensinformation för programvara med öppen källkod + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Uppslukande läge Börja spela direkt då hörlurar ansluts Shuffleläget stängs av när du spelar en ny lista med låtar Visa volymkontroller på spelarskärmen, om det finns tillräckligt med utrymme + Only show music from /Music Folder Visa albumomslag Navigate by Album Artist Tema för albumomslag @@ -330,6 +334,7 @@ Klassisk notisssdesign Adaptiv färg Färgad notis + Crossfade (Beta) Desaturerad färg Öppna spelaren Extra kontroller @@ -344,6 +349,7 @@ Helskärmskontroller Spelartema Licenser för öppen källkod + Remember Last Tab Show Lyrics Show Suggestions Fliktitlar @@ -352,6 +358,7 @@ Auto-play Shuffleläge Volymkontroller + Whitelist Music Pro Helt svart tema, spelarteman, karuselleffekt med mera… Profil @@ -410,6 +417,7 @@ Dela app Share the app with your friends and family Dela till Stories + Show Album Artists Shuffle Enkel Sömntimer inaktiverad. @@ -438,7 +446,6 @@ Stöd utvecklingen Svep för att låsa upp Synkad låttext - Telegram Gå med i Telegram-gruppen för att diskutera buggar, lämna förslag, briljera och mycket annat Tack! @@ -484,10 +491,4 @@ Du måste välja minst en kategori. You will be forwarded to the issue tracker website. Dina kontodata används endast för verifiering. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index 6d301b92b..a45ec653d 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -5,6 +5,7 @@ பொத்தான் நிறம் பொத்தான்_நிறம்_பற்றி எங்களை பற்றி + Add to Blacklist பிடித்தவையில் சேமி பாடல் வரிசையில் சேர் பாடல் வரிசையில் சேர் @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index 6249797ba..657bd304a 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -298,6 +299,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -308,12 +310,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -328,6 +332,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -342,6 +347,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -350,6 +356,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -408,6 +415,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -436,7 +444,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -482,10 +489,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 0d7b8302b..4088c2c9e 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -5,6 +5,7 @@ Vurgu rengi Tema vurgu rengi, varsayılan olarak mor renktedir Hakkında + Add to Blacklist Favorilere ekle Oynatma kuyruğuna ekle Oynatma listesine ekle @@ -300,6 +301,7 @@ Arka plan ve kontrol düğmesinin renkleri, çalmakta olan ekranda albüm resmine göre değişir Vurgu rengindeki uygulama kısayollarını renklendirir. Lütfen rengi her değiştirdiğinizde, etkili olması için bu düğmeyi değiştirin. "Alb\u00fcm kapa\u011f\u0131n\u0131n canl\u0131 rengindeki bildirimi renklendirir" + Duration to crossfade between songs Karanlık modda malzeme tasarım kurallarına göre renkler doymamış olmalıdır Bildirime tıklamak ana ekran yerine şimdi oynatılıyor ekranını gösterecek Mini oynatıcı için ekstra kontroller ekle @@ -310,12 +312,14 @@ Kütüphane kategorilerinin görünürlük ve sırasını yapılandırın Retro Müzik\'in özel kilit ekranı kontrollerini kullanın Açık kaynaklı yazılım için lisans detayları + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Sürükleyici modu Kulaklık bağlandıktan hemen sonra çalmaya başla Yeni bir şarkı listesi çalınırken karıştırma modu kapanacak Eğer yeterli alan varsa ses kontrollerini şimdi oynatılıyor ekranında göster + Only show music from /Music Folder Albüm kapağını göster Navigate by Album Artist Albüm kapağı teması @@ -330,6 +334,7 @@ Klasik bildirim tasarımı Adaptif renk Renkli bildirim + Crossfade (Beta) Doymamış renk Şimdi oynatılıyor ekranını göster Ekstra kontroller @@ -344,6 +349,7 @@ Tam ekran kontrolleri Şimdi oynatılıyor teması Açık kaynak lisansları + Remember Last Tab Show Lyrics Show Suggestions Sekme başlıkları modu @@ -352,6 +358,7 @@ Otomatik oynatma Karıştır modu Ses kontrolleri + Whitelist Music Pro Şimdi Oynatılıyor temaları, Atlıkarınca efekti, Renkli tema ve daha fazlası.. Profil @@ -410,6 +417,7 @@ Uygulamayı paylaş Share the app with your friends and family Hikayende paylaş + Show Album Artists Karıştır Basit Uyku zamanlayıcısı iptal edildi. @@ -438,7 +446,6 @@ Destek geliştirme Açmak için kaydırın Senkronize şarkı sözleri - Telegram Hataları tartışmak, önerilerde bulunmak ve daha fazlası için Telegram grubuna katılın Teşekkür ederiz! @@ -484,10 +491,4 @@ En az bir kategori seçmek zorundasınız. Sorun izleyici web sitesine yönlendirileceksiniz. Hesap verileriniz sadece kimlik doğrulama için kullanılır. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index e6aa65d93..d5fc35716 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -5,6 +5,7 @@ Акцентний колір Акцентний колір, за замовчуванням фіолетовий Про додаток + Add to Blacklist Додати в обране Додати до черги відтворення Додати до списку відтворення @@ -304,6 +305,7 @@ Тло і кольори кнопок керування міняються в залежності від обкладинки екрана відтворення Фарбує ярлики додатків у колір акценту. Кожного разу, коли ви змінюєте колір, будь ласка, перемкніть його, щоб зміни вступили в силу "Фарбує повідомлення в обкладинці альбому яскравим кольором" + Duration to crossfade between songs Для Material Design лінії в темному режимі мають бути ненасичені При натисканні на сповіщення буде показано екран відтворення замість домашнього екрану Додати додаткові елементи керування до міні-програвача @@ -314,12 +316,14 @@ Налаштувати видимість та порядок категорій бібліотеки. Використовувати керування музикою на екрані блокування від Retro Music Деталі ліцензії для програмного забезпечення з відкритим кодом + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Режим занурення Почати відтворення відразу після підключення навушників Випадковий режим вимкнеться при відтворенні нового списку пісень Якщо вистачає місця, показувати панель гучності на екрані відтворення + Only show music from /Music Folder Показати обкладинку альбому Navigate by Album Artist Тема обкладинки альбому @@ -334,6 +338,7 @@ Класичне оформлення сповіщень Адаптивний колір Кольорове сповіщення + Crossfade (Beta) Ненасичений колір Показувати на екрані відтворення Додаткові елементи керування @@ -348,6 +353,7 @@ Повноекранне керування Тема відтворення Ліцензії з відкритим кодом + Remember Last Tab Show Lyrics Show Suggestions Режим назв вкладок @@ -356,6 +362,7 @@ Автоматичне відтворення Режим перемішування Регулювання гучності + Whitelist Music Pro Чорна тема, теми відтворення, ефект каруселі та інше.. Профіль @@ -414,6 +421,7 @@ Поділитися додатком Share the app with your friends and family Поділитися в Історії + Show Album Artists Перемішати Простий Таймер сну скасовано. @@ -442,7 +450,6 @@ Підтримати розробку Свайпніть, щоб розблокувати Синхронізовані тексти - Telegram Приєднуйтесь до групи Telegram щоб обговорити помилки, робити пропозиції та інше Щиро дякую! @@ -488,10 +495,4 @@ Виберіть принаймні одну категорію. Вас буде перенаправлено на сайт відстеження проблем. Дані вашого облікового запису використовуються лише для автентифікації. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index ee8afc240..74d4ce95f 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -5,6 +5,7 @@ Màu sắc chủ đạo Màu sắc chủ đạo của chủ đề, mặc định là màu tía Về chúng tôi + Thêm vào danh sách đen Thêm vào yêu thích Thêm vào danh sách chờ phát Thêm vào danh sách phát @@ -299,6 +300,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Màu nền và các nút điều khiển sẽ thay đổi theo màu sắc ảnh bìa album từ màn hình phát Màu sắc trong lối tắt ứng dụng dùng màu sắc chủ đạo. Mỗi khi bạn thay đổi màu chủ đạo, hãy bật/tắt lại công tắc này để thay đổi có hiệu lực "M\u00e0u s\u1eafc th\u00f4ng b\u00e1o thay \u0111\u1ed5i theo m\u00e0u s\u1eafc chi ph\u1ed1i \u1ea3nh b\u00eca album" + Duration to crossfade between songs Để phù hợp với Thiết kế Material, màu sắc sẽ được điều chỉnh để tương thích với chế độ tối Nhấn vào thông báo sẽ hiển thị màn hình phát nhạc thay vì màn hình chính Thêm điều khiển bổ sung cho trình phát mini @@ -309,12 +311,14 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Khả năng hiển thị và thứ tự của các danh mục trong thư viện. Sử dụng các điều khiển màn hình khóa tùy chỉnh của Retro Music Chi tiết giấy phép của phần mềm mã nguồn mở + Điều hướng đến tab được sử dụng gần nhất lúc bắt đầu Hiển thị Lời Đồng bộ trên bìa Album Hiển thị Danh sách nhạc kết hợp mới trên Màn hình chính Chế độ hoà nhập Tự động phát nhạc khi kết nối tai nghe Chế độ phát ngẫu nhiên sẽ tắt khi phát danh sách bài hát mới Hiện thanh điều chỉnh âm lượng nếu có không gian trống trong màn hình phát + Chỉ hiện thị nhạc từ /Thư mục Nhạc Hiện ảnh bìa album Điều hướng theo Album Nghệ sĩ Chủ đề bìa album @@ -329,6 +333,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Thiết kế thông báo cổ điển Màu sắc thích nghi Đổi màu thông báo + Crossfade (Beta) Màu sắc tương thích Hiển thị màn hình phát nhạc Điều khiển bổ sung @@ -343,6 +348,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Điều khiển toàn màn hình. Giao diện màn hình phát Giấy phép nguồn mở + Ghi nhớ tab cuối cùng Hiển thị lời Hiển thị đề xuất Chế độ tiêu đề thẻ @@ -351,6 +357,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Tự động phát Chế độ ngẫu nhiên Điều khiển âm lượng + Danh sách trắng Pro Chủ đề đen, Chủ đề màn hình phát, Hiệu ứng băng chuyền, v.v. Hồ sơ @@ -409,6 +416,7 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Chia sẽ ứng dụng Chia sẻ ứng dụng với bạn bè và gia đình của bạn Chia sẻ đến Các story + Hiển thị Album Nghệ sĩ Ngẫu nhiên Đơn giản Đã huỷ hẹn giờ ngừng phát. @@ -437,7 +445,6 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Hỗ trợ nhà phát triển Trượt để mở khóa Lời Đồng bộ - Telegram Tham gia nhóm Telegram để thảo luận về lỗi, đưa ra đề xuất, và hơn thế nữa Cảm ơn bạn! @@ -483,10 +490,4 @@ tiếp tục xảy ra hãy \"Xóa dữ liệu ứng dụng\" Bạn phải chọn ít nhất một danh mục. Bạn sẽ được chuyển tiếp đến trang web theo dõi vấn đề. Dữ liệu tài khoản của bạn chỉ được sử dụng để xác thực. - Hiển thị Album Nghệ sĩ - Thêm vào danh sách đen - Ghi nhớ tab cuối cùng - Điều hướng đến tab được sử dụng gần nhất lúc bắt đầu - Chỉ hiện thị nhạc từ /Thư mục Nhạc - Danh sách trắng diff --git a/app/src/main/res/values-vls-rBE/strings.xml b/app/src/main/res/values-vls-rBE/strings.xml index 4eab06753..1e8b29e0a 100644 --- a/app/src/main/res/values-vls-rBE/strings.xml +++ b/app/src/main/res/values-vls-rBE/strings.xml @@ -5,6 +5,7 @@ Accent color The theme accent color, defaults to purple About + Add to Blacklist Add to favorites Add to playing queue Add to playlist @@ -300,6 +301,7 @@ The background and control button colors change according to the album art from the now playing screen Colors the app shortcuts in the accent color. Every time you change the color please toggle this to take effect "Colors the notification in the album cover\u2019s vibrant color" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -310,12 +312,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder Show album cover Navigate by Album Artist Album cover theme @@ -330,6 +334,7 @@ Classic notification design Adaptive color Colored notification + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -344,6 +349,7 @@ Fullscreen controls Now playing theme Open source licences + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -352,6 +358,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -410,6 +417,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists Shuffle Simple Sleep timer canceled. @@ -438,7 +446,6 @@ Support development Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more Thank you! @@ -484,10 +491,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index d34c9eb1b..7984030b7 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -5,6 +5,7 @@ 强调色 主题强调色,默认为紫色 关于 + 添加至黑名单 添加到收藏夹 添加到播放队列 添加到播放列表 @@ -300,6 +301,7 @@ 背景色以及控件色跟随正在播放界面的专辑封面变化 将快捷方式颜色更改为强调色,每次颜色更改后需要切换一下该设置才能生效 "将通知栏颜色修改为专辑封面的强调色" + Duration to crossfade between songs 根据材料设计指南,黑色模式时颜色应该降低饱和度 点击通知将显示「正在播放界面」而不是「主界面」 给迷你播放器添加额外控件 @@ -311,12 +313,14 @@ 配置媒体库的可见性和顺序 使用 Retro Music 的自定义锁屏 开源许可详情 + 启动时打开上次使用的页面 在专辑封面上显示同步歌词 在主屏幕上显示新歌单 沉浸模式 连接耳机后立即开始播放 播放新列表时关闭随机播放 空间充足时在播放界面显示音量控制控件 + 仅显示 /Music 目录的音乐 显示专辑封面 按专辑艺术家排序 专辑封面主题 @@ -331,6 +335,7 @@ 经典通知栏设计 自适应颜色 着色通知栏 + Crossfade (Beta) 不饱和色 显示正在播放界面 额外控件 @@ -345,6 +350,7 @@ 全屏控件 正在播放主题 开源许可 + 记住最后打开页面 显示歌词 显示建议 标签标题模式 @@ -353,6 +359,7 @@ 自动播放 随机播放 音量控件 + 白名单音乐 高级版 黑色主题,正在播放主题,轮播效果和更多... 个人信息 @@ -411,6 +418,7 @@ 分享应用 与您的朋友和家人分享此应用 分享到故事 + 显示专辑艺术家 随机播放 简单 睡眠定时已取消。 @@ -439,7 +447,6 @@ 支持开发者 滑动以解锁 滚动歌词 - Telegram 加入 Telegram 团队,讨论错误,提出建议,展示信息等等 谢谢您! @@ -485,10 +492,4 @@ 请至少选择一个分类。 将跳转至问题追踪网站。 您的账户数据仅用于验证。 - 显示专辑艺术家 - 添加至黑名单 - 记住最后打开页面 - 启动时打开上次使用的页面 - 仅显示 /Music 目录的音乐 - 白名单音乐 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 7f8b8f4bd..db6777e4e 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -5,6 +5,7 @@ 重點色調 重點色調,預設為粉紅色。 關於 + Add to Blacklist 加到最愛 加入播放佇列 加入播放清單... @@ -298,6 +299,7 @@ 在播放面板上,背景與控制按鈕的顏色將根據的專輯封面顏色而改變 將重點色調設為應用快捷方式的顏色。每次更改重點色調後,請切換此功能以生效。 "\u72c0\u614b\u5217\u984f\u8272\u8207\u5c08\u8f2f\u5716\u7247\u984f\u8272\u4e00\u81f4" + Duration to crossfade between songs As per Material Design guide lines in dark mode colors should be desaturated Clicking on the notification will show now playing screen instead of the home screen Add extra controls for mini player @@ -308,12 +310,14 @@ Configure visibility and order of library categories. Use Retro Music\'s custom lockscreen controls License details for open source software + Navigate to the last used tab on start Display Synced Lyrics over Album Cover Show New Music Mix on Homescreen Immersive mode Start playing immediately after headphones are connected Shuffle mode will turn off when playing a new list of songs If enough space is available, show volume controls in the now playing screen + Only show music from /Music Folder 顯示專輯封面 Navigate by Album Artist Album cover theme @@ -328,6 +332,7 @@ Classic notification design 自適應顏色 彩色的狀態列 + Crossfade (Beta) Desaturated color Show now playing screen Extra controls @@ -342,6 +347,7 @@ Fullscreen controls 外觀 開源授權協議 + Remember Last Tab Show Lyrics Show Suggestions Tab titles mode @@ -350,6 +356,7 @@ Auto-play Shuffle mode Volume controls + Whitelist Music Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -408,6 +415,7 @@ Share app Share the app with your friends and family Share to Stories + Show Album Artists 隨機播放 Simple 已取消睡眠定時器。 @@ -436,7 +444,6 @@ 支援開發 Swipe to unlock Synced lyrics - Telegram Join the Telegram group to discuss bugs, make suggestions, show off and more 感謝你! @@ -482,10 +489,4 @@ You have to select at least one category. You will be forwarded to the issue tracker website. Your account data is only used for authentication. - Show Album Artists - Add to Blacklist - Remember Last Tab - Navigate to the last used tab on start - Only show music from /Music Folder - Whitelist Music From 6ee63b58ea88e6e58577405a2d3e372ec4684af8 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Sun, 5 Sep 2021 19:20:35 +0530 Subject: [PATCH 0224/1603] New Crowdin updates (#1125) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Portuguese, Brazilian) --- app/src/main/res/values-pt-rBR/strings.xml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 1e8ac09ae..ae12935c7 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -292,7 +292,7 @@ Usar a capa do álbum da música em reprodução como papel de parede na tela de bloqueio Mostrar artistas do álbum na categoria do artista Diminua o volume quando um som do sistema for reproduzido ou uma notificação for recebida - Fade áudio quando a música é pausada ou reproduzida + Diminuir ou aumentar áudio gradualmente quando a música é pausada ou reproduzida O conteúdo das pastas na lista negra está oculto da sua biblioteca. Comece a tocar assim que conectado ao dispositivo bluetooth Desfoque a capa do álbum na tela de bloqueio. Pode causar problemas com aplicativos e widgets de terceiros @@ -301,9 +301,9 @@ As cores de fundo e do botão de controle mudam de acordo com a capa do álbum a partir da tela que está sendo reproduzida Colore os atalhos do aplicativo na cor de destaque. Toda vez que você mudar a cor alterne essa opção para ter efeito "Colore a notifica\u00e7\u00e3o na cor vibrante da capa do \u00e1lbum" - Duration to crossfade between songs + Duração de transição entre músicas Conforme o guia do Material Design as cores devem ser dessaturadas no modo escuro - Clicando na notificação mostrará a tela inicial em vez da tela inicial + Clicando na notificação irá mostrar a tela de reprodução ao invés da tela inicial Adicionar botões extras para o mini reprodutor Mostrar informações extras da música, como formato de arquivo, taxa de bits e frequência "Pode causar problemas de reprodução em alguns dispositivos" @@ -334,8 +334,7 @@ Design de notificação clássico Cor adaptável Notificações coloridas - Transição (Beta) -Description: Duração de transição entre músicas + Transição (Beta) Cor dessaturada Mostrar tela de reprodução Controles extras From fc427670311dfd85ff26d65b47011aa6597eae88 Mon Sep 17 00:00:00 2001 From: "Daksh P. Jain" Date: Mon, 6 Sep 2021 08:47:45 +0530 Subject: [PATCH 0225/1603] New Crowdin updates (#1127) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Italian) --- app/src/main/res/values-it-rIT/strings.xml | 4 ++-- app/src/main/res/values-pt-rBR/strings.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index a6fc86ad7..63a6d267f 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -302,7 +302,7 @@ https://play.google.com/store/apps/details?id=%s Lo sfondo e il pulsante di riproduzione cambiano colore in base alla copertina dell\'album in riproduzione Colora le scorciatoie dell\'app con il colore in rilievo. Ogni volta che cambi colore attiva questo perché abbia effetto "Colora la notifica con il colore principale della copertina dell'album" - Duration to crossfade between songs + Durata della dissolvenza tra brani Secondo le linee guida del Material Design, in modalità scura i colori devono essere desaturati Cliccando sulla notifica verrà visualizzata la schermata di riproduzione invece della homepage Aggiungi controlli extra nel mini player @@ -335,7 +335,7 @@ https://play.google.com/store/apps/details?id=%s Design classico per le notifiche Colore adattivo Notifica colorata - Crossfade (Beta) + Dissolvenza (beta) Colori desaturati Mostra la schermata riproduzione Controlli extra diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index ae12935c7..3bbfaed2e 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -77,7 +77,7 @@ Texto mínimo Artista Artistas - Duração do Aumento Gradual + Duração de transição entre músicas Foco de áudio negado Altere as configurações de som e ajuste os controles do equalizador Automático From bce6dbfa27e445c4f67cb098d112a4ba71c2aba1 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Thu, 9 Sep 2021 00:00:20 +0530 Subject: [PATCH 0226/1603] V5 Push Here's a list of changes/features: https://github.com/RetroMusicPlayer/RetroMusicPlayer/releases/tag/v5.0 Internal Changes: 1) Migrated to ViewBinding 2) Migrated to Glide V4 3) Migrated to kotlin version of Material Dialogs --- app/build.gradle | 87 +- app/proguard-rules.pro | 18 +- app/src/debug/res/values/styles.xml | 12 +- app/src/main/AndroidManifest.xml | 43 +- app/src/main/assets/contributors.json | 20 +- app/src/main/assets/retro-changelog.html | 82 +- .../java/code/name/monkey/retromusic/App.kt | 4 +- .../code/name/monkey/retromusic/Constants.kt | 16 +- .../retromusic/LanguageContextWrapper.java | 7 +- .../code/name/monkey/retromusic/MainModule.kt | 20 +- .../retromusic/RetroBottomSheetBehavior.java | 3 + .../activities/DriveModeActivity.kt | 77 +- .../activities/LicenseActivity.java | 14 +- .../activities/LockScreenActivity.kt | 19 +- .../retromusic/activities/LyricsActivity.kt | 316 +++++- .../retromusic/activities/MainActivity.kt | 87 +- .../activities/PermissionActivity.kt | 53 +- .../activities/PlayingQueueActivity.kt | 46 +- .../retromusic/activities/PurchaseActivity.kt | 26 +- .../retromusic/activities/SettingsActivity.kt | 38 +- .../activities/ShareInstagramStory.kt | 45 +- .../activities/SupportDevelopmentActivity.kt | 33 +- .../retromusic/activities/UserInfoActivity.kt | 113 +- .../activities/WhatsNewActivity.java | 111 +- .../activities/base/AbsCastActivity.kt | 141 +++ .../base/AbsMusicServiceActivity.kt | 20 +- .../base/AbsSlidingMusicPanelActivity.kt | 105 +- .../activities/base/AbsThemeActivity.kt | 15 +- .../activities/bugreport/BugReportActivity.kt | 110 +- .../bugreport/model/DeviceInfo.java | 5 +- .../activities/saf/SAFGuideActivity.java | 5 +- .../tageditor/AbsTagEditorActivity.kt | 26 +- .../tageditor/AlbumTagEditorActivity.kt | 90 +- .../tageditor/SongTagEditorActivity.kt | 110 +- .../tageditor/WriteTagsAsyncTask.java | 16 +- .../adapter/CategoryInfoAdapter.java | 8 +- .../monkey/retromusic/adapter/GenreAdapter.kt | 39 +- .../monkey/retromusic/adapter/HomeAdapter.kt | 35 +- .../retromusic/adapter/SearchAdapter.kt | 40 +- .../retromusic/adapter/SongFileAdapter.kt | 13 +- .../retromusic/adapter/StorageAdapter.kt | 55 + .../retromusic/adapter/album/AlbumAdapter.kt | 31 +- .../adapter/album/AlbumCoverPagerAdapter.kt | 11 +- .../adapter/album/HorizontalAlbumAdapter.kt | 12 +- .../adapter/artist/ArtistAdapter.kt | 39 +- .../adapter/base/AbsMultiSelectAdapter.java | 71 +- .../adapter/base/MediaEntryViewHolder.java | 4 +- .../adapter/playlist/PlaylistAdapter.kt | 67 +- .../song/OrderablePlaylistSongAdapter.kt | 193 ++-- .../adapter/song/PlayingQueueAdapter.kt | 9 +- .../adapter/song/ShuffleButtonSongAdapter.kt | 12 + .../retromusic/adapter/song/SongAdapter.kt | 16 +- .../appshortcuts/DynamicShortcutManager.kt | 1 - .../retromusic/appwidgets/AppWidgetBig.kt | 19 +- .../retromusic/appwidgets/AppWidgetCard.kt | 18 +- .../retromusic/appwidgets/AppWidgetClassic.kt | 19 +- .../retromusic/appwidgets/AppWidgetSmall.kt | 19 +- .../retromusic/auto/AutoMediaIDHelper.java | 101 ++ .../retromusic/auto/AutoMusicProvider.kt | 285 ++++++ .../retromusic/auto/MediaItemBuilder.kt | 102 ++ .../name/monkey/retromusic/cast/CastHelper.kt | 83 ++ .../retromusic/cast/CastOptionsProvider.kt | 41 + .../cast/ExpandedControlsActivity.kt | 19 + .../retromusic/cast/RetroSessionManager.kt | 22 + .../monkey/retromusic/cast/RetroWebServer.kt | 140 +++ .../name/monkey/retromusic/db/PlaylistDao.kt | 2 +- .../monkey/retromusic/db/PlaylistEntity.kt | 2 +- .../monkey/retromusic/db/PlaylistWithSongs.kt | 2 +- .../name/monkey/retromusic/db/SongEntity.kt | 2 +- .../dialogs/BlacklistFolderChooserDialog.java | 155 --- .../dialogs/BlacklistFolderChooserDialog.kt | 152 +++ .../dialogs/CreatePlaylistDialog.kt | 27 +- .../retromusic/dialogs/DeleteSongsDialog.kt | 83 +- .../retromusic/dialogs/SleepTimerDialog.kt | 9 +- .../retromusic/dialogs/SongDetailDialog.kt | 4 +- .../monkey/retromusic/extensions/ColorExt.kt | 1 - .../retromusic/extensions/DrawableExt.kt | 4 - .../fragments/DetailListFragment.kt | 70 +- .../retromusic/fragments/LibraryViewModel.kt | 14 +- .../fragments/MiniPlayerFragment.kt | 71 +- .../retromusic/fragments/VolumeFragment.kt | 57 +- .../fragments/about/AboutFragment.kt | 49 +- .../fragments/albums/AlbumDetailsFragment.kt | 224 ++-- .../fragments/albums/AlbumDetailsViewModel.kt | 12 +- .../fragments/albums/AlbumsFragment.kt | 46 +- .../artists/AbsArtistDetailsFragment.kt | 342 +++++++ .../artists/AlbumArtistDetailsFragment.kt | 32 + .../artists/AlbumArtistDetailsViewModel.kt | 66 ++ .../artists/ArtistDetailsFragment.kt | 294 +----- .../artists/ArtistDetailsViewModel.kt | 16 +- .../fragments/artists/ArtistsFragment.kt | 78 +- .../fragments/base/AbsMusicServiceFragment.kt | 10 +- .../base/AbsPlayerControlsFragment.kt | 2 +- .../fragments/base/AbsPlayerFragment.kt | 157 ++- .../AbsRecyclerViewCustomGridSizeFragment.kt | 30 +- .../fragments/base/AbsRecyclerViewFragment.kt | 96 +- .../fragments/folder/FoldersFragment.java | 298 ++++-- .../fragments/genres/GenreDetailsFragment.kt | 51 +- .../fragments/genres/GenreDetailsViewModel.kt | 1 + .../fragments/genres/GenresFragment.kt | 55 +- .../fragments/home/HomeBindingAdapter.kt | 31 + .../retromusic/fragments/home/HomeFragment.kt | 168 +-- .../fragments/library/LibraryFragment.kt | 35 +- .../player/PlayerAlbumCoverFragment.kt | 222 +++- .../player/adaptive/AdaptiveFragment.kt | 18 +- .../AdaptivePlaybackControlsFragment.kt | 84 +- .../blur/BlurPlaybackControlsFragment.kt | 119 ++- .../player/blur/BlurPlayerFragment.kt | 30 +- .../fragments/player/card/CardFragment.kt | 23 +- .../card/CardPlaybackControlsFragment.kt | 105 +- .../player/cardblur/CardBlurFragment.kt | 37 +- .../CardBlurPlaybackControlsFragment.kt | 95 +- .../player/circle/CirclePlayerFragment.kt | 88 +- .../player/classic/ClassicPlayerFragment.kt | 177 ++-- .../fragments/player/color/ColorFragment.kt | 22 +- .../color/ColorPlaybackControlsFragment.kt | 133 ++- .../fragments/player/fit/FitFragment.kt | 17 +- .../player/fit/FitPlaybackControlsFragment.kt | 108 +- .../flat/FlatPlaybackControlsFragment.kt | 97 +- .../player/flat/FlatPlayerFragment.kt | 30 +- .../full/FullPlaybackControlsFragment.kt | 156 +-- .../player/full/FullPlayerFragment.kt | 146 +-- .../player/gradient/GradientPlayerFragment.kt | 229 +++-- .../player/home/HomePlayerFragment.kt | 32 +- .../lockscreen/LockScreenControlsFragment.kt | 88 +- .../material/MaterialControlsFragment.kt | 102 +- .../player/material/MaterialFragment.kt | 18 +- .../fragments/player/normal/PlayerFragment.kt | 27 +- .../normal/PlayerPlaybackControlsFragment.kt | 96 +- .../player/peak/PeakPlayerControlFragment.kt | 72 +- .../player/peak/PeakPlayerFragment.kt | 35 +- .../plain/PlainPlaybackControlsFragment.kt | 100 +- .../player/plain/PlainPlayerFragment.kt | 33 +- .../simple/SimplePlaybackControlsFragment.kt | 99 +- .../player/simple/SimplePlayerFragment.kt | 23 +- .../tiny/TinyPlaybackControlsFragment.kt | 36 +- .../player/tiny/TinyPlayerFragment.kt | 172 +++- .../playlists/PlaylistDetailsFragment.kt | 134 ++- .../playlists/PlaylistDetailsViewModel.kt | 1 + .../fragments/playlists/PlaylistsFragment.kt | 40 +- .../fragments/queue/PlayingQueueFragment.kt | 11 +- .../fragments/search/SearchFragment.kt | 134 ++- .../fragments/settings/AbsSettingsFragment.kt | 4 + .../settings/MainSettingsFragment.kt | 41 +- .../settings/OtherSettingsFragment.kt | 19 + .../settings/ThemeSettingsFragment.kt | 24 +- .../fragments/songs/SongsFragment.kt | 40 +- .../retromusic/glide/AlbumGlideRequest.java | 130 --- .../retromusic/glide/ArtistGlideRequest.java | 171 ---- .../retromusic/glide/BlurTransformation.kt | 98 +- .../glide/ProfileBannerGlideRequest.java | 76 -- .../retromusic/glide/RetroGlideExtension.kt | 192 ++++ .../glide/RetroMusicColoredTarget.kt | 20 +- .../retromusic/glide/RetroMusicGlideModule.kt | 33 +- .../retromusic/glide/SingleColorTarget.kt | 24 +- .../retromusic/glide/SongGlideRequest.java | 144 --- .../glide/UserProfileGlideRequest.java | 83 -- .../glide/artistimage/ArtistImage.kt | 16 + .../glide/artistimage/ArtistImageFetcher.kt | 121 +++ .../glide/artistimage/ArtistImageLoader.kt | 136 +-- .../glide/audiocover/AudioFileCover.java | 15 + .../audiocover/AudioFileCoverFetcher.java | 33 +- .../audiocover/AudioFileCoverLoader.java | 31 +- .../glide/audiocover/AudioFileCoverUtils.java | 16 +- .../glide/palette/BitmapPaletteResource.java | 18 +- .../glide/palette/BitmapPaletteTarget.java | 5 +- .../palette/BitmapPaletteTranscoder.java | 34 +- .../glide/palette/BitmapPaletteWrapper.java | 1 + .../glide/playlistPreview/PlaylistPreview.kt | 31 + .../playlistPreview/PlaylistPreviewFetcher.kt | 51 + .../playlistPreview/PlaylistPreviewLoader.kt | 36 + .../retromusic/helper/MusicPlayerRemote.kt | 29 +- .../retromusic/helper/SearchQueryHelper.kt | 28 +- .../monkey/retromusic/helper/SortOrder.kt | 6 +- .../monkey/retromusic/helper/StackBlur.java | 1 + .../retromusic/helper/menu/SongMenuHelper.kt | 12 + .../interfaces/IAlbumArtistClickListener.kt | 21 + .../interfaces/IMusicServiceEventListener.kt | 2 + .../monkey/retromusic/lyrics/LrcHelper.java | 1 + .../monkey/retromusic/lyrics/LrcUtils.java | 1 + .../monkey/retromusic/lyrics/LrcView.java | 7 +- .../misc/CustomFragmentStatePagerAdapter.java | 2 + .../retromusic/misc/DialogAsyncTask.java | 2 + .../monkey/retromusic/misc/LagTracker.java | 7 +- .../name/monkey/retromusic/model/Album.kt | 4 +- .../name/monkey/retromusic/model/Artist.kt | 41 +- .../monkey/retromusic/model/CategoryInfo.kt | 16 +- .../monkey/retromusic/model/Contributor.kt | 2 +- .../name/monkey/retromusic/model/Genre.kt | 2 +- .../name/monkey/retromusic/model/Playlist.kt | 2 +- .../monkey/retromusic/model/PlaylistSong.kt | 2 +- .../code/name/monkey/retromusic/model/Song.kt | 4 +- .../retromusic/model/lyrics/Lyrics.java | 3 +- .../model/smartplaylist/HistoryPlaylist.kt | 2 +- .../model/smartplaylist/LastAddedPlaylist.kt | 2 +- .../model/smartplaylist/NotPlayedPlaylist.kt | 2 +- .../model/smartplaylist/ShuffleAllPlaylist.kt | 2 +- .../model/smartplaylist/TopTracksPlaylist.kt | 2 +- .../retromusic/network/RetrofitClient.kt | 2 +- .../conversion/LyricsConverterFactory.kt | 7 +- .../retromusic/network/model/LastFmAlbum.java | 1 + .../network/model/LastFmArtist.java | 1 + .../retromusic/network/model/LastFmTrack.java | 1 + .../AlbumCoverStylePreferenceDialog.kt | 2 +- .../preferences/DurationPreference.kt | 95 ++ .../preferences/LibraryPreference.kt | 5 +- .../NowPlayingScreenPreferenceDialog.kt | 2 +- .../retromusic/providers/BlacklistStore.java | 7 +- .../retromusic/providers/HistoryStore.java | 1 + .../providers/MusicPlaybackQueueStore.java | 5 +- .../providers/SongPlayCountStore.java | 1 + .../retromusic/repository/AlbumRepository.kt | 18 +- .../retromusic/repository/ArtistRepository.kt | 59 +- .../retromusic/repository/GenreRepository.kt | 9 +- .../retromusic/repository/Repository.kt | 36 +- .../retromusic/repository/RoomRepository.kt | 13 +- .../retromusic/repository/SearchRepository.kt | 46 +- .../retromusic/repository/SongRepository.kt | 27 +- .../retromusic/repository/SortedCursor.java | 2 + .../repository/SortedLongCursor.java | 2 + .../monkey/retromusic/service/AudioFader.kt | 50 + .../retromusic/service/CrossFadePlayer.kt | 406 ++++++++ .../service/MediaSessionCallback.kt | 79 +- .../retromusic/service/MultiPlayer.java | 514 +++++----- .../retromusic/service/MusicService.java | 195 +++- .../retromusic/service/PlaybackHandler.java | 10 +- .../notification/PlayingNotificationImpl.kt | 19 +- .../notification/PlayingNotificationOreo.kt | 18 +- .../transform/CascadingPageTransformer.kt | 18 +- .../transform/HingeTransformation.kt | 41 +- .../name/monkey/retromusic/util/AppRater.kt | 2 +- .../retromusic/util/ArtistSignatureUtil.java | 12 +- .../util/AutoGeneratedPlaylistBitmap.java | 44 +- .../monkey/retromusic/util/ColorUtil.java | 2 + .../monkey/retromusic/util/Compressor.java | 1 + .../retromusic/util/CustomArtistImageUtil.kt | 33 +- .../monkey/retromusic/util/DensityUtil.kt | 8 +- .../name/monkey/retromusic/util/FileUtil.java | 9 +- .../monkey/retromusic/util/ImageUtil.java | 5 +- .../monkey/retromusic/util/LyricUtil.java | 239 +++-- .../retromusic/util/MergedImageUtils.kt | 2 +- .../name/monkey/retromusic/util/MusicUtil.kt | 49 +- .../retromusic/util/NavigationUtil.java | 5 +- .../retromusic/util/PackageValidator.kt | 347 +++++++ .../monkey/retromusic/util/PlaylistsUtil.java | 11 +- .../monkey/retromusic/util/PreferenceUtil.kt | 59 +- .../retromusic/util/RetroColorUtil.java | 5 +- .../monkey/retromusic/util/RetroUtil.java | 50 +- .../monkey/retromusic/util/RingtoneManager.kt | 1 - .../monkey/retromusic/util/RippleUtils.java | 1 + .../name/monkey/retromusic/util/SAFUtil.java | 14 +- .../retromusic/util/SwipeAndDragHelper.java | 1 + .../name/monkey/retromusic/util/ViewUtil.kt | 5 +- .../color/MediaNotificationProcessor.java | 90 +- .../util/color/NotificationColorUtil.java | 5 +- .../views/BaselineGridTextView.java | 5 +- .../retromusic/views/BreadCrumbLayout.java | 7 +- .../retromusic/views/CircularImageView.java | 2 + .../retromusic/views/ContributorsView.java | 2 + .../monkey/retromusic/views/ListItemView.kt | 23 +- .../retromusic/views/NetworkImageView.java | 5 +- .../monkey/retromusic/views/PermissionItem.kt | 27 +- .../retromusic/views/PopupBackground.java | 2 + ...ollingViewOnApplyWindowInsetsListener.java | 2 + .../name/monkey/retromusic/views/SeekArc.java | 5 +- .../retromusic/views/SettingListItemView.kt | 20 +- .../views/StatusBarMarginFrameLayout.java | 1 + .../retromusic/views/StatusBarView.java | 1 + .../retromusic/views/VerticalTextView.java | 1 + .../volume/AudioVolumeContentObserver.java | 1 + app/src/main/res/drawable/asld_album.xml | 13 + app/src/main/res/drawable/asld_artist.xml | 15 + app/src/main/res/drawable/asld_face.xml | 15 + app/src/main/res/drawable/asld_folder.xml | 13 + app/src/main/res/drawable/asld_guitar.xml | 13 + app/src/main/res/drawable/asld_heart.xml | 18 + app/src/main/res/drawable/asld_music_note.xml | 13 + app/src/main/res/drawable/asld_playlist.xml | 15 + app/src/main/res/drawable/avd_album.xml | 38 + app/src/main/res/drawable/avd_artist.xml | 46 + app/src/main/res/drawable/avd_face.xml | 49 + app/src/main/res/drawable/avd_favorite.xml | 81 ++ app/src/main/res/drawable/avd_folder.xml | 110 ++ app/src/main/res/drawable/avd_guitar.xml | 127 +++ app/src/main/res/drawable/avd_music_note.xml | 114 +++ app/src/main/res/drawable/avd_playlist.xml | 132 +++ app/src/main/res/drawable/avd_unfavorite.xml | 129 +++ app/src/main/res/drawable/ic_album_artist.xml | 16 + app/src/main/res/drawable/ic_baseline.xml | 5 + .../main/res/drawable/ic_favorite_border.xml | 26 +- app/src/main/res/drawable/ic_lyrics.xml | 10 + .../main/res/drawable/ic_lyrics_outline.xml | 20 + .../main/res/drawable/ic_pause_outline.xml | 16 + .../res/drawable/ic_play_arrow_outline.xml | 10 + .../main/res/drawable/ic_playlist_remove.xml | 10 + .../res/drawable/ic_skip_next_outline.xml | 10 + .../res/drawable/ic_skip_previous_outline.xml | 10 + app/src/main/res/drawable/ic_storage.xml | 10 + app/src/main/res/drawable/lyrics_mask.xml | 9 + .../main/res/drawable/shadow_blur_theme.xml | 8 + .../res/drawable/tab_lyrics_indicator.xml | 10 + .../res/layout-land/activity_drive_mode.xml | 2 +- .../layout-land/fragment_album_details.xml | 5 +- .../layout-land/fragment_artist_details.xml | 5 +- .../res/layout-land/fragment_banner_home.xml | 190 ++-- .../main/res/layout-land/fragment_blur.xml | 4 +- .../layout-land/fragment_card_blur_player.xml | 4 +- .../res/layout-land/fragment_card_player.xml | 4 +- .../res/layout-land/fragment_color_player.xml | 6 +- .../res/layout-land/fragment_flat_player.xml | 4 +- .../main/res/layout-land/fragment_home.xml | 6 +- .../res/layout-land/fragment_material.xml | 4 +- .../res/layout-land/fragment_plain_player.xml | 9 +- .../main/res/layout-land/fragment_player.xml | 4 +- .../layout-land/fragment_simple_player.xml | 4 +- app/src/main/res/layout-sw600dp/item_list.xml | 2 +- .../main/res/layout-sw600dp/item_list_big.xml | 123 +++ .../res/layout-xlarge-land/fragment_blur.xml | 4 +- .../layout-xlarge/fragment_about_content.xml | 16 +- app/src/main/res/layout/abs_playlists.xml | 3 + .../main/res/layout/activity_bug_report.xml | 2 + .../main/res/layout/activity_drive_mode.xml | 2 +- .../main/res/layout/activity_lock_screen.xml | 2 +- app/src/main/res/layout/activity_lyrics.xml | 47 +- app/src/main/res/layout/activity_settings.xml | 25 +- .../res/layout/activity_song_tag_editor.xml | 6 +- .../main/res/layout/activity_user_info.xml | 3 +- .../main/res/layout/activity_whats_new.xml | 12 +- app/src/main/res/layout/card_other.xml | 1 - app/src/main/res/layout/card_social.xml | 15 +- .../res/layout/cast_controller_layout.xml | 6 + .../main/res/layout/cast_mini_controller.xml | 107 ++ .../main/res/layout/dialog_edit_lyrics.xml | 39 + app/src/main/res/layout/fragment_about.xml | 4 +- .../res/layout/fragment_about_content.xml | 16 +- .../res/layout/fragment_adaptive_player.xml | 4 +- .../res/layout/fragment_album_content.xml | 12 +- .../res/layout/fragment_album_details.xml | 1 + .../res/layout/fragment_artist_content.xml | 12 +- .../res/layout/fragment_artist_details.xml | 1 + .../main/res/layout/fragment_banner_home.xml | 8 +- app/src/main/res/layout/fragment_blur.xml | 6 +- ...fragment_blur_player_playback_controls.xml | 65 +- .../res/layout/fragment_card_blur_player.xml | 4 +- ...ent_card_blur_player_playback_controls.xml | 4 +- .../main/res/layout/fragment_card_player.xml | 4 +- ...fragment_card_player_playback_controls.xml | 9 +- .../res/layout/fragment_classic_player.xml | 7 +- .../main/res/layout/fragment_color_player.xml | 4 +- ...ragment_color_player_playback_controls.xml | 7 +- app/src/main/res/layout/fragment_fit.xml | 4 +- .../layout/fragment_fit_playback_controls.xml | 5 +- .../main/res/layout/fragment_flat_player.xml | 4 +- ...fragment_flat_player_playback_controls.xml | 5 +- app/src/main/res/layout/fragment_folder.xml | 4 +- app/src/main/res/layout/fragment_full.xml | 4 +- .../layout/fragment_full_player_controls.xml | 5 + .../res/layout/fragment_gradient_controls.xml | 5 + .../res/layout/fragment_gradient_player.xml | 7 +- app/src/main/res/layout/fragment_home.xml | 5 +- .../main/res/layout/fragment_home_player.xml | 2 +- .../res/layout/fragment_main_recycler.xml | 4 +- .../res/layout/fragment_main_settings.xml | 3 +- app/src/main/res/layout/fragment_material.xml | 4 +- .../fragment_material_playback_controls.xml | 52 +- .../main/res/layout/fragment_mini_player.xml | 3 +- .../res/layout/fragment_normal_lyrics.xml | 28 + .../main/res/layout/fragment_peak_player.xml | 23 +- .../main/res/layout/fragment_plain_player.xml | 13 +- app/src/main/res/layout/fragment_player.xml | 4 +- .../layout/fragment_player_album_cover.xml | 45 + .../fragment_player_playback_controls.xml | 21 +- .../res/layout/fragment_playlist_detail.xml | 4 +- app/src/main/res/layout/fragment_search.xml | 127 ++- .../fragment_simple_controls_fragment.xml | 38 +- .../res/layout/fragment_simple_player.xml | 4 +- .../res/layout/fragment_synced_lyrics.xml | 18 + .../main/res/layout/fragment_tiny_player.xml | 4 +- app/src/main/res/layout/home_content.xml | 4 +- app/src/main/res/layout/item_album_card.xml | 46 +- app/src/main/res/layout/item_artist.xml | 8 +- .../main/res/layout/item_artist_square.xml | 2 +- .../main/res/layout/item_favourite_card.xml | 47 + app/src/main/res/layout/item_genre.xml | 75 ++ app/src/main/res/layout/item_grid.xml | 3 +- app/src/main/res/layout/item_image.xml | 1 + app/src/main/res/layout/item_list.xml | 2 +- app/src/main/res/layout/item_list_big.xml | 95 ++ .../res/layout/item_list_quick_actions.xml | 12 +- app/src/main/res/layout/item_permission.xml | 11 + app/src/main/res/layout/item_queue.xml | 4 +- app/src/main/res/layout/item_storage.xml | 53 + .../layout/preference_dialog_audio_fade.xml | 42 + .../res/layout/sliding_music_panel_layout.xml | 8 +- .../main/res/master/values-pt-rPT/strings.xml | 966 +++++++++--------- app/src/main/res/menu/menu_cast.xml | 11 + app/src/main/res/menu/menu_item_directory.xml | 4 + app/src/main/res/menu/menu_item_song.xml | 4 + app/src/main/res/menu/menu_main.xml | 5 + app/src/main/res/menu/menu_player.xml | 23 +- .../menu/menu_playlists_songs_selection.xml | 14 +- app/src/main/res/menu/menu_search.xml | 6 + app/src/main/res/navigation/main_graph.xml | 10 + app/src/main/res/values-my/strings.xml | 665 ++++++++++++ app/src/main/res/values/arrays.xml | 16 +- app/src/main/res/values/dimens.xml | 7 + app/src/main/res/values/ids.xml | 3 + app/src/main/res/values/styles.xml | 19 +- .../res/xml/allowed_media_browser_callers.xml | 251 +++++ app/src/main/res/xml/automotive_app_desc.xml | 4 + app/src/main/res/xml/pref_advanced.xml | 23 +- app/src/main/res/xml/pref_audio.xml | 16 + .../main/res/xml/pref_now_playing_screen.xml | 7 + app/src/main/res/xml/pref_ui.xml | 35 +- appthemehelper/build.gradle | 14 +- .../name/monkey/appthemehelper/ThemeStore.kt | 38 +- .../util/MaterialDialogsUtil.kt | 25 - .../util/ToolbarContentTintHelper.java | 20 +- build.gradle | 12 +- gradle.properties | 1 - gradle/wrapper/gradle-wrapper.properties | 2 +- 421 files changed, 13285 insertions(+), 5757 deletions(-) create mode 100644 app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/adapter/StorageAdapter.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/auto/AutoMediaIDHelper.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/auto/AutoMusicProvider.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/auto/MediaItemBuilder.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/cast/ExpandedControlsActivity.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManager.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/fragments/artists/AbsArtistDetailsFragment.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/fragments/artists/AlbumArtistDetailsFragment.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/fragments/artists/AlbumArtistDetailsViewModel.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeBindingAdapter.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/glide/AlbumGlideRequest.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/glide/ArtistGlideRequest.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/glide/ProfileBannerGlideRequest.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt delete mode 100644 app/src/main/java/code/name/monkey/retromusic/glide/SongGlideRequest.java delete mode 100644 app/src/main/java/code/name/monkey/retromusic/glide/UserProfileGlideRequest.java create mode 100644 app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImage.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageFetcher.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreview.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreviewFetcher.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreviewLoader.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/interfaces/IAlbumArtistClickListener.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/preferences/DurationPreference.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/service/AudioFader.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt create mode 100644 app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt create mode 100644 app/src/main/res/drawable/asld_album.xml create mode 100644 app/src/main/res/drawable/asld_artist.xml create mode 100644 app/src/main/res/drawable/asld_face.xml create mode 100644 app/src/main/res/drawable/asld_folder.xml create mode 100644 app/src/main/res/drawable/asld_guitar.xml create mode 100644 app/src/main/res/drawable/asld_heart.xml create mode 100644 app/src/main/res/drawable/asld_music_note.xml create mode 100644 app/src/main/res/drawable/asld_playlist.xml create mode 100644 app/src/main/res/drawable/avd_album.xml create mode 100644 app/src/main/res/drawable/avd_artist.xml create mode 100644 app/src/main/res/drawable/avd_face.xml create mode 100644 app/src/main/res/drawable/avd_favorite.xml create mode 100644 app/src/main/res/drawable/avd_folder.xml create mode 100644 app/src/main/res/drawable/avd_guitar.xml create mode 100644 app/src/main/res/drawable/avd_music_note.xml create mode 100644 app/src/main/res/drawable/avd_playlist.xml create mode 100644 app/src/main/res/drawable/avd_unfavorite.xml create mode 100644 app/src/main/res/drawable/ic_album_artist.xml create mode 100644 app/src/main/res/drawable/ic_baseline.xml create mode 100644 app/src/main/res/drawable/ic_lyrics.xml create mode 100644 app/src/main/res/drawable/ic_lyrics_outline.xml create mode 100644 app/src/main/res/drawable/ic_pause_outline.xml create mode 100644 app/src/main/res/drawable/ic_play_arrow_outline.xml create mode 100644 app/src/main/res/drawable/ic_playlist_remove.xml create mode 100644 app/src/main/res/drawable/ic_skip_next_outline.xml create mode 100644 app/src/main/res/drawable/ic_skip_previous_outline.xml create mode 100644 app/src/main/res/drawable/ic_storage.xml create mode 100644 app/src/main/res/drawable/lyrics_mask.xml create mode 100644 app/src/main/res/drawable/shadow_blur_theme.xml create mode 100644 app/src/main/res/drawable/tab_lyrics_indicator.xml create mode 100644 app/src/main/res/layout-sw600dp/item_list_big.xml create mode 100644 app/src/main/res/layout/cast_controller_layout.xml create mode 100644 app/src/main/res/layout/cast_mini_controller.xml create mode 100644 app/src/main/res/layout/dialog_edit_lyrics.xml create mode 100644 app/src/main/res/layout/fragment_normal_lyrics.xml create mode 100644 app/src/main/res/layout/fragment_synced_lyrics.xml create mode 100644 app/src/main/res/layout/item_favourite_card.xml create mode 100644 app/src/main/res/layout/item_genre.xml create mode 100644 app/src/main/res/layout/item_list_big.xml create mode 100644 app/src/main/res/layout/item_storage.xml create mode 100644 app/src/main/res/layout/preference_dialog_audio_fade.xml create mode 100644 app/src/main/res/menu/menu_cast.xml create mode 100644 app/src/main/res/values-my/strings.xml create mode 100644 app/src/main/res/xml/allowed_media_browser_callers.xml create mode 100644 app/src/main/res/xml/automotive_app_desc.xml delete mode 100644 appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/MaterialDialogsUtil.kt diff --git a/app/build.gradle b/app/build.gradle index a13a13503..f504eb7fd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,31 +1,29 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: "androidx.navigation.safeargs.kotlin" +apply plugin: 'kotlin-parcelize' android { - compileSdkVersion 29 + compileSdkVersion 31 buildToolsVersion = '29.0.3' defaultConfig { minSdkVersion 21 targetSdkVersion 29 - renderscriptTargetApi 29 //must match target sdk and build tools + renderscriptTargetApi 29//must match target sdk and build tools vectorDrawables.useSupportLibrary = true applicationId "code.name.monkey.retromusic" - versionCode 10503 - versionName '4.0.010' + "_" + getDate() - - multiDexEnabled true + versionCode 10519 + versionName '5.0.0' + "_" + getDate() buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"") } signingConfigs { release { - Properties properties = getProperties('/Users/apple/Documents/Github/music.jks') + Properties properties = getProperties('retro.properties') storeFile file(getProperty(properties, 'storeFile')) keyAlias getProperty(properties, 'keyAlias') storePassword getProperty(properties, 'storePassword') @@ -36,7 +34,6 @@ android { release { //debuggable true minifyEnabled true - //shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } @@ -46,6 +43,10 @@ android { } } + buildFeatures{ + viewBinding true + } + packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' @@ -67,17 +68,11 @@ android { configurations.all { resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9' } - androidExtensions { - experimental = true - } - kapt { - generateStubs = true - } } def getProperties(String fileName) { final Properties properties = new Properties() - def file = file(fileName) + def file = rootProject.file(fileName) if (file.exists()) { file.withInputStream { stream -> properties.load(stream) } } @@ -95,76 +90,76 @@ static def getDate() { dependencies { implementation project(':appthemehelper') - implementation 'androidx.multidex:multidex:2.0.1' implementation "androidx.gridlayout:gridlayout:1.0.0" implementation "androidx.cardview:cardview:1.0.0" - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.annotation:annotation:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.annotation:annotation:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.0' + implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.preference:preference-ktx:1.1.1' - implementation 'androidx.core:core-ktx:1.3.2' - implementation 'androidx.fragment:fragment-ktx:1.2.5' + implementation 'androidx.core:core-ktx:1.6.0' implementation 'androidx.palette:palette-ktx:1.0.0' - def nav_version = "2.3.2" + //Cast Dependencies + implementation 'androidx.mediarouter:mediarouter:1.2.5' + implementation 'com.google.android.gms:play-services-cast-framework:20.0.0' + //WebServer by NanoHttpd + implementation "org.nanohttpd:nanohttpd:2.3.1" + + def nav_version = "2.4.0-alpha07" implementation "androidx.navigation:navigation-runtime-ktx:$nav_version" implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" - def room_version = "2.2.5" + def room_version = "2.3.0" implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-ktx:$room_version" kapt "androidx.room:room-compiler:$room_version" - def lifecycle_version = "2.2.0" + def lifecycle_version = "2.3.1" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" implementation 'com.google.android.play:core-ktx:1.8.1' - implementation 'com.google.android.material:material:1.3.0-alpha04' + implementation 'com.google.android.material:material:1.5.0-alpha03' def retrofit_version = '2.9.0' implementation "com.squareup.retrofit2:retrofit:$retrofit_version" implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" - implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0' + implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2' - def material_dialog_version = "0.9.6.0" + def material_dialog_version = "3.3.0" implementation "com.afollestad.material-dialogs:core:$material_dialog_version" - implementation "com.afollestad.material-dialogs:commons:$material_dialog_version" + implementation "com.afollestad.material-dialogs:input:$material_dialog_version" + implementation "com.afollestad.material-dialogs:color:$material_dialog_version" + implementation "com.afollestad.material-dialogs:bottomsheets:$material_dialog_version" + //noinspection GradleDependency implementation 'com.afollestad:material-cab:0.1.12' - def kotlin_coroutines_version = "1.3.8" - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + + def kotlin_coroutines_version = "1.5.1" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" def koin_version = "2.1.5" implementation "org.koin:koin-core:$koin_version" - implementation "org.koin:koin-core-ext:$koin_version" - implementation "org.koin:koin-androidx-scope:$koin_version" implementation "org.koin:koin-androidx-viewmodel:$koin_version" - implementation "org.koin:koin-androidx-fragment:$koin_version" - implementation "org.koin:koin-androidx-ext:$koin_version" - implementation 'com.github.bumptech.glide:glide:3.8.0' - implementation 'com.github.bumptech.glide:okhttp3-integration:1.5.0' + implementation 'com.github.bumptech.glide:glide:4.12.0' + kapt 'com.github.bumptech.glide:compiler:4.12.0' + implementation 'com.github.bumptech.glide:okhttp3-integration:4.12.0' implementation 'com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:1.0.0' implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:3.4.0.201406110918-r' - implementation 'com.github.ksoichiro:android-observablescrollview:1.6.0' - implementation 'com.github.kabouzeid:recyclerview-fastscroll:1.9-kmod' - implementation 'com.github.AdrienPoupa:jaudiotagger:2.2.3' + implementation 'org.bitbucket.ijabz:jaudiotagger:2.2.5' implementation 'com.anjlab.android.iab.v3:library:1.1.0' implementation 'com.r0adkll:slidableactivity:2.1.0' - implementation 'com.heinrichreimersoftware:material-intro:1.6' + implementation 'com.heinrichreimersoftware:material-intro:2.0.0' implementation 'com.github.dhaval2404:imagepicker:1.7.1' - implementation 'org.jsoup:jsoup:1.11.1' - implementation 'me.zhanghai.android.fastscroll:library:1.1.0' - implementation 'me.jorgecastillo:androidcolorx:0.2.0' - implementation 'org.jsoup:jsoup:1.11.1' + implementation 'me.zhanghai.android.fastscroll:library:1.1.7' debugImplementation 'com.amitshekhar.android:debug-db:1.0.6' } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index c48afcd1b..f5edd6ed0 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -23,6 +23,9 @@ # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile +-keepnames class ** +-keepnames class ** { *; } +-keepattributes SourceFile,LineNumberTable -dontwarn java.lang.invoke.* -dontwarn **$$Lambda$* @@ -34,9 +37,10 @@ # Glide -keep public class * implements com.bumptech.glide.module.GlideModule --keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { - **[] $VALUES; - public *; +-keep public class * extends com.bumptech.glide.module.AppGlideModule +-keep public enum com.bumptech.glide.load.ImageHeaderParser$** { + **[] $VALUES; + public *; } # OkHttp @@ -47,8 +51,6 @@ #-dontwarn #-ignorewarnings --dontshrink --dontobfuscate -dontwarn org.jaudiotagger.** -keep class org.jaudiotagger.** { *; } @@ -59,4 +61,8 @@ -keepnames class code.name.monkey.retromusic.model.Home -keep class * extends androidx.fragment.app.Fragment{} -keepnames class * extends android.os.Parcelable --keepnames class * extends java.io.Serializable \ No newline at end of file +-keepnames class * extends java.io.Serializable +-keep class code.name.monkey.retromusic.network.model.** { *; } +-keep class code.name.monkey.retromusic.model.CategoryInfo { *; } +-keep class com.google.android.material.bottomsheet.** { *; } +-keep class code.name.monkey.retromusic.Constants { *; } \ No newline at end of file diff --git a/app/src/debug/res/values/styles.xml b/app/src/debug/res/values/styles.xml index dcee15a66..e984e856c 100644 --- a/app/src/debug/res/values/styles.xml +++ b/app/src/debug/res/values/styles.xml @@ -6,6 +6,11 @@ @font/sans + + @@ -91,6 +96,11 @@ + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c8b117ede..16fa048d2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,9 +5,10 @@ + - + @@ -29,7 +30,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.RetroMusic.FollowSystem" - android:usesCleartextTraffic="false" + android:usesCleartextTraffic="true" tools:ignore="AllowBackup,GoogleAppIndexingWarning" tools:targetApi="m"> + + + + + + + - - - - + + + + + diff --git a/app/src/main/assets/contributors.json b/app/src/main/assets/contributors.json index e085d3797..7b97dc026 100644 --- a/app/src/main/assets/contributors.json +++ b/app/src/main/assets/contributors.json @@ -6,14 +6,14 @@ "image": "https://i.imgur.com/AoVs9oj.jpg" }, { - "name": "Lennart Glamann", - "summary": "Play Store Banner & Images", - "link": "https://t.me/FlixbusLennart", - "image": "https://i.imgur.com/Q5Nsx1R.jpg" + "name": "Prathamesh More", + "summary": "Developer", + "link": "https://prathameshmm02.github.io", + "image": "https://i.imgur.com/ZHoOrHx.jpg" }, { "name": "Daksh P. Jain", - "summary": "Support Representative & Moderator", + "summary": "Website & GitHub Maintainer", "link": "https://daksh.eu.org", "image": "https://i.imgur.com/fnYpg65.jpg" }, @@ -23,9 +23,15 @@ "link": "https://t.me/MilindGoel15", "image": "https://i.imgur.com/Bz4De21_d.jpg" }, -{ + { + "name": "Lennart Glamann", + "summary": "Play Store Banner & Images", + "link": "https://t.me/FlixbusLennart", + "image": "https://i.imgur.com/Q5Nsx1R.jpg" + }, + { "name": "Haythem Gataa", - "summary": "App Logo Designer", + "summary": "App Logo & Banners", "link": "https://dribbble.com/haythemgataa", "image": "https://i.imgur.com/g5RuIZq.jpg" } diff --git a/app/src/main/assets/retro-changelog.html b/app/src/main/assets/retro-changelog.html index aa3c01e7f..6525c677d 100644 --- a/app/src/main/assets/retro-changelog.html +++ b/app/src/main/assets/retro-changelog.html @@ -6,9 +6,11 @@ word-wrap: break-word; } - body { - padding-left: 1rem; - padding-right: 1rem; + div{ + margin: 20px 10px; + padding: 10px; + border-radius: 10px; + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2); } h2 { @@ -18,10 +20,7 @@ li { font-size: 0.85rem; - padding-top: 0.5rem; - padding-left: 0; - padding-right: 0; - color: rgba(0, 0, 0, 0.8); + padding: 0.5rem 0; } ul { @@ -44,39 +43,62 @@ margin-block-end: 0.5rem; } - h3 span { - border-radius: 0.2rem; - padding-left: 0.5rem; - padding-right: 0.5rem; - padding-top: 0.3rem; - padding-bottom: 0.3rem; + h3 { + margin: 10px 0px; font-size: 1rem; } {style-placeholder} + + + + + + -
April 30, 2020
-

v3.5.110

-Beta version -

What's New

-
    -
  • Changed profile form image to icon
  • -
  • New what's new screen
  • -
  • Added In-App language changer, where you can select language
  • -
-

Improved

-
    -
  • Improved loading of Songs, Albums, Artists, Genres, Playlists
  • -
+

+ Clear the app if it crashes after updating +

+
+ +
September 06, 2021
+

v5.0.0

+

What's New

+
    +
  • Added Chromecast support
  • +
  • Added animated icons
  • +
  • Added cross-fade (experimental)
  • +
  • Added ability to remember the last tab
  • +
  • Added whitelisting songs
  • +
  • Added support for embedded synced lyrics
  • +
  • Added lyrics editor for normal and synced lyrics
  • +
  • Added playlist ordering
  • +
  • Added search filters
  • +
  • Added audio fade
  • +
  • Added Multi-select in album and artist details
  • +
  • Added SD card from folders tab
  • +
  • Added Synced lyrics in all themes
  • +
  • Added Swipe anywhere to change the song
  • +
  • Added album artist
  • +
  • Albums now show album artists instead of artists of the first song
  • +
+

Fixed

+
    +
  • Fixed playlist preview images
  • +
  • Fixed language switching
  • +
+

Improved

+
    +
  • Improved playlists tab
  • +
  • Improved genres tab
  • +
+
-

*If you face any UI related issues you clear app data and cache, if itsnot working try to - uninstall and install - again.

- \ No newline at end of file + diff --git a/app/src/main/java/code/name/monkey/retromusic/App.kt b/app/src/main/java/code/name/monkey/retromusic/App.kt index 4de597d3c..7e5202f59 100644 --- a/app/src/main/java/code/name/monkey/retromusic/App.kt +++ b/app/src/main/java/code/name/monkey/retromusic/App.kt @@ -14,8 +14,8 @@ */ package code.name.monkey.retromusic +import android.app.Application import android.widget.Toast -import androidx.multidex.MultiDexApplication import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.Constants.PRO_VERSION_PRODUCT_ID @@ -25,7 +25,7 @@ import com.anjlab.android.iab.v3.TransactionDetails import org.koin.android.ext.koin.androidContext import org.koin.core.context.startKoin -class App : MultiDexApplication() { +class App : Application() { lateinit var billingProcessor: BillingProcessor diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt index ed4b38da2..738e5aa8e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -21,7 +21,8 @@ object Constants { const val PRO_VERSION_PRODUCT_ID = "pro_version" const val RATE_ON_GOOGLE_PLAY = "https://play.google.com/store/apps/details?id=code.name.monkey.retromusic" - const val TRANSLATE = "https://github.com/RetroMusicPlayer/RetroMusicPlayer" + const val TRANSLATE = "https://crowdin.com/project/retromusicplayer" + const val WEBSITE = "https://retromusic.app" const val GITHUB_PROJECT = "https://github.com/RetroMusicPlayer/RetroMusicPlayer" const val TELEGRAM_CHANGE_LOG = "https://t.me/retromusiclog" const val USER_PROFILE = "profile.jpg" @@ -49,7 +50,7 @@ object Constants { MediaStore.Audio.AudioColumns.ARTIST_ID, // 9 MediaStore.Audio.AudioColumns.ARTIST, // 10 MediaStore.Audio.AudioColumns.COMPOSER, // 11 - "album_artist" // 12 + ALBUM_ARTIST // 12 ) const val NUMBER_OF_TOP_TRACKS = 99 } @@ -66,7 +67,7 @@ const val EXTRA_SONG_INFO = "extra_song_info" const val DESATURATED_COLOR = "desaturated_color" const val BLACK_THEME = "black_theme" const val KEEP_SCREEN_ON = "keep_screen_on" -const val TYPE_HOME_BANNER = "type_home_banner" +const val TOGGLE_HOME_BANNER = "toggle_home_banner" const val NOW_PLAYING_SCREEN_ID = "now_playing_screen_id" const val CAROUSEL_EFFECT = "carousel_effect" const val COLORED_NOTIFICATION = "colored_notification" @@ -129,6 +130,7 @@ const val START_DIRECTORY = "start_directory" const val RECENTLY_PLAYED_CUTOFF = "recently_played_interval" const val LOCK_SCREEN = "lock_screen" const val ALBUM_ARTISTS_ONLY = "album_artists_only" +const val ALBUM_ARTIST = "album_artist" const val ALBUM_DETAIL_SONG_SORT_ORDER = "album_detail_song_sort_order" const val LYRICS_OPTIONS = "lyrics_tab_position" const val CHOOSE_EQUALIZER = "choose_equalizer" @@ -138,3 +140,11 @@ const val SONG_GRID_STYLE = "song_grid_style" const val PAUSE_ON_ZERO_VOLUME = "pause_on_zero_volume" const val FILTER_SONG = "filter_song" const val EXPAND_NOW_PLAYING_PANEL = "expand_now_playing_panel" +const val EXTRA_ARTIST_NAME = "extra_artist_name" +const val TOGGLE_SUGGESTIONS = "toggle_suggestions" +const val AUDIO_FADE_DURATION = "audio_fade_duration" +const val CROSS_FADE_DURATION = "cross_fade_duration" +const val SHOW_LYRICS = "show_lyrics" +const val REMEMBER_LAST_TAB = "remember_last_tab" +const val LAST_USED_TAB = "last_used_tab" +const val WHITELIST_MUSIC = "whitelist_music" diff --git a/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.java b/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.java index cbd9204e5..564fa56c4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.java +++ b/app/src/main/java/code/name/monkey/retromusic/LanguageContextWrapper.java @@ -5,15 +5,20 @@ import android.content.ContextWrapper; import android.content.res.Configuration; import android.content.res.Resources; import android.os.LocaleList; -import code.name.monkey.appthemehelper.util.VersionUtils; + +import com.google.android.gms.common.annotation.KeepName; + import java.util.Locale; +import code.name.monkey.appthemehelper.util.VersionUtils; + public class LanguageContextWrapper extends ContextWrapper { public LanguageContextWrapper(Context base) { super(base); } + @KeepName public static LanguageContextWrapper wrap(Context context, Locale newLocale) { Resources res = context.getResources(); Configuration configuration = res.getConfiguration(); diff --git a/app/src/main/java/code/name/monkey/retromusic/MainModule.kt b/app/src/main/java/code/name/monkey/retromusic/MainModule.kt index c701a47ec..bce82a70d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/MainModule.kt +++ b/app/src/main/java/code/name/monkey/retromusic/MainModule.kt @@ -3,6 +3,7 @@ package code.name.monkey.retromusic import androidx.room.Room import androidx.room.RoomDatabase import androidx.sqlite.db.SupportSQLiteDatabase +import code.name.monkey.retromusic.auto.AutoMusicProvider import code.name.monkey.retromusic.db.BlackListStoreDao import code.name.monkey.retromusic.db.BlackListStoreEntity import code.name.monkey.retromusic.db.PlaylistWithSongs @@ -85,6 +86,18 @@ private val roomModule = module { RealRoomRepository(get(), get(), get(), get(), get()) } bind RoomRepository::class } +private val autoModule = module { + single { + AutoMusicProvider(androidContext(), + get(), + get(), + get(), + get(), + get(), + get() + ) + } +} private val mainModule = module { single { androidContext().contentResolver @@ -167,10 +180,11 @@ private val viewModules = module { ) } - viewModel { (artistId: Long) -> + viewModel { (artistId: Long?, artistName: String?) -> ArtistDetailsViewModel( get(), - artistId + artistId, + artistName ) } @@ -189,4 +203,4 @@ private val viewModules = module { } } -val appModules = listOf(mainModule, dataModule, viewModules, networkModule, roomModule) \ No newline at end of file +val appModules = listOf(mainModule, dataModule, autoModule, viewModules, networkModule, roomModule) \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/RetroBottomSheetBehavior.java b/app/src/main/java/code/name/monkey/retromusic/RetroBottomSheetBehavior.java index 345cda937..1ad8c572d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/RetroBottomSheetBehavior.java +++ b/app/src/main/java/code/name/monkey/retromusic/RetroBottomSheetBehavior.java @@ -4,8 +4,11 @@ import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; + import androidx.coordinatorlayout.widget.CoordinatorLayout; + import com.google.android.material.bottomsheet.BottomSheetBehavior; + import org.jetbrains.annotations.NotNull; public class RetroBottomSheetBehavior extends BottomSheetBehavior { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/DriveModeActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/DriveModeActivity.kt index 3f5e7fbc0..d2bbcbe2b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/DriveModeActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/DriveModeActivity.kt @@ -23,10 +23,12 @@ import android.widget.SeekBar import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity +import code.name.monkey.retromusic.databinding.ActivityDriveModeBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.glide.BlurTransformation +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget -import code.name.monkey.retromusic.glide.SongGlideRequest import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback @@ -35,19 +37,19 @@ import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.Glide -import kotlinx.android.synthetic.main.activity_drive_mode.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext + /** * Created by hemanths on 2020-02-02. */ class DriveModeActivity : AbsMusicServiceActivity(), Callback { + private lateinit var binding: ActivityDriveModeBinding private var lastPlaybackControlsColor: Int = Color.GRAY private var lastDisabledPlaybackControlsColor: Int = Color.GRAY private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper @@ -55,12 +57,13 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) - setContentView(R.layout.activity_drive_mode) + binding = ActivityDriveModeBinding.inflate(layoutInflater) + setContentView(binding.root) setUpMusicControllers() progressViewUpdateHelper = MusicProgressViewUpdateHelper(this) lastPlaybackControlsColor = ThemeStore.accentColor(this) - close.setOnClickListener { + binding.close.setOnClickListener { onBackPressed() } } @@ -75,7 +78,7 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { } private fun setupFavouriteToggle() { - songFavourite.setOnClickListener { + binding.songFavourite.setOnClickListener { MusicUtil.toggleFavorite( this@DriveModeActivity, MusicPlayerRemote.currentSong @@ -88,13 +91,13 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { val isFavourite = MusicUtil.isFavorite(this@DriveModeActivity, MusicPlayerRemote.currentSong) withContext(Dispatchers.Main) { - songFavourite.setImageResource(if (isFavourite) R.drawable.ic_favorite else R.drawable.ic_favorite_border) + binding.songFavourite.setImageResource(if (isFavourite) R.drawable.ic_favorite else R.drawable.ic_favorite_border) } } } private fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -119,20 +122,20 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { private fun setUpPrevNext() { - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } override fun onRepeatModeChanged() { @@ -161,19 +164,19 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow) + binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow) } } fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -183,19 +186,25 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { private fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } @@ -209,29 +218,29 @@ class DriveModeActivity : AbsMusicServiceActivity(), Callback { private fun updateSong() { val song = MusicPlayerRemote.currentSong - songTitle.text = song.title - songText.text = song.artistName + binding.songTitle.text = song.title + binding.songText.text = song.artistName - SongGlideRequest.Builder.from(Glide.with(this), song) - .checkIgnoreMediaStore(this) - .generatePalette(this) - .build() + GlideApp.with(this) + .asBitmapPalette() + .songCoverOptions(song) + .load(RetroGlideExtension.getSongModel(song)) .transform(BlurTransformation.Builder(this).build()) - .into(object : RetroMusicColoredTarget(image) { + .into(object : RetroMusicColoredTarget(binding.image) { override fun onColorReady(colors: MediaNotificationProcessor) { } }) } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.java b/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.java index e66b7f812..f9ada218e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/activities/LicenseActivity.java @@ -18,19 +18,23 @@ import android.graphics.Color; import android.os.Bundle; import android.view.MenuItem; import android.webkit.WebView; + import androidx.annotation.NonNull; import androidx.appcompat.widget.Toolbar; + +import org.jetbrains.annotations.Nullable; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.util.ATHUtil; import code.name.monkey.appthemehelper.util.ColorUtil; import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.activities.base.AbsBaseActivity; -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; -import org.jetbrains.annotations.Nullable; /** Created by hemanths on 2019-09-27. */ public class LicenseActivity extends AbsBaseActivity { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LockScreenActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/LockScreenActivity.kt index ad3fa148f..792c83652 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/LockScreenActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/LockScreenActivity.kt @@ -23,27 +23,29 @@ import android.view.WindowManager import androidx.core.view.ViewCompat import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity +import code.name.monkey.retromusic.databinding.ActivityLockScreenBinding import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.player.lockscreen.LockScreenControlsFragment +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget -import code.name.monkey.retromusic.glide.SongGlideRequest import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.Glide import com.r0adkll.slidr.Slidr import com.r0adkll.slidr.model.SlidrConfig import com.r0adkll.slidr.model.SlidrListener import com.r0adkll.slidr.model.SlidrPosition -import kotlinx.android.synthetic.main.activity_lock_screen.* class LockScreenActivity : AbsMusicServiceActivity() { + private lateinit var binding: ActivityLockScreenBinding private var fragment: LockScreenControlsFragment? = null override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) lockScreenInit() - setContentView(R.layout.activity_lock_screen) + binding = ActivityLockScreenBinding.inflate(layoutInflater) + setContentView(binding.root) hideStatusBar() setStatusbarColorAuto() setNavigationbarColorAuto() @@ -107,9 +109,12 @@ class LockScreenActivity : AbsMusicServiceActivity() { private fun updateSongs() { val song = MusicPlayerRemote.currentSong - SongGlideRequest.Builder.from(Glide.with(this), song).checkIgnoreMediaStore(this) - .generatePalette(this).build().dontAnimate() - .into(object : RetroMusicColoredTarget(image) { + GlideApp.with(this) + .asBitmapPalette() + .songCoverOptions(song) + .load(RetroGlideExtension.getSongModel(song)) + .dontAnimate() + .into(object : RetroMusicColoredTarget(binding.image) { override fun onColorReady(colors: MediaNotificationProcessor) { fragment?.setColor(colors) } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt index ac4346223..5b72c24a6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/LyricsActivity.kt @@ -15,38 +15,64 @@ package code.name.monkey.retromusic.activities import android.os.Bundle -import android.view.Menu -import android.view.MenuItem -import android.view.WindowManager +import android.text.InputType +import android.view.* import androidx.core.view.ViewCompat -import androidx.interpolator.view.animation.FastOutSlowInInterpolator +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import androidx.viewpager2.adapter.FragmentStateAdapter import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity +import code.name.monkey.retromusic.activities.tageditor.WriteTagsAsyncTask +import code.name.monkey.retromusic.databinding.ActivityLyricsBinding +import code.name.monkey.retromusic.databinding.FragmentNormalLyricsBinding +import code.name.monkey.retromusic.databinding.FragmentSyncedLyricsBinding +import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.surfaceColor +import code.name.monkey.retromusic.extensions.textColorSecondary +import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.lyrics.LrcView +import code.name.monkey.retromusic.model.LoadingInfo import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.LyricUtil import code.name.monkey.retromusic.util.RetroUtil +import com.afollestad.materialdialogs.LayoutMode +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.bottomsheets.BottomSheet +import com.afollestad.materialdialogs.input.input import com.google.android.material.color.MaterialColors -import com.google.android.material.transition.platform.MaterialArcMotion +import com.google.android.material.tabs.TabLayoutMediator import com.google.android.material.transition.platform.MaterialContainerTransform -import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback -import kotlinx.android.synthetic.main.activity_lyrics.* +import kotlinx.coroutines.* +import org.jaudiotagger.audio.AudioFileIO +import org.jaudiotagger.tag.FieldKey +import java.io.File +import java.util.* -class LyricsActivity : AbsMusicServiceActivity(), MusicProgressViewUpdateHelper.Callback { - private lateinit var updateHelper: MusicProgressViewUpdateHelper +class LyricsActivity : AbsMusicServiceActivity() { + private lateinit var binding: ActivityLyricsBinding private lateinit var song: Song + private val lyricsSectionsAdapter = LyricsSectionsAdapter(this) + private val googleSearchLrcUrl: String get() { var baseUrl = "http://www.google.com/search?" var query = song.title + "+" + song.artistName - query = "q=" + query.replace(" ", "+") + " .lrc" + query = "q=" + query.replace(" ", "+") + " lyrics" + baseUrl += query + return baseUrl + } + private val syairSearchLrcUrl: String + get() { + var baseUrl = "https://www.syair.info/search?" + var query = song.title + "+" + song.artistName + query = "q=" + query.replace(" ", "+") baseUrl += query return baseUrl } @@ -63,75 +89,55 @@ class LyricsActivity : AbsMusicServiceActivity(), MusicProgressViewUpdateHelper. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_lyrics) - ViewCompat.setTransitionName(container, "lyrics") + binding = ActivityLyricsBinding.inflate(layoutInflater) + setContentView(binding.root) + ViewCompat.setTransitionName(binding.container, "lyrics") setStatusbarColorAuto() setTaskDescriptionColorAuto() setNavigationbarColorAuto() setupWakelock() - toolbar.setBackgroundColor(surfaceColor()) - ToolbarContentTintHelper.colorBackButton(toolbar) - setSupportActionBar(toolbar) + binding.toolbar.setBackgroundColor(surfaceColor()) + binding.tabLyrics.setBackgroundColor(surfaceColor()) + binding.container.setBackgroundColor(surfaceColor()) + ToolbarContentTintHelper.colorBackButton(binding.toolbar) + setSupportActionBar(binding.toolbar) + setupViews() - updateHelper = MusicProgressViewUpdateHelper(this, 500, 1000) - setupLyricsView() } - private fun setupLyricsView() { - lyricsView.apply { - setCurrentColor(ThemeStore.accentColor(context)) - setTimeTextColor(ThemeStore.accentColor(context)) - setTimelineColor(ThemeStore.accentColor(context)) - setTimelineTextColor(ThemeStore.accentColor(context)) - setDraggable(true, LrcView.OnPlayClickListener { - MusicPlayerRemote.seekTo(it.toInt()) - return@OnPlayClickListener true - }) - } + + private fun setupViews() { + binding.lyricsPager.adapter = lyricsSectionsAdapter + TabLayoutMediator(binding.tabLyrics, binding.lyricsPager) { tab, position -> + tab.text = when (position) { + 0 -> "Synced Lyrics" + 1 -> "Normal Lyrics" + else -> "" + } + }.attach() +// lyricsPager.isUserInputEnabled = false + + binding.tabLyrics.setSelectedTabIndicatorColor(ThemeStore.accentColor(this)) + binding.tabLyrics.setTabTextColors(textColorSecondary(), accentColor()) } - override fun onResume() { - super.onResume() - updateHelper.start() - } - - override fun onPause() { - super.onPause() - updateHelper.stop() - } - - override fun onUpdateProgressViews(progress: Int, total: Int) { - lyricsView.updateTime(progress.toLong()) - } - - private fun loadLRCLyrics() { - lyricsView.setLabel("Empty") - val song = MusicPlayerRemote.currentSong - if (LyricUtil.isLrcOriginalFileExist(song.data)) { - lyricsView.loadLrc(LyricUtil.getLocalLyricOriginalFile(song.data)) - } else if (LyricUtil.isLrcFileExist(song.title, song.artistName)) { - lyricsView.loadLrc(LyricUtil.getLocalLyricFile(song.title, song.artistName)) - } - } override fun onPlayingMetaChanged() { super.onPlayingMetaChanged() updateTitleSong() - loadLRCLyrics() } override fun onServiceConnected() { super.onServiceConnected() updateTitleSong() - loadLRCLyrics() } private fun updateTitleSong() { song = MusicPlayerRemote.currentSong - toolbar.title = song.title - toolbar.subtitle = song.artistName + binding.toolbar.title = song.title + binding.toolbar.subtitle = song.artistName } private fun setupWakelock() { @@ -149,8 +155,206 @@ class LyricsActivity : AbsMusicServiceActivity(), MusicProgressViewUpdateHelper. return true } if (item.itemId == R.id.action_search) { - RetroUtil.openUrl(this, googleSearchLrcUrl) + RetroUtil.openUrl( + this, when (binding.lyricsPager.currentItem) { + 0 -> syairSearchLrcUrl + 1 -> googleSearchLrcUrl + else -> googleSearchLrcUrl + } + ) + } else if (item.itemId == R.id.action_edit) { + when (binding.lyricsPager.currentItem) { + 0 -> { + editSyncedLyrics() + } + 1 -> { + editNormalLyrics() + } + } } return super.onOptionsItemSelected(item) } + + + private fun editNormalLyrics() { + var content = "" + val file = File(MusicPlayerRemote.currentSong.data) + try { + content = AudioFileIO.read(file).tagOrCreateDefault.getFirst(FieldKey.LYRICS) + } catch (e: Exception) { + e.printStackTrace() + } + + MaterialDialog(this, BottomSheet(LayoutMode.WRAP_CONTENT)).show { + title(res = R.string.edit_normal_lyrics) + input( + hintRes = R.string.paste_lyrics_here, + prefill = content, + inputType = InputType.TYPE_TEXT_FLAG_MULTI_LINE or InputType.TYPE_CLASS_TEXT + ) { _, input -> + val fieldKeyValueMap = EnumMap(FieldKey::class.java) + fieldKeyValueMap[FieldKey.LYRICS] = input.toString() + WriteTagsAsyncTask(this@LyricsActivity).execute( + LoadingInfo( + listOf(song.data), fieldKeyValueMap, null + ) + ) + } + positiveButton(res = R.string.save) { + (lyricsSectionsAdapter.fragments[1].first as NormalLyrics).loadNormalLyrics() + } + negativeButton(res = android.R.string.cancel) + } + } + + + private fun editSyncedLyrics() { + var lrcFile: File? = null + if (LyricUtil.isLrcOriginalFileExist(song.data)) { + lrcFile = LyricUtil.getLocalLyricOriginalFile(song.data) + } else if (LyricUtil.isLrcFileExist(song.title, song.artistName)) { + lrcFile = LyricUtil.getLocalLyricFile(song.title, song.artistName) + } + val content: String = LyricUtil.getStringFromLrc(lrcFile) + + MaterialDialog(this, BottomSheet(LayoutMode.WRAP_CONTENT)).show { + title(res = R.string.edit_synced_lyrics) + input( + hintRes = R.string.paste_timeframe_lyrics_here, + prefill = content, + inputType = InputType.TYPE_TEXT_FLAG_MULTI_LINE or InputType.TYPE_CLASS_TEXT + ) { _, input -> + LyricUtil.writeLrc(song, input.toString()) + } + positiveButton(res = R.string.save) { + (lyricsSectionsAdapter.fragments[0].first as SyncedLyrics).loadLRCLyrics() + } + negativeButton(res = android.R.string.cancel) + } + } + + class LyricsSectionsAdapter(fragmentActivity: FragmentActivity) : + FragmentStateAdapter(fragmentActivity) { + val fragments = listOf( + Pair(SyncedLyrics(), R.string.synced_lyrics), + Pair(NormalLyrics(), R.string.normal_lyrics) + ) + + + override fun getItemCount(): Int { + return fragments.size + } + + override fun createFragment(position: Int): Fragment { + return fragments[position].first + } + } + + class NormalLyrics : AbsMusicServiceFragment(R.layout.fragment_normal_lyrics) { + + private var _binding: FragmentNormalLyricsBinding? = null + private val binding get() = _binding!! + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + _binding = FragmentNormalLyricsBinding.bind(view) + loadNormalLyrics() + super.onViewCreated(view, savedInstanceState) + } + + fun loadNormalLyrics() { + var lyrics: String? = null + val file = File(MusicPlayerRemote.currentSong.data) + try { + lyrics = AudioFileIO.read(file).tagOrCreateDefault.getFirst(FieldKey.LYRICS) + } catch (e: Exception) { + e.printStackTrace() + } + if (lyrics.isNullOrEmpty()) { + binding.noLyricsFound.visibility = View.VISIBLE + } else { + binding.noLyricsFound.visibility = View.GONE + } + binding.normalLyrics.text = lyrics + } + + override fun onPlayingMetaChanged() { + super.onPlayingMetaChanged() + loadNormalLyrics() + } + + override fun onServiceConnected() { + super.onServiceConnected() + loadNormalLyrics() + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + } + + class SyncedLyrics : AbsMusicServiceFragment(R.layout.fragment_synced_lyrics), + MusicProgressViewUpdateHelper.Callback { + + private var _binding: FragmentSyncedLyricsBinding? = null + private val binding get() = _binding!! + private lateinit var updateHelper: MusicProgressViewUpdateHelper + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + updateHelper = MusicProgressViewUpdateHelper(this, 500, 1000) + _binding = FragmentSyncedLyricsBinding.bind(view) + setupLyricsView() + loadLRCLyrics() + super.onViewCreated(view, savedInstanceState) + } + + fun loadLRCLyrics() { + binding.lyricsView.setLabel("Empty") + val song = MusicPlayerRemote.currentSong + if (LyricUtil.isLrcOriginalFileExist(song.data)) { + binding.lyricsView.loadLrc(LyricUtil.getLocalLyricOriginalFile(song.data)) + } else if (LyricUtil.isLrcFileExist(song.title, song.artistName)) { + binding.lyricsView.loadLrc(LyricUtil.getLocalLyricFile(song.title, song.artistName)) + } + } + + private fun setupLyricsView() { + binding.lyricsView.apply { + setCurrentColor(ThemeStore.accentColor(context)) + setTimeTextColor(ThemeStore.accentColor(context)) + setTimelineColor(ThemeStore.accentColor(context)) + setTimelineTextColor(ThemeStore.accentColor(context)) + setDraggable(true, LrcView.OnPlayClickListener { + MusicPlayerRemote.seekTo(it.toInt()) + return@OnPlayClickListener true + }) + } + } + + override fun onUpdateProgressViews(progress: Int, total: Int) { + binding.lyricsView.updateTime(progress.toLong()) + } + + override fun onPlayingMetaChanged() { + super.onPlayingMetaChanged() + loadLRCLyrics() + } + + override fun onServiceConnected() { + super.onServiceConnected() + loadLRCLyrics() + } + + override fun onResume() { + super.onResume() + updateHelper.start() + } + + override fun onPause() { + super.onPause() + updateHelper.stop() + } + } + + } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt index 27dd70788..4f96a6968 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt @@ -20,38 +20,15 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener import android.net.Uri import android.os.Bundle import android.provider.MediaStore -import android.view.View import androidx.lifecycle.lifecycleScope -import androidx.navigation.ui.NavigationUI -import code.name.monkey.retromusic.ADAPTIVE_COLOR_APP -import code.name.monkey.retromusic.ALBUM_COVER_STYLE -import code.name.monkey.retromusic.ALBUM_COVER_TRANSFORM -import code.name.monkey.retromusic.BANNER_IMAGE_PATH -import code.name.monkey.retromusic.BLACK_THEME -import code.name.monkey.retromusic.CAROUSEL_EFFECT -import code.name.monkey.retromusic.CIRCULAR_ALBUM_ART -import code.name.monkey.retromusic.DESATURATED_COLOR -import code.name.monkey.retromusic.EXTRA_SONG_INFO -import code.name.monkey.retromusic.GENERAL_THEME -import code.name.monkey.retromusic.HOME_ARTIST_GRID_STYLE -import code.name.monkey.retromusic.KEEP_SCREEN_ON -import code.name.monkey.retromusic.LANGUAGE_NAME -import code.name.monkey.retromusic.LIBRARY_CATEGORIES -import code.name.monkey.retromusic.NOW_PLAYING_SCREEN_ID -import code.name.monkey.retromusic.PROFILE_IMAGE_PATH -import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.ROUND_CORNERS -import code.name.monkey.retromusic.TAB_TEXT_MODE -import code.name.monkey.retromusic.TOGGLE_ADD_CONTROLS -import code.name.monkey.retromusic.TOGGLE_FULL_SCREEN -import code.name.monkey.retromusic.TOGGLE_GENRE -import code.name.monkey.retromusic.TYPE_HOME_BANNER -import code.name.monkey.retromusic.TOGGLE_SEPARATE_LINE -import code.name.monkey.retromusic.TOGGLE_VOLUME -import code.name.monkey.retromusic.USER_NAME -import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity +import androidx.navigation.ui.setupWithNavController +import code.name.monkey.retromusic.* +import code.name.monkey.retromusic.activities.base.AbsCastActivity +import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding import code.name.monkey.retromusic.extensions.extra import code.name.monkey.retromusic.extensions.findNavController +import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewFragment +import code.name.monkey.retromusic.fragments.home.HomeFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.SearchQueryHelper.getSongs import code.name.monkey.retromusic.model.CategoryInfo @@ -64,13 +41,13 @@ import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch import org.koin.android.ext.android.get -class MainActivity : AbsSlidingMusicPanelActivity(), OnSharedPreferenceChangeListener { +class MainActivity : AbsCastActivity(), OnSharedPreferenceChangeListener { companion object { const val TAG = "MainActivity" const val EXPAND_PANEL = "expand_panel" } - override fun createContentView(): View { + override fun createContentView(): SlidingMusicPanelLayoutBinding { return wrapSlidingMusicPanel() } @@ -98,10 +75,50 @@ class MainActivity : AbsSlidingMusicPanelActivity(), OnSharedPreferenceChangeLis val categoryInfo: CategoryInfo = PreferenceUtil.libraryCategory.first { it.visible } if (categoryInfo.visible) { - navGraph.startDestination = categoryInfo.category.id + navGraph.setStartDestination( + if (PreferenceUtil.rememberLastTab) { + PreferenceUtil.lastTab.let { + if (it == 0) { + categoryInfo.category.id + } else { + it + } + } + } else categoryInfo.category.id + ) } navController.graph = navGraph - NavigationUI.setupWithNavController(getBottomNavigationView(), navController) + getBottomNavigationView().setupWithNavController(navController) + // Scroll Fragment to top + getBottomNavigationView().setOnItemReselectedListener { + supportFragmentManager.findFragmentById(R.id.fragment_container)?.childFragmentManager?.fragments?.get(0) + .also { + if (it is AbsRecyclerViewFragment<*, *>) { + it.scrollToTop() + } + if (it is HomeFragment) { + it.scrollToTop() + } + } + } + navController.addOnDestinationChangedListener { _, destination, _ -> + when (destination.id) { + R.id.action_home, R.id.action_song, R.id.action_album, R.id.action_artist, R.id.action_folder, R.id.action_playlist, R.id.action_genre -> { + // Save the last tab + if (PreferenceUtil.rememberLastTab) { + saveTab(destination.id) + } + // Show Bottom Navigation Bar + setBottomBarVisibility(true) + } + else -> setBottomBarVisibility(false) // Hide Bottom Navigation Bar + } + + } + } + + private fun saveTab(id: Int) { + PreferenceUtil.lastTab = id } override fun onSupportNavigateUp(): Boolean = @@ -112,6 +129,8 @@ class MainActivity : AbsSlidingMusicPanelActivity(), OnSharedPreferenceChangeLis PreferenceUtil.registerOnSharedPreferenceChangedListener(this) val expand = extra(EXPAND_PANEL).value ?: false if (expand && PreferenceUtil.isExpandPanel) { + setBottomBarVisibility(false) + fromNotification = true expandPanel() intent.removeExtra(EXPAND_PANEL) } @@ -123,7 +142,7 @@ class MainActivity : AbsSlidingMusicPanelActivity(), OnSharedPreferenceChangeLis } override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { - if (key == GENERAL_THEME || key == BLACK_THEME || key == ADAPTIVE_COLOR_APP || key == USER_NAME || key == TOGGLE_FULL_SCREEN || key == TOGGLE_VOLUME || key == ROUND_CORNERS || key == CAROUSEL_EFFECT || key == NOW_PLAYING_SCREEN_ID || key == TOGGLE_GENRE || key == BANNER_IMAGE_PATH || key == PROFILE_IMAGE_PATH || key == CIRCULAR_ALBUM_ART || key == KEEP_SCREEN_ON || key == TOGGLE_SEPARATE_LINE || key == TYPE_HOME_BANNER || key == TOGGLE_ADD_CONTROLS || key == ALBUM_COVER_STYLE || key == HOME_ARTIST_GRID_STYLE || key == ALBUM_COVER_TRANSFORM || key == DESATURATED_COLOR || key == EXTRA_SONG_INFO || key == TAB_TEXT_MODE || key == LANGUAGE_NAME || key == LIBRARY_CATEGORIES) { + if (key == GENERAL_THEME || key == BLACK_THEME || key == ADAPTIVE_COLOR_APP || key == USER_NAME || key == TOGGLE_FULL_SCREEN || key == TOGGLE_VOLUME || key == ROUND_CORNERS || key == CAROUSEL_EFFECT || key == NOW_PLAYING_SCREEN_ID || key == TOGGLE_GENRE || key == BANNER_IMAGE_PATH || key == PROFILE_IMAGE_PATH || key == CIRCULAR_ALBUM_ART || key == KEEP_SCREEN_ON || key == TOGGLE_SEPARATE_LINE || key == TOGGLE_HOME_BANNER || key == TOGGLE_ADD_CONTROLS || key == ALBUM_COVER_STYLE || key == HOME_ARTIST_GRID_STYLE || key == ALBUM_COVER_TRANSFORM || key == DESATURATED_COLOR || key == EXTRA_SONG_INFO || key == TAB_TEXT_MODE || key == LANGUAGE_NAME || key == LIBRARY_CATEGORIES) { postRecreate() } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt index 543ca1c3e..f61eb5184 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PermissionActivity.kt @@ -14,44 +14,51 @@ */ package code.name.monkey.retromusic.activities +import android.Manifest import android.content.Intent +import android.content.pm.PackageManager +import android.content.res.ColorStateList import android.net.Uri +import android.os.Build import android.os.Bundle import android.provider.Settings +import android.view.View +import androidx.annotation.RequiresApi import androidx.core.text.HtmlCompat import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.VersionUtils -import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity +import code.name.monkey.retromusic.databinding.ActivityPermissionBinding import code.name.monkey.retromusic.extensions.accentBackgroundColor import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.util.RingtoneManager -import kotlinx.android.synthetic.main.activity_permission.* -import kotlinx.android.synthetic.main.fragment_library.appNameText class PermissionActivity : AbsMusicServiceActivity() { + private lateinit var binding: ActivityPermissionBinding + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView((R.layout.activity_permission)) + binding = ActivityPermissionBinding.inflate(layoutInflater) + setContentView(binding.root) setStatusbarColorAuto() setNavigationbarColorAuto() setLightNavigationBar(true) setTaskDescriptionColorAuto() setupTitle() - storagePermission.setButtonClick { + binding.storagePermission.setButtonClick { requestPermissions() } - if (VersionUtils.hasMarshmallow()) audioPermission.show() - audioPermission.setButtonClick { + if (VersionUtils.hasMarshmallow()) binding.audioPermission.show() + binding.audioPermission.setButtonClick { if (RingtoneManager.requiresDialog(this@PermissionActivity)) { val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS) intent.data = Uri.parse("package:" + applicationContext.packageName) startActivity(intent) } } - finish.accentBackgroundColor() - finish.setOnClickListener { + binding.finish.accentBackgroundColor() + binding.finish.setOnClickListener { if (hasPermissions()) { startActivity( Intent(this, MainActivity::class.java).addFlags( @@ -71,6 +78,32 @@ class PermissionActivity : AbsMusicServiceActivity() { "Hello there!
Welcome to Retro Music", HtmlCompat.FROM_HTML_MODE_COMPACT ) - appNameText.text = appName + binding.appNameText.text = appName + } + + @RequiresApi(Build.VERSION_CODES.M) + override fun onResume() { + if (hasStoragePermission()) { + binding.storagePermission.checkImage.visibility = View.VISIBLE + binding.storagePermission.checkImage.imageTintList = + ColorStateList.valueOf(ThemeStore.accentColor(this)) + } + if (hasAudioPermission()) { + binding.audioPermission.checkImage.visibility = View.VISIBLE + binding.audioPermission.checkImage.imageTintList = + ColorStateList.valueOf(ThemeStore.accentColor(this)) + } + + super.onResume() + } + + @RequiresApi(Build.VERSION_CODES.M) + private fun hasStoragePermission(): Boolean { + return checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED + } + + @RequiresApi(Build.VERSION_CODES.M) + private fun hasAudioPermission(): Boolean { + return Settings.System.canWrite(this) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt index e8a24424c..70b45c245 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PlayingQueueActivity.kt @@ -24,6 +24,7 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsMusicServiceActivity import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter +import code.name.monkey.retromusic.databinding.ActivityPlayingQueueBinding import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -34,10 +35,10 @@ import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropM import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils -import kotlinx.android.synthetic.main.activity_playing_queue.* open class PlayingQueueActivity : AbsMusicServiceActivity() { + private lateinit var binding: ActivityPlayingQueueBinding private var wrappedAdapter: RecyclerView.Adapter<*>? = null private var recyclerViewDragDropManager: RecyclerViewDragDropManager? = null private var recyclerViewSwipeManager: RecyclerViewSwipeManager? = null @@ -56,7 +57,8 @@ open class PlayingQueueActivity : AbsMusicServiceActivity() { override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) - setContentView(R.layout.activity_playing_queue) + binding = ActivityPlayingQueueBinding.inflate(layoutInflater) + setContentView(binding.root) setStatusbarColorAuto() setNavigationbarColorAuto() setTaskDescriptionColorAuto() @@ -65,7 +67,7 @@ open class PlayingQueueActivity : AbsMusicServiceActivity() { setupToolbar() setUpRecyclerView() - clearQueue.setOnClickListener { + binding.clearQueue.setOnClickListener { MusicPlayerRemote.clearQueue() } checkForPadding() @@ -100,25 +102,25 @@ open class PlayingQueueActivity : AbsMusicServiceActivity() { linearLayoutManager = LinearLayoutManager(this) - recyclerView.layoutManager = linearLayoutManager - recyclerView.adapter = wrappedAdapter - recyclerView.itemAnimator = animator - recyclerViewTouchActionGuardManager?.attachRecyclerView(recyclerView) - recyclerViewDragDropManager?.attachRecyclerView(recyclerView) - recyclerViewSwipeManager?.attachRecyclerView(recyclerView) + binding.recyclerView.layoutManager = linearLayoutManager + binding.recyclerView.adapter = wrappedAdapter + binding.recyclerView.itemAnimator = animator + recyclerViewTouchActionGuardManager?.attachRecyclerView(binding.recyclerView) + recyclerViewDragDropManager?.attachRecyclerView(binding.recyclerView) + recyclerViewSwipeManager?.attachRecyclerView(binding.recyclerView) linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) - recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { + binding.recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) if (dy > 0) { - clearQueue.shrink() + binding.clearQueue.shrink() } else if (dy < 0) { - clearQueue.extend() + binding.clearQueue.extend() } } }) - ThemedFastScroller.create(recyclerView) + ThemedFastScroller.create(binding.recyclerView) } private fun checkForPadding() { @@ -140,7 +142,7 @@ open class PlayingQueueActivity : AbsMusicServiceActivity() { } private fun updateCurrentSong() { - toolbar.subtitle = getUpNextAndQueueTime() + binding.toolbar.subtitle = getUpNextAndQueueTime() } override fun onPlayingMetaChanged() { @@ -150,7 +152,7 @@ open class PlayingQueueActivity : AbsMusicServiceActivity() { private fun updateQueuePosition() { playingQueueAdapter?.setCurrent(MusicPlayerRemote.position) resetToCurrentPosition() - toolbar.subtitle = getUpNextAndQueueTime() + binding.toolbar.subtitle = getUpNextAndQueueTime() } private fun updateQueue() { @@ -159,7 +161,7 @@ open class PlayingQueueActivity : AbsMusicServiceActivity() { } private fun resetToCurrentPosition() { - recyclerView.stopScroll() + binding.recyclerView.stopScroll() linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) } @@ -188,15 +190,15 @@ open class PlayingQueueActivity : AbsMusicServiceActivity() { } private fun setupToolbar() { - toolbar.subtitle = getUpNextAndQueueTime() - toolbar.setBackgroundColor(surfaceColor()) - setSupportActionBar(toolbar) - clearQueue.backgroundTintList = ColorStateList.valueOf(accentColor()) + binding.toolbar.subtitle = getUpNextAndQueueTime() + binding.toolbar.setBackgroundColor(surfaceColor()) + setSupportActionBar(binding.toolbar) + binding.clearQueue.backgroundTintList = ColorStateList.valueOf(accentColor()) ColorStateList.valueOf( MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(accentColor())) ).apply { - clearQueue.setTextColor(this) - clearQueue.iconTint = this + binding.clearQueue.setTextColor(this) + binding.clearQueue.iconTint = this } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt index 573ab2530..c611d2f2c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/PurchaseActivity.kt @@ -29,43 +29,45 @@ import code.name.monkey.retromusic.BuildConfig import code.name.monkey.retromusic.Constants.PRO_VERSION_PRODUCT_ID import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity +import code.name.monkey.retromusic.databinding.ActivityProVersionBinding import com.anjlab.android.iab.v3.BillingProcessor import com.anjlab.android.iab.v3.TransactionDetails import java.lang.ref.WeakReference -import kotlinx.android.synthetic.main.activity_pro_version.* class PurchaseActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler { + private lateinit var binding: ActivityProVersionBinding private lateinit var billingProcessor: BillingProcessor private var restorePurchaseAsyncTask: AsyncTask<*, *, *>? = null override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) - setContentView(R.layout.activity_pro_version) + binding = ActivityProVersionBinding.inflate(layoutInflater) + setContentView(binding.root) setStatusbarColor(Color.TRANSPARENT) setLightStatusbar(false) setNavigationbarColor(Color.BLACK) setLightNavigationBar(false) - toolbar.navigationIcon?.setTint(Color.WHITE) - toolbar.setNavigationOnClickListener { onBackPressed() } + binding.toolbar.navigationIcon?.setTint(Color.WHITE) + binding.toolbar.setNavigationOnClickListener { onBackPressed() } - restoreButton.isEnabled = false - purchaseButton.isEnabled = false + binding.restoreButton.isEnabled = false + binding.purchaseButton.isEnabled = false billingProcessor = BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSING_KEY, this) - MaterialUtil.setTint(purchaseButton, true) + MaterialUtil.setTint(binding.purchaseButton, true) - restoreButton.setOnClickListener { + binding.restoreButton.setOnClickListener { if (restorePurchaseAsyncTask == null || restorePurchaseAsyncTask!!.status != AsyncTask.Status.RUNNING) { restorePurchase() } } - purchaseButton.setOnClickListener { + binding.purchaseButton.setOnClickListener { billingProcessor.purchase(this@PurchaseActivity, PRO_VERSION_PRODUCT_ID) } - bannerContainer.backgroundTintList = + binding.bannerContainer.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) } @@ -99,8 +101,8 @@ class PurchaseActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler { } override fun onBillingInitialized() { - restoreButton.isEnabled = true - purchaseButton.isEnabled = true + binding.restoreButton.isEnabled = true + binding.purchaseButton.isEnabled = true } public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt index 4dc879e05..54d31bb43 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SettingsActivity.kt @@ -23,16 +23,19 @@ import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager +import code.name.monkey.retromusic.databinding.ActivitySettingsBinding import code.name.monkey.retromusic.extensions.applyToolbar import code.name.monkey.retromusic.extensions.findNavController -import com.afollestad.materialdialogs.color.ColorChooserDialog -import kotlinx.android.synthetic.main.activity_settings.* +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.color.ColorCallback -class SettingsActivity : AbsBaseActivity(), ColorChooserDialog.ColorCallback { +class SettingsActivity : AbsBaseActivity(), ColorCallback { + private lateinit var binding: ActivitySettingsBinding override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) - setContentView(R.layout.activity_settings) + binding = ActivitySettingsBinding.inflate(layoutInflater) + setContentView(binding.root) setStatusbarColorAuto() setNavigationbarColorAuto() setLightNavigationBar(true) @@ -41,10 +44,11 @@ class SettingsActivity : AbsBaseActivity(), ColorChooserDialog.ColorCallback { private fun setupToolbar() { setTitle(R.string.action_settings) - applyToolbar(toolbar) + applyToolbar(binding.toolbar) val navController: NavController = findNavController(R.id.contentFrame) navController.addOnDestinationChangedListener { _, _, _ -> - toolbar.title = navController.currentDestination?.let { getStringFromDestination(it) } + binding.toolbar.title = + navController.currentDestination?.let { getStringFromDestination(it) } } } @@ -68,24 +72,18 @@ class SettingsActivity : AbsBaseActivity(), ColorChooserDialog.ColorCallback { return findNavController(R.id.contentFrame).navigateUp() || super.onSupportNavigateUp() } - override fun onColorSelection(dialog: ColorChooserDialog, selectedColor: Int) { - when (dialog.title) { - R.string.accent_color -> { - ThemeStore.editTheme(this).accentColor(selectedColor).commit() - if (VersionUtils.hasNougatMR()) - DynamicShortcutManager(this).updateDynamicShortcuts() - } - } - recreate() - } - - override fun onColorChooserDismissed(dialog: ColorChooserDialog) { - } - override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == android.R.id.home) { onBackPressed() } return super.onOptionsItemSelected(item) } + + override fun invoke(dialog: MaterialDialog, color: Int) { + ThemeStore.editTheme(this).accentColor(color).commit() + if (VersionUtils.hasNougatMR()) + DynamicShortcutManager(this).updateDynamicShortcuts() + + recreate() + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/ShareInstagramStory.kt b/app/src/main/java/code/name/monkey/retromusic/activities/ShareInstagramStory.kt index 1bcd169cf..b3d31052b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/ShareInstagramStory.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/ShareInstagramStory.kt @@ -26,15 +26,14 @@ import androidx.core.view.drawToBitmap import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper -import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity +import code.name.monkey.retromusic.databinding.ActivityShareInstagramBinding +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget -import code.name.monkey.retromusic.glide.SongGlideRequest import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.Share import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.Glide -import kotlinx.android.synthetic.main.activity_share_instagram.* /** * Created by hemanths on 2020-02-02. @@ -42,6 +41,8 @@ import kotlinx.android.synthetic.main.activity_share_instagram.* class ShareInstagramStory : AbsBaseActivity() { + private lateinit var binding: ActivityShareInstagramBinding + companion object { const val EXTRA_SONG = "extra_song" } @@ -57,32 +58,33 @@ class ShareInstagramStory : AbsBaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) - setContentView(R.layout.activity_share_instagram) + binding = ActivityShareInstagramBinding.inflate(layoutInflater) + setContentView(binding.root) setStatusbarColor(Color.TRANSPARENT) setNavigationbarColor(Color.BLACK) - toolbar.setBackgroundColor(Color.TRANSPARENT) - setSupportActionBar(toolbar) + binding.toolbar.setBackgroundColor(Color.TRANSPARENT) + setSupportActionBar(binding.toolbar) val song = intent.extras?.getParcelable(EXTRA_SONG) song?.let { songFinal -> - SongGlideRequest.Builder.from(Glide.with(this), songFinal) - .checkIgnoreMediaStore(this@ShareInstagramStory) - .generatePalette(this@ShareInstagramStory) - .build() - .into(object : RetroMusicColoredTarget(image) { + GlideApp.with(this) + .asBitmapPalette() + .songCoverOptions(songFinal) + .load(RetroGlideExtension.getSongModel(songFinal)) + .into(object : RetroMusicColoredTarget(binding.image) { override fun onColorReady(colors: MediaNotificationProcessor) { val isColorLight = ColorUtil.isColorLight(colors.backgroundColor) setColors(isColorLight, colors.backgroundColor) } }) - shareTitle.text = songFinal.title - shareText.text = songFinal.artistName - shareButton.setOnClickListener { + binding.shareTitle.text = songFinal.title + binding.shareText.text = songFinal.artistName + binding.shareButton.setOnClickListener { val path: String = Media.insertImage( contentResolver, - mainContent.drawToBitmap(Bitmap.Config.ARGB_8888), + binding.mainContent.drawToBitmap(Bitmap.Config.ARGB_8888), "Design", null ) val uri = Uri.parse(path) @@ -92,24 +94,25 @@ class ShareInstagramStory : AbsBaseActivity() { ) } } - shareButton.setTextColor( + binding.shareButton.setTextColor( MaterialValueHelper.getPrimaryTextColor( this, ColorUtil.isColorLight(ThemeStore.accentColor(this)) ) ) - shareButton.backgroundTintList = ColorStateList.valueOf(ThemeStore.accentColor(this)) + binding.shareButton.backgroundTintList = + ColorStateList.valueOf(ThemeStore.accentColor(this)) } private fun setColors(colorLight: Boolean, color: Int) { setLightStatusbar(colorLight) - toolbar.setTitleTextColor( + binding.toolbar.setTitleTextColor( MaterialValueHelper.getPrimaryTextColor( this@ShareInstagramStory, colorLight ) ) - toolbar.navigationIcon?.setTintList( + binding.toolbar.navigationIcon?.setTintList( ColorStateList.valueOf( MaterialValueHelper.getPrimaryTextColor( this@ShareInstagramStory, @@ -117,7 +120,7 @@ class ShareInstagramStory : AbsBaseActivity() { ) ) ) - mainContent.background = + binding.mainContent.background = GradientDrawable( GradientDrawable.Orientation.TOP_BOTTOM, intArrayOf(color, Color.BLACK) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt index 7efc576a6..58cddd711 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/SupportDevelopmentActivity.kt @@ -37,6 +37,7 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.BuildConfig import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity +import code.name.monkey.retromusic.databinding.ActivityDonationBinding import code.name.monkey.retromusic.extensions.textColorPrimary import code.name.monkey.retromusic.extensions.textColorSecondary import com.anjlab.android.iab.v3.BillingProcessor @@ -44,10 +45,11 @@ import com.anjlab.android.iab.v3.SkuDetails import com.anjlab.android.iab.v3.TransactionDetails import java.lang.ref.WeakReference import java.util.* -import kotlinx.android.synthetic.main.activity_donation.* class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingHandler { + lateinit var binding: ActivityDonationBinding + companion object { val TAG: String = SupportDevelopmentActivity::class.java.simpleName const val DONATION_PRODUCT_IDS = R.array.donation_ids @@ -72,6 +74,7 @@ class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingH override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + binding = ActivityDonationBinding.inflate(layoutInflater) setContentView(R.layout.activity_donation) setStatusbarColorAuto() @@ -82,15 +85,15 @@ class SupportDevelopmentActivity : AbsBaseActivity(), BillingProcessor.IBillingH setupToolbar() billingProcessor = BillingProcessor(this, BuildConfig.GOOGLE_PLAY_LICENSING_KEY, this) - TintHelper.setTint(progress, ThemeStore.accentColor(this)) - donation.setTextColor(ThemeStore.accentColor(this)) + TintHelper.setTint(binding.progress, ThemeStore.accentColor(this)) + binding.donation.setTextColor(ThemeStore.accentColor(this)) } private fun setupToolbar() { val toolbarColor = ATHUtil.resolveColor(this, R.attr.colorSurface) - toolbar.setBackgroundColor(toolbarColor) - ToolbarContentTintHelper.colorBackButton(toolbar) - setSupportActionBar(toolbar) + binding.toolbar.setBackgroundColor(toolbarColor) + ToolbarContentTintHelper.colorBackButton(binding.toolbar) + setSupportActionBar(binding.toolbar) } override fun onBillingInitialized() { @@ -146,8 +149,8 @@ private class SkuDetailsLoadAsyncTask(supportDevelopmentActivity: SupportDevelop super.onPreExecute() val supportDevelopmentActivity = weakReference.get() ?: return - supportDevelopmentActivity.progressContainer.visibility = View.VISIBLE - supportDevelopmentActivity.recyclerView.visibility = View.GONE + supportDevelopmentActivity.binding.progressContainer.visibility = View.VISIBLE + supportDevelopmentActivity.binding.recyclerView.visibility = View.GONE } override fun doInBackground(vararg params: Void): List? { @@ -166,15 +169,17 @@ private class SkuDetailsLoadAsyncTask(supportDevelopmentActivity: SupportDevelop val dialog = weakReference.get() ?: return if (skuDetails == null || skuDetails.isEmpty()) { - dialog.progressContainer.visibility = View.GONE + dialog.binding.progressContainer.visibility = View.GONE return } - dialog.progressContainer.visibility = View.GONE - dialog.recyclerView.itemAnimator = DefaultItemAnimator() - dialog.recyclerView.layoutManager = GridLayoutManager(dialog, 2) - dialog.recyclerView.adapter = SkuDetailsAdapter(dialog, skuDetails) - dialog.recyclerView.visibility = View.VISIBLE + dialog.binding.progressContainer.visibility = View.GONE + dialog.binding.recyclerView.apply { + itemAnimator = DefaultItemAnimator() + layoutManager = GridLayoutManager(dialog, 2) + adapter = SkuDetailsAdapter(dialog, skuDetails) + visibility = View.VISIBLE + } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt index a3bf682ad..1394cc935 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/UserInfoActivity.kt @@ -27,54 +27,58 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.Constants.USER_BANNER import code.name.monkey.retromusic.Constants.USER_PROFILE -import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsBaseActivity +import code.name.monkey.retromusic.databinding.ActivityUserInfoBinding import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.applyToolbar -import code.name.monkey.retromusic.glide.ProfileBannerGlideRequest -import code.name.monkey.retromusic.glide.UserProfileGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.PreferenceUtil import com.bumptech.glide.Glide +import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.Target import com.github.dhaval2404.imagepicker.ImagePicker import com.github.dhaval2404.imagepicker.constant.ImageProvider -import java.io.BufferedOutputStream -import java.io.File -import java.io.FileOutputStream -import java.io.IOException -import kotlinx.android.synthetic.main.activity_user_info.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import java.io.BufferedOutputStream +import java.io.File +import java.io.FileOutputStream +import java.io.IOException class UserInfoActivity : AbsBaseActivity() { + private lateinit var binding: ActivityUserInfoBinding + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_user_info) + binding = ActivityUserInfoBinding.inflate(layoutInflater) + setContentView(binding.root) setStatusbarColorAuto() setNavigationbarColorAuto() setTaskDescriptionColorAuto() setLightNavigationBar(true) - applyToolbar(toolbar) + applyToolbar(binding.toolbar) - nameContainer.accentColor() - name.setText(PreferenceUtil.userName) + binding.nameContainer.accentColor() + binding.name.setText(PreferenceUtil.userName) - userImage.setOnClickListener { + binding.userImage.setOnClickListener { pickNewPhoto() } - bannerImage.setOnClickListener { + binding.bannerImage.setOnClickListener { selectBannerImage() } - next.setOnClickListener { - val nameString = name.text.toString().trim { it <= ' ' } + binding.next.setOnClickListener { + val nameString = binding.name.text.toString().trim { it <= ' ' } if (TextUtils.isEmpty(nameString)) { Toast.makeText(this, "Umm you're name can't be empty!", Toast.LENGTH_SHORT).show() return@setOnClickListener @@ -86,23 +90,24 @@ class UserInfoActivity : AbsBaseActivity() { val textColor = MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(accentColor())) - next.backgroundTintList = ColorStateList.valueOf(accentColor()) - next.iconTint = ColorStateList.valueOf(textColor) - next.setTextColor(textColor) + binding.next.backgroundTintList = ColorStateList.valueOf(accentColor()) + binding.next.iconTint = ColorStateList.valueOf(textColor) + binding.next.setTextColor(textColor) loadProfile() } private fun loadProfile() { - bannerImage?.let { - ProfileBannerGlideRequest.Builder.from( - Glide.with(this), - ProfileBannerGlideRequest.getBannerModel() - ).build().into(it) + binding.bannerImage.let { + GlideApp.with(this) + .asBitmap() + .load(RetroGlideExtension.getBannerModel()) + .profileBannerOptions(RetroGlideExtension.getBannerModel()) + .into(it) } - UserProfileGlideRequest.Builder.from( - Glide.with(this), - UserProfileGlideRequest.getUserModel() - ).build().into(userImage) + GlideApp.with(this).asBitmap() + .load(RetroGlideExtension.getUserModel()) + .userProfileOptions(RetroGlideExtension.getUserModel()) + .into(binding.userImage) } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -145,31 +150,31 @@ class UserInfoActivity : AbsBaseActivity() { private fun setAndSaveBannerImage(fileUri: Uri) { Glide.with(this) - .load(fileUri) .asBitmap() + .load(fileUri) .diskCacheStrategy(DiskCacheStrategy.NONE) - .listener(object : RequestListener { - override fun onException( - e: java.lang.Exception?, - model: Any?, - target: Target?, - isFirstResource: Boolean - ): Boolean { - return false - } - + .listener(object : RequestListener { override fun onResourceReady( resource: Bitmap?, model: Any?, target: Target?, - isFromMemoryCache: Boolean, + dataSource: DataSource?, isFirstResource: Boolean ): Boolean { resource?.let { saveImage(it, USER_BANNER) } return false } + + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target?, + isFirstResource: Boolean + ): Boolean { + return false + } }) - .into(bannerImage) + .into(binding.bannerImage) } private fun saveImage(bitmap: Bitmap, fileName: String) { @@ -195,31 +200,31 @@ class UserInfoActivity : AbsBaseActivity() { private fun setAndSaveUserImage(fileUri: Uri) { Glide.with(this) - .load(fileUri) .asBitmap() + .load(fileUri) .diskCacheStrategy(DiskCacheStrategy.NONE) - .listener(object : RequestListener { - override fun onException( - e: java.lang.Exception?, - model: Any?, - target: Target?, - isFirstResource: Boolean - ): Boolean { - return false - } - + .listener(object : RequestListener { override fun onResourceReady( resource: Bitmap?, model: Any?, target: Target?, - isFromMemoryCache: Boolean, + dataSource: DataSource?, isFirstResource: Boolean ): Boolean { resource?.let { saveImage(it, USER_PROFILE) } return false } + + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target?, + isFirstResource: Boolean + ): Boolean { + return false + } }) - .into(userImage) + .into(binding.userImage) } companion object { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java index 00d16e9a1..9e37a8ee3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/activities/WhatsNewActivity.java @@ -5,34 +5,40 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.Color; import android.os.Bundle; -import android.webkit.WebView; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.widget.Toolbar; -import code.name.monkey.appthemehelper.ThemeStore; -import code.name.monkey.appthemehelper.util.ATHUtil; -import code.name.monkey.appthemehelper.util.ColorUtil; -import code.name.monkey.appthemehelper.util.MaterialValueHelper; -import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; -import code.name.monkey.retromusic.R; -import code.name.monkey.retromusic.activities.base.AbsBaseActivity; -import code.name.monkey.retromusic.util.PreferenceUtil; +import androidx.core.widget.NestedScrollView; + import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Locale; +import code.name.monkey.appthemehelper.ThemeStore; +import code.name.monkey.appthemehelper.util.ATHUtil; +import code.name.monkey.appthemehelper.util.ColorUtil; +import code.name.monkey.appthemehelper.util.MaterialValueHelper; +import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; +import code.name.monkey.retromusic.Constants; +import code.name.monkey.retromusic.R; +import code.name.monkey.retromusic.activities.base.AbsBaseActivity; +import code.name.monkey.retromusic.databinding.ActivityWhatsNewBinding; +import code.name.monkey.retromusic.extensions.ColorExtKt; +import code.name.monkey.retromusic.util.PreferenceUtil; +import code.name.monkey.retromusic.util.RetroUtil; + public class WhatsNewActivity extends AbsBaseActivity { private static String colorToCSS(int color) { return String.format( - Locale.getDefault(), - "rgba(%d, %d, %d, %d)", - Color.red(color), - Color.green(color), - Color.blue(color), - Color.alpha(color)); // on API 29, WebView doesn't load with hex colors + Locale.getDefault(), + "rgba(%d, %d, %d, %d)", + Color.red(color), + Color.green(color), + Color.blue(color), + Color.alpha(color)); // on API 29, WebView doesn't load with hex colors } private static void setChangelogRead(@NonNull Context context) { @@ -49,16 +55,15 @@ public class WhatsNewActivity extends AbsBaseActivity { protected void onCreate(@Nullable Bundle savedInstanceState) { setDrawUnderStatusBar(); super.onCreate(savedInstanceState); - setContentView(R.layout.activity_whats_new); + ActivityWhatsNewBinding binding = ActivityWhatsNewBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); setStatusbarColorAuto(); setNavigationbarColorAuto(); setTaskDescriptionColorAuto(); - WebView webView = findViewById(R.id.webView); - Toolbar toolbar = findViewById(R.id.toolbar); - toolbar.setBackgroundColor(ATHUtil.INSTANCE.resolveColor(this, R.attr.colorSurface)); - toolbar.setNavigationOnClickListener(v -> onBackPressed()); - ToolbarContentTintHelper.colorBackButton(toolbar); + binding.toolbar.setBackgroundColor(ATHUtil.INSTANCE.resolveColor(this, R.attr.colorSurface)); + binding.toolbar.setNavigationOnClickListener(v -> onBackPressed()); + ToolbarContentTintHelper.colorBackButton(binding.toolbar); try { StringBuilder buf = new StringBuilder(); @@ -74,38 +79,50 @@ public class WhatsNewActivity extends AbsBaseActivity { final boolean isDark = ATHUtil.INSTANCE.isWindowBackgroundDark(this); final int accentColor = ThemeStore.Companion.accentColor(this); final String backgroundColor = - colorToCSS( - ATHUtil.INSTANCE.resolveColor( - this, R.attr.colorSurface, Color.parseColor(isDark ? "#424242" : "#ffffff"))); + colorToCSS( + ATHUtil.INSTANCE.resolveColor( + this, R.attr.colorSurface, Color.parseColor(isDark ? "#424242" : "#ffffff"))); final String contentColor = colorToCSS(Color.parseColor(isDark ? "#ffffff" : "#000000")); final String textColor = colorToCSS(Color.parseColor(isDark ? "#60FFFFFF" : "#80000000")); final String accentColorString = colorToCSS(ThemeStore.Companion.accentColor(this)); + final String cardBackgroundColor = colorToCSS(Color.parseColor(isDark ? "#353535" : "#ffffff")); final String accentTextColor = - colorToCSS( - MaterialValueHelper.getPrimaryTextColor( - this, ColorUtil.INSTANCE.isColorLight(accentColor))); + colorToCSS( + MaterialValueHelper.getPrimaryTextColor( + this, ColorUtil.INSTANCE.isColorLight(accentColor))); final String changeLog = - buf.toString() - .replace( - "{style-placeholder}", - String.format( - "body { background-color: %s; color: %s; } li {color: %s;} .colorHeader {background-color: %s; color: %s;} .tag {color: %s;}", - backgroundColor, - contentColor, - textColor, - accentColorString, - accentTextColor, - accentColorString)) - .replace("{link-color}", colorToCSS(ThemeStore.Companion.accentColor(this))) - .replace( - "{link-color-active}", - colorToCSS( - ColorUtil.INSTANCE.lightenColor(ThemeStore.Companion.accentColor(this)))); - webView.loadData(changeLog, "text/html", "UTF-8"); + buf.toString() + .replace( + "{style-placeholder}", + String.format( + "body { background-color: %s; color: %s; } li {color: %s;} h3 {color: %s;} .tag {color: %s;} div{background-color: %s;}", + backgroundColor, + contentColor, + textColor, + accentColorString, + accentColorString, + cardBackgroundColor)) + .replace("{link-color}", colorToCSS(ThemeStore.Companion.accentColor(this))) + .replace( + "{link-color-active}", + colorToCSS( + ColorUtil.INSTANCE.lightenColor(ThemeStore.Companion.accentColor(this)))); + binding.webView.loadData(changeLog, "text/html", "UTF-8"); } catch (Throwable e) { - webView.loadData( - "

Unable to load

" + e.getLocalizedMessage() + "

", "text/html", "UTF-8"); + binding.webView.loadData( + "

Unable to load

" + e.getLocalizedMessage() + "

", "text/html", "UTF-8"); } setChangelogRead(this); + binding.tgFab.setOnClickListener(v -> RetroUtil.openUrl(this, Constants.TELEGRAM_CHANGE_LOG)); + ColorExtKt.accentColor(binding.tgFab); + binding.tgFab.shrink(); + binding.container.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> { + int dy = scrollY - oldScrollY; + if (dy > 0) { + binding.tgFab.shrink(); + } else if (dy < 0) { + binding.tgFab.extend(); + } + }); } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt new file mode 100644 index 000000000..68c62d131 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsCastActivity.kt @@ -0,0 +1,141 @@ +package code.name.monkey.retromusic.activities.base + +import android.os.Bundle +import android.view.ViewStub +import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.cast.CastHelper +import code.name.monkey.retromusic.cast.RetroSessionManager +import code.name.monkey.retromusic.cast.RetroWebServer +import code.name.monkey.retromusic.helper.MusicPlayerRemote +import com.google.android.gms.cast.framework.CastContext +import com.google.android.gms.cast.framework.CastSession +import com.google.android.gms.common.ConnectionResult +import com.google.android.gms.common.GoogleApiAvailability +import java.util.* + + +abstract class AbsCastActivity : AbsSlidingMusicPanelActivity() { + + private var mCastSession: CastSession? = null + private lateinit var castContext: CastContext + private var webServer: RetroWebServer? = null + private var playServicesAvailable: Boolean = false + + private val sessionManagerListener by lazy { + object : RetroSessionManager { + override fun onSessionStarting(castSession: CastSession) { + invalidateOptionsMenu() + webServer = RetroWebServer.getInstance(this@AbsCastActivity) + webServer?.start() + } + + override fun onSessionStarted(castSession: CastSession, p1: String) { + invalidateOptionsMenu() + mCastSession = castSession + loadCastQueue(MusicPlayerRemote.position) + inflateCastController() + MusicPlayerRemote.isCasting = true + setAllowDragging(false) + collapsePanel() + } + + override fun onSessionEnding(p0: CastSession) { + invalidateOptionsMenu() + webServer?.stop() + } + + override fun onSessionEnded(castSession: CastSession, p1: Int) { + invalidateOptionsMenu() + if (mCastSession == castSession) { + mCastSession = null + } + MusicPlayerRemote.isCasting = false + setAllowDragging(true) + } + + override fun onSessionResumed(castSession: CastSession, p1: Boolean) { + invalidateOptionsMenu() + mCastSession = castSession + loadCastQueue(MusicPlayerRemote.position) + inflateCastController() + MusicPlayerRemote.isCasting = true + setAllowDragging(false) + collapsePanel() + } + + override fun onSessionSuspended(castSession: CastSession, p1: Int) { + invalidateOptionsMenu() + if (mCastSession == castSession) { + mCastSession = null + } + MusicPlayerRemote.isCasting = false + setAllowDragging(true) + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + playServicesAvailable = try { + GoogleApiAvailability + .getInstance().isGooglePlayServicesAvailable(this) == ConnectionResult.SUCCESS + } catch (e: Exception) { + false + } + if (playServicesAvailable) { + setupCast() + } + } + + private fun setupCast() { + castContext = CastContext.getSharedInstance(this) + } + + override fun onResume() { + if (playServicesAvailable) { + castContext.sessionManager.addSessionManagerListener( + sessionManagerListener, + CastSession::class.java + ) + if (mCastSession == null) { + mCastSession = castContext.sessionManager.currentCastSession + } + } + super.onResume() + } + + override fun onStop() { + super.onStop() + mCastSession = null + } + + private fun songChanged(position: Int) { + loadCastQueue(position) + } + + fun loadCastQueue(position: Int) { + if (!MusicPlayerRemote.playingQueue.isNullOrEmpty()) { + mCastSession?.let { + CastHelper.castQueue( + it, + MusicPlayerRemote.playingQueue, + position, + MusicPlayerRemote.songProgressMillis.toLong() + ) + } + } else { + mCastSession?.let { CastHelper.castSong(it, MusicPlayerRemote.currentSong) } + } + } + + override fun onPlayingMetaChanged() { + super.onPlayingMetaChanged() + if (playServicesAvailable) { + songChanged(MusicPlayerRemote.position) + } + } + + fun inflateCastController() { + findViewById(R.id.cast_stub)?.inflate() + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt index cef132765..1ab1e4998 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt @@ -15,12 +15,7 @@ package code.name.monkey.retromusic.activities.base import android.Manifest -import android.content.BroadcastReceiver -import android.content.ComponentName -import android.content.Context -import android.content.Intent -import android.content.IntentFilter -import android.content.ServiceConnection +import android.content.* import android.os.Bundle import android.os.IBinder import androidx.lifecycle.lifecycleScope @@ -30,11 +25,11 @@ import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.interfaces.IMusicServiceEventListener import code.name.monkey.retromusic.repository.RealRepository import code.name.monkey.retromusic.service.MusicService.* -import java.lang.ref.WeakReference -import java.util.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.koin.android.ext.android.inject +import java.lang.ref.WeakReference +import java.util.* abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventListener { @@ -166,6 +161,12 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi } } + override fun onFavoriteStateChanged() { + for (listener in mMusicServiceEventListeners) { + listener.onFavoriteStateChanged() + } + } + override fun onHasPermissionsChanged(hasPermissions: Boolean) { super.onHasPermissionsChanged(hasPermissions) val intent = Intent(MEDIA_STORE_CHANGED) @@ -194,7 +195,8 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi val activity = reference.get() if (activity != null && action != null) { when (action) { - FAVORITE_STATE_CHANGED, META_CHANGED -> activity.onPlayingMetaChanged() + FAVORITE_STATE_CHANGED -> activity.onFavoriteStateChanged() + META_CHANGED -> activity.onPlayingMetaChanged() QUEUE_CHANGED -> activity.onQueueChanged() PLAY_STATE_CHANGED -> activity.onPlayStateChanged() REPEAT_MODE_CHANGED -> activity.onRepeatModeChanged() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index 4c19aa40e..a6cfe26a9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -14,7 +14,6 @@ */ package code.name.monkey.retromusic.activities.base -import android.annotation.SuppressLint import android.graphics.Color import android.os.Bundle import android.view.View @@ -29,6 +28,8 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.retromusic.R import code.name.monkey.retromusic.RetroBottomSheetBehavior +import code.name.monkey.retromusic.databinding.ActivityMainContentBinding +import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.MiniPlayerFragment @@ -57,12 +58,12 @@ import code.name.monkey.retromusic.model.CategoryInfo import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.views.BottomNavigationBarTinted import com.google.android.material.bottomsheet.BottomSheetBehavior.* -import kotlinx.android.synthetic.main.sliding_music_panel_layout.* import org.koin.androidx.viewmodel.ext.android.viewModel abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { companion object { val TAG: String = AbsSlidingMusicPanelActivity::class.java.simpleName + var fromNotification: Boolean = false } protected val libraryViewModel by viewModel() @@ -75,16 +76,17 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { private var lightStatusBar: Boolean = false private var lightNavigationBar: Boolean = false private var paletteColor: Int = Color.WHITE - protected abstract fun createContentView(): View + protected abstract fun createContentView(): SlidingMusicPanelLayoutBinding private val panelState: Int get() = bottomSheetBehavior.state - + private lateinit var binding: SlidingMusicPanelLayoutBinding private val bottomSheetCallbackList = object : BottomSheetCallback() { + override fun onSlide(bottomSheet: View, slideOffset: Float) { setMiniPlayerAlphaProgress(slideOffset) - dimBackground.show() - dimBackground.alpha = slideOffset + binding.dimBackground.show() + binding.dimBackground.alpha = slideOffset } override fun onStateChanged(bottomSheet: View, newState: Int) { @@ -94,9 +96,17 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } STATE_COLLAPSED -> { onPanelCollapsed() - dimBackground.hide() + binding.dimBackground.hide() + if (fromNotification) { + hideBottomBar(MusicPlayerRemote.playingQueue.isEmpty()) + fromNotification = false + } + } + STATE_SETTLING, STATE_DRAGGING -> { + if (fromNotification) { + getBottomNavigationView().isVisible = true + } } - else -> { println("Do something") } @@ -108,23 +118,25 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(createContentView()) + binding = createContentView() + setContentView(binding.root) chooseFragmentForTheme() setupSlidingUpPanel() setupBottomSheet() updateColor() val themeColor = resolveColor(android.R.attr.windowBackground, Color.GRAY) - dimBackground.setBackgroundColor(ColorUtil.withAlpha(themeColor, 0.5f)) - dimBackground.setOnClickListener { + binding.dimBackground.setBackgroundColor(ColorUtil.withAlpha(themeColor, 0.5f)) + binding.dimBackground.setOnClickListener { println("dimBackground") collapsePanel() } } private fun setupBottomSheet() { - bottomSheetBehavior = from(slidingPanel) as RetroBottomSheetBehavior + bottomSheetBehavior = from(binding.slidingPanel) as RetroBottomSheetBehavior bottomSheetBehavior.addBottomSheetCallback(bottomSheetCallbackList) + bottomSheetBehavior.maxWidth = resources.displayMetrics.widthPixels } override fun onResume() { @@ -142,14 +154,13 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { bottomSheetBehavior.removeBottomSheetCallback(bottomSheetCallbackList) } - @SuppressLint("InflateParams") - protected fun wrapSlidingMusicPanel(): View { - val slidingMusicPanelLayout = - layoutInflater.inflate(R.layout.sliding_music_panel_layout, null) + protected fun wrapSlidingMusicPanel(): SlidingMusicPanelLayoutBinding { + val slidingMusicPanelLayoutBinding = + SlidingMusicPanelLayoutBinding.inflate(layoutInflater) val contentContainer: ViewGroup = - slidingMusicPanelLayout.findViewById(R.id.mainContentFrame) - layoutInflater.inflate(R.layout.activity_main_content, contentContainer) - return slidingMusicPanelLayout + slidingMusicPanelLayoutBinding.mainContentFrame + ActivityMainContentBinding.inflate(layoutInflater, contentContainer, true) + return slidingMusicPanelLayoutBinding } fun collapsePanel() { @@ -166,8 +177,8 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { val alpha = 1 - progress miniPlayerFragment?.view?.alpha = alpha miniPlayerFragment?.view?.visibility = if (alpha == 0f) View.GONE else View.VISIBLE - bottomNavigationView.translationY = progress * 500 - bottomNavigationView.alpha = alpha + binding.bottomNavigationView.translationY = progress * 500 + binding.bottomNavigationView.alpha = alpha } open fun onPanelCollapsed() { @@ -183,14 +194,14 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } private fun setupSlidingUpPanel() { - slidingPanel.viewTreeObserver.addOnGlobalLayoutListener(object : + binding.slidingPanel.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { override fun onGlobalLayout() { - slidingPanel.viewTreeObserver.removeOnGlobalLayoutListener(this) + binding.slidingPanel.viewTreeObserver.removeOnGlobalLayoutListener(this) if (nowPlayingScreen != Peak) { - val params = slidingPanel.layoutParams as ViewGroup.LayoutParams + val params = binding.slidingPanel.layoutParams as ViewGroup.LayoutParams params.height = ViewGroup.LayoutParams.MATCH_PARENT - slidingPanel.layoutParams = params + binding.slidingPanel.layoutParams = params } when (panelState) { STATE_EXPANDED -> onPanelExpanded() @@ -204,16 +215,16 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } fun getBottomNavigationView(): BottomNavigationBarTinted { - return bottomNavigationView + return binding.bottomNavigationView } override fun onServiceConnected() { super.onServiceConnected() if (MusicPlayerRemote.playingQueue.isNotEmpty()) { - slidingPanel.viewTreeObserver.addOnGlobalLayoutListener(object : + binding.slidingPanel.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { override fun onGlobalLayout() { - slidingPanel.viewTreeObserver.removeOnGlobalLayoutListener(this) + binding.slidingPanel.viewTreeObserver.removeOnGlobalLayoutListener(this) hideBottomBar(false) } }) @@ -305,16 +316,17 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } fun updateTabs() { - bottomNavigationView.menu.clear() + binding.bottomNavigationView.menu.clear() val currentTabs: List = PreferenceUtil.libraryCategory for (tab in currentTabs) { if (tab.visible) { val menu = tab.category - bottomNavigationView.menu.add(0, menu.id, 0, menu.stringRes).setIcon(menu.icon) + binding.bottomNavigationView.menu.add(0, menu.id, 0, menu.stringRes) + .setIcon(menu.icon) } } - if (bottomNavigationView.menu.size() == 1) { - bottomNavigationView.hide() + if (binding.bottomNavigationView.menu.size() == 1) { + binding.bottomNavigationView.hide() } } @@ -326,28 +338,34 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } fun setBottomBarVisibility(visible: Boolean) { - bottomNavigationView.isVisible = visible + binding.bottomNavigationView.isVisible = visible hideBottomBar(MusicPlayerRemote.playingQueue.isEmpty()) } private fun hideBottomBar(hide: Boolean) { - val heightOfBar = dip(R.dimen.mini_player_height) - val heightOfBarWithTabs = heightOfBar * 2 - val isVisible = bottomNavigationView.isVisible + val heightOfBar = + if (MusicPlayerRemote.isCasting) dip(R.dimen.cast_mini_player_height) else dip(R.dimen.mini_player_height) + val heightOfBarWithTabs = + if (MusicPlayerRemote.isCasting) dip(R.dimen.mini_cast_player_height_expanded) else dip( + R.dimen.mini_player_height_expanded + ) + val isVisible = binding.bottomNavigationView.isVisible if (hide) { bottomSheetBehavior.isHideable = true bottomSheetBehavior.peekHeight = 0 - ViewCompat.setElevation(slidingPanel, 0f) - ViewCompat.setElevation(bottomNavigationView, 10f) + ViewCompat.setElevation(binding.slidingPanel, 0f) + ViewCompat.setElevation(binding.bottomNavigationView, 10f) collapsePanel() } else { if (MusicPlayerRemote.playingQueue.isNotEmpty()) { bottomSheetBehavior.isHideable = false - ViewCompat.setElevation(slidingPanel, 10f) - ViewCompat.setElevation(bottomNavigationView, 10f) + ViewCompat.setElevation(binding.slidingPanel, 10f) + ViewCompat.setElevation(binding.bottomNavigationView, 10f) if (isVisible) { println("List") - bottomSheetBehavior.peekHeight = heightOfBarWithTabs - 22 + if (bottomSheetBehavior.state != STATE_EXPANDED) + getBottomNavigationView().translateYAnimate(0F) + bottomSheetBehavior.peekHeightAnimate(heightOfBarWithTabs) } else { println("Details") bottomSheetBehavior.peekHeight = heightOfBar @@ -356,6 +374,11 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { } } + fun setAllowDragging(allowDragging: Boolean) { + bottomSheetBehavior.setAllowDragging(allowDragging) + hideBottomBar(false) + } + private fun chooseFragmentForTheme() { nowPlayingScreen = PreferenceUtil.nowPlayingScreen diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt index 780f50def..8d4371594 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsThemeActivity.kt @@ -15,6 +15,7 @@ package code.name.monkey.retromusic.activities.base import android.content.Context +import android.content.res.Resources import android.graphics.Color import android.os.Bundle import android.os.Handler @@ -23,12 +24,12 @@ import android.view.View import android.view.WindowManager import androidx.annotation.ColorInt import androidx.appcompat.app.AppCompatDelegate.setDefaultNightMode +import androidx.core.os.ConfigurationCompat import code.name.monkey.appthemehelper.ATH import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.ATHToolbarActivity import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil -import code.name.monkey.appthemehelper.util.MaterialDialogsUtil import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.LanguageContextWrapper import code.name.monkey.retromusic.R @@ -48,7 +49,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { setImmersiveFullscreen() registerSystemUiVisibility() toggleScreenOn() - MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this) + //MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this) } private fun updateTheme() { @@ -213,8 +214,12 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable { override fun attachBaseContext(newBase: Context?) { val code = PreferenceUtil.languageCode - if (code != "auto") { - super.attachBaseContext(LanguageContextWrapper.wrap(newBase, Locale(code))) - } else super.attachBaseContext(newBase) + val locale = if (code == "auto") { + // Get the device default locale + ConfigurationCompat.getLocales(Resources.getSystem().configuration)[0] + } else { + Locale.forLanguageTag(code) + } + super.attachBaseContext(LanguageContextWrapper.wrap(newBase, locale)) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt index 358ddf82e..3780834d0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/BugReportActivity.kt @@ -41,18 +41,16 @@ import code.name.monkey.retromusic.activities.bugreport.model.Report import code.name.monkey.retromusic.activities.bugreport.model.github.ExtraInfo import code.name.monkey.retromusic.activities.bugreport.model.github.GithubLogin import code.name.monkey.retromusic.activities.bugreport.model.github.GithubTarget +import code.name.monkey.retromusic.databinding.ActivityBugReportBinding import code.name.monkey.retromusic.misc.DialogAsyncTask import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.textfield.TextInputLayout -import java.io.IOException -import kotlinx.android.synthetic.main.activity_bug_report.* -import kotlinx.android.synthetic.main.bug_report_card_device_info.* -import kotlinx.android.synthetic.main.bug_report_card_report.* import org.eclipse.egit.github.core.Issue import org.eclipse.egit.github.core.client.GitHubClient import org.eclipse.egit.github.core.client.RequestException import org.eclipse.egit.github.core.service.IssueService +import java.io.IOException private const val RESULT_SUCCESS = "RESULT_OK" private const val RESULT_BAD_CREDENTIALS = "RESULT_BAD_CREDENTIALS" @@ -72,12 +70,14 @@ private annotation class Result open class BugReportActivity : AbsThemeActivity() { + private lateinit var binding: ActivityBugReportBinding private var deviceInfo: DeviceInfo? = null override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) - setContentView(R.layout.activity_bug_report) + binding = ActivityBugReportBinding.inflate(layoutInflater) + setContentView(binding.root) setStatusbarColorAuto() setNavigationbarColorAuto() setTaskDescriptionColorAuto() @@ -87,50 +87,50 @@ open class BugReportActivity : AbsThemeActivity() { if (TextUtils.isEmpty(title)) setTitle(R.string.report_an_issue) deviceInfo = DeviceInfo(this) - airTextDeviceInfo.text = deviceInfo.toString() + binding.cardDeviceInfo.airTextDeviceInfo.text = deviceInfo.toString() } private fun initViews() { val accentColor = ThemeStore.accentColor(this) val primaryColor = ATHUtil.resolveColor(this, R.attr.colorSurface) - toolbar.setBackgroundColor(primaryColor) - setSupportActionBar(toolbar) - ToolbarContentTintHelper.colorBackButton(toolbar) + binding.toolbar.setBackgroundColor(primaryColor) + setSupportActionBar(binding.toolbar) + ToolbarContentTintHelper.colorBackButton(binding.toolbar) supportActionBar?.setDisplayHomeAsUpEnabled(true) - TintHelper.setTintAuto(optionUseAccount, accentColor, false) - optionUseAccount?.setOnClickListener { - inputTitle.isEnabled = true - inputDescription.isEnabled = true - inputUsername.isEnabled = true - inputPassword.isEnabled = true + TintHelper.setTintAuto(binding.cardReport.optionUseAccount, accentColor, false) + binding.cardReport.optionUseAccount.setOnClickListener { + binding.cardReport.inputTitle.isEnabled = true + binding.cardReport.inputDescription.isEnabled = true + binding.cardReport.inputUsername.isEnabled = true + binding.cardReport.inputPassword.isEnabled = true - optionAnonymous.isChecked = false - sendFab.hide(object : FloatingActionButton.OnVisibilityChangedListener() { + binding.cardReport.optionAnonymous.isChecked = false + binding.sendFab.hide(object : FloatingActionButton.OnVisibilityChangedListener() { override fun onHidden(fab: FloatingActionButton?) { super.onHidden(fab) - sendFab.setImageResource(R.drawable.ic_send) - sendFab.show() + binding.sendFab.setImageResource(R.drawable.ic_send) + binding.sendFab.show() } }) } - TintHelper.setTintAuto(optionAnonymous, accentColor, false) - optionAnonymous.setOnClickListener { - inputTitle.isEnabled = false - inputDescription.isEnabled = false - inputUsername.isEnabled = false - inputPassword.isEnabled = false + TintHelper.setTintAuto(binding.cardReport.optionAnonymous, accentColor, false) + binding.cardReport.optionAnonymous.setOnClickListener { + binding.cardReport.inputTitle.isEnabled = false + binding.cardReport.inputDescription.isEnabled = false + binding.cardReport.inputUsername.isEnabled = false + binding.cardReport.inputPassword.isEnabled = false - optionUseAccount.isChecked = false - sendFab.hide(object : FloatingActionButton.OnVisibilityChangedListener() { + binding.cardReport.optionUseAccount.isChecked = false + binding.sendFab.hide(object : FloatingActionButton.OnVisibilityChangedListener() { override fun onHidden(fab: FloatingActionButton?) { super.onHidden(fab) - sendFab.setImageResource(R.drawable.ic_open_in_browser) - sendFab.show() + binding.sendFab.setImageResource(R.drawable.ic_open_in_browser) + binding.sendFab.show() } }) } - inputPassword.setOnEditorActionListener { _, actionId, _ -> + binding.cardReport.inputPassword.setOnEditorActionListener { _, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_SEND) { reportIssue() return@setOnEditorActionListener true @@ -138,22 +138,22 @@ open class BugReportActivity : AbsThemeActivity() { false } - airTextDeviceInfo.setOnClickListener { copyDeviceInfoToClipBoard() } + binding.cardDeviceInfo.airTextDeviceInfo.setOnClickListener { copyDeviceInfoToClipBoard() } - TintHelper.setTintAuto(sendFab, accentColor, true) - sendFab.setOnClickListener { reportIssue() } + TintHelper.setTintAuto(binding.sendFab, accentColor, true) + binding.sendFab.setOnClickListener { reportIssue() } - MaterialUtil.setTint(inputLayoutTitle, false) - MaterialUtil.setTint(inputLayoutDescription, false) - MaterialUtil.setTint(inputLayoutUsername, false) - MaterialUtil.setTint(inputLayoutPassword, false) + MaterialUtil.setTint(binding.cardReport.inputLayoutTitle, false) + MaterialUtil.setTint(binding.cardReport.inputLayoutDescription, false) + MaterialUtil.setTint(binding.cardReport.inputLayoutUsername, false) + MaterialUtil.setTint(binding.cardReport.inputLayoutPassword, false) } private fun reportIssue() { - if (optionUseAccount.isChecked) { + if (binding.cardReport.optionUseAccount.isChecked) { if (!validateInput()) return - val username = inputUsername.text.toString() - val password = inputPassword.text.toString() + val username = binding.cardReport.inputUsername.text.toString() + val password = binding.cardReport.inputPassword.text.toString() sendBugReport(GithubLogin(username, password)) } else { copyDeviceInfoToClipBoard() @@ -179,34 +179,34 @@ open class BugReportActivity : AbsThemeActivity() { private fun validateInput(): Boolean { var hasErrors = false - if (optionUseAccount.isChecked) { - if (TextUtils.isEmpty(inputUsername.text)) { - setError(inputLayoutUsername, R.string.bug_report_no_username) + if (binding.cardReport.optionUseAccount.isChecked) { + if (TextUtils.isEmpty(binding.cardReport.inputUsername.text)) { + setError(binding.cardReport.inputLayoutUsername, R.string.bug_report_no_username) hasErrors = true } else { - removeError(inputLayoutUsername) + removeError(binding.cardReport.inputLayoutUsername) } - if (TextUtils.isEmpty(inputPassword.text)) { - setError(inputLayoutPassword, R.string.bug_report_no_password) + if (TextUtils.isEmpty(binding.cardReport.inputPassword.text)) { + setError(binding.cardReport.inputLayoutPassword, R.string.bug_report_no_password) hasErrors = true } else { - removeError(inputLayoutPassword) + removeError(binding.cardReport.inputLayoutPassword) } } - if (TextUtils.isEmpty(inputTitle.text)) { - setError(inputLayoutTitle, R.string.bug_report_no_title) + if (TextUtils.isEmpty(binding.cardReport.inputTitle.text)) { + setError(binding.cardReport.inputLayoutTitle, R.string.bug_report_no_title) hasErrors = true } else { - removeError(inputLayoutTitle) + removeError(binding.cardReport.inputLayoutTitle) } - if (TextUtils.isEmpty(inputDescription.text)) { - setError(inputLayoutDescription, R.string.bug_report_no_description) + if (TextUtils.isEmpty(binding.cardReport.inputDescription.text)) { + setError(binding.cardReport.inputLayoutDescription, R.string.bug_report_no_description) hasErrors = true } else { - removeError(inputLayoutDescription) + removeError(binding.cardReport.inputLayoutDescription) } return !hasErrors @@ -223,8 +223,8 @@ open class BugReportActivity : AbsThemeActivity() { private fun sendBugReport(login: GithubLogin) { if (!validateInput()) return - val bugTitle = inputTitle.text.toString() - val bugDescription = inputDescription.text.toString() + val bugTitle = binding.cardReport.inputTitle.text.toString() + val bugDescription = binding.cardReport.inputDescription.text.toString() val extraInfo = ExtraInfo() onSaveExtraInfo() diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.java b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.java index 79e9b0a0c..036cc4da6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.java +++ b/app/src/main/java/code/name/monkey/retromusic/activities/bugreport/model/DeviceInfo.java @@ -5,11 +5,14 @@ import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; + import androidx.annotation.IntRange; -import code.name.monkey.retromusic.util.PreferenceUtil; + import java.util.Arrays; import java.util.Locale; +import code.name.monkey.retromusic.util.PreferenceUtil; + public class DeviceInfo { @SuppressLint("NewApi") diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/saf/SAFGuideActivity.java b/app/src/main/java/code/name/monkey/retromusic/activities/saf/SAFGuideActivity.java index 46fdd786f..e47c770ea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/saf/SAFGuideActivity.java +++ b/app/src/main/java/code/name/monkey/retromusic/activities/saf/SAFGuideActivity.java @@ -16,11 +16,14 @@ package code.name.monkey.retromusic.activities.saf; import android.os.Build; import android.os.Bundle; + import androidx.annotation.Nullable; -import code.name.monkey.retromusic.R; + import com.heinrichreimersoftware.materialintro.app.IntroActivity; import com.heinrichreimersoftware.materialintro.slide.SimpleSlide; +import code.name.monkey.retromusic.R; + /** Created by hemanths on 2019-07-31. */ public class SAFGuideActivity extends IntroActivity { diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt index 0202a4b4d..536dea62e 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AbsTagEditorActivity.kt @@ -22,10 +22,12 @@ import android.graphics.BitmapFactory import android.net.Uri import android.os.Bundle import android.util.Log +import android.view.LayoutInflater import android.view.MenuItem -import android.view.View import android.view.animation.OvershootInterpolator +import android.widget.ImageView import androidx.appcompat.app.AlertDialog +import androidx.viewbinding.ViewBinding import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.TintHelper @@ -41,7 +43,6 @@ import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.SAFUtil import com.google.android.material.button.MaterialButton import com.google.android.material.dialog.MaterialAlertDialogBuilder -import kotlinx.android.synthetic.main.activity_album_tag_editor.* import org.jaudiotagger.audio.AudioFile import org.jaudiotagger.audio.AudioFileIO import org.jaudiotagger.tag.FieldKey @@ -49,7 +50,8 @@ import org.koin.android.ext.android.inject import java.io.File import java.util.* -abstract class AbsTagEditorActivity : AbsBaseActivity() { +abstract class AbsTagEditorActivity : AbsBaseActivity() { + abstract val editorImage: ImageView? val repository by inject() lateinit var saveFab: MaterialButton @@ -62,7 +64,11 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { private val currentSongPath: String? = null private var savedTags: Map? = null private var savedArtworkInfo: ArtworkInfo? = null - protected abstract val contentViewLayout: Int + private var _binding: VB? = null + protected val binding: VB get() = _binding!! + + abstract val bindingInflater: (LayoutInflater) -> VB + protected abstract fun loadImageFromFile(selectedFile: Uri?) protected val show: AlertDialog @@ -187,7 +193,8 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(contentViewLayout) + _binding = bindingInflater.invoke(layoutInflater) + setContentView(binding.root) setStatusbarColorAuto() setNavigationbarColorAuto() setTaskDescriptionColorAuto() @@ -284,10 +291,6 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { protected fun setNoImageMode() { isInNoImageMode = true - imageContainer?.visibility = View.GONE - editorImage?.visibility = View.GONE - editorImage?.isEnabled = false - setColors( intent.getIntExtra( EXTRA_PALETTE, @@ -296,6 +299,7 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { ) } + protected fun dataChanged() { showFab() } @@ -314,9 +318,9 @@ abstract class AbsTagEditorActivity : AbsBaseActivity() { protected fun setImageBitmap(bitmap: Bitmap?, bgColor: Int) { if (bitmap == null) { - editorImage.setImageResource(drawable.default_audio_art) + editorImage?.setImageResource(drawable.default_audio_art) } else { - editorImage.setImageBitmap(bitmap) + editorImage?.setImageBitmap(bitmap) } setColors(bgColor) } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt index b48ab2961..2a17c54c8 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/AlbumTagEditorActivity.kt @@ -25,30 +25,31 @@ import android.os.Bundle import android.text.Editable import android.text.TextWatcher import android.transition.Slide +import android.view.LayoutInflater +import android.widget.ImageView import android.widget.Toast import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.MaterialUtil import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.ActivityAlbumTagEditorBinding import code.name.monkey.retromusic.extensions.appHandleColor -import code.name.monkey.retromusic.glide.palette.BitmapPaletteTranscoder +import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.model.ArtworkInfo import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.RetroColorUtil.generatePalette import code.name.monkey.retromusic.util.RetroColorUtil.getColor -import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy -import com.bumptech.glide.request.animation.GlideAnimation -import com.bumptech.glide.request.target.SimpleTarget -import java.util.* -import kotlinx.android.synthetic.main.activity_album_tag_editor.* +import com.bumptech.glide.request.target.ImageViewTarget +import com.bumptech.glide.request.transition.Transition import org.jaudiotagger.tag.FieldKey +import java.util.* -class AlbumTagEditorActivity : AbsTagEditorActivity(), TextWatcher { +class AlbumTagEditorActivity : AbsTagEditorActivity(), TextWatcher { - override val contentViewLayout: Int - get() = R.layout.activity_album_tag_editor + override val bindingInflater: (LayoutInflater) -> ActivityAlbumTagEditorBinding = + ActivityAlbumTagEditorBinding::inflate private fun windowEnterTransition() { val slide = Slide() @@ -62,20 +63,20 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(), TextWatcher { override fun loadImageFromFile(selectedFile: Uri?) { - Glide.with(this@AlbumTagEditorActivity).load(selectedFile).asBitmap() - .transcode(BitmapPaletteTranscoder(this), BitmapPaletteWrapper::class.java) + + GlideApp.with(this@AlbumTagEditorActivity).asBitmapPalette().load(selectedFile) .diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true) - .into(object : SimpleTarget() { + .into(object : ImageViewTarget(binding.editorImage) { override fun onResourceReady( - resource: BitmapPaletteWrapper?, - glideAnimation: GlideAnimation? + resource: BitmapPaletteWrapper, + transition: Transition? ) { - getColor(resource?.palette, Color.TRANSPARENT) - albumArtBitmap = resource?.bitmap?.let { ImageUtil.resizeBitmap(it, 2048) } + getColor(resource.palette, Color.TRANSPARENT) + albumArtBitmap = resource.bitmap?.let { ImageUtil.resizeBitmap(it, 2048) } setImageBitmap( albumArtBitmap, getColor( - resource?.palette, + resource.palette, ATHUtil.resolveColor( this@AlbumTagEditorActivity, R.attr.defaultFooterColor @@ -87,11 +88,13 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(), TextWatcher { setResult(Activity.RESULT_OK) } - override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) { - super.onLoadFailed(e, errorDrawable) - Toast.makeText(this@AlbumTagEditorActivity, e.toString(), Toast.LENGTH_LONG) + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) + Toast.makeText(this@AlbumTagEditorActivity, "Load Failed", Toast.LENGTH_LONG) .show() } + + override fun setResource(resource: BitmapPaletteWrapper?) {} }) } @@ -99,15 +102,15 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(), TextWatcher { private var deleteAlbumArt: Boolean = false private fun setupToolbar() { - toolbar.setBackgroundColor(ATHUtil.resolveColor(this, R.attr.colorSurface)) - setSupportActionBar(toolbar) + binding.toolbar.setBackgroundColor(ATHUtil.resolveColor(this, R.attr.colorSurface)) + setSupportActionBar(binding.toolbar) } override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() super.onCreate(savedInstanceState) window.sharedElementsUseOverlay = true - imageContainer?.transitionName = getString(R.string.transition_album_art) + binding.imageContainer.transitionName = getString(R.string.transition_album_art) windowEnterTransition() setUpViews() setupToolbar() @@ -116,22 +119,23 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(), TextWatcher { private fun setUpViews() { fillViewsWithFileTags() - MaterialUtil.setTint(yearContainer, false) - MaterialUtil.setTint(genreContainer, false) - MaterialUtil.setTint(albumTitleContainer, false) - MaterialUtil.setTint(albumArtistContainer, false) + MaterialUtil.setTint(binding.yearContainer, false) + MaterialUtil.setTint(binding.genreContainer, false) + MaterialUtil.setTint(binding.albumTitleContainer, false) + MaterialUtil.setTint(binding.albumArtistContainer, false) - albumText.appHandleColor().addTextChangedListener(this) - albumArtistText.appHandleColor().addTextChangedListener(this) - genreTitle.appHandleColor().addTextChangedListener(this) - yearTitle.appHandleColor().addTextChangedListener(this) + binding.albumText.appHandleColor().addTextChangedListener(this) + binding.albumArtistText.appHandleColor().addTextChangedListener(this) + binding.genreTitle.appHandleColor().addTextChangedListener(this) + binding.yearTitle.appHandleColor().addTextChangedListener(this) } private fun fillViewsWithFileTags() { - albumText.setText(albumTitle) - albumArtistText.setText(albumArtistName) - genreTitle.setText(genreName) - yearTitle.setText(songYear) + binding.albumText.setText(albumTitle) + binding.albumArtistText.setText(albumArtistName) + binding.genreTitle.setText(genreName) + binding.yearTitle.setText(songYear) + println(albumTitle + albumArtistName) } override fun loadCurrentImage() { @@ -155,7 +159,7 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(), TextWatcher { } override fun searchImageOnWeb() { - searchWebFor(albumText.text.toString(), albumArtistText.text.toString()) + searchWebFor(binding.albumText.text.toString(), binding.albumArtistText.text.toString()) } override fun deleteImage() { @@ -169,12 +173,12 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(), TextWatcher { override fun save() { val fieldKeyValueMap = EnumMap(FieldKey::class.java) - fieldKeyValueMap[FieldKey.ALBUM] = albumText.text.toString() + fieldKeyValueMap[FieldKey.ALBUM] = binding.albumText.text.toString() // android seems not to recognize album_artist field so we additionally write the normal artist field - fieldKeyValueMap[FieldKey.ARTIST] = albumArtistText.text.toString() - fieldKeyValueMap[FieldKey.ALBUM_ARTIST] = albumArtistText.text.toString() - fieldKeyValueMap[FieldKey.GENRE] = genreTitle.text.toString() - fieldKeyValueMap[FieldKey.YEAR] = yearTitle.text.toString() + fieldKeyValueMap[FieldKey.ARTIST] = binding.albumArtistText.text.toString() + fieldKeyValueMap[FieldKey.ALBUM_ARTIST] = binding.albumArtistText.text.toString() + fieldKeyValueMap[FieldKey.GENRE] = binding.genreTitle.text.toString() + fieldKeyValueMap[FieldKey.YEAR] = binding.yearTitle.text.toString() writeValuesToFiles( fieldKeyValueMap, @@ -206,6 +210,10 @@ class AlbumTagEditorActivity : AbsTagEditorActivity(), TextWatcher { saveFab.backgroundTintList = ColorStateList.valueOf(color) } + + override val editorImage: ImageView + get() = binding.editorImage + companion object { val TAG: String = AlbumTagEditorActivity::class.java.simpleName diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt index 15a370025..b81b54ad6 100755 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/SongTagEditorActivity.kt @@ -14,91 +14,98 @@ */ package code.name.monkey.retromusic.activities.tageditor +import android.annotation.SuppressLint import android.net.Uri import android.os.Bundle import android.text.Editable import android.text.TextWatcher +import android.view.LayoutInflater +import android.widget.ImageView import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.MaterialUtil import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.ActivitySongTagEditorBinding import code.name.monkey.retromusic.extensions.appHandleColor import code.name.monkey.retromusic.repository.SongRepository -import kotlinx.android.synthetic.main.activity_song_tag_editor.* import org.jaudiotagger.tag.FieldKey import org.koin.android.ext.android.inject import java.util.* -class SongTagEditorActivity : AbsTagEditorActivity(), TextWatcher { +class SongTagEditorActivity : AbsTagEditorActivity(), TextWatcher { + + override val bindingInflater: (LayoutInflater) -> ActivitySongTagEditorBinding = + ActivitySongTagEditorBinding::inflate - override val contentViewLayout: Int - get() = R.layout.activity_song_tag_editor private val songRepository by inject() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - - setNoImageMode() setUpViews() - toolbar.setBackgroundColor(ATHUtil.resolveColor(this, R.attr.colorSurface)) - setSupportActionBar(toolbar) + setNoImageMode() + binding.toolbar.setBackgroundColor(ATHUtil.resolveColor(this, R.attr.colorSurface)) + setSupportActionBar(binding.toolbar) } + @SuppressLint("ClickableViewAccessibility") private fun setUpViews() { fillViewsWithFileTags() - MaterialUtil.setTint(songTextContainer, false) - MaterialUtil.setTint(composerContainer, false) - MaterialUtil.setTint(albumTextContainer, false) - MaterialUtil.setTint(artistContainer, false) - MaterialUtil.setTint(albumArtistContainer, false) - MaterialUtil.setTint(yearContainer, false) - MaterialUtil.setTint(genreContainer, false) - MaterialUtil.setTint(trackNumberContainer, false) - MaterialUtil.setTint(lyricsContainer, false) + MaterialUtil.setTint(binding.songTextContainer, false) + MaterialUtil.setTint(binding.composerContainer, false) + MaterialUtil.setTint(binding.albumTextContainer, false) + MaterialUtil.setTint(binding.artistContainer, false) + MaterialUtil.setTint(binding.albumArtistContainer, false) + MaterialUtil.setTint(binding.yearContainer, false) + MaterialUtil.setTint(binding.genreContainer, false) + MaterialUtil.setTint(binding.trackNumberContainer, false) + MaterialUtil.setTint(binding.lyricsContainer, false) - songText.appHandleColor().addTextChangedListener(this) - albumText.appHandleColor().addTextChangedListener(this) - albumArtistText.appHandleColor().addTextChangedListener(this) - artistText.appHandleColor().addTextChangedListener(this) - genreText.appHandleColor().addTextChangedListener(this) - yearText.appHandleColor().addTextChangedListener(this) - trackNumberText.appHandleColor().addTextChangedListener(this) - lyricsText.appHandleColor().addTextChangedListener(this) - songComposerText.appHandleColor().addTextChangedListener(this) + binding.songText.appHandleColor().addTextChangedListener(this) + binding.albumText.appHandleColor().addTextChangedListener(this) + binding.albumArtistText.appHandleColor().addTextChangedListener(this) + binding.artistText.appHandleColor().addTextChangedListener(this) + binding.genreText.appHandleColor().addTextChangedListener(this) + binding.yearText.appHandleColor().addTextChangedListener(this) + binding.trackNumberText.appHandleColor().addTextChangedListener(this) + binding.lyricsText.appHandleColor().addTextChangedListener(this) + binding.songComposerText.appHandleColor().addTextChangedListener(this) + + binding.lyricsText.setOnTouchListener { view, _ -> + view.parent.requestDisallowInterceptTouchEvent(true) + return@setOnTouchListener false + } } private fun fillViewsWithFileTags() { - songText.setText(songTitle) - albumArtistText.setText(albumArtist) - albumText.setText(albumTitle) - artistText.setText(artistName) - genreText.setText(genreName) - yearText.setText(songYear) - trackNumberText.setText(trackNumber) - lyricsText.setText(lyrics) - songComposerText.setText(composer) + binding.songText.setText(songTitle) + binding.albumArtistText.setText(albumArtist) + binding.albumText.setText(albumTitle) + binding.artistText.setText(artistName) + binding.genreText.setText(genreName) + binding.yearText.setText(songYear) + binding.trackNumberText.setText(trackNumber) + binding.lyricsText.setText(lyrics) + binding.songComposerText.setText(composer) + println(songTitle + songYear) } - override fun loadCurrentImage() { - } + override fun loadCurrentImage() {} - override fun searchImageOnWeb() { - } + override fun searchImageOnWeb() {} - override fun deleteImage() { - } + override fun deleteImage() {} override fun save() { val fieldKeyValueMap = EnumMap(FieldKey::class.java) - fieldKeyValueMap[FieldKey.TITLE] = songText.text.toString() - fieldKeyValueMap[FieldKey.ALBUM] = albumText.text.toString() - fieldKeyValueMap[FieldKey.ARTIST] = artistText.text.toString() - fieldKeyValueMap[FieldKey.GENRE] = genreText.text.toString() - fieldKeyValueMap[FieldKey.YEAR] = yearText.text.toString() - fieldKeyValueMap[FieldKey.TRACK] = trackNumberText.text.toString() - fieldKeyValueMap[FieldKey.LYRICS] = lyricsText.text.toString() - fieldKeyValueMap[FieldKey.ALBUM_ARTIST] = albumArtistText.text.toString() - fieldKeyValueMap[FieldKey.COMPOSER] = songComposerText.text.toString() + fieldKeyValueMap[FieldKey.TITLE] = binding.songText.text.toString() + fieldKeyValueMap[FieldKey.ALBUM] = binding.albumText.text.toString() + fieldKeyValueMap[FieldKey.ARTIST] = binding.artistText.text.toString() + fieldKeyValueMap[FieldKey.GENRE] = binding.genreText.text.toString() + fieldKeyValueMap[FieldKey.YEAR] = binding.yearText.text.toString() + fieldKeyValueMap[FieldKey.TRACK] = binding.trackNumberText.text.toString() + fieldKeyValueMap[FieldKey.LYRICS] = binding.lyricsText.text.toString() + fieldKeyValueMap[FieldKey.ALBUM_ARTIST] = binding.albumArtistText.text.toString() + fieldKeyValueMap[FieldKey.COMPOSER] = binding.songComposerText.text.toString() writeValuesToFiles(fieldKeyValueMap, null) } @@ -120,4 +127,7 @@ class SongTagEditorActivity : AbsTagEditorActivity(), TextWatcher { companion object { val TAG: String = SongTagEditorActivity::class.java.simpleName } + + override val editorImage: ImageView? + get() = null } diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/WriteTagsAsyncTask.java b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/WriteTagsAsyncTask.java index 6e71e4d6c..0ae1dc8d2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/WriteTagsAsyncTask.java +++ b/app/src/main/java/code/name/monkey/retromusic/activities/tageditor/WriteTagsAsyncTask.java @@ -10,7 +10,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; -import com.afollestad.materialdialogs.MaterialDialog; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.jaudiotagger.audio.AudioFile; import org.jaudiotagger.audio.AudioFileIO; @@ -136,17 +136,17 @@ public class WriteTagsAsyncTask extends DialogAsyncTask implements SwipeAndDragHelper.ActionCompletionContract { diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt index c2ed6d5e7..ea4e6e25e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/GenreAdapter.kt @@ -17,13 +17,18 @@ package code.name.monkey.retromusic.adapter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.core.view.ViewCompat +import android.view.ViewOutlineProvider import androidx.fragment.app.FragmentActivity import androidx.recyclerview.widget.RecyclerView import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension +import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.interfaces.IGenreClickListener import code.name.monkey.retromusic.model.Genre +import code.name.monkey.retromusic.util.MusicUtil +import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import java.util.* /** @@ -36,6 +41,15 @@ class GenreAdapter( private val mItemLayoutRes: Int, private val listener: IGenreClickListener ) : RecyclerView.Adapter() { + + init { + this.setHasStableIds(true) + } + + override fun getItemId(position: Int): Long { + return dataSet[position].id + } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { return ViewHolder(LayoutInflater.from(activity).inflate(mItemLayoutRes, parent, false)) } @@ -49,6 +63,28 @@ class GenreAdapter( genre.songCount, if (genre.songCount > 1) activity.getString(R.string.songs) else activity.getString(R.string.song) ) + loadGenreImage(genre, holder) + } + + private fun loadGenreImage(genre: Genre, holder: GenreAdapter.ViewHolder) { + val genreSong = MusicUtil.songByGenre(genre.id) + GlideApp.with(activity) + .asBitmapPalette() + .load(RetroGlideExtension.getSongModel(genreSong)) + .songCoverOptions(genreSong) + .into(object : RetroMusicColoredTarget(holder.image!!) { + override fun onColorReady(colors: MediaNotificationProcessor) { + setColors(holder, colors) + } + }) + // Just for a bit of shadow around image + holder.image?.outlineProvider = ViewOutlineProvider.BOUNDS + } + + private fun setColors(holder: ViewHolder, color: MediaNotificationProcessor) { + holder.imageContainerCard?.setCardBackgroundColor(color.backgroundColor) + holder.title?.setTextColor(color.primaryTextColor) + holder.text?.setTextColor(color.secondaryTextColor) } override fun getItemCount(): Int { @@ -62,7 +98,6 @@ class GenreAdapter( inner class ViewHolder(itemView: View) : MediaEntryViewHolder(itemView) { override fun onClick(v: View?) { - ViewCompat.setTransitionName(itemView, "genre") listener.onClickGenre(dataSet[layoutPosition], itemView) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt index f57c45ab3..85c3578ba 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt @@ -22,6 +22,7 @@ import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.AppCompatTextView import androidx.core.os.bundleOf +import androidx.fragment.app.findFragment import androidx.navigation.findNavController import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.recyclerview.widget.GridLayoutManager @@ -34,14 +35,15 @@ import code.name.monkey.retromusic.adapter.album.AlbumAdapter import code.name.monkey.retromusic.adapter.artist.ArtistAdapter import code.name.monkey.retromusic.adapter.song.SongAdapter import code.name.monkey.retromusic.extensions.hide -import code.name.monkey.retromusic.glide.SongGlideRequest +import code.name.monkey.retromusic.fragments.home.HomeFragment +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.interfaces.IAlbumClickListener import code.name.monkey.retromusic.interfaces.IArtistClickListener import code.name.monkey.retromusic.interfaces.IGenreClickListener import code.name.monkey.retromusic.model.* import code.name.monkey.retromusic.util.PreferenceUtil -import com.bumptech.glide.Glide import com.google.android.material.card.MaterialCardView class HomeAdapter( @@ -82,6 +84,7 @@ class HomeAdapter( val viewHolder = holder as AlbumViewHolder viewHolder.bindView(home) viewHolder.clickableArea.setOnClickListener { + it.findFragment().setSharedAxisXTransitions() activity.findNavController(R.id.fragment_container).navigate( R.id.detailListFragment, bundleOf("type" to RECENT_ALBUMS) @@ -92,6 +95,7 @@ class HomeAdapter( val viewHolder = holder as AlbumViewHolder viewHolder.bindView(home) viewHolder.clickableArea.setOnClickListener { + it.findFragment().setSharedAxisXTransitions() activity.findNavController(R.id.fragment_container).navigate( R.id.detailListFragment, bundleOf("type" to TOP_ALBUMS) @@ -102,6 +106,7 @@ class HomeAdapter( val viewHolder = holder as ArtistViewHolder viewHolder.bindView(home) viewHolder.clickableArea.setOnClickListener { + it.findFragment().setSharedAxisXTransitions() activity.findNavController(R.id.fragment_container).navigate( R.id.detailListFragment, bundleOf("type" to RECENT_ARTISTS) @@ -112,6 +117,7 @@ class HomeAdapter( val viewHolder = holder as ArtistViewHolder viewHolder.bindView(home) viewHolder.clickableArea.setOnClickListener { + it.findFragment().setSharedAxisXTransitions() activity.findNavController(R.id.fragment_container).navigate( R.id.detailListFragment, bundleOf("type" to TOP_ARTISTS) @@ -126,6 +132,7 @@ class HomeAdapter( val viewHolder = holder as PlaylistViewHolder viewHolder.bindView(home) viewHolder.clickableArea.setOnClickListener { + it.findFragment().setSharedAxisXTransitions() activity.findNavController(R.id.fragment_container).navigate( R.id.detailListFragment, bundleOf("type" to FAVOURITES) @@ -184,17 +191,29 @@ class HomeAdapter( fun bindView(home: Home) { val color = ThemeStore.accentColor(activity) - itemView.findViewById(R.id.message).setTextColor(color) + itemView.findViewById(R.id.message).apply { + setTextColor(color) + setOnClickListener { + MusicPlayerRemote.playNext((home.arrayList as List).subList(0, 8)) + if (!MusicPlayerRemote.isPlaying) { + MusicPlayerRemote.playNextSong() + } + } + } itemView.findViewById(R.id.card6).apply { setCardBackgroundColor(ColorUtil.withAlpha(color, 0.12f)) } images.forEachIndexed { index, id -> itemView.findViewById(id).setOnClickListener { MusicPlayerRemote.playNext(home.arrayList[index] as Song) + if (!MusicPlayerRemote.isPlaying) { + MusicPlayerRemote.playNextSong() + } } - SongGlideRequest.Builder.from(Glide.with(activity), home.arrayList[index] as Song) + GlideApp.with(activity) .asBitmap() - .build() + .songCoverOptions(home.arrayList[index] as Song) + .load(RetroGlideExtension.getSongModel(home.arrayList[index] as Song)) .into(itemView.findViewById(id)) } } @@ -207,7 +226,7 @@ class HomeAdapter( val songAdapter = SongAdapter( activity, home.arrayList as MutableList, - R.layout.item_album_card, null + R.layout.item_favourite_card, null ) layoutManager = linearLayoutManager() adapter = songAdapter @@ -257,7 +276,7 @@ class HomeAdapter( bundleOf(EXTRA_ARTIST_ID to artistId), null, FragmentNavigatorExtras( - view to "artist" + view to artistId.toString() ) ) } @@ -268,7 +287,7 @@ class HomeAdapter( bundleOf(EXTRA_ALBUM_ID to albumId), null, FragmentNavigatorExtras( - view to "album" + view to albumId.toString() ) ) } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/SearchAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/SearchAdapter.kt index a0e53380b..845c2b52b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/SearchAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/SearchAdapter.kt @@ -29,15 +29,14 @@ import code.name.monkey.retromusic.* import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.PlaylistWithSongs -import code.name.monkey.retromusic.glide.AlbumGlideRequest -import code.name.monkey.retromusic.glide.ArtistGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.menu.SongMenuHelper import code.name.monkey.retromusic.model.* import code.name.monkey.retromusic.model.smartplaylist.AbsSmartPlaylist import code.name.monkey.retromusic.repository.PlaylistSongsLoader import code.name.monkey.retromusic.util.MusicUtil -import com.bumptech.glide.Glide import java.util.* class SearchAdapter( @@ -52,7 +51,7 @@ class SearchAdapter( override fun getItemViewType(position: Int): Int { if (dataSet[position] is Album) return ALBUM - if (dataSet[position] is Artist) return ARTIST + if (dataSet[position] is Artist) return if ((dataSet[position] as Artist).isAlbumArtist) ALBUM_ARTIST else ARTIST if (dataSet[position] is Genre) return GENRE if (dataSet[position] is PlaylistEntity) return PLAYLIST return if (dataSet[position] is Song) SONG else HEADER @@ -66,6 +65,14 @@ class SearchAdapter( false ), viewType ) + else if (viewType == ALBUM || viewType == ARTIST || viewType== ALBUM_ARTIST) + ViewHolder( + LayoutInflater.from(activity).inflate( + R.layout.item_list_big, + parent, + false + ), viewType + ) else ViewHolder( LayoutInflater.from(activity).inflate(R.layout.item_list, parent, false), @@ -80,21 +87,23 @@ class SearchAdapter( val album = dataSet[position] as Album holder.title?.text = album.title holder.text?.text = album.artistName - AlbumGlideRequest.Builder.from(Glide.with(activity), album.safeGetFirstSong()) - .checkIgnoreMediaStore().build().into(holder.image) + GlideApp.with(activity).asDrawable().albumCoverOptions(album.safeGetFirstSong()).load(RetroGlideExtension.getSongModel(album.safeGetFirstSong())) + .into(holder.image!!) } ARTIST -> { holder.imageTextContainer?.isVisible = true val artist = dataSet[position] as Artist holder.title?.text = artist.name holder.text?.text = MusicUtil.getArtistInfoString(activity, artist) - ArtistGlideRequest.Builder.from(Glide.with(activity), artist).build() - .into(holder.image) + GlideApp.with(activity).asDrawable().artistImageOptions(artist).load( + RetroGlideExtension.getArtistModel(artist)).into(holder.image!!) } SONG -> { + holder.imageTextContainer?.isVisible = true val song = dataSet[position] as Song holder.title?.text = song.title holder.text?.text = song.albumName + GlideApp.with(activity).asDrawable().songCoverOptions(song).load(RetroGlideExtension.getSongModel(song)).into(holder.image!!) } GENRE -> { val genre = dataSet[position] as Genre @@ -113,6 +122,14 @@ class SearchAdapter( holder.title?.text = playlist.playlistName //holder.text?.text = MusicUtil.playlistInfoString(activity, playlist.songs) } + ALBUM_ARTIST -> { + holder.imageTextContainer?.isVisible = true + val artist = dataSet[position] as Artist + holder.title?.text = artist.name + holder.text?.text = MusicUtil.getArtistInfoString(activity, artist) + GlideApp.with(activity).asDrawable().artistImageOptions(artist).load(artist) + .into(holder.image!!) + } else -> { holder.title?.text = dataSet[position].toString() holder.title?.setTextColor(ThemeStore.accentColor(activity)) @@ -174,6 +191,12 @@ class SearchAdapter( bundleOf(EXTRA_ARTIST_ID to (item as Artist).id) ) } + ALBUM_ARTIST ->{ + activity.findNavController(R.id.fragment_container).navigate( + R.id.albumArtistDetailsFragment, + bundleOf(EXTRA_ARTIST_NAME to (item as Artist).name) + ) + } GENRE -> { activity.findNavController(R.id.fragment_container).navigate( R.id.genreDetailsFragment, @@ -202,5 +225,6 @@ class SearchAdapter( private const val SONG = 3 private const val GENRE = 4 private const val PLAYLIST = 5 + private const val ALBUM_ARTIST = 6 } } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt index 5b55e02d8..323eae4ea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/SongFileAdapter.kt @@ -24,19 +24,20 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.audiocover.AudioFileCover import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.interfaces.ICallbacks import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.RetroUtil -import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.signature.MediaStoreSignature +import me.zhanghai.android.fastscroll.PopupTextProvider import java.io.File import java.text.DecimalFormat import kotlin.math.log10 import kotlin.math.pow -import me.zhanghai.android.fastscroll.PopupTextProvider class SongFileAdapter( private val activity: AppCompatActivity, @@ -111,14 +112,14 @@ class SongFileAdapter( val error = RetroUtil.getTintedVectorDrawable( activity, R.drawable.ic_file_music, iconColor ) - Glide.with(activity) + GlideApp.with(activity) .load(AudioFileCover(file.path)) .diskCacheStrategy(DiskCacheStrategy.NONE) .error(error) .placeholder(error) - .animate(android.R.anim.fade_in) + .transition(RetroGlideExtension.getDefaultTransition()) .signature(MediaStoreSignature("", file.lastModified(), 0)) - .into(holder.image) + .into(holder.image!!) } } @@ -126,7 +127,7 @@ class SongFileAdapter( return dataSet.size } - override fun getIdentifier(position: Int): File? { + override fun getIdentifier(position: Int): File { return dataSet[position] } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/StorageAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/StorageAdapter.kt new file mode 100644 index 000000000..98c2c632f --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/StorageAdapter.kt @@ -0,0 +1,55 @@ +package code.name.monkey.retromusic.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import code.name.monkey.retromusic.R +import java.io.File + +class StorageAdapter( + val storageList: List, + val storageClickListener: StorageClickListener +) : + RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + return ViewHolder( + LayoutInflater.from(parent.context).inflate( + R.layout.item_storage, + parent, + false + ) + ) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.bindData(storageList[position]) + } + + override fun getItemCount(): Int { + return storageList.size + } + + inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val title: TextView = itemView.findViewById(R.id.title) + + fun bindData(storage: Storage) { + title.text = storage.title + } + + init { + itemView.setOnClickListener { storageClickListener.onStorageClicked(storageList[bindingAdapterPosition]) } + } + } +} + +interface StorageClickListener { + fun onStorageClicked(storage: Storage) +} + +class Storage { + lateinit var title: String + lateinit var file: File +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt index 869ce8bb9..8f9e00f03 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumAdapter.kt @@ -24,7 +24,8 @@ import androidx.fragment.app.FragmentActivity import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder -import code.name.monkey.retromusic.glide.AlbumGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.helper.SortOrder import code.name.monkey.retromusic.helper.menu.SongsMenuHelper @@ -35,7 +36,6 @@ import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.Glide import me.zhanghai.android.fastscroll.PopupTextProvider open class AlbumAdapter( @@ -73,7 +73,13 @@ open class AlbumAdapter( } protected open fun getAlbumText(album: Album): String? { - return album.artistName + return album.albumArtist.let { + if (it.isNullOrEmpty()) { + album.artistName + } else { + it + } + } } override fun onBindViewHolder(holder: ViewHolder, position: Int) { @@ -82,6 +88,7 @@ open class AlbumAdapter( holder.itemView.isActivated = isChecked holder.title?.text = getAlbumTitle(album) holder.text?.text = getAlbumText(album) + ViewCompat.setTransitionName(holder.image!!, album.id.toString()) loadAlbumCover(album, holder) } @@ -92,17 +99,17 @@ open class AlbumAdapter( holder.paletteColorContainer?.setBackgroundColor(color.backgroundColor) } holder.mask?.backgroundTintList = ColorStateList.valueOf(color.primaryTextColor) - holder.imageContainerCard?.setCardBackgroundColor(color.backgroundColor) } + holder.imageContainerCard?.setCardBackgroundColor(color.backgroundColor) + } protected open fun loadAlbumCover(album: Album, holder: ViewHolder) { if (holder.image == null) { return } - - AlbumGlideRequest.Builder.from(Glide.with(activity), album.safeGetFirstSong()) - .checkIgnoreMediaStore() - .generatePalette(activity) - .build() + val song = album.safeGetFirstSong() + GlideApp.with(activity).asBitmapPalette().albumCoverOptions(song) + //.checkIgnoreMediaStore() + .load(RetroGlideExtension.getSongModel(song)) .into(object : RetroMusicColoredTarget(holder.image!!) { override fun onColorReady(colors: MediaNotificationProcessor) { setColors(colors, holder) @@ -161,7 +168,6 @@ open class AlbumAdapter( inner class ViewHolder(itemView: View) : MediaEntryViewHolder(itemView) { init { - setImageTransitionName("Album") menu?.visibility = View.GONE } @@ -171,16 +177,13 @@ open class AlbumAdapter( toggleChecked(layoutPosition) } else { image?.let { - ViewCompat.setTransitionName(it, "album") listener?.onAlbumClick(dataSet[layoutPosition].id, it) } - } } override fun onLongClick(v: View?): Boolean { - toggleChecked(layoutPosition) - return super.onLongClick(v) + return toggleChecked(layoutPosition) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt index f6ca41790..50841883e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/AlbumCoverPagerAdapter.kt @@ -26,15 +26,15 @@ import androidx.lifecycle.lifecycleScope import code.name.monkey.retromusic.R import code.name.monkey.retromusic.fragments.AlbumCoverStyle import code.name.monkey.retromusic.fragments.NowPlayingScreen.* +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget -import code.name.monkey.retromusic.glide.SongGlideRequest import code.name.monkey.retromusic.misc.CustomFragmentStatePagerAdapter import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.Glide import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -162,9 +162,10 @@ class AlbumCoverPagerAdapter( } private fun loadAlbumCover() { - SongGlideRequest.Builder.from(Glide.with(requireContext()), song) - .checkIgnoreMediaStore(requireContext()) - .generatePalette(requireContext()).build() + GlideApp.with(this).asBitmapPalette().songCoverOptions(song) + //.checkIgnoreMediaStore() + .load(RetroGlideExtension.getSongModel(song)) + .dontAnimate() .into(object : RetroMusicColoredTarget(albumCover) { override fun onColorReady(colors: MediaNotificationProcessor) { setColor(colors) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/album/HorizontalAlbumAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/album/HorizontalAlbumAdapter.kt index 8a94b7a5f..1457de7bc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/album/HorizontalAlbumAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/album/HorizontalAlbumAdapter.kt @@ -17,7 +17,8 @@ package code.name.monkey.retromusic.adapter.album import android.view.View import android.view.ViewGroup import androidx.fragment.app.FragmentActivity -import code.name.monkey.retromusic.glide.AlbumGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.helper.HorizontalAdapterHelper import code.name.monkey.retromusic.interfaces.IAlbumClickListener @@ -25,7 +26,6 @@ import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.Glide class HorizontalAlbumAdapter( activity: FragmentActivity, @@ -49,10 +49,8 @@ class HorizontalAlbumAdapter( override fun loadAlbumCover(album: Album, holder: ViewHolder) { if (holder.image == null) return - AlbumGlideRequest.Builder.from(Glide.with(activity), album.safeGetFirstSong()) - .checkIgnoreMediaStore() - .generatePalette(activity) - .build() + GlideApp.with(activity).asBitmapPalette().albumCoverOptions(album.safeGetFirstSong()) + .load(RetroGlideExtension.getSongModel(album.safeGetFirstSong())) .into(object : RetroMusicColoredTarget(holder.image!!) { override fun onColorReady(colors: MediaNotificationProcessor) { setColors(colors, holder) @@ -60,7 +58,7 @@ class HorizontalAlbumAdapter( }) } - override fun getAlbumText(album: Album): String? { + override fun getAlbumText(album: Album): String { return MusicUtil.getYearString(album.year) } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt index 395d922d2..2de75bc15 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/artist/ArtistAdapter.kt @@ -26,25 +26,28 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.extensions.hide -import code.name.monkey.retromusic.glide.ArtistGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.helper.menu.SongsMenuHelper +import code.name.monkey.retromusic.interfaces.IAlbumArtistClickListener import code.name.monkey.retromusic.interfaces.IArtistClickListener import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil +import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.Glide -import java.util.* import me.zhanghai.android.fastscroll.PopupTextProvider +import java.util.* class ArtistAdapter( val activity: FragmentActivity, var dataSet: List, var itemLayoutRes: Int, val ICabHolder: ICabHolder?, - val IArtistClickListener: IArtistClickListener + val IArtistClickListener: IArtistClickListener, + val IAlbumArtistClickListener: IAlbumArtistClickListener? = null ) : AbsMultiSelectAdapter( activity, ICabHolder, R.menu.menu_media_selection ), PopupTextProvider { @@ -82,6 +85,13 @@ class ArtistAdapter( holder.itemView.isActivated = isChecked holder.title?.text = artist.name holder.text?.hide() + holder.image?.let { + if (PreferenceUtil.albumArtistsOnly) { + ViewCompat.setTransitionName(it, artist.name) + } else { + ViewCompat.setTransitionName(it, artist.id.toString()) + } + } loadArtistImage(artist, holder) } @@ -98,9 +108,11 @@ class ArtistAdapter( if (holder.image == null) { return } - ArtistGlideRequest.Builder.from(Glide.with(activity), artist) - .generatePalette(activity) - .build() + GlideApp.with(activity) + .asBitmapPalette() + .load(RetroGlideExtension.getArtistModel(artist)) + .artistImageOptions(artist) + .transition(RetroGlideExtension.getDefaultTransition()) .into(object : RetroMusicColoredTarget(holder.image!!) { override fun onColorReady(colors: MediaNotificationProcessor) { setColors(colors, holder) @@ -112,7 +124,7 @@ class ArtistAdapter( return dataSet.size } - override fun getIdentifier(position: Int): Artist? { + override fun getIdentifier(position: Int): Artist { return dataSet[position] } @@ -154,16 +166,19 @@ class ArtistAdapter( if (isInQuickSelectMode) { toggleChecked(layoutPosition) } else { + val artist = dataSet[layoutPosition] image?.let { - ViewCompat.setTransitionName(it, "artist") - IArtistClickListener.onArtist(dataSet[layoutPosition].id, it) + if (PreferenceUtil.albumArtistsOnly && IAlbumArtistClickListener != null) { + IAlbumArtistClickListener.onAlbumArtist(artist.name, it) + } else { + IArtistClickListener.onArtist(artist.id, it) + } } } } override fun onLongClick(v: View?): Boolean { - toggleChecked(layoutPosition) - return super.onLongClick(v) + return toggleChecked(layoutPosition) } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.java b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.java index f0d431adf..581141bf5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.java +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/base/AbsMultiSelectAdapter.java @@ -1,29 +1,39 @@ package code.name.monkey.retromusic.adapter.base; +import android.annotation.SuppressLint; import android.content.Context; import android.view.Menu; import android.view.MenuItem; + import androidx.annotation.MenuRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.appcompat.widget.Toolbar; import androidx.recyclerview.widget.RecyclerView; -import code.name.monkey.retromusic.R; -import code.name.monkey.retromusic.interfaces.ICabHolder; + import com.afollestad.materialcab.MaterialCab; + import java.util.ArrayList; import java.util.List; -public abstract class AbsMultiSelectAdapter - extends RecyclerView.Adapter implements MaterialCab.Callback { +import code.name.monkey.retromusic.R; +import code.name.monkey.retromusic.interfaces.ICabHolder; - @Nullable private final ICabHolder ICabHolder; +public abstract class AbsMultiSelectAdapter + extends RecyclerView.Adapter implements MaterialCab.Callback { + + @Nullable + private final ICabHolder ICabHolder; private final Context context; private MaterialCab cab; - private List checked; + private final List checked; private int menuRes; + private AppCompatTextView dummyText; + private int oldSize = 0; public AbsMultiSelectAdapter( - @NonNull Context context, @Nullable ICabHolder ICabHolder, @MenuRes int menuRes) { + @NonNull Context context, @Nullable ICabHolder ICabHolder, @MenuRes int menuRes) { this.ICabHolder = ICabHolder; checked = new ArrayList<>(); this.menuRes = menuRes; @@ -32,12 +42,16 @@ public abstract class AbsMultiSelectAdapter size) { + title.setTranslationY(40); + dummyText.animate().translationY(-40).alpha(0.0F).setDuration(300).start(); + } else { + title.setTranslationY(-40); + dummyText.animate().translationY(40).alpha(0.0F).setDuration(300).start(); + } + title.animate().translationY(0).alpha(1.0F).setDuration(300).start(); } + oldSize = size; } } + + private void playCreateAnim(MaterialCab materialCab) { + Toolbar cabToolbar = materialCab.getToolbar(); + int height = context.getResources().getDimensionPixelSize(R.dimen.toolbar_height); + cabToolbar.setTranslationY(-height); + cabToolbar.animate().translationYBy(height).setDuration(300).start(); + } + + private void createDummyTextView() { + if (dummyText != null) return; + dummyText = new AppCompatTextView(context); + dummyText.setSingleLine(); + dummyText.setTextAppearance(context, R.style.ToolbarTextAppearanceNormal); + Toolbar.LayoutParams l1 = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.WRAP_CONTENT); + dummyText.setLayoutParams(l1); + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/base/MediaEntryViewHolder.java b/app/src/main/java/code/name/monkey/retromusic/adapter/base/MediaEntryViewHolder.java index 9c40491ea..16dbc1c58 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/base/MediaEntryViewHolder.java +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/base/MediaEntryViewHolder.java @@ -24,11 +24,11 @@ import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatImageView; import androidx.recyclerview.widget.RecyclerView; -import code.name.monkey.retromusic.R; - import com.google.android.material.card.MaterialCardView; import com.h6ah4i.android.widget.advrecyclerview.utils.AbstractDraggableSwipeableItemViewHolder; +import code.name.monkey.retromusic.R; + public class MediaEntryViewHolder extends AbstractDraggableSwipeableItemViewHolder implements View.OnLongClickListener, View.OnClickListener { diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt index 6a941af35..afcb4ce89 100755 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/playlist/PlaylistAdapter.kt @@ -15,7 +15,6 @@ package code.name.monkey.retromusic.adapter.playlist import android.graphics.Color -import android.graphics.drawable.Drawable import android.text.TextUtils import android.view.LayoutInflater import android.view.MenuItem @@ -24,29 +23,22 @@ import android.view.ViewGroup import androidx.appcompat.widget.PopupMenu import androidx.core.view.ViewCompat import androidx.fragment.app.FragmentActivity -import androidx.lifecycle.lifecycleScope -import code.name.monkey.appthemehelper.util.ATHUtil -import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.PlaylistWithSongs -import code.name.monkey.retromusic.db.SongEntity import code.name.monkey.retromusic.db.toSongs import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.playlistPreview.PlaylistPreview import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper import code.name.monkey.retromusic.helper.menu.SongsMenuHelper import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.interfaces.IPlaylistClickListener import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.util.AutoGeneratedPlaylistBitmap import code.name.monkey.retromusic.util.MusicUtil -import kotlinx.coroutines.Dispatchers.IO -import kotlinx.coroutines.Dispatchers.Main -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext class PlaylistAdapter( private val activity: FragmentActivity, @@ -95,27 +87,23 @@ class PlaylistAdapter( holder.itemView.isActivated = isChecked(playlist) holder.title?.text = getPlaylistTitle(playlist.playlistEntity) holder.text?.text = getPlaylistText(playlist) - holder.image?.setImageDrawable(getIconRes()) val isChecked = isChecked(playlist) if (isChecked) { holder.menu?.hide() } else { holder.menu?.show() } - //playlistBitmapLoader(activity, holder, playlist) + GlideApp.with(activity) + .load(PlaylistPreview(playlist)) + .playlistOptions() + .into(holder.image!!) } - private fun getIconRes(): Drawable = TintHelper.createTintedDrawable( - activity, - R.drawable.ic_playlist_play, - ATHUtil.resolveColor(activity, R.attr.colorControlNormal) - ) - override fun getItemCount(): Int { return dataSet.size } - override fun getIdentifier(position: Int): PlaylistWithSongs? { + override fun getIdentifier(position: Int): PlaylistWithSongs { return dataSet[position] } @@ -141,18 +129,8 @@ class PlaylistAdapter( return songs } - private fun getSongs(playlist: PlaylistWithSongs): List = - mutableListOf().apply { - addAll(playlist.songs) - } - inner class ViewHolder(itemView: View) : MediaEntryViewHolder(itemView) { init { - image?.apply { - val iconPadding = - activity.resources.getDimensionPixelSize(R.dimen.list_item_image_icon_padding) - setPadding(iconPadding, iconPadding, iconPadding, iconPadding) - } menu?.setOnClickListener { view -> val popupMenu = PopupMenu(activity, view) popupMenu.inflate(R.menu.menu_item_playlist) @@ -183,37 +161,6 @@ class PlaylistAdapter( } } - private fun playlistBitmapLoader( - activity: FragmentActivity, - viewHolder: ViewHolder, - playlist: PlaylistWithSongs - ) { - - activity.lifecycleScope.launch(IO) { - val songs = playlist.songs.toSongs() - val bitmap = AutoGeneratedPlaylistBitmap.getBitmap(activity, songs, false, false) - withContext(Main) { viewHolder.image?.setImageBitmap(bitmap) } - } - - /* - override fun doInBackground(vararg params: Void?): Bitmap { - val songs = playlist.songs.toSongs() - return AutoGeneratedPlaylistBitmap.getBitmap(activity, songs, false, false) - } - - override fun onPostExecute(result: Bitmap?) { - super.onPostExecute(result) - viewHolder.image?.setImageBitmap(result) - val color = RetroColorUtil.getColor( - RetroColorUtil.generatePalette( - result - ), - ATHUtil.resolveColor(activity, R.attr.colorSurface) - ) - viewHolder.paletteColorContainer?.setBackgroundColor(color) - }*/ - } - companion object { val TAG: String = PlaylistAdapter::class.java.simpleName } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt index eafb93f42..0e52a5d73 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt @@ -17,105 +17,99 @@ package code.name.monkey.retromusic.adapter.song import android.view.MenuItem import android.view.View import androidx.fragment.app.FragmentActivity +import androidx.lifecycle.lifecycleScope +import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.R.menu import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.toSongEntity -import code.name.monkey.retromusic.db.toSongs +import code.name.monkey.retromusic.db.toSongsEntity import code.name.monkey.retromusic.dialogs.RemoveSongFromPlaylistDialog +import code.name.monkey.retromusic.extensions.applyColor +import code.name.monkey.retromusic.extensions.applyOutlineColor +import code.name.monkey.retromusic.fragments.LibraryViewModel +import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.interfaces.ICabHolder -import code.name.monkey.retromusic.model.PlaylistSong import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.util.ViewUtil +import com.google.android.material.button.MaterialButton import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemAdapter -import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemViewHolder import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange -import com.h6ah4i.android.widget.advrecyclerview.draggable.annotation.DraggableItemStateFlags +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.koin.androidx.viewmodel.ext.android.viewModel class OrderablePlaylistSongAdapter( private val playlist: PlaylistEntity, activity: FragmentActivity, - dataSet: ArrayList, + dataSet: MutableList, itemLayoutRes: Int, ICabHolder: ICabHolder?, - private val onMoveItemListener: OnMoveItemListener? -) : SongAdapter( - activity, - dataSet, - itemLayoutRes, - ICabHolder -), DraggableItemAdapter { +) : AbsOffsetSongAdapter(activity, dataSet, itemLayoutRes, ICabHolder), + DraggableItemAdapter { + + val libraryViewModel: LibraryViewModel by activity.viewModel() + val tempDataSet = dataSet init { - setMultiSelectMenuRes(menu.menu_playlists_songs_selection) + this.setHasStableIds(true) + this.setMultiSelectMenuRes(R.menu.menu_playlists_songs_selection) + } + + override fun getItemId(position: Int): Long { + // requires static value, it means need to keep the same value + // even if the item position has been changed. + return if (position != 0) { + dataSet[position - 1].id + } else { + -1 + } + + } override fun createViewHolder(view: View): SongAdapter.ViewHolder { return ViewHolder(view) } - override fun getItemId(position: Int): Long { - var positionFinal = position - positionFinal-- + override fun getItemViewType(position: Int): Int { + return if (position == 0) OFFSET_ITEM else SONG + } - var long: Long = 0 - if (positionFinal < 0) { - long = -2 - } else { - if (dataSet[positionFinal] is PlaylistSong) { - long = (dataSet[positionFinal] as PlaylistSong).idInPlayList.toLong() + override fun onBindViewHolder(holder: SongAdapter.ViewHolder, position: Int) { + if (holder.itemViewType == OFFSET_ITEM) { + val color = ThemeStore.accentColor(activity) + val viewHolder = holder as ViewHolder + viewHolder.playAction?.let { + it.setOnClickListener { + MusicPlayerRemote.openQueue(dataSet, 0, true) + } + it.applyOutlineColor(color) } + viewHolder.shuffleAction?.let { + it.setOnClickListener { + MusicPlayerRemote.openAndShuffleQueue(dataSet, true) + } + it.applyColor(color) + } + } else { + super.onBindViewHolder(holder, position - 1) } - return long } override fun onMultipleItemAction(menuItem: MenuItem, selection: List) { when (menuItem.itemId) { - R.id.action_remove_from_playlist -> { - RemoveSongFromPlaylistDialog.create(selection.toSongs(playlist.playListId)) - .show(activity.supportFragmentManager, "REMOVE_FROM_PLAYLIST") - return - } - } - super.onMultipleItemAction(menuItem, selection) - } - - override fun onCheckCanStartDrag(holder: ViewHolder, position: Int, x: Int, y: Int): Boolean { - return onMoveItemListener != null && position > 0 && (ViewUtil.hitTest( - holder.dragView!!, x, y - ) || ViewUtil.hitTest(holder.image!!, x, y)) - } - - override fun onGetItemDraggableRange(holder: ViewHolder, position: Int): ItemDraggableRange { - return ItemDraggableRange(1, dataSet.size) - } - - override fun onMoveItem(fromPosition: Int, toPosition: Int) { - if (onMoveItemListener != null && fromPosition != toPosition) { - onMoveItemListener.onMoveItem(fromPosition - 1, toPosition - 1) + R.id.action_remove_from_playlist -> RemoveSongFromPlaylistDialog.create( + selection.toSongsEntity( + playlist + ) + ) + .show(activity.supportFragmentManager, "REMOVE_FROM_PLAYLIST") + else -> super.onMultipleItemAction(menuItem, selection) } } - override fun onCheckCanDrop(draggingPosition: Int, dropPosition: Int): Boolean { - return dropPosition > 0 - } - - override fun onItemDragStarted(position: Int) { - notifyDataSetChanged() - } - - override fun onItemDragFinished(fromPosition: Int, toPosition: Int, result: Boolean) { - notifyDataSetChanged() - } - - interface OnMoveItemListener { - fun onMoveItem(fromPosition: Int, toPosition: Int) - } - - inner class ViewHolder(itemView: View) : SongAdapter.ViewHolder(itemView), - DraggableItemViewHolder { - @DraggableItemStateFlags - private var mDragStateFlags: Int = 0 + inner class ViewHolder(itemView: View) : AbsOffsetSongAdapter.ViewHolder(itemView) { + val playAction: MaterialButton? = itemView.findViewById(R.id.playAction) + val shuffleAction: MaterialButton? = itemView.findViewById(R.id.shuffleAction) override var songMenuRes: Int get() = R.menu.menu_item_playlist_song @@ -123,16 +117,6 @@ class OrderablePlaylistSongAdapter( super.songMenuRes = value } - init { - if (dragView != null) { - if (onMoveItemListener != null) { - dragView?.visibility = View.VISIBLE - } else { - dragView?.visibility = View.GONE - } - } - } - override fun onSongMenuItemClick(item: MenuItem): Boolean { when (item.itemId) { R.id.action_remove_from_playlist -> { @@ -144,13 +128,58 @@ class OrderablePlaylistSongAdapter( return super.onSongMenuItemClick(item) } - @DraggableItemStateFlags - override fun getDragStateFlags(): Int { - return mDragStateFlags + init { + dragView?.visibility = View.VISIBLE } - override fun setDragStateFlags(@DraggableItemStateFlags flags: Int) { - mDragStateFlags = flags + override fun onClick(v: View?) { + if (itemViewType == OFFSET_ITEM) { + MusicPlayerRemote.openAndShuffleQueue(dataSet, true) + return + } + super.onClick(v) + } + } + + override fun onCheckCanStartDrag(holder: ViewHolder, position: Int, x: Int, y: Int): Boolean { + if (dataSet.size == 0 or 1) { + return false + } + val dragHandle = holder.dragView ?: return false + + val handleWidth = dragHandle.width + val handleHeight = dragHandle.height + val handleLeft = dragHandle.left + val handleTop = dragHandle.top + + return (x >= handleLeft && x < handleLeft + handleWidth && + y >= handleTop && y < handleTop + handleHeight) && position != 0 + } + + override fun onMoveItem(fromPosition: Int, toPosition: Int) { + dataSet.add(toPosition - 1, dataSet.removeAt(fromPosition - 1)) + } + + + override fun onGetItemDraggableRange(holder: ViewHolder, position: Int): ItemDraggableRange { + return ItemDraggableRange(1, itemCount - 1) + } + + override fun onCheckCanDrop(draggingPosition: Int, dropPosition: Int): Boolean { + return true + } + + override fun onItemDragStarted(position: Int) { + notifyDataSetChanged() + } + + override fun onItemDragFinished(fromPosition: Int, toPosition: Int, result: Boolean) { + notifyDataSetChanged() + } + + fun saveSongs(playlistEntity: PlaylistEntity) { + activity.lifecycleScope.launch(Dispatchers.IO) { + libraryViewModel.insertSongs(dataSet.toSongsEntity(playlistEntity)) } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlayingQueueAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlayingQueueAdapter.kt index f8fe7ab40..46b99c231 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlayingQueueAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/PlayingQueueAdapter.kt @@ -19,8 +19,9 @@ import android.view.View import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.FragmentActivity import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget -import code.name.monkey.retromusic.glide.SongGlideRequest import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote.isPlaying import code.name.monkey.retromusic.helper.MusicPlayerRemote.playNextSong @@ -29,7 +30,6 @@ import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.Glide import com.h6ah4i.android.widget.advrecyclerview.draggable.DraggableItemAdapter import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange import com.h6ah4i.android.widget.advrecyclerview.draggable.annotation.DraggableItemStateFlags @@ -79,9 +79,8 @@ class PlayingQueueAdapter( if (holder.image == null) { return } - SongGlideRequest.Builder.from(Glide.with(activity), song) - .checkIgnoreMediaStore(activity) - .generatePalette(activity).build() + GlideApp.with(activity).asBitmapPalette().songCoverOptions(song) + .load(RetroGlideExtension.getSongModel(song)) .into(object : RetroMusicColoredTarget(holder.image!!) { override fun onColorReady(colors: MediaNotificationProcessor) { //setColors(colors, holder) diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/ShuffleButtonSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/ShuffleButtonSongAdapter.kt index 781a8faae..989c4116e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/ShuffleButtonSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/ShuffleButtonSongAdapter.kt @@ -23,6 +23,8 @@ import code.name.monkey.retromusic.extensions.applyOutlineColor import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil import com.google.android.material.button.MaterialButton class ShuffleButtonSongAdapter( @@ -32,10 +34,15 @@ class ShuffleButtonSongAdapter( ICabHolder: ICabHolder? ) : AbsOffsetSongAdapter(activity, dataSet, itemLayoutRes, ICabHolder) { + override fun createViewHolder(view: View): SongAdapter.ViewHolder { return ViewHolder(view) } + override fun getItemViewType(position: Int): Int { + return if (position == 0) OFFSET_ITEM else SONG + } + override fun onBindViewHolder(holder: SongAdapter.ViewHolder, position: Int) { if (holder.itemViewType == OFFSET_ITEM) { val color = ThemeStore.accentColor(activity) @@ -54,6 +61,10 @@ class ShuffleButtonSongAdapter( } } else { super.onBindViewHolder(holder, position - 1) + val landscape = RetroUtil.isLandscape() + if ((PreferenceUtil.songGridSize > 2 && !landscape) || (PreferenceUtil.songGridSizeLand > 5 && landscape)) { + holder.menu?.visibility = View.GONE + } } } @@ -69,4 +80,5 @@ class ShuffleButtonSongAdapter( super.onClick(v) } } + } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt index 0360e3b57..b828f6648 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/SongAdapter.kt @@ -30,8 +30,9 @@ import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget -import code.name.monkey.retromusic.glide.SongGlideRequest import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.SortOrder import code.name.monkey.retromusic.helper.menu.SongMenuHelper @@ -42,7 +43,6 @@ import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import com.afollestad.materialcab.MaterialCab -import com.bumptech.glide.Glide import me.zhanghai.android.fastscroll.PopupTextProvider /** @@ -120,9 +120,8 @@ open class SongAdapter( if (holder.image == null) { return } - SongGlideRequest.Builder.from(Glide.with(activity), song) - .checkIgnoreMediaStore(activity) - .generatePalette(activity).build() + GlideApp.with(activity).asBitmapPalette().songCoverOptions(song) + .load(RetroGlideExtension.getSongModel(song)) .into(object : RetroMusicColoredTarget(holder.image!!) { override fun onColorReady(colors: MediaNotificationProcessor) { setColors(colors, holder) @@ -130,15 +129,15 @@ open class SongAdapter( }) } - private fun getSongTitle(song: Song): String? { + private fun getSongTitle(song: Song): String { return song.title } - private fun getSongText(song: Song): String? { + private fun getSongText(song: Song): String { return song.artistName } - private fun getSongText2(song: Song): String? { + private fun getSongText2(song: Song): String { return song.albumName } @@ -165,6 +164,7 @@ open class SongAdapter( SortOrder.SongSortOrder.SONG_ARTIST -> dataSet[position].artistName SortOrder.SongSortOrder.SONG_YEAR -> return MusicUtil.getYearString(dataSet[position].year) SortOrder.SongSortOrder.COMPOSER -> dataSet[position].composer + SortOrder.SongSortOrder.SONG_ALBUM_ARTIST -> dataSet[position].albumArtist else -> { return "" } diff --git a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/DynamicShortcutManager.kt b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/DynamicShortcutManager.kt index 2b74eab35..6582d408d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appshortcuts/DynamicShortcutManager.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appshortcuts/DynamicShortcutManager.kt @@ -24,7 +24,6 @@ import android.os.Build import code.name.monkey.retromusic.appshortcuts.shortcuttype.LastAddedShortcutType import code.name.monkey.retromusic.appshortcuts.shortcuttype.ShuffleAllShortcutType import code.name.monkey.retromusic.appshortcuts.shortcuttype.TopTracksShortcutType -import java.util.* @TargetApi(Build.VERSION_CODES.N_MR1) class DynamicShortcutManager(private val context: Context) { diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt index c3aee8205..461b3e272 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt @@ -27,15 +27,16 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget -import code.name.monkey.retromusic.glide.SongGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.* import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.animation.GlideAnimation import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.target.Target +import com.bumptech.glide.request.transition.Transition class AppWidgetBig : BaseAppWidget() { private var target: Target? = null // for cancellation @@ -158,20 +159,22 @@ class AppWidgetBig : BaseAppWidget() { val appContext = service.applicationContext service.runOnUiThread { if (target != null) { - Glide.clear(target) + Glide.with(service).clear(target) } - target = SongGlideRequest.Builder.from(Glide.with(appContext), song) - .checkIgnoreMediaStore(appContext).asBitmap().build() + target = GlideApp.with(appContext) + .asBitmap() + //.checkIgnoreMediaStore() + .load(RetroGlideExtension.getSongModel(song)) .into(object : SimpleTarget(widgetImageSize, widgetImageSize) { override fun onResourceReady( resource: Bitmap, - glideAnimation: GlideAnimation + transition: Transition? ) { update(resource) } - override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) { - super.onLoadFailed(e, errorDrawable) + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) update(null) } diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt index 8c6935c04..a0729267a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt @@ -27,7 +27,8 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget -import code.name.monkey.retromusic.glide.SongGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.* @@ -35,9 +36,9 @@ import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.animation.GlideAnimation import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.target.Target +import com.bumptech.glide.request.transition.Transition class AppWidgetCard : BaseAppWidget() { private var target: Target? = null // for cancellation @@ -150,14 +151,15 @@ class AppWidgetCard : BaseAppWidget() { // Load the album cover async and push the update on completion service.runOnUiThread { if (target != null) { - Glide.clear(target) + Glide.with(service).clear(target) } - target = SongGlideRequest.Builder.from(Glide.with(service), song) - .checkIgnoreMediaStore(service).generatePalette(service).build().centerCrop() + target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) + .load(RetroGlideExtension.getSongModel(song)) + .centerCrop() .into(object : SimpleTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - glideAnimation: GlideAnimation + transition: Transition? ) { val palette = resource.palette update( @@ -171,8 +173,8 @@ class AppWidgetCard : BaseAppWidget() { ) } - override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) { - super.onLoadFailed(e, errorDrawable) + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) } diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt index 63291abf8..3d00ee71d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt @@ -28,7 +28,8 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget -import code.name.monkey.retromusic.glide.SongGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.* @@ -36,9 +37,9 @@ import code.name.monkey.retromusic.util.ImageUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.animation.GlideAnimation import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.target.Target +import com.bumptech.glide.request.transition.Transition class AppWidgetClassic : BaseAppWidget() { private var target: Target? = null // for cancellation @@ -120,14 +121,16 @@ class AppWidgetClassic : BaseAppWidget() { val appContext = service.applicationContext service.runOnUiThread { if (target != null) { - Glide.clear(target) + Glide.with(service).clear(target) } - target = SongGlideRequest.Builder.from(Glide.with(service), song) - .checkIgnoreMediaStore(service).generatePalette(service).build().centerCrop() + target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) + .load(RetroGlideExtension.getSongModel(song)) + //.checkIgnoreMediaStore() + .centerCrop() .into(object : SimpleTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - glideAnimation: GlideAnimation + transition: Transition? ) { val palette = resource.palette update( @@ -143,8 +146,8 @@ class AppWidgetClassic : BaseAppWidget() { ) } - override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) { - super.onLoadFailed(e, errorDrawable) + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) update(null, Color.WHITE) } diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt index e46d69e65..14795cd3b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt @@ -27,16 +27,17 @@ import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.appwidgets.base.BaseAppWidget -import code.name.monkey.retromusic.glide.SongGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.* import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.animation.GlideAnimation import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.target.Target +import com.bumptech.glide.request.transition.Transition class AppWidgetSmall : BaseAppWidget() { private var target: Target? = null // for cancellation @@ -123,14 +124,16 @@ class AppWidgetSmall : BaseAppWidget() { val appContext = service.applicationContext service.runOnUiThread { if (target != null) { - Glide.clear(target) + Glide.with(service).clear(target) } - target = SongGlideRequest.Builder.from(Glide.with(service), song) - .checkIgnoreMediaStore(service).generatePalette(service).build().centerCrop() + target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) + //.checkIgnoreMediaStore() + .load(RetroGlideExtension.getSongModel(song)) + .centerCrop() .into(object : SimpleTarget(imageSize, imageSize) { override fun onResourceReady( resource: BitmapPaletteWrapper, - glideAnimation: GlideAnimation + transition: Transition? ) { val palette = resource.palette update( @@ -144,8 +147,8 @@ class AppWidgetSmall : BaseAppWidget() { ) } - override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) { - super.onLoadFailed(e, errorDrawable) + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) update(null, MaterialValueHelper.getSecondaryTextColor(service, true)) } diff --git a/app/src/main/java/code/name/monkey/retromusic/auto/AutoMediaIDHelper.java b/app/src/main/java/code/name/monkey/retromusic/auto/AutoMediaIDHelper.java new file mode 100644 index 000000000..e087e7e77 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/auto/AutoMediaIDHelper.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.auto; + +import androidx.annotation.NonNull; + +/** + * Created by Beesham Sarendranauth (Beesham) + */ +public class AutoMediaIDHelper { + + // Media IDs used on browseable items of MediaBrowser + public static final String MEDIA_ID_EMPTY_ROOT = "__EMPTY_ROOT__"; + public static final String MEDIA_ID_ROOT = "__ROOT__"; + public static final String MEDIA_ID_MUSICS_BY_SEARCH = "__BY_SEARCH__"; // TODO + public static final String MEDIA_ID_MUSICS_BY_HISTORY = "__BY_HISTORY__"; + public static final String MEDIA_ID_MUSICS_BY_TOP_TRACKS = "__BY_TOP_TRACKS__"; + public static final String MEDIA_ID_MUSICS_BY_SUGGESTIONS = "__BY_SUGGESTIONS__"; + public static final String MEDIA_ID_MUSICS_BY_PLAYLIST = "__BY_PLAYLIST__"; + public static final String MEDIA_ID_MUSICS_BY_ALBUM = "__BY_ALBUM__"; + public static final String MEDIA_ID_MUSICS_BY_ARTIST = "__BY_ARTIST__"; + public static final String MEDIA_ID_MUSICS_BY_ALBUM_ARTIST = "__BY_ALBUM_ARTIST__"; + public static final String MEDIA_ID_MUSICS_BY_GENRE = "__BY_GENRE__"; + public static final String MEDIA_ID_MUSICS_BY_SHUFFLE = "__BY_SHUFFLE__"; + public static final String MEDIA_ID_MUSICS_BY_QUEUE = "__BY_QUEUE__"; + + private static final String CATEGORY_SEPARATOR = "__/__"; + private static final String LEAF_SEPARATOR = "__|__"; + + /** + * Create a String value that represents a playable or a browsable media. + *

+ * Encode the media browseable categories, if any, and the unique music ID, if any, + * into a single String mediaID. + *

+ * MediaIDs are of the form __/____|__, to make it + * easy to find the category (like genre) that a music was selected from, so we + * can correctly build the playing queue. This is specially useful when + * one music can appear in more than one list, like "by genre -> genre_1" + * and "by artist -> artist_1". + * + * @param mediaID Unique ID for playable items, or null for browseable items. + * @param categories Hierarchy of categories representing this item's browsing parents. + * @return A hierarchy-aware media ID. + */ + public static String createMediaID(String mediaID, String... categories) { + StringBuilder sb = new StringBuilder(); + if (categories != null) { + for (int i = 0; i < categories.length; i++) { + if (!isValidCategory(categories[i])) { + throw new IllegalArgumentException("Invalid category: " + categories[i]); + } + sb.append(categories[i]); + if (i < categories.length - 1) { + sb.append(CATEGORY_SEPARATOR); + } + } + } + if (mediaID != null) { + sb.append(LEAF_SEPARATOR).append(mediaID); + } + return sb.toString(); + } + + public static String extractCategory(@NonNull String mediaID) { + int pos = mediaID.indexOf(LEAF_SEPARATOR); + if (pos >= 0) { + return mediaID.substring(0, pos); + } + return mediaID; + } + + public static String extractMusicID(@NonNull String mediaID) { + int pos = mediaID.indexOf(LEAF_SEPARATOR); + if (pos >= 0) { + return mediaID.substring(pos + LEAF_SEPARATOR.length()); + } + return null; + } + + public static boolean isBrowseable(@NonNull String mediaID) { + return !mediaID.contains(LEAF_SEPARATOR); + } + + private static boolean isValidCategory(String category) { + return category == null || + (!category.contains(CATEGORY_SEPARATOR) && !category.contains(LEAF_SEPARATOR)); + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/auto/AutoMusicProvider.kt b/app/src/main/java/code/name/monkey/retromusic/auto/AutoMusicProvider.kt new file mode 100644 index 000000000..1f4f4d5df --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/auto/AutoMusicProvider.kt @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ +package code.name.monkey.retromusic.auto + +import android.content.Context +import android.content.res.Resources +import android.net.Uri +import android.support.v4.media.MediaBrowserCompat +import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.helper.MusicPlayerRemote +import code.name.monkey.retromusic.model.CategoryInfo +import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.repository.* +import code.name.monkey.retromusic.service.MusicService +import code.name.monkey.retromusic.util.MusicUtil +import code.name.monkey.retromusic.util.PreferenceUtil +import java.lang.ref.WeakReference +import java.util.* + + +/** + * Created by Beesham Sarendranauth (Beesham) + */ +class AutoMusicProvider( + val mContext: Context, + private val songsRepository: SongRepository, + private val albumsRepository: AlbumRepository, + private val artistsRepository: ArtistRepository, + private val genresRepository: GenreRepository, + private val playlistsRepository: PlaylistRepository, + private val topPlayedRepository: TopPlayedRepository +) { + private var mMusicService: WeakReference? = null + + fun setMusicService(service: MusicService) { + mMusicService = WeakReference(service) + } + + fun getChildren(mediaId: String?, resources: Resources): List { + val mediaItems: MutableList = ArrayList() + when (mediaId) { + AutoMediaIDHelper.MEDIA_ID_ROOT -> { + mediaItems.addAll(getRootChildren(resources)) + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_PLAYLIST -> for (playlist in playlistsRepository.playlists()) { + mediaItems.add( + AutoMediaItem.with(mContext) + .path(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_PLAYLIST, playlist.id) + .icon(R.drawable.ic_playlist_play) + .title(playlist.name) + .subTitle(playlist.getInfoString(mContext)) + .asPlayable() + .build() + ) + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_ALBUM -> for (album in albumsRepository.albums()) { + mediaItems.add( + AutoMediaItem.with(mContext) + .path(mediaId, album.id) + .title(album.title) + .subTitle(album.albumArtist ?: album.artistName) + .icon(MusicUtil.getMediaStoreAlbumCoverUri(album.id)) + .asPlayable() + .build() + ) + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_ARTIST -> for (artist in artistsRepository.artists()) { + mediaItems.add( + AutoMediaItem.with(mContext) + .asPlayable() + .path(mediaId, artist.id) + .title(artist.name) + .build() + ) + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_ALBUM_ARTIST -> for (artist in artistsRepository.albumArtists()) { + mediaItems.add( + AutoMediaItem.with(mContext) + .asPlayable() + // we just pass album id here as we don't have album artist id's + .path(mediaId, artist.safeGetFirstAlbum().id) + .title(artist.name) + .build() + ) + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_GENRE -> for (genre in genresRepository.genres()) { + mediaItems.add( + AutoMediaItem.with(mContext) + .asPlayable() + .path(mediaId, genre.id) + .title(genre.name) + .build() + ) + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_QUEUE -> + mMusicService?.get()?.playingQueue + ?.let { + for (song in it) { + mediaItems.add( + AutoMediaItem.with(mContext) + .asPlayable() + .path(mediaId, song.id) + .title(song.title) + .subTitle(song.artistName) + .icon(MusicUtil.getMediaStoreAlbumCoverUri(song.albumId)) + .build() + ) + } + } + else -> { + getPlaylistChildren(mediaId, mediaItems) + } + } + return mediaItems + } + + private fun getPlaylistChildren( + mediaId: String?, + mediaItems: MutableList + ) { + val songs = when (mediaId) { + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_TOP_TRACKS -> { + topPlayedRepository.topTracks() + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_HISTORY -> { + topPlayedRepository.recentlyPlayedTracks() + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_SUGGESTIONS -> { + topPlayedRepository.notRecentlyPlayedTracks().take(8) + } + else -> { + emptyList() + } + } + songs.forEach { song -> + mediaItems.add( + getPlayableSong(mediaId, song) + ) + } + } + + private fun getRootChildren(resources: Resources): List { + val mediaItems: MutableList = ArrayList() + val libraryCategories = PreferenceUtil.libraryCategory + libraryCategories.forEach { + if (it.visible) { + when (it.category) { + CategoryInfo.Category.Albums -> { + mediaItems.add( + AutoMediaItem.with(mContext) + .asBrowsable() + .path(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_ALBUM) + .gridLayout(true) + .icon(R.drawable.ic_album) + .title(resources.getString(R.string.albums)).build() + ) + } + CategoryInfo.Category.Artists -> { + if (PreferenceUtil.albumArtistsOnly) { + mediaItems.add( + AutoMediaItem.with(mContext) + .asBrowsable() + .path(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_ALBUM_ARTIST) + .icon(R.drawable.ic_album_artist) + .title(resources.getString(R.string.album_artist)).build() + ) + } else { + mediaItems.add( + AutoMediaItem.with(mContext) + .asBrowsable() + .path(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_ARTIST) + .icon(R.drawable.ic_artist) + .title(resources.getString(R.string.artists)).build() + ) + } + } + CategoryInfo.Category.Genres -> { + mediaItems.add( + AutoMediaItem.with(mContext) + .asBrowsable() + .path(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_GENRE) + .icon(R.drawable.ic_guitar) + .title(resources.getString(R.string.genres)).build() + ) + } + CategoryInfo.Category.Playlists -> { + mediaItems.add( + AutoMediaItem.with(mContext) + .asBrowsable() + .path(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_PLAYLIST) + .icon(R.drawable.ic_playlist_play) + .title(resources.getString(R.string.playlists)).build() + ) + } + else -> { + } + } + } + } + mediaItems.add( + AutoMediaItem.with(mContext) + .asPlayable() + .path(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_SHUFFLE) + .icon(R.drawable.ic_shuffle) + .title(resources.getString(R.string.action_shuffle_all)) + .subTitle(MusicUtil.getPlaylistInfoString(mContext, songsRepository.songs())) + .build() + ) + mediaItems.add( + AutoMediaItem.with(mContext) + .asBrowsable() + .path(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_QUEUE) + .icon(R.drawable.ic_queue_music) + .title(resources.getString(R.string.queue)) + .subTitle(MusicUtil.getPlaylistInfoString(mContext, MusicPlayerRemote.playingQueue)) + .asBrowsable().build() + ) + mediaItems.add( + AutoMediaItem.with(mContext) + .asBrowsable() + .path(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_TOP_TRACKS) + .icon(R.drawable.ic_trending_up) + .title(resources.getString(R.string.my_top_tracks)) + .subTitle( + MusicUtil.getPlaylistInfoString( + mContext, + topPlayedRepository.topTracks() + ) + ) + .asBrowsable().build() + ) + mediaItems.add( + AutoMediaItem.with(mContext) + .asBrowsable() + .path(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_SUGGESTIONS) + .icon(R.drawable.ic_face) + .title(resources.getString(R.string.suggestion_songs)) + .subTitle( + MusicUtil.getPlaylistInfoString( + mContext, + topPlayedRepository.notRecentlyPlayedTracks().takeIf { + it.size > 9 + } ?: emptyList() + ) + ) + .asBrowsable().build() + ) + mediaItems.add( + AutoMediaItem.with(mContext) + .asBrowsable() + .path(AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_HISTORY) + .icon(R.drawable.ic_history) + .title(resources.getString(R.string.history)) + .subTitle( + MusicUtil.getPlaylistInfoString( + mContext, + topPlayedRepository.recentlyPlayedTracks() + ) + ) + .asBrowsable().build() + ) + return mediaItems + } + + private fun getPlayableSong(mediaId: String?, song: Song): MediaBrowserCompat.MediaItem { + return AutoMediaItem.with(mContext) + .asPlayable() + .path(mediaId, song.id) + .title(song.title) + .subTitle(song.artistName) + .icon(MusicUtil.getMediaStoreAlbumCoverUri(song.albumId)) + .build() + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/auto/MediaItemBuilder.kt b/app/src/main/java/code/name/monkey/retromusic/auto/MediaItemBuilder.kt new file mode 100644 index 000000000..44f945819 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/auto/MediaItemBuilder.kt @@ -0,0 +1,102 @@ +package code.name.monkey.retromusic.auto + +import android.content.Context +import android.net.Uri +import android.os.Bundle +import android.support.v4.media.MediaBrowserCompat +import android.support.v4.media.MediaDescriptionCompat +import code.name.monkey.retromusic.util.ImageUtil + + +internal object AutoMediaItem { + fun with(context: Context): Builder { + return Builder(context) + } + + internal class Builder(val mContext: Context) { + private var mBuilder: MediaDescriptionCompat.Builder? + private var mFlags = 0 + fun path(fullPath: String): Builder { + mBuilder?.setMediaId(fullPath) + return this + } + + fun path(path: String?, id: Long): Builder { + return path(AutoMediaIDHelper.createMediaID(id.toString(), path)) + } + + fun title(title: String): Builder { + mBuilder?.setTitle(title) + return this + } + + fun subTitle(subTitle: String): Builder { + mBuilder?.setSubtitle(subTitle) + return this + } + + fun icon(uri: Uri?): Builder { + mBuilder?.setIconUri(uri) + return this + } + + fun icon(iconDrawableId: Int): Builder { + mBuilder?.setIconBitmap( + ImageUtil.createBitmap( + ImageUtil.getVectorDrawable( + mContext.resources, + iconDrawableId, + mContext.theme + ) + ) + ) + return this + } + + fun gridLayout(isGrid: Boolean): Builder { + + val hints = Bundle() + hints.putBoolean(CONTENT_STYLE_SUPPORTED, true) + hints.putInt( + CONTENT_STYLE_BROWSABLE_HINT, + if (isGrid) CONTENT_STYLE_GRID_ITEM_HINT_VALUE else CONTENT_STYLE_LIST_ITEM_HINT_VALUE + ) + hints.putInt( + CONTENT_STYLE_PLAYABLE_HINT, + if (isGrid) CONTENT_STYLE_GRID_ITEM_HINT_VALUE else CONTENT_STYLE_LIST_ITEM_HINT_VALUE + ) + mBuilder?.setExtras(hints) + return this + } + + fun asBrowsable(): Builder { + mFlags = mFlags or MediaBrowserCompat.MediaItem.FLAG_BROWSABLE + return this + } + + fun asPlayable(): Builder { + mFlags = mFlags or MediaBrowserCompat.MediaItem.FLAG_PLAYABLE + return this + } + + fun build(): MediaBrowserCompat.MediaItem { + val result = MediaBrowserCompat.MediaItem(mBuilder!!.build(), mFlags) + mBuilder = null + mFlags = 0 + return result + } + + init { + mBuilder = MediaDescriptionCompat.Builder() + } + companion object{ + // Hints - see https://developer.android.com/training/cars/media#default-content-style + const val CONTENT_STYLE_SUPPORTED = "android.media.browse.CONTENT_STYLE_SUPPORTED" + const val CONTENT_STYLE_BROWSABLE_HINT = "android.media.browse.CONTENT_STYLE_BROWSABLE_HINT" + const val CONTENT_STYLE_PLAYABLE_HINT = "android.media.browse.CONTENT_STYLE_PLAYABLE_HINT" + const val CONTENT_STYLE_LIST_ITEM_HINT_VALUE = 1 + const val CONTENT_STYLE_GRID_ITEM_HINT_VALUE = 2 + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt b/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt new file mode 100644 index 000000000..2c747a327 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/cast/CastHelper.kt @@ -0,0 +1,83 @@ +package code.name.monkey.retromusic.cast + +import androidx.core.net.toUri +import code.name.monkey.retromusic.cast.RetroWebServer.Companion.MIME_TYPE_AUDIO +import code.name.monkey.retromusic.cast.RetroWebServer.Companion.PART_COVER_ART +import code.name.monkey.retromusic.cast.RetroWebServer.Companion.PART_SONG +import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.RetroUtil +import com.google.android.gms.cast.* +import com.google.android.gms.cast.MediaInfo.STREAM_TYPE_BUFFERED +import com.google.android.gms.cast.MediaMetadata.* +import com.google.android.gms.cast.framework.CastSession +import com.google.android.gms.common.images.WebImage +import java.net.MalformedURLException +import java.net.URL + +object CastHelper { + + private const val CAST_MUSIC_METADATA_ID = "metadata_id" + private const val CAST_MUSIC_METADATA_ALBUM_ID = "metadata_album_id" + private const val CAST_URL_PROTOCOL = "http" + + fun castSong(castSession: CastSession, song: Song) { + try { + val remoteMediaClient = castSession.remoteMediaClient + val mediaLoadOptions = MediaLoadOptions.Builder().apply { + setPlayPosition(0) + setAutoplay(true) + }.build() + remoteMediaClient?.load(song.toMediaInfo()!!, mediaLoadOptions) + } catch (e: Exception) { + e.printStackTrace() + } + } + + fun castQueue(castSession: CastSession, songs: List, position: Int, progress: Long) { + try { + val remoteMediaClient = castSession.remoteMediaClient + remoteMediaClient?.queueLoad( + songs.toMediaInfoList(), + position, + MediaStatus.REPEAT_MODE_REPEAT_OFF, + progress, + null + ) + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun List.toMediaInfoList(): Array { + return map { MediaQueueItem.Builder(it.toMediaInfo()!!).build() }.toTypedArray() + } + + private fun Song.toMediaInfo(): MediaInfo? { + val song = this + val baseUrl: URL + try { + baseUrl = URL(CAST_URL_PROTOCOL, RetroUtil.getIpAddress(true), SERVER_PORT, "") + } catch (e: MalformedURLException) { + return null + } + + val songUrl = "$baseUrl/$PART_SONG?id=${song.id}" + val albumArtUrl = "$baseUrl/$PART_COVER_ART?id=${song.albumId}" + val musicMetadata = MediaMetadata(MEDIA_TYPE_MUSIC_TRACK).apply { + putInt(CAST_MUSIC_METADATA_ID, song.id.toInt()) + putInt(CAST_MUSIC_METADATA_ALBUM_ID, song.albumId.toInt()) + putString(KEY_TITLE, song.title) + putString(KEY_ARTIST, song.artistName) + putString(KEY_ALBUM_TITLE, song.albumName) + putInt(KEY_TRACK_NUMBER, song.trackNumber) + addImage(WebImage(albumArtUrl.toUri())) + } + return MediaInfo.Builder(songUrl).apply { + setStreamType(STREAM_TYPE_BUFFERED) + setContentType(MIME_TYPE_AUDIO) + setMetadata(musicMetadata) + setStreamDuration(song.duration) + }.build() + + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.kt b/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.kt new file mode 100644 index 000000000..a8d14aaef --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/cast/CastOptionsProvider.kt @@ -0,0 +1,41 @@ +package code.name.monkey.retromusic.cast + +import android.content.Context +import com.google.android.gms.cast.CastMediaControlIntent +import com.google.android.gms.cast.framework.CastOptions +import com.google.android.gms.cast.framework.OptionsProvider +import com.google.android.gms.cast.framework.SessionProvider +import com.google.android.gms.cast.framework.media.CastMediaOptions +import com.google.android.gms.cast.framework.media.MediaIntentReceiver +import com.google.android.gms.cast.framework.media.NotificationOptions +import java.util.* + + +class CastOptionsProvider : OptionsProvider { + override fun getCastOptions(context: Context): CastOptions { + val buttonActions: MutableList = ArrayList() + buttonActions.add(MediaIntentReceiver.ACTION_SKIP_PREV) + buttonActions.add(MediaIntentReceiver.ACTION_TOGGLE_PLAYBACK) + buttonActions.add(MediaIntentReceiver.ACTION_SKIP_NEXT) + buttonActions.add(MediaIntentReceiver.ACTION_STOP_CASTING) + val compatButtonActionsIndices = intArrayOf(1, 3) + val notificationOptions = NotificationOptions.Builder() + .setActions(buttonActions, compatButtonActionsIndices) + .setTargetActivityClassName(ExpandedControlsActivity::class.java.name) + .build() + + val mediaOptions = CastMediaOptions.Builder() + .setNotificationOptions(notificationOptions) + .setExpandedControllerActivityClassName(ExpandedControlsActivity::class.java.name) + .build() + + return CastOptions.Builder() + .setReceiverApplicationId(CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID) + .setCastMediaOptions(mediaOptions) + .build() + } + + override fun getAdditionalSessionProviders(context: Context?): List? { + return null + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/ExpandedControlsActivity.kt b/app/src/main/java/code/name/monkey/retromusic/cast/ExpandedControlsActivity.kt new file mode 100644 index 000000000..1525bdd13 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/cast/ExpandedControlsActivity.kt @@ -0,0 +1,19 @@ +package code.name.monkey.retromusic.cast + + +import android.view.Menu +import code.name.monkey.retromusic.R + +import com.google.android.gms.cast.framework.CastButtonFactory + +import com.google.android.gms.cast.framework.media.widget.ExpandedControllerActivity + + +class ExpandedControlsActivity : ExpandedControllerActivity() { + override fun onCreateOptionsMenu(menu: Menu?): Boolean { + super.onCreateOptionsMenu(menu) + menuInflater.inflate(R.menu.menu_cast, menu) + CastButtonFactory.setUpMediaRouteButton(this, menu, R.id.action_cast) + return true + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManager.kt b/app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManager.kt new file mode 100644 index 000000000..69bc45348 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/cast/RetroSessionManager.kt @@ -0,0 +1,22 @@ +package code.name.monkey.retromusic.cast + +import com.google.android.gms.cast.framework.CastSession +import com.google.android.gms.cast.framework.SessionManagerListener + +interface RetroSessionManager : SessionManagerListener { + override fun onSessionResuming(p0: CastSession, p1: String) { + + } + + override fun onSessionStartFailed(p0: CastSession, p1: Int) { + + } + + override fun onSessionResumeFailed(p0: CastSession, p1: Int) { + + } + + override fun onSessionEnding(p0: CastSession) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt b/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt new file mode 100644 index 000000000..e460f48b1 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/cast/RetroWebServer.kt @@ -0,0 +1,140 @@ +package code.name.monkey.retromusic.cast + +import android.content.Context +import code.name.monkey.retromusic.util.MusicUtil +import fi.iki.elonen.NanoHTTPD +import fi.iki.elonen.NanoHTTPD.Response.Status +import java.io.* + + +const val SERVER_PORT = 9090 + +class RetroWebServer(val context: Context) : NanoHTTPD(SERVER_PORT) { + companion object { + private const val MIME_TYPE_IMAGE = "image/jpg" + const val MIME_TYPE_AUDIO = "audio/mp3" + + const val PART_COVER_ART = "coverart" + const val PART_SONG = "song" + const val PARAM_ID = "id" + var mRetroWebServer: RetroWebServer? = null + fun getInstance(context: Context): RetroWebServer { + if (mRetroWebServer == null) { + mRetroWebServer = RetroWebServer(context) + } + return mRetroWebServer!! + } + } + + override fun serve( + uri: String?, + method: Method?, + headers: MutableMap?, + parms: MutableMap?, + files: MutableMap? + ): Response { + if (uri?.contains(PART_COVER_ART) == true) { + val albumId = parms?.get(PARAM_ID) ?: return errorResponse() + val albumArtUri = MusicUtil.getMediaStoreAlbumCoverUri(albumId.toLong()) + val fis: InputStream? + try { + fis = context.contentResolver.openInputStream(albumArtUri) + } catch (e: FileNotFoundException) { + return errorResponse() + } + return newChunkedResponse(Status.OK, MIME_TYPE_IMAGE, fis) + } else if (uri?.contains(PART_SONG) == true) { + val songId = parms?.get(PARAM_ID) ?: return errorResponse() + val songUri = MusicUtil.getSongFileUri(songId.toLong()) + val songPath = MusicUtil.getSongFilePath(context, songUri) + val song = File(songPath) + return serveFile(headers!!, song, MIME_TYPE_AUDIO) + } + return newFixedLengthResponse(Status.NOT_FOUND, MIME_PLAINTEXT, "Not Found") + } + + private fun serveFile( + header: MutableMap, file: File, + mime: String + ): Response { + var res: Response + try { + // Support (simple) skipping: + var startFrom: Long = 0 + var endAt: Long = -1 + // The value of header range will be bytes=0-1024 something like this + // We get the value of from Bytes i.e. startFrom and toBytes i.e. endAt below + var range = header["range"] + if (range != null) { + if (range.startsWith("bytes=")) { + range = range.substring("bytes=".length) + val minus = range.indexOf('-') + try { + if (minus > 0) { + startFrom = range + .substring(0, minus).toLong() + endAt = range.substring(minus + 1).toLong() + } + } catch (ignored: NumberFormatException) { + } + } + } + + // Chunked Response is used when serving audio file + // Change return code and add Content-Range header when skipping is + // requested + val fileLen = file.length() + if (range != null && startFrom >= 0) { + if (startFrom >= fileLen) { + res = newFixedLengthResponse( + Status.RANGE_NOT_SATISFIABLE, + MIME_PLAINTEXT, "" + ) + res.addHeader("Content-Range", "bytes 0-0/$fileLen") + } else { + if (endAt < 0) { + endAt = fileLen - 1 + } + var newLen = endAt - startFrom + 1 + if (newLen < 0) { + newLen = 0 + } + val dataLen = newLen + val fis: FileInputStream = object : FileInputStream(file) { + @Throws(IOException::class) + override fun available(): Int { + return dataLen.toInt() + } + } + fis.skip(startFrom) + res = newChunkedResponse( + Status.PARTIAL_CONTENT, mime, + fis + ) + res.addHeader("Content-Length", "" + dataLen) + res.addHeader( + "Content-Range", "bytes " + startFrom + "-" + + endAt + "/" + fileLen + ) + } + } else { + res = newFixedLengthResponse( + Status.OK, mime, + FileInputStream(file), file.length() + ) + res.addHeader("Accept-Ranges", "bytes") + res.addHeader("Content-Length", "" + fileLen) + } + } catch (ioe: IOException) { + res = newFixedLengthResponse( + Status.FORBIDDEN, + MIME_PLAINTEXT, "FORBIDDEN: Reading file failed." + ) + } + return res + } + + private fun errorResponse(message: String = "Error Occurred"): Response { + return newFixedLengthResponse(Status.INTERNAL_ERROR, MIME_PLAINTEXT, message) + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/db/PlaylistDao.kt b/app/src/main/java/code/name/monkey/retromusic/db/PlaylistDao.kt index 579777b9f..fa39a5cb4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/PlaylistDao.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/PlaylistDao.kt @@ -47,7 +47,7 @@ interface PlaylistDao { @Query("SELECT * FROM SongEntity WHERE playlist_creator_id = :playlistId AND id = :songId") suspend fun isSongExistsInPlaylist(playlistId: Long, songId: Long): List - @Query("SELECT * FROM SongEntity WHERE playlist_creator_id = :playlistId") + @Query("SELECT * FROM SongEntity WHERE playlist_creator_id = :playlistId ORDER BY song_key asc") fun songsFromPlaylist(playlistId: Long): LiveData> @Delete diff --git a/app/src/main/java/code/name/monkey/retromusic/db/PlaylistEntity.kt b/app/src/main/java/code/name/monkey/retromusic/db/PlaylistEntity.kt index cda8bff9f..5493b1155 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/PlaylistEntity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/PlaylistEntity.kt @@ -18,7 +18,7 @@ import android.os.Parcelable import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize @Entity @Parcelize diff --git a/app/src/main/java/code/name/monkey/retromusic/db/PlaylistWithSongs.kt b/app/src/main/java/code/name/monkey/retromusic/db/PlaylistWithSongs.kt index 63c82e39a..da80d8228 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/PlaylistWithSongs.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/PlaylistWithSongs.kt @@ -17,7 +17,7 @@ package code.name.monkey.retromusic.db import android.os.Parcelable import androidx.room.Embedded import androidx.room.Relation -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize @Parcelize data class PlaylistWithSongs( diff --git a/app/src/main/java/code/name/monkey/retromusic/db/SongEntity.kt b/app/src/main/java/code/name/monkey/retromusic/db/SongEntity.kt index 279460282..206c91e27 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/SongEntity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/SongEntity.kt @@ -19,7 +19,7 @@ import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.Index import androidx.room.PrimaryKey -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize @Parcelize @Entity(indices = [Index(value = ["playlist_creator_id", "id"], unique = true)]) diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.java b/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.java deleted file mode 100644 index 3a15c2d8c..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.java +++ /dev/null @@ -1,155 +0,0 @@ -package code.name.monkey.retromusic.dialogs; - -import android.Manifest; -import android.app.Dialog; -import android.content.pm.PackageManager; -import android.os.Build; -import android.os.Bundle; -import android.os.Environment; -import android.view.View; -import androidx.annotation.NonNull; -import androidx.core.app.ActivityCompat; -import androidx.fragment.app.DialogFragment; -import code.name.monkey.retromusic.R; -import com.afollestad.materialdialogs.MaterialDialog; -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -public class BlacklistFolderChooserDialog extends DialogFragment - implements MaterialDialog.ListCallback { - - String initialPath = Environment.getExternalStorageDirectory().getAbsolutePath(); - private File parentFolder; - private File[] parentContents; - private boolean canGoUp = false; - private FolderCallback callback; - - public static BlacklistFolderChooserDialog create() { - return new BlacklistFolderChooserDialog(); - } - - private String[] getContentsArray() { - if (parentContents == null) { - if (canGoUp) { - return new String[] {".."}; - } - return new String[] {}; - } - String[] results = new String[parentContents.length + (canGoUp ? 1 : 0)]; - if (canGoUp) { - results[0] = ".."; - } - for (int i = 0; i < parentContents.length; i++) { - results[canGoUp ? i + 1 : i] = parentContents[i].getName(); - } - return results; - } - - private File[] listFiles() { - File[] contents = parentFolder.listFiles(); - List results = new ArrayList<>(); - if (contents != null) { - for (File fi : contents) { - if (fi.isDirectory()) { - results.add(fi); - } - } - Collections.sort(results, new FolderSorter()); - return results.toArray(new File[results.size()]); - } - return null; - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M - && ActivityCompat.checkSelfPermission( - requireActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) - != PackageManager.PERMISSION_GRANTED) { - return new MaterialDialog.Builder(requireActivity()) - .title(R.string.md_error_label) - .content(R.string.md_storage_perm_error) - .positiveText(android.R.string.ok) - .build(); - } - if (savedInstanceState == null) { - savedInstanceState = new Bundle(); - } - if (!savedInstanceState.containsKey("current_path")) { - savedInstanceState.putString("current_path", initialPath); - } - parentFolder = new File(savedInstanceState.getString("current_path", File.pathSeparator)); - checkIfCanGoUp(); - parentContents = listFiles(); - MaterialDialog.Builder builder = - new MaterialDialog.Builder(requireContext()) - .title(parentFolder.getAbsolutePath()) - .items((CharSequence[]) getContentsArray()) - .itemsCallback(this) - .autoDismiss(false) - .onPositive( - (dialog, which) -> { - callback.onFolderSelection(BlacklistFolderChooserDialog.this, parentFolder); - dismiss(); - }) - .onNegative((materialDialog, dialogAction) -> dismiss()) - .positiveText(R.string.add_action) - .negativeText(android.R.string.cancel); - return builder.build(); - } - - @Override - public void onSelection(MaterialDialog materialDialog, View view, int i, CharSequence s) { - if (canGoUp && i == 0) { - parentFolder = parentFolder.getParentFile(); - if (parentFolder.getAbsolutePath().equals("/storage/emulated")) { - parentFolder = parentFolder.getParentFile(); - } - checkIfCanGoUp(); - } else { - parentFolder = parentContents[canGoUp ? i - 1 : i]; - canGoUp = true; - if (parentFolder.getAbsolutePath().equals("/storage/emulated")) { - parentFolder = Environment.getExternalStorageDirectory(); - } - } - reload(); - } - - private void checkIfCanGoUp() { - canGoUp = parentFolder.getParent() != null; - } - - private void reload() { - parentContents = listFiles(); - MaterialDialog dialog = (MaterialDialog) getDialog(); - dialog.setTitle(parentFolder.getAbsolutePath()); - dialog.setItems((CharSequence[]) getContentsArray()); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putString("current_path", parentFolder.getAbsolutePath()); - } - - public void setCallback(FolderCallback callback) { - this.callback = callback; - } - - public interface FolderCallback { - void onFolderSelection(@NonNull BlacklistFolderChooserDialog dialog, @NonNull File folder); - } - - private static class FolderSorter implements Comparator { - - @Override - public int compare(File lhs, File rhs) { - return lhs.getName().compareTo(rhs.getName()); - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt new file mode 100644 index 000000000..76abc0c6d --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/BlacklistFolderChooserDialog.kt @@ -0,0 +1,152 @@ +package code.name.monkey.retromusic.dialogs + +import android.Manifest +import android.app.Dialog +import android.content.pm.PackageManager +import android.os.Build +import android.os.Bundle +import android.os.Environment +import androidx.core.app.ActivityCompat +import androidx.fragment.app.DialogFragment +import code.name.monkey.retromusic.R +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.list.listItems +import com.afollestad.materialdialogs.list.updateListItems +import java.io.File +import java.util.* + +class BlacklistFolderChooserDialog : DialogFragment() { + private var initialPath: String = Environment.getExternalStorageDirectory().absolutePath + private var parentFolder: File? = null + private var parentContents: Array? = null + private var canGoUp = false + private var callback: FolderCallback? = null + private val contentsArray: Array + get() { + if (parentContents == null) { + return if (canGoUp) { + arrayOf("..") + } else arrayOf() + } + val results = arrayOfNulls(parentContents!!.size + if (canGoUp) 1 else 0) + if (canGoUp) { + results[0] = ".." + } + for (i in parentContents!!.indices) { + results[if (canGoUp) i + 1 else i] = parentContents!![i].name + } + return results + } + + private fun listFiles(): Array? { + val contents = parentFolder!!.listFiles() + val results: MutableList = ArrayList() + if (contents != null) { + for (fi in contents) { + if (fi.isDirectory) { + results.add(fi) + } + } + Collections.sort(results, FolderSorter()) + return results.toTypedArray() + } + return null + } + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + var mSavedInstanceState = savedInstanceState + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M + && ActivityCompat.checkSelfPermission( + requireActivity(), Manifest.permission.READ_EXTERNAL_STORAGE + ) + != PackageManager.PERMISSION_GRANTED + ) { + return MaterialDialog(requireActivity()).show { + title(res = R.string.md_error_label) + message(res = R.string.md_storage_perm_error) + positiveButton(res = android.R.string.ok) + } + } + if (mSavedInstanceState == null) { + mSavedInstanceState = Bundle() + } + if (!mSavedInstanceState.containsKey("current_path")) { + mSavedInstanceState.putString("current_path", initialPath) + } + parentFolder = File(mSavedInstanceState.getString("current_path", File.pathSeparator)) + checkIfCanGoUp() + parentContents = listFiles() + return MaterialDialog(requireContext()) + .title(text = parentFolder!!.absolutePath) + .listItems( + items = contentsArray.toCharSequence(), + waitForPositiveButton = false + ) { _: MaterialDialog, i: Int, _: CharSequence -> + onSelection(i) + } + .noAutoDismiss() + .cornerRadius(literalDp = 20F) + .positiveButton(res = R.string.add_action) { + callback!!.onFolderSelection(this@BlacklistFolderChooserDialog, parentFolder!!) + dismiss() + } + .negativeButton(res = android.R.string.cancel) { dismiss() } + } + + private fun onSelection(i: Int) { + if (canGoUp && i == 0) { + parentFolder = parentFolder!!.parentFile + if (parentFolder!!.absolutePath == "/storage/emulated") { + parentFolder = parentFolder!!.parentFile + } + checkIfCanGoUp() + } else { + parentFolder = parentContents!![if (canGoUp) i - 1 else i] + canGoUp = true + if (parentFolder!!.absolutePath == "/storage/emulated") { + parentFolder = Environment.getExternalStorageDirectory() + } + } + reload() + } + + private fun checkIfCanGoUp() { + canGoUp = parentFolder!!.parent != null + } + + private fun reload() { + parentContents = listFiles() + val dialog = dialog as MaterialDialog? + dialog!!.setTitle(parentFolder!!.absolutePath) + dialog.updateListItems(items = contentsArray.toCharSequence()) + } + + private fun Array.toCharSequence(): List { + return map { it as CharSequence } + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + outState.putString("current_path", parentFolder!!.absolutePath) + } + + fun setCallback(callback: FolderCallback?) { + this.callback = callback + } + + interface FolderCallback { + fun onFolderSelection(dialog: BlacklistFolderChooserDialog, folder: File) + } + + private class FolderSorter : Comparator { + override fun compare(lhs: File, rhs: File): Int { + return lhs.name.compareTo(rhs.name) + } + } + + companion object { + fun create(): BlacklistFolderChooserDialog { + return BlacklistFolderChooserDialog() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt index b4bcf8469..7792fd464 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/CreatePlaylistDialog.kt @@ -17,29 +17,23 @@ package code.name.monkey.retromusic.dialogs import android.app.Dialog import android.os.Bundle import android.text.TextUtils -import android.view.LayoutInflater -import android.widget.Toast import androidx.core.os.bundleOf import androidx.fragment.app.DialogFragment -import androidx.lifecycle.lifecycleScope import code.name.monkey.retromusic.EXTRA_SONG import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.db.PlaylistEntity -import code.name.monkey.retromusic.db.toSongEntity +import code.name.monkey.retromusic.databinding.DialogPlaylistBinding import code.name.monkey.retromusic.extensions.colorButtons import code.name.monkey.retromusic.extensions.extra import code.name.monkey.retromusic.extensions.materialDialog import code.name.monkey.retromusic.fragments.LibraryViewModel -import code.name.monkey.retromusic.fragments.ReloadType.Playlists import code.name.monkey.retromusic.model.Song import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputLayout -import kotlinx.android.synthetic.main.dialog_playlist.view.* -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch import org.koin.androidx.viewmodel.ext.android.sharedViewModel class CreatePlaylistDialog : DialogFragment() { + private var _binding: DialogPlaylistBinding? = null + private val binding get() = _binding!! private val libraryViewModel by sharedViewModel() companion object { @@ -56,13 +50,15 @@ class CreatePlaylistDialog : DialogFragment() { } } + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val view = LayoutInflater.from(requireActivity()).inflate(R.layout.dialog_playlist, null) + _binding = DialogPlaylistBinding.inflate(layoutInflater) + val songs: List = extra>(EXTRA_SONG).value ?: emptyList() - val playlistView: TextInputEditText = view.actionNewPlaylist - val playlistContainer: TextInputLayout = view.actionNewPlaylistContainer + val playlistView: TextInputEditText = binding.actionNewPlaylist + val playlistContainer: TextInputLayout = binding.actionNewPlaylistContainer return materialDialog(R.string.new_playlist_title) - .setView(view) + .setView(binding.root) .setPositiveButton( R.string.create_action ) { _, _ -> @@ -77,4 +73,9 @@ class CreatePlaylistDialog : DialogFragment() { .create() .colorButtons() } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt index ca562dcaa..1a528412d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/DeleteSongsDialog.kt @@ -14,24 +14,31 @@ */ package code.name.monkey.retromusic.dialogs +import android.app.Activity import android.app.Dialog +import android.content.Intent import android.os.Bundle import androidx.core.os.bundleOf import androidx.core.text.HtmlCompat import androidx.fragment.app.DialogFragment import code.name.monkey.retromusic.EXTRA_SONG import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.extensions.colorButtons +import code.name.monkey.retromusic.activities.saf.SAFGuideActivity import code.name.monkey.retromusic.extensions.extraNotNull -import code.name.monkey.retromusic.extensions.materialDialog import code.name.monkey.retromusic.fragments.LibraryViewModel +import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil -import org.koin.androidx.viewmodel.ext.android.sharedViewModel +import code.name.monkey.retromusic.util.SAFUtil +import com.afollestad.materialdialogs.MaterialDialog +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.koin.androidx.viewmodel.ext.android.getViewModel class DeleteSongsDialog : DialogFragment() { - private val libraryViewModel by sharedViewModel() + lateinit var libraryViewModel: LibraryViewModel companion object { fun create(song: Song): DeleteSongsDialog { @@ -50,6 +57,7 @@ class DeleteSongsDialog : DialogFragment() { } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + libraryViewModel = activity?.getViewModel() as LibraryViewModel val songs = extraNotNull>(EXTRA_SONG).value val pair = if (songs.size > 1) { Pair( @@ -69,17 +77,66 @@ class DeleteSongsDialog : DialogFragment() { ) } - return materialDialog(pair.first) - .setMessage(pair.second) - .setCancelable(false) - .setPositiveButton(R.string.action_delete) { _, _ -> - if (songs.isNotEmpty() and (songs.size == 1) and MusicPlayerRemote.isPlaying(songs.first())) { + return MaterialDialog(requireContext()) + .title(pair.first) + .message(text = pair.second) + .noAutoDismiss() + .cornerRadius(16F) + .negativeButton(android.R.string.cancel) { + dismiss() + } + .positiveButton(R.string.action_delete) { + if ((songs.size == 1) && MusicPlayerRemote.isPlaying(songs[0])) { MusicPlayerRemote.playNextSong() } - MusicUtil.deleteTracks(requireActivity(), songs) - libraryViewModel.deleteTracks(songs) + if (!SAFUtil.isSAFRequiredForSongs(songs)) { + CoroutineScope(Dispatchers.IO).launch { + dismiss() + MusicUtil.deleteTracks(requireContext(), songs) + reloadTabs() + } + } else { + if (SAFUtil.isSDCardAccessGranted(requireActivity())) { + deleteSongs(songs) + } else { + startActivityForResult( + Intent(requireActivity(), SAFGuideActivity::class.java), + SAFGuideActivity.REQUEST_CODE_SAF_GUIDE + ) + } + } } - .create() - .colorButtons() + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + when (requestCode) { + SAFGuideActivity.REQUEST_CODE_SAF_GUIDE -> { + SAFUtil.openTreePicker(this) + } + SAFUtil.REQUEST_SAF_PICK_TREE, + SAFUtil.REQUEST_SAF_PICK_FILE -> { + if (resultCode == Activity.RESULT_OK) { + SAFUtil.saveTreeUri(requireActivity(), data) + val songs = extraNotNull>(EXTRA_SONG).value + deleteSongs(songs) + } + } + } + } + + fun deleteSongs(songs: List) { + CoroutineScope(Dispatchers.IO).launch { + dismiss() + MusicUtil.deleteTracks(requireActivity(), songs, null, null) + reloadTabs() + } + } + + fun reloadTabs() { + libraryViewModel.forceReload(ReloadType.Songs) + libraryViewModel.forceReload(ReloadType.HomeSections) + libraryViewModel.forceReload(ReloadType.Artists) + libraryViewModel.forceReload(ReloadType.Albums) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt index 7e671ebdc..e454d4a60 100755 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/SleepTimerDialog.kt @@ -38,8 +38,9 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.ACTION_PENDING_QUIT import code.name.monkey.retromusic.service.MusicService.ACTION_QUIT import code.name.monkey.retromusic.util.PreferenceUtil -import com.afollestad.materialdialogs.DialogAction import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.WhichButton +import com.afollestad.materialdialogs.actions.getActionButton class SleepTimerDialog : DialogFragment() { @@ -150,14 +151,14 @@ class SleepTimerDialog : DialogFragment() { private fun updateCancelButton() { val musicService = MusicPlayerRemote.musicService if (musicService != null && musicService.pendingQuit) { - dialog.getActionButton(DialogAction.NEUTRAL).text = + dialog.getActionButton(WhichButton.NEUTRAL).text = dialog.context.getString(R.string.cancel_current_timer) } else { - dialog.getActionButton(DialogAction.NEUTRAL).text = null + dialog.getActionButton(WhichButton.NEUTRAL).text = null } } - private inner class TimerUpdater() : + private inner class TimerUpdater : CountDownTimer( PreferenceUtil.nextSleepTimerElapsedRealTime - SystemClock.elapsedRealtime(), 1000 diff --git a/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.kt b/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.kt index 0e7c0abab..c363f8b4e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/dialogs/SongDetailDialog.kt @@ -32,13 +32,13 @@ import code.name.monkey.retromusic.extensions.colorButtons import code.name.monkey.retromusic.extensions.materialDialog import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil -import java.io.File -import java.io.IOException import org.jaudiotagger.audio.AudioFileIO import org.jaudiotagger.audio.exceptions.CannotReadException import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException import org.jaudiotagger.audio.exceptions.ReadOnlyFileException import org.jaudiotagger.tag.TagException +import java.io.File +import java.io.IOException class SongDetailDialog : DialogFragment() { diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt index 0e064b4a2..c15a821ab 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ColorExt.kt @@ -41,7 +41,6 @@ import com.google.android.material.button.MaterialButton import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.progressindicator.CircularProgressIndicator -import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputLayout fun Int.ripAlpha(): Int { diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExt.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExt.kt index 03e0ad579..9a7c76f96 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExt.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/DrawableExt.kt @@ -18,14 +18,10 @@ import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Canvas -import android.graphics.drawable.AdaptiveIconDrawable import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable -import android.os.Build import androidx.annotation.DimenRes import androidx.annotation.DrawableRes -import androidx.core.content.ContextCompat -import code.name.monkey.retromusic.R fun Context.scaledDrawableResources( @DrawableRes id: Int, diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/DetailListFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/DetailListFragment.kt index af27fedce..b001c1e8f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/DetailListFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/DetailListFragment.kt @@ -17,6 +17,7 @@ package code.name.monkey.retromusic.fragments import android.os.Bundle import android.view.View import androidx.core.os.bundleOf +import androidx.core.view.doOnPreDraw import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs @@ -28,26 +29,48 @@ import code.name.monkey.retromusic.adapter.album.AlbumAdapter import code.name.monkey.retromusic.adapter.artist.ArtistAdapter import code.name.monkey.retromusic.adapter.song.ShuffleButtonSongAdapter import code.name.monkey.retromusic.adapter.song.SongAdapter +import code.name.monkey.retromusic.databinding.FragmentPlaylistDetailBinding import code.name.monkey.retromusic.db.toSong import code.name.monkey.retromusic.extensions.dipToPix -import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.interfaces.IAlbumClickListener import code.name.monkey.retromusic.interfaces.IArtistClickListener import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.util.RetroUtil -import kotlinx.android.synthetic.main.fragment_playlist_detail.* +import com.google.android.material.transition.MaterialSharedAxis class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_detail), IArtistClickListener, IAlbumClickListener { private val args by navArgs() + private var _binding: FragmentPlaylistDetailBinding? = null + private val binding get() = _binding!! + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = FragmentPlaylistDetailBinding.bind(view) + when (args.type) { + TOP_ARTISTS, + RECENT_ARTISTS, + TOP_ALBUMS, + RECENT_ALBUMS, + FAVOURITES -> { + enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) + } + else -> { + enterTransition = MaterialSharedAxis(MaterialSharedAxis.Y, true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.Y, false) + } + } + postponeEnterTransition() + view.doOnPreDraw { startPostponedEnterTransition() } + } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - mainActivity.setBottomBarVisibility(false) - mainActivity.setSupportActionBar(toolbar) - progressIndicator.hide() + mainActivity.setSupportActionBar(binding.toolbar) + binding.progressIndicator.hide() when (args.type) { TOP_ARTISTS -> loadArtists(R.string.top_artists, TOP_ARTISTS) RECENT_ARTISTS -> loadArtists(R.string.recent_artists, RECENT_ARTISTS) @@ -59,23 +82,23 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de TOP_PLAYED_PLAYLIST -> topPlayed() } - recyclerView.adapter?.registerAdapterDataObserver(object : AdapterDataObserver() { + binding.recyclerView.adapter?.registerAdapterDataObserver(object : AdapterDataObserver() { override fun onChanged() { super.onChanged() val height = dipToPix(52f) - recyclerView.setPadding(0, 0, 0, height.toInt()) + binding.recyclerView.setPadding(0, 0, 0, height.toInt()) } }) } private fun lastAddedSongs() { - toolbar.setTitle(R.string.last_added) + binding.toolbar.setTitle(R.string.last_added) val songAdapter = ShuffleButtonSongAdapter( requireActivity(), mutableListOf(), R.layout.item_list, null ) - recyclerView.apply { + binding.recyclerView.apply { adapter = songAdapter layoutManager = linearLayoutManager() } @@ -85,13 +108,13 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de } private fun topPlayed() { - toolbar.setTitle(R.string.my_top_tracks) + binding.toolbar.setTitle(R.string.my_top_tracks) val songAdapter = ShuffleButtonSongAdapter( requireActivity(), mutableListOf(), R.layout.item_list, null ) - recyclerView.apply { + binding.recyclerView.apply { adapter = songAdapter layoutManager = linearLayoutManager() } @@ -101,14 +124,14 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de } private fun loadHistory() { - toolbar.setTitle(R.string.history) + binding.toolbar.setTitle(R.string.history) val songAdapter = ShuffleButtonSongAdapter( requireActivity(), mutableListOf(), R.layout.item_list, null ) - recyclerView.apply { + binding.recyclerView.apply { adapter = songAdapter layoutManager = linearLayoutManager() } @@ -118,13 +141,13 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de } private fun loadFavorite() { - toolbar.setTitle(R.string.favorites) + binding.toolbar.setTitle(R.string.favorites) val songAdapter = SongAdapter( requireActivity(), mutableListOf(), R.layout.item_list, null ) - recyclerView.apply { + binding.recyclerView.apply { adapter = songAdapter layoutManager = linearLayoutManager() } @@ -135,9 +158,9 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de } private fun loadArtists(title: Int, type: Int) { - toolbar.setTitle(title) + binding.toolbar.setTitle(title) libraryViewModel.artists(type).observe(viewLifecycleOwner, { artists -> - recyclerView.apply { + binding.recyclerView.apply { adapter = artistAdapter(artists) layoutManager = gridLayoutManager() } @@ -145,9 +168,9 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de } private fun loadAlbums(title: Int, type: Int) { - toolbar.setTitle(title) + binding.toolbar.setTitle(title) libraryViewModel.albums(type).observe(viewLifecycleOwner, { albums -> - recyclerView.apply { + binding.recyclerView.apply { adapter = albumAdapter(albums) layoutManager = gridLayoutManager() } @@ -186,7 +209,7 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de R.id.artistDetailsFragment, bundleOf(EXTRA_ARTIST_ID to artistId), null, - FragmentNavigatorExtras(view to "artist") + FragmentNavigatorExtras(view to artistId.toString()) ) } @@ -196,8 +219,13 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de bundleOf(EXTRA_ALBUM_ID to albumId), null, FragmentNavigatorExtras( - view to "album" + view to albumId.toString() ) ) } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt index 2a4bcb816..c474823f8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt @@ -25,9 +25,7 @@ import code.name.monkey.retromusic.model.* import code.name.monkey.retromusic.repository.RealRepository import code.name.monkey.retromusic.util.PreferenceUtil import kotlinx.coroutines.Dispatchers.IO -import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext class LibraryViewModel( private val repository: RealRepository @@ -129,16 +127,16 @@ class LibraryViewModel( } } - private fun fetchHomeSections() { + fun fetchHomeSections() { viewModelScope.launch(IO) { home.postValue(repository.homeSections()) } } - fun search(query: String?) { + fun search(query: String?, filters: List) { viewModelScope.launch(IO) { - val result = repository.search(query) - withContext(Main) { searchResults.postValue(result) } + val result = repository.search(query, filters) + searchResults.postValue(result) } } @@ -190,6 +188,10 @@ class LibraryViewModel( println("onShuffleModeChanged") } + override fun onFavoriteStateChanged() { + println("onFavoriteStateChanged") + } + fun shuffleSongs() = viewModelScope.launch(IO) { val songs = repository.allSongs() MusicPlayerRemote.openAndShuffleQueue( diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt index 399f5ed1a..c37bc346b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/MiniPlayerFragment.kt @@ -26,23 +26,26 @@ import android.view.MotionEvent import android.view.View import android.view.animation.DecelerateInterpolator import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentMiniPlayerBinding import code.name.monkey.retromusic.extensions.accentColor -import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.extensions.textColorPrimary import code.name.monkey.retromusic.extensions.textColorSecondary import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import kotlin.math.abs -import kotlinx.android.synthetic.main.fragment_mini_player.* open class MiniPlayerFragment : AbsMusicServiceFragment(R.layout.fragment_mini_player), MusicProgressViewUpdateHelper.Callback, View.OnClickListener { + private var _binding: FragmentMiniPlayerBinding? = null + private val binding get() = _binding!! private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper override fun onCreate(savedInstanceState: Bundle?) { @@ -59,38 +62,38 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(R.layout.fragment_mini_p override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentMiniPlayerBinding.bind(view) view.setOnTouchListener(FlingPlayBackController(requireContext())) setUpMiniPlayer() if (RetroUtil.isTablet()) { - actionNext.show() - actionPrevious.show() - actionNext?.show() - actionPrevious?.show() + binding.actionNext.show() + binding.actionPrevious.show() } else { - actionNext.visibility = if (PreferenceUtil.isExtraControls) View.VISIBLE else View.GONE - actionPrevious.visibility = + binding.actionNext.visibility = + if (PreferenceUtil.isExtraControls) View.VISIBLE else View.GONE + binding.actionPrevious.visibility = if (PreferenceUtil.isExtraControls) View.VISIBLE else View.GONE } - actionNext.setOnClickListener(this) - actionPrevious.setOnClickListener(this) - actionNext?.setOnClickListener(this) - actionPrevious?.setOnClickListener(this) + binding.actionNext.setOnClickListener(this) + binding.actionPrevious.setOnClickListener(this) } private fun setUpMiniPlayer() { setUpPlayPauseButton() - progressBar.accentColor() + binding.progressBar.accentColor() } private fun setUpPlayPauseButton() { - miniPlayerPlayPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.miniPlayerPlayPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun updateSongTitle() { - val builder = SpannableStringBuilder() val song = MusicPlayerRemote.currentSong + + val builder = SpannableStringBuilder() + val title = SpannableString(song.title) title.setSpan(ForegroundColorSpan(textColorPrimary()), 0, title.length, 0) @@ -99,17 +102,34 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(R.layout.fragment_mini_p builder.append(title).append(" • ").append(text) - miniPlayerTitle.isSelected = true - miniPlayerTitle.text = builder + binding.miniPlayerTitle.isSelected = true + binding.miniPlayerTitle.text = builder + +// binding.title.isSelected = true +// binding.title.text = song.title +// binding.text.isSelected = true +// binding.text.text = song.artistName + } + + private fun updateSongCover() { +// val song = MusicPlayerRemote.currentSong +// GlideApp.with(requireContext()) +// .asBitmap() +// .songCoverOptions(song) +// .transition(RetroGlideExtension.getDefaultTransition()) +// .load(RetroGlideExtension.getSongModel(song)) +// .into(binding.image) } override fun onServiceConnected() { updateSongTitle() + updateSongCover() updatePlayPauseDrawableState() } override fun onPlayingMetaChanged() { updateSongTitle() + updateSongCover() } override fun onPlayStateChanged() { @@ -117,8 +137,8 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(R.layout.fragment_mini_p } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressBar.max = total - val animator = ObjectAnimator.ofInt(progressBar, "progress", progress) + binding.progressBar.max = total + val animator = ObjectAnimator.ofInt(binding.progressBar, "progress", progress) animator.duration = 1000 animator.interpolator = DecelerateInterpolator() animator.start() @@ -136,16 +156,12 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(R.layout.fragment_mini_p protected fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - miniPlayerPlayPauseButton.setImageResource(R.drawable.ic_pause) + binding.miniPlayerPlayPauseButton.setImageResource(R.drawable.ic_pause) } else { - miniPlayerPlayPauseButton.setImageResource(R.drawable.ic_play_arrow) + binding.miniPlayerPlayPauseButton.setImageResource(R.drawable.ic_play_arrow) } } - fun updateProgressBar(paletteColor: Int) { - progressBar.applyColor(paletteColor) - } - class FlingPlayBackController(context: Context) : View.OnTouchListener { private var flingPlayBackController: GestureDetector @@ -178,4 +194,9 @@ open class MiniPlayerFragment : AbsMusicServiceFragment(R.layout.fragment_mini_p return flingPlayBackController.onTouchEvent(event) } } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt index f08c85529..27c8b92a9 100755 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt @@ -26,34 +26,38 @@ import android.widget.SeekBar import androidx.fragment.app.Fragment import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentVolumeBinding import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.volume.AudioVolumeObserver import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener -import kotlinx.android.synthetic.main.fragment_volume.* class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolumeChangedListener, View.OnClickListener { + private var _binding: FragmentVolumeBinding? = null + private val binding get() = _binding!! + private var audioVolumeObserver: AudioVolumeObserver? = null - private val audioManager: AudioManager? + private val audioManager: AudioManager get() = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_volume, container, false) + ): View { + _binding = FragmentVolumeBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setTintable(ThemeStore.accentColor(requireContext())) - volumeDown.setOnClickListener(this) - volumeUp.setOnClickListener(this) + binding.volumeDown.setOnClickListener(this) + binding.volumeUp.setOnClickListener(this) } override fun onResume() { @@ -64,33 +68,30 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum audioVolumeObserver?.register(AudioManager.STREAM_MUSIC, this) val audioManager = audioManager - if (audioManager != null) { - volumeSeekBar.max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) - volumeSeekBar.progress = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) - } - volumeSeekBar.setOnSeekBarChangeListener(this) + binding.volumeSeekBar.max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) + binding.volumeSeekBar.progress = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) + binding.volumeSeekBar.setOnSeekBarChangeListener(this) } override fun onAudioVolumeChanged(currentVolume: Int, maxVolume: Int) { - if (volumeSeekBar == null) { - return + if (_binding != null) { + binding.volumeSeekBar.max = maxVolume + binding.volumeSeekBar.progress = currentVolume + binding.volumeDown.setImageResource(if (currentVolume == 0) R.drawable.ic_volume_off else R.drawable.ic_volume_down) } - - volumeSeekBar.max = maxVolume - volumeSeekBar.progress = currentVolume - volumeDown.setImageResource(if (currentVolume == 0) R.drawable.ic_volume_off else R.drawable.ic_volume_down) } override fun onDestroyView() { super.onDestroyView() audioVolumeObserver?.unregister() + _binding = null } override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) { val audioManager = audioManager - audioManager?.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0) + audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0) setPauseWhenZeroVolume(i < 1) - volumeDown?.setImageResource(if (i == 0) R.drawable.ic_volume_off else R.drawable.ic_volume_down) + binding.volumeDown.setImageResource(if (i == 0) R.drawable.ic_volume_off else R.drawable.ic_volume_down) } override fun onStartTrackingTouch(seekBar: SeekBar) { @@ -102,10 +103,10 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum override fun onClick(view: View) { val audioManager = audioManager when (view.id) { - R.id.volumeDown -> audioManager?.adjustStreamVolume( + R.id.volumeDown -> audioManager.adjustStreamVolume( AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, 0 ) - R.id.volumeUp -> audioManager?.adjustStreamVolume( + R.id.volumeUp -> audioManager.adjustStreamVolume( AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, 0 ) } @@ -113,13 +114,13 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum fun tintWhiteColor() { val color = Color.WHITE - volumeDown.setColorFilter(color, PorterDuff.Mode.SRC_IN) - volumeUp.setColorFilter(color, PorterDuff.Mode.SRC_IN) - volumeSeekBar.applyColor(color) + binding.volumeDown.setColorFilter(color, PorterDuff.Mode.SRC_IN) + binding.volumeUp.setColorFilter(color, PorterDuff.Mode.SRC_IN) + binding.volumeSeekBar.applyColor(color) } fun setTintable(color: Int) { - volumeSeekBar.applyColor(color) + binding.volumeSeekBar.applyColor(color) } private fun setPauseWhenZeroVolume(pauseWhenZeroVolume: Boolean) { @@ -129,10 +130,10 @@ class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolum } fun setTintableColor(color: Int) { - volumeDown.setColorFilter(color, PorterDuff.Mode.SRC_IN) - volumeUp.setColorFilter(color, PorterDuff.Mode.SRC_IN) + binding.volumeDown.setColorFilter(color, PorterDuff.Mode.SRC_IN) + binding.volumeUp.setColorFilter(color, PorterDuff.Mode.SRC_IN) // TintHelper.setTint(volumeSeekBar, color, false) - volumeSeekBar.applyColor(color) + binding.volumeSeekBar.applyColor(color) } companion object { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt index 86f5b2edb..72cac4396 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/about/AboutFragment.kt @@ -27,20 +27,20 @@ import code.name.monkey.retromusic.App import code.name.monkey.retromusic.Constants import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.ContributorAdapter +import code.name.monkey.retromusic.databinding.FragmentAboutBinding import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.util.NavigationUtil -import kotlinx.android.synthetic.main.card_credit.* -import kotlinx.android.synthetic.main.card_other.* -import kotlinx.android.synthetic.main.card_retro_info.* -import kotlinx.android.synthetic.main.card_social.* import org.koin.androidx.viewmodel.ext.android.sharedViewModel class AboutFragment : Fragment(R.layout.fragment_about), View.OnClickListener { + private var _binding: FragmentAboutBinding? = null + private val binding get() = _binding!! private val libraryViewModel by sharedViewModel() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - version.setSummary(getAppVersion()) + _binding = FragmentAboutBinding.bind(view) + binding.aboutContent.cardOther.version.setSummary(getAppVersion()) setUpView() loadContributors() } @@ -53,19 +53,20 @@ class AboutFragment : Fragment(R.layout.fragment_about), View.OnClickListener { } private fun setUpView() { - appGithub.setOnClickListener(this) - faqLink.setOnClickListener(this) - telegramLink.setOnClickListener(this) - appRate.setOnClickListener(this) - appTranslation.setOnClickListener(this) - appShare.setOnClickListener(this) - donateLink.setOnClickListener(this) - instagramLink.setOnClickListener(this) - twitterLink.setOnClickListener(this) - changelog.setOnClickListener(this) - openSource.setOnClickListener(this) - pinterestLink.setOnClickListener(this) - bugReportLink.setOnClickListener(this) + binding.aboutContent.cardRetroInfo.appGithub.setOnClickListener(this) + binding.aboutContent.cardRetroInfo.faqLink.setOnClickListener(this) + binding.aboutContent.cardSocial.telegramLink.setOnClickListener(this) + binding.aboutContent.cardRetroInfo.appRate.setOnClickListener(this) + binding.aboutContent.cardRetroInfo.appTranslation.setOnClickListener(this) + binding.aboutContent.cardRetroInfo.appShare.setOnClickListener(this) + binding.aboutContent.cardRetroInfo.donateLink.setOnClickListener(this) + binding.aboutContent.cardSocial.instagramLink.setOnClickListener(this) + binding.aboutContent.cardSocial.twitterLink.setOnClickListener(this) + binding.aboutContent.cardOther.changelog.setOnClickListener(this) + binding.aboutContent.cardOther.openSource.setOnClickListener(this) + binding.aboutContent.cardSocial.pinterestLink.setOnClickListener(this) + binding.aboutContent.cardRetroInfo.bugReportLink.setOnClickListener(this) + binding.aboutContent.cardSocial.websiteLink.setOnClickListener(this) } override fun onClick(view: View) { @@ -80,9 +81,10 @@ class AboutFragment : Fragment(R.layout.fragment_about), View.OnClickListener { R.id.donateLink -> NavigationUtil.goToSupportDevelopment(requireActivity()) R.id.instagramLink -> openUrl(Constants.APP_INSTAGRAM_LINK) R.id.twitterLink -> openUrl(Constants.APP_TWITTER_LINK) - R.id.changelog -> openUrl(Constants.TELEGRAM_CHANGE_LOG) + R.id.changelog -> NavigationUtil.gotoWhatNews(requireActivity()) R.id.openSource -> NavigationUtil.goToOpenSource(requireActivity()) R.id.bugReportLink -> NavigationUtil.bugReport(requireActivity()) + R.id.websiteLink -> openUrl(Constants.WEBSITE) } } @@ -99,7 +101,7 @@ class AboutFragment : Fragment(R.layout.fragment_about), View.OnClickListener { } private fun shareApp() { - ShareCompat.IntentBuilder.from(requireActivity()).setType("text/plain") + ShareCompat.IntentBuilder(requireActivity()).setType("text/plain") .setChooserTitle(R.string.share_app) .setText(String.format(getString(R.string.app_share), requireActivity().packageName)) .startChooser() @@ -107,7 +109,7 @@ class AboutFragment : Fragment(R.layout.fragment_about), View.OnClickListener { private fun loadContributors() { val contributorAdapter = ContributorAdapter(emptyList()) - recyclerView.apply { + binding.aboutContent.cardCredit.recyclerView.apply { layoutManager = LinearLayoutManager(requireContext()) itemAnimator = DefaultItemAnimator() adapter = contributorAdapter @@ -116,4 +118,9 @@ class AboutFragment : Fragment(R.layout.fragment_about), View.OnClickListener { contributorAdapter.swapData(contributors) }) } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt index 96c47095d..c9291185c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsFragment.kt @@ -19,11 +19,12 @@ import android.content.Intent import android.graphics.Color import android.os.Bundle import android.view.* +import androidx.activity.addCallback import androidx.appcompat.app.AppCompatActivity import androidx.core.os.bundleOf import androidx.core.text.HtmlCompat import androidx.core.view.ViewCompat -import androidx.lifecycle.Observer +import androidx.core.view.doOnPreDraw import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.findNavController @@ -35,17 +36,19 @@ import code.name.monkey.appthemehelper.common.ATHToolbarActivity.getToolbarBackg import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.EXTRA_ALBUM_ID import code.name.monkey.retromusic.EXTRA_ARTIST_ID +import code.name.monkey.retromusic.EXTRA_ARTIST_NAME import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.tageditor.AbsTagEditorActivity import code.name.monkey.retromusic.activities.tageditor.AlbumTagEditorActivity import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter +import code.name.monkey.retromusic.databinding.FragmentAlbumDetailsBinding import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog import code.name.monkey.retromusic.dialogs.DeleteSongsDialog import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment -import code.name.monkey.retromusic.glide.AlbumGlideRequest -import code.name.monkey.retromusic.glide.ArtistGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.glide.SingleColorTarget import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -54,6 +57,7 @@ import code.name.monkey.retromusic.helper.SortOrder.AlbumSongSortOrder.Companion import code.name.monkey.retromusic.helper.SortOrder.AlbumSongSortOrder.Companion.SONG_TRACK_LIST import code.name.monkey.retromusic.helper.SortOrder.AlbumSongSortOrder.Companion.SONG_Z_A import code.name.monkey.retromusic.interfaces.IAlbumClickListener +import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.network.Result @@ -61,14 +65,12 @@ import code.name.monkey.retromusic.network.model.LastFmAlbum import code.name.monkey.retromusic.repository.RealRepository import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroColorUtil import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.Glide +import com.afollestad.materialcab.MaterialCab import com.google.android.material.transition.MaterialArcMotion import com.google.android.material.transition.MaterialContainerTransform -import com.google.android.material.transition.MaterialElevationScale -import kotlinx.android.synthetic.main.fragment_album_content.* -import kotlinx.android.synthetic.main.fragment_album_details.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -78,7 +80,10 @@ import org.koin.core.parameter.parametersOf import java.util.* class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_details), - IAlbumClickListener { + IAlbumClickListener, ICabHolder { + + private var _binding: FragmentAlbumDetailsBinding? = null + private val binding get() = _binding!! private val arguments by navArgs() private val detailsViewModel by viewModel { @@ -87,6 +92,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det private lateinit var simpleSongAdapter: SimpleSongAdapter private lateinit var album: Album + private var albumArtistExists = false private val savedSortOrder: String get() = PreferenceUtil.albumDetailSongSortOrder @@ -104,51 +110,70 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentAlbumDetailsBinding.bind(view) setHasOptionsMenu(true) - mainActivity.setBottomBarVisibility(false) mainActivity.addMusicServiceEventListener(detailsViewModel) - mainActivity.setSupportActionBar(toolbar) + mainActivity.setSupportActionBar(binding.toolbar) - toolbar.title = " " - ViewCompat.setTransitionName(albumCoverContainer, "album") + binding.toolbar.title = " " + ViewCompat.setTransitionName(binding.albumCoverContainer, arguments.extraAlbumId.toString()) postponeEnterTransition() - detailsViewModel.getAlbum().observe(viewLifecycleOwner, Observer { - startPostponedEnterTransition() + detailsViewModel.getAlbum().observe(viewLifecycleOwner, { + requireView().doOnPreDraw { + startPostponedEnterTransition() + } + albumArtistExists = !it.albumArtist.isNullOrEmpty() showAlbum(it) + if (albumArtistExists) { + ViewCompat.setTransitionName(binding.artistImage, album.albumArtist) + } else { + ViewCompat.setTransitionName(binding.artistImage, album.artistId.toString()) + } }) setupRecyclerView() - artistImage.setOnClickListener { artistView -> - ViewCompat.setTransitionName(artistView, "artist") - exitTransition = MaterialElevationScale(false).apply { - duration = 300L + binding.artistImage.setOnClickListener { artistView -> + if (albumArtistExists) { + findActivityNavController(R.id.fragment_container) + .navigate( + R.id.albumArtistDetailsFragment, + bundleOf(EXTRA_ARTIST_NAME to album.albumArtist), + null, + FragmentNavigatorExtras(artistView to album.albumArtist.toString()) + ) + } else { + findActivityNavController(R.id.fragment_container) + .navigate( + R.id.artistDetailsFragment, + bundleOf(EXTRA_ARTIST_ID to album.artistId), + null, + FragmentNavigatorExtras(artistView to album.artistId.toString()) + ) } - reenterTransition = MaterialElevationScale(true).apply { - duration = 300L - } - findActivityNavController(R.id.fragment_container) - .navigate( - R.id.artistDetailsFragment, - bundleOf(EXTRA_ARTIST_ID to album.artistId), - null, - FragmentNavigatorExtras(artistView to "artist") - ) + } - playAction.setOnClickListener { + binding.fragmentAlbumContent.playAction.setOnClickListener { MusicPlayerRemote.openQueue(album.songs, 0, true) } - shuffleAction.setOnClickListener { + binding.fragmentAlbumContent.shuffleAction.setOnClickListener { MusicPlayerRemote.openAndShuffleQueue( album.songs, true ) } - aboutAlbumText.setOnClickListener { - if (aboutAlbumText.maxLines == 4) { - aboutAlbumText.maxLines = Integer.MAX_VALUE + binding.fragmentAlbumContent.aboutAlbumText.setOnClickListener { + if (binding.fragmentAlbumContent.aboutAlbumText.maxLines == 4) { + binding.fragmentAlbumContent.aboutAlbumText.maxLines = Integer.MAX_VALUE } else { - aboutAlbumText.maxLines = 4 + binding.fragmentAlbumContent.aboutAlbumText.maxLines = 4 + } + } + + requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { + if (!handleBackPress()) { + remove() + requireActivity().onBackPressed() } } } @@ -163,9 +188,9 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det requireActivity() as AppCompatActivity, ArrayList(), R.layout.item_song, - null + this ) - recyclerView.apply { + binding.fragmentAlbumContent.recyclerView.apply { layoutManager = LinearLayoutManager(requireContext()) itemAnimator = DefaultItemAnimator() isNestedScrollingEnabled = false @@ -179,21 +204,21 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det } this.album = album - albumTitle.text = album.title + binding.albumTitle.text = album.title val songText = resources.getQuantityString( R.plurals.albumSongs, album.songCount, album.songCount ) - songTitle.text = songText + binding.fragmentAlbumContent.songTitle.text = songText if (MusicUtil.getYearString(album.year) == "-") { - albumText.text = String.format( + binding.albumText.text = String.format( "%s • %s", - album.artistName, + if (albumArtistExists) album.albumArtist else album.artistName, MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(album.songs)) ) } else { - albumText.text = String.format( + binding.albumText.text = String.format( "%s • %s • %s", album.artistName, MusicUtil.getYearString(album.year), @@ -202,11 +227,18 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det } loadAlbumCover(album) simpleSongAdapter.swapDataSet(album.songs) - detailsViewModel.getArtist(album.artistId).observe(viewLifecycleOwner, Observer { - loadArtistImage(it) - }) + if (albumArtistExists) { + detailsViewModel.getAlbumArtist(album.albumArtist.toString()).observe(viewLifecycleOwner, { + loadArtistImage(it) + }) + } else { + detailsViewModel.getArtist(album.artistId).observe(viewLifecycleOwner, { + loadArtistImage(it) + }) + } - detailsViewModel.getAlbumInfo(album).observe(viewLifecycleOwner, Observer { result -> + + detailsViewModel.getAlbumInfo(album).observe(viewLifecycleOwner, { result -> when (result) { is Result.Loading -> { println("Loading") @@ -222,41 +254,44 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det } private fun moreAlbums(albums: List) { - moreTitle.show() - moreRecyclerView.show() - moreTitle.text = String.format(getString(R.string.label_more_from), album.artistName) + binding.fragmentAlbumContent.moreTitle.show() + binding.fragmentAlbumContent.moreRecyclerView.show() + binding.fragmentAlbumContent.moreTitle.text = + String.format(getString(R.string.label_more_from), album.artistName) val albumAdapter = - HorizontalAlbumAdapter(requireActivity() as AppCompatActivity, albums, null, this) - moreRecyclerView.layoutManager = GridLayoutManager( + HorizontalAlbumAdapter(requireActivity() as AppCompatActivity, albums, this, this) + binding.fragmentAlbumContent.moreRecyclerView.layoutManager = GridLayoutManager( requireContext(), 1, GridLayoutManager.HORIZONTAL, false ) - moreRecyclerView.adapter = albumAdapter + binding.fragmentAlbumContent.moreRecyclerView.adapter = albumAdapter } private fun aboutAlbum(lastFmAlbum: LastFmAlbum) { if (lastFmAlbum.album != null) { if (lastFmAlbum.album.wiki != null) { - aboutAlbumText.show() - aboutAlbumTitle.show() - aboutAlbumTitle.text = + binding.fragmentAlbumContent.aboutAlbumText.show() + binding.fragmentAlbumContent.aboutAlbumTitle.show() + binding.fragmentAlbumContent.aboutAlbumTitle.text = String.format(getString(R.string.about_album_label), lastFmAlbum.album.name) - aboutAlbumText.text = HtmlCompat.fromHtml( + binding.fragmentAlbumContent.aboutAlbumText.text = HtmlCompat.fromHtml( lastFmAlbum.album.wiki.content, HtmlCompat.FROM_HTML_MODE_LEGACY ) } if (lastFmAlbum.album.listeners.isNotEmpty()) { - listeners.show() - listenersLabel.show() - scrobbles.show() - scrobblesLabel.show() + binding.fragmentAlbumContent.listeners.show() + binding.fragmentAlbumContent.listenersLabel.show() + binding.fragmentAlbumContent.scrobbles.show() + binding.fragmentAlbumContent.scrobblesLabel.show() - listeners.text = RetroUtil.formatValue(lastFmAlbum.album.listeners.toFloat()) - scrobbles.text = RetroUtil.formatValue(lastFmAlbum.album.playcount.toFloat()) + binding.fragmentAlbumContent.listeners.text = + RetroUtil.formatValue(lastFmAlbum.album.listeners.toFloat()) + binding.fragmentAlbumContent.scrobbles.text = + RetroUtil.formatValue(lastFmAlbum.album.playcount.toFloat()) } } } @@ -265,24 +300,22 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det detailsViewModel.getMoreAlbums(artist).observe(viewLifecycleOwner, { moreAlbums(it) }) - ArtistGlideRequest.Builder.from(Glide.with(requireContext()), artist) - .forceDownload(PreferenceUtil.isAllowedToDownloadMetadata()) - .generatePalette(requireContext()) - .build() + GlideApp.with(requireContext()).asBitmapPalette().artistImageOptions(artist) + //.forceDownload(PreferenceUtil.isAllowedToDownloadMetadata()) + .load(RetroGlideExtension.getArtistModel(artist, PreferenceUtil.isAllowedToDownloadMetadata())) .dontAnimate() .dontTransform() - .into(object : RetroMusicColoredTarget(artistImage) { + .into(object : RetroMusicColoredTarget(binding.artistImage) { override fun onColorReady(colors: MediaNotificationProcessor) { } }) } private fun loadAlbumCover(album: Album) { - AlbumGlideRequest.Builder.from(Glide.with(requireContext()), album.safeGetFirstSong()) - .checkIgnoreMediaStore() - .generatePalette(requireContext()) - .build() - .into(object : SingleColorTarget(image) { + GlideApp.with(requireContext()).asBitmapPalette().albumCoverOptions(album.safeGetFirstSong()) + //.checkIgnoreMediaStore() + .load(RetroGlideExtension.getSongModel(album.safeGetFirstSong())) + .into(object : SingleColorTarget(binding.image) { override fun onColorReady(color: Int) { setColors(color) } @@ -290,23 +323,17 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det } private fun setColors(color: Int) { - shuffleAction?.applyColor(color) - playAction?.applyOutlineColor(color) + binding.fragmentAlbumContent.shuffleAction.applyColor(color) + binding.fragmentAlbumContent.playAction.applyOutlineColor(color) } override fun onAlbumClick(albumId: Long, view: View) { - exitTransition = MaterialElevationScale(false).apply { - duration = 300L - } - reenterTransition = MaterialElevationScale(false).apply { - duration = 300L - } findNavController().navigate( R.id.albumDetailsFragment, bundleOf(EXTRA_ALBUM_ID to albumId), null, FragmentNavigatorExtras( - view to "album" + view to albumId.toString() ) ) } @@ -318,9 +345,9 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det setUpSortOrderMenu(sortOrder.subMenu) ToolbarContentTintHelper.handleOnCreateOptionsMenu( requireContext(), - toolbar, + binding.toolbar, menu, - getToolbarBackgroundColor(toolbar) + getToolbarBackgroundColor(binding.toolbar) ) } @@ -360,7 +387,7 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det intent.putExtra(AbsTagEditorActivity.EXTRA_ID, album.id) val options = ActivityOptions.makeSceneTransitionAnimation( requireActivity(), - albumCoverContainer, + binding.albumCoverContainer, "${getString(R.string.transition_album_art)}_${album.id}" ) startActivityForResult( @@ -421,6 +448,37 @@ class AlbumDetailsFragment : AbsMainActivityFragment(R.layout.fragment_album_det simpleSongAdapter.swapDataSet(album.songs) } + private fun handleBackPress(): Boolean { + cab?.let { + if (it.isActive) { + it.finish() + return true + } + } + return false + } + + private var cab: MaterialCab? = null + + override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab { + cab?.let { + if (it.isActive) { + it.finish() + } + } + cab = MaterialCab(mainActivity, R.id.cab_stub) + .setMenu(menuRes) + .setCloseDrawableRes(R.drawable.ic_close) + .setBackgroundColor(RetroColorUtil.shiftBackgroundColorForLightText(surfaceColor())) + .start(callback) + return cab as MaterialCab + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + companion object { const val TAG_EDITOR_REQUEST = 9002 } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsViewModel.kt index 0dfa0ba7a..702217d24 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumDetailsViewModel.kt @@ -14,11 +14,7 @@ */ package code.name.monkey.retromusic.fragments.albums -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import androidx.lifecycle.liveData -import androidx.lifecycle.viewModelScope +import androidx.lifecycle.* import code.name.monkey.retromusic.interfaces.IMusicServiceEventListener import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Artist @@ -51,6 +47,11 @@ class AlbumDetailsViewModel( emit(artist) } + fun getAlbumArtist(artistName: String): LiveData = liveData(IO) { + val artist = repository.albumArtistByName(artistName) + emit(artist) + } + fun getAlbumInfo(album: Album): LiveData> = liveData { emit(Result.Loading) emit(repository.albumInfo(album.artistName ?: "-", album.title ?: "-")) @@ -73,4 +74,5 @@ class AlbumDetailsViewModel( override fun onPlayStateChanged() {} override fun onRepeatModeChanged() {} override fun onShuffleModeChanged() {} + override fun onFavoriteStateChanged() {} } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt index 4df87cf95..92a372fea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/albums/AlbumsFragment.kt @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.fragments.albums import android.os.Bundle import android.view.* +import androidx.activity.addCallback import androidx.core.os.bundleOf import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.findNavController @@ -33,7 +34,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroColorUtil import code.name.monkey.retromusic.util.RetroUtil import com.afollestad.materialcab.MaterialCab -import com.google.android.material.transition.MaterialElevationScale +import com.google.android.gms.cast.framework.CastButtonFactory class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment(), IAlbumClickListener, ICabHolder { @@ -46,8 +47,17 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment AlbumSortOrder.ALBUM_Z_A R.id.action_album_sort_order_artist -> AlbumSortOrder.ALBUM_ARTIST R.id.action_album_sort_order_year -> AlbumSortOrder.ALBUM_YEAR + R.id.action_album_sort_order_num_songs -> AlbumSortOrder.ALBUM_NUMBER_OF_SONGS else -> PreferenceUtil.albumSortOrder } if (sortOrder != PreferenceUtil.albumSortOrder) { @@ -303,6 +318,21 @@ class AlbumsFragment : AbsRecyclerViewCustomGridSizeFragment + when (result) { + is Result.Loading -> println("Loading") + is Result.Error -> println("Error") + is Result.Success -> artistInfo(result.data) + } + }) + } + + private fun artistInfo(lastFmArtist: LastFmArtist?) { + if (lastFmArtist != null && lastFmArtist.artist != null && lastFmArtist.artist.bio != null) { + val bioContent = lastFmArtist.artist.bio.content + if (bioContent != null && bioContent.trim { it <= ' ' }.isNotEmpty()) { + binding.fragmentArtistContent.biographyText.visibility = View.VISIBLE + binding.fragmentArtistContent.biographyTitle.visibility = View.VISIBLE + biography = HtmlCompat.fromHtml(bioContent, HtmlCompat.FROM_HTML_MODE_LEGACY) + binding.fragmentArtistContent.biographyText.text = biography + if (lastFmArtist.artist.stats.listeners.isNotEmpty()) { + binding.fragmentArtistContent.listeners.show() + binding.fragmentArtistContent.listenersLabel.show() + binding.fragmentArtistContent.scrobbles.show() + binding.fragmentArtistContent.scrobblesLabel.show() + binding.fragmentArtistContent.listeners.text = + RetroUtil.formatValue(lastFmArtist.artist.stats.listeners.toFloat()) + binding.fragmentArtistContent.scrobbles.text = + RetroUtil.formatValue(lastFmArtist.artist.stats.playcount.toFloat()) + } + } + } + + // If the "lang" parameter is set and no biography is given, retry with default language + if (biography == null && lang != null) { + loadBiography(artist.name, null) + } + } + + private fun loadArtistImage(artist: Artist) { + GlideApp.with(requireContext()).asBitmapPalette().artistImageOptions(artist) + .load(RetroGlideExtension.getArtistModel(artist)) + .dontAnimate() + .into(object : SingleColorTarget(binding.image) { + override fun onColorReady(color: Int) { + setColors(color) + } + }) + } + + private fun setColors(color: Int) { + if (_binding != null) { + binding.fragmentArtistContent.shuffleAction.applyColor(color) + binding.fragmentArtistContent.playAction.applyOutlineColor(color) + } + } + + override fun onAlbumClick(albumId: Long, view: View) { + findNavController().navigate( + R.id.albumDetailsFragment, + bundleOf(EXTRA_ALBUM_ID to albumId), + null, + FragmentNavigatorExtras( + view to albumId.toString() + ) + ) + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + return handleSortOrderMenuItem(item) + } + + private fun handleSortOrderMenuItem(item: MenuItem): Boolean { + val songs = artist.songs + when (item.itemId) { + android.R.id.home -> findNavController().navigateUp() + R.id.action_play_next -> { + MusicPlayerRemote.playNext(songs) + return true + } + R.id.action_add_to_current_playing -> { + MusicPlayerRemote.enqueue(songs) + return true + } + R.id.action_add_to_playlist -> { + lifecycleScope.launch(Dispatchers.IO) { + val playlists = get().fetchPlaylists() + withContext(Dispatchers.Main) { + AddToPlaylistDialog.create(playlists, songs) + .show(childFragmentManager, "ADD_PLAYLIST") + } + } + return true + } + R.id.action_set_artist_image -> { + val intent = Intent(Intent.ACTION_GET_CONTENT) + intent.type = "image/*" + startActivityForResult( + Intent.createChooser(intent, getString(R.string.pick_from_local_storage)), + REQUEST_CODE_SELECT_IMAGE + ) + return true + } + R.id.action_reset_artist_image -> { + showToast(resources.getString(R.string.updating)) + CustomArtistImageUtil.getInstance(requireContext()).resetCustomArtistImage(artist) + forceDownload = true + return true + } + } + return true + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + when (requestCode) { + REQUEST_CODE_SELECT_IMAGE -> if (resultCode == Activity.RESULT_OK) { + data?.data?.let { + CustomArtistImageUtil.getInstance(requireContext()) + .setCustomArtistImage(artist, it) + } + } + else -> if (resultCode == Activity.RESULT_OK) { + println("OK") + } + } + } + + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + super.onCreateOptionsMenu(menu, inflater) + inflater.inflate(R.menu.menu_artist_detail, menu) + } + + + private fun handleBackPress(): Boolean { + cab?.let { + if (it.isActive) { + it.finish() + return true + } + } + return false + } + + private var cab: MaterialCab? = null + + override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab { + cab?.let { + if (it.isActive) { + it.finish() + } + } + cab = MaterialCab(mainActivity, R.id.cab_stub) + .setMenu(menuRes) + .setCloseDrawableRes(R.drawable.ic_close) + .setBackgroundColor(RetroColorUtil.shiftBackgroundColorForLightText(surfaceColor())) + .start(callback) + return cab as MaterialCab + } + + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + + companion object { + const val REQUEST_CODE_SELECT_IMAGE = 9002 + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AlbumArtistDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AlbumArtistDetailsFragment.kt new file mode 100644 index 000000000..3480ac15e --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AlbumArtistDetailsFragment.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2020 Hemanth Savarla. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + */ +package code.name.monkey.retromusic.fragments.artists + +import androidx.navigation.fragment.navArgs +import org.koin.androidx.viewmodel.ext.android.viewModel +import org.koin.core.parameter.parametersOf + +class AlbumArtistDetailsFragment : AbsArtistDetailsFragment() { + + private val arguments by navArgs() + + override val detailsViewModel: ArtistDetailsViewModel by viewModel { + parametersOf(null, arguments.extraArtistName) + } + override val artistId: Long? + get() = null + override val artistName: String + get() = arguments.extraArtistName +} diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AlbumArtistDetailsViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AlbumArtistDetailsViewModel.kt new file mode 100644 index 000000000..3d202bb55 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/AlbumArtistDetailsViewModel.kt @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2020 Hemanth Savarla. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + */ +package code.name.monkey.retromusic.fragments.artists + +import androidx.lifecycle.* +import code.name.monkey.retromusic.interfaces.IMusicServiceEventListener +import code.name.monkey.retromusic.model.Artist +import code.name.monkey.retromusic.network.Result +import code.name.monkey.retromusic.network.model.LastFmArtist +import code.name.monkey.retromusic.repository.RealRepository +import kotlinx.coroutines.Dispatchers.IO +import kotlinx.coroutines.launch + +class AlbumArtistDetailsViewModel( + private val realRepository: RealRepository, + private val artistName: String +) : ViewModel(), IMusicServiceEventListener { + private val artistDetails = MutableLiveData() + + init { + fetchAlbumArtist() + } + + private fun fetchAlbumArtist() { + viewModelScope.launch(IO) { + artistDetails.postValue(realRepository.albumArtistByName(artistName)) + } + } + + fun getArtist(): LiveData = artistDetails + + fun getArtistInfo( + name: String, + lang: String?, + cache: String? + ): LiveData> = liveData(IO) { + emit(Result.Loading) + val info = realRepository.artistInfo(name, lang, cache) + emit(info) + } + + override fun onMediaStoreChanged() { + fetchAlbumArtist() + } + + override fun onServiceConnected() {} + override fun onServiceDisconnected() {} + override fun onQueueChanged() {} + override fun onFavoriteStateChanged() {} + override fun onPlayingMetaChanged() {} + override fun onPlayStateChanged() {} + override fun onRepeatModeChanged() {} + override fun onShuffleModeChanged() {} +} diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistDetailsFragment.kt index 2aecf153d..6e556a24e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistDetailsFragment.kt @@ -14,298 +14,18 @@ */ package code.name.monkey.retromusic.fragments.artists -import android.app.Activity -import android.content.Intent -import android.graphics.Color -import android.os.Bundle -import android.text.Spanned -import android.view.Menu -import android.view.MenuInflater -import android.view.MenuItem -import android.view.View -import androidx.core.os.bundleOf -import androidx.core.text.HtmlCompat -import androidx.core.view.ViewCompat -import androidx.lifecycle.Observer -import androidx.lifecycle.lifecycleScope -import androidx.navigation.fragment.FragmentNavigatorExtras -import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs -import androidx.recyclerview.widget.DefaultItemAnimator -import androidx.recyclerview.widget.GridLayoutManager -import androidx.recyclerview.widget.LinearLayoutManager -import code.name.monkey.appthemehelper.util.ATHUtil -import code.name.monkey.retromusic.EXTRA_ALBUM_ID -import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.adapter.album.HorizontalAlbumAdapter -import code.name.monkey.retromusic.adapter.song.SimpleSongAdapter -import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog -import code.name.monkey.retromusic.extensions.* -import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment -import code.name.monkey.retromusic.glide.ArtistGlideRequest -import code.name.monkey.retromusic.glide.SingleColorTarget -import code.name.monkey.retromusic.helper.MusicPlayerRemote -import code.name.monkey.retromusic.interfaces.IAlbumClickListener -import code.name.monkey.retromusic.model.Artist -import code.name.monkey.retromusic.network.Result -import code.name.monkey.retromusic.network.model.LastFmArtist -import code.name.monkey.retromusic.repository.RealRepository -import code.name.monkey.retromusic.util.CustomArtistImageUtil -import code.name.monkey.retromusic.util.MusicUtil -import code.name.monkey.retromusic.util.RetroUtil -import com.bumptech.glide.Glide -import com.google.android.material.transition.MaterialContainerTransform -import com.google.android.material.transition.MaterialElevationScale -import kotlinx.android.synthetic.main.fragment_artist_content.* -import kotlinx.android.synthetic.main.fragment_artist_details.* -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import org.koin.android.ext.android.get import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.core.parameter.parametersOf -import java.util.* -import kotlin.collections.ArrayList -class ArtistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_artist_details), - IAlbumClickListener { +class ArtistDetailsFragment : AbsArtistDetailsFragment() { private val arguments by navArgs() - private val detailsViewModel: ArtistDetailsViewModel by viewModel { - parametersOf(arguments.extraArtistId) + override val detailsViewModel: ArtistDetailsViewModel by viewModel { + parametersOf(arguments.extraArtistId, null) } - private lateinit var artist: Artist - private lateinit var songAdapter: SimpleSongAdapter - private lateinit var albumAdapter: HorizontalAlbumAdapter - private var forceDownload: Boolean = false - private var lang: String? = null - private var biography: Spanned? = null + override val artistId: Long + get() = arguments.extraArtistId + override val artistName: String? + get() = null - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - sharedElementEnterTransition = MaterialContainerTransform().apply { - drawingViewId = R.id.fragment_container - duration = 300L - scrimColor = Color.TRANSPARENT - setAllContainerColors(requireContext().resolveColor(R.attr.colorSurface)) - } - } - - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) - setHasOptionsMenu(true) - mainActivity.setBottomBarVisibility(false) - mainActivity.addMusicServiceEventListener(detailsViewModel) - mainActivity.setSupportActionBar(toolbar) - toolbar.title = null - ViewCompat.setTransitionName(artistCoverContainer, "artist") - postponeEnterTransition() - detailsViewModel.getArtist().observe(viewLifecycleOwner, { - startPostponedEnterTransition() - showArtist(it) - }) - setupRecyclerView() - - playAction.apply { - setOnClickListener { MusicPlayerRemote.openQueue(artist.songs, 0, true) } - } - shuffleAction.apply { - setOnClickListener { MusicPlayerRemote.openAndShuffleQueue(artist.songs, true) } - } - - biographyText.setOnClickListener { - if (biographyText.maxLines == 4) { - biographyText.maxLines = Integer.MAX_VALUE - } else { - biographyText.maxLines = 4 - } - } - } - - private fun setupRecyclerView() { - albumAdapter = HorizontalAlbumAdapter(requireActivity(), ArrayList(), null, this) - albumRecyclerView.apply { - itemAnimator = DefaultItemAnimator() - layoutManager = GridLayoutManager(this.context, 1, GridLayoutManager.HORIZONTAL, false) - adapter = albumAdapter - } - songAdapter = SimpleSongAdapter(requireActivity(), ArrayList(), R.layout.item_song, null) - recyclerView.apply { - itemAnimator = DefaultItemAnimator() - layoutManager = LinearLayoutManager(this.context) - adapter = songAdapter - } - } - - private fun showArtist(artist: Artist) { - this.artist = artist - loadArtistImage(artist) - if (RetroUtil.isAllowedToDownloadMetadata(requireContext())) { - loadBiography(artist.name) - } - artistTitle.text = artist.name - text.text = String.format( - "%s • %s", - MusicUtil.getArtistInfoString(requireContext(), artist), - MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(artist.songs)) - ) - val songText = resources.getQuantityString( - R.plurals.albumSongs, - artist.songCount, - artist.songCount - ) - val albumText = resources.getQuantityString( - R.plurals.albums, - artist.songCount, - artist.songCount - ) - songTitle.text = songText - albumTitle.text = albumText - songAdapter.swapDataSet(artist.songs.sortedBy { it.trackNumber }) - albumAdapter.swapDataSet(artist.albums) - } - - private fun loadBiography( - name: String, - lang: String? = Locale.getDefault().language - ) { - biography = null - this.lang = lang - detailsViewModel.getArtistInfo(name, lang, null) - .observe(viewLifecycleOwner, { result -> - when (result) { - is Result.Loading -> println("Loading") - is Result.Error -> println("Error") - is Result.Success -> artistInfo(result.data) - } - }) - } - - private fun artistInfo(lastFmArtist: LastFmArtist?) { - if (lastFmArtist != null && lastFmArtist.artist != null) { - val bioContent = lastFmArtist.artist.bio.content - if (bioContent != null && bioContent.trim { it <= ' ' }.isNotEmpty()) { - biographyText.visibility = View.VISIBLE - biographyTitle.visibility = View.VISIBLE - biography = HtmlCompat.fromHtml(bioContent, HtmlCompat.FROM_HTML_MODE_LEGACY) - biographyText.text = biography - if (lastFmArtist.artist.stats.listeners.isNotEmpty()) { - listeners.show() - listenersLabel.show() - scrobbles.show() - scrobblesLabel.show() - listeners.text = - RetroUtil.formatValue(lastFmArtist.artist.stats.listeners.toFloat()) - scrobbles.text = - RetroUtil.formatValue(lastFmArtist.artist.stats.playcount.toFloat()) - } - } - } - - // If the "lang" parameter is set and no biography is given, retry with default language - if (biography == null && lang != null) { - loadBiography(artist.name, null) - } - } - - private fun loadArtistImage(artist: Artist) { - ArtistGlideRequest.Builder.from(Glide.with(requireContext()), artist) - .generatePalette(requireContext()).build() - .dontAnimate() - .into(object : SingleColorTarget(image) { - override fun onColorReady(color: Int) { - setColors(color) - } - }) - } - - private fun setColors(color: Int) { - shuffleAction?.applyColor(color) - playAction?.applyOutlineColor(color) - } - - override fun onAlbumClick(albumId: Long, view: View) { - exitTransition = MaterialElevationScale(false).apply { - duration = 300L - } - reenterTransition = MaterialElevationScale(false).apply { - duration = 300L - } - findNavController().navigate( - R.id.albumDetailsFragment, - bundleOf(EXTRA_ALBUM_ID to albumId), - null, - FragmentNavigatorExtras( - view to "album" - ) - ) - } - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - return handleSortOrderMenuItem(item) - } - - private fun handleSortOrderMenuItem(item: MenuItem): Boolean { - val songs = artist.songs - when (item.itemId) { - android.R.id.home -> findNavController().navigateUp() - R.id.action_play_next -> { - MusicPlayerRemote.playNext(songs) - return true - } - R.id.action_add_to_current_playing -> { - MusicPlayerRemote.enqueue(songs) - return true - } - R.id.action_add_to_playlist -> { - lifecycleScope.launch(Dispatchers.IO) { - val playlists = get().fetchPlaylists() - withContext(Dispatchers.Main) { - AddToPlaylistDialog.create(playlists, songs) - .show(childFragmentManager, "ADD_PLAYLIST") - } - } - return true - } - R.id.action_set_artist_image -> { - val intent = Intent(Intent.ACTION_GET_CONTENT) - intent.type = "image/*" - startActivityForResult( - Intent.createChooser(intent, getString(R.string.pick_from_local_storage)), - REQUEST_CODE_SELECT_IMAGE - ) - return true - } - R.id.action_reset_artist_image -> { - showToast(resources.getString(R.string.updating)) - CustomArtistImageUtil.getInstance(requireContext()).resetCustomArtistImage(artist) - forceDownload = true - return true - } - } - return true - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - when (requestCode) { - REQUEST_CODE_SELECT_IMAGE -> if (resultCode == Activity.RESULT_OK) { - data?.data?.let { - CustomArtistImageUtil.getInstance(requireContext()) - .setCustomArtistImage(artist, it) - } - } - else -> if (resultCode == Activity.RESULT_OK) { - println("OK") - } - } - } - - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { - super.onCreateOptionsMenu(menu, inflater) - inflater.inflate(R.menu.menu_artist_detail, menu) - } - - companion object { - const val REQUEST_CODE_SELECT_IMAGE = 9002 - } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistDetailsViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistDetailsViewModel.kt index dbb59866b..ae2eef919 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistDetailsViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistDetailsViewModel.kt @@ -14,11 +14,7 @@ */ package code.name.monkey.retromusic.fragments.artists -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import androidx.lifecycle.liveData -import androidx.lifecycle.viewModelScope +import androidx.lifecycle.* import code.name.monkey.retromusic.interfaces.IMusicServiceEventListener import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.network.Result @@ -29,7 +25,8 @@ import kotlinx.coroutines.launch class ArtistDetailsViewModel( private val realRepository: RealRepository, - private val artistId: Long + private val artistId: Long?, + private val artistName: String? ) : ViewModel(), IMusicServiceEventListener { private val artistDetails = MutableLiveData() @@ -39,7 +36,9 @@ class ArtistDetailsViewModel( private fun fetchArtist() { viewModelScope.launch(IO) { - artistDetails.postValue(realRepository.artistById(artistId)) + artistId?.let { artistDetails.postValue(realRepository.artistById(it)) } + + artistName?.let { artistDetails.postValue(realRepository.albumArtistByName(it)) } } } @@ -56,7 +55,7 @@ class ArtistDetailsViewModel( } override fun onMediaStoreChanged() { - fetchArtist() + fetchArtist() } override fun onServiceConnected() {} @@ -66,4 +65,5 @@ class ArtistDetailsViewModel( override fun onPlayStateChanged() {} override fun onRepeatModeChanged() {} override fun onShuffleModeChanged() {} + override fun onFavoriteStateChanged() {} } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt index 3f05d6d22..8275c5269 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/artists/ArtistsFragment.kt @@ -16,38 +16,48 @@ package code.name.monkey.retromusic.fragments.artists import android.os.Bundle import android.view.* +import androidx.activity.addCallback import androidx.core.os.bundleOf -import androidx.lifecycle.Observer import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.GridLayoutManager import code.name.monkey.retromusic.EXTRA_ARTIST_ID +import code.name.monkey.retromusic.EXTRA_ARTIST_NAME import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.artist.ArtistAdapter import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewCustomGridSizeFragment import code.name.monkey.retromusic.helper.SortOrder.ArtistSortOrder +import code.name.monkey.retromusic.interfaces.IAlbumArtistClickListener import code.name.monkey.retromusic.interfaces.IArtistClickListener import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroColorUtil import code.name.monkey.retromusic.util.RetroUtil import com.afollestad.materialcab.MaterialCab -import com.google.android.material.transition.MaterialElevationScale +import com.google.android.gms.cast.framework.CastButtonFactory class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment(), - IArtistClickListener, ICabHolder { + IArtistClickListener, IAlbumArtistClickListener, ICabHolder { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - libraryViewModel.getArtists().observe(viewLifecycleOwner, Observer { + libraryViewModel.getArtists().observe(viewLifecycleOwner, { if (it.isNotEmpty()) adapter?.swapDataSet(it) else adapter?.swapDataSet(listOf()) }) + requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { + if (!handleBackPress()) { + remove() + requireActivity().onBackPressed() + } + } } + override val titleRes: Int + get() = R.string.artists override val emptyMessage: Int get() = R.string.no_artists @@ -66,7 +76,7 @@ class ArtistsFragment : AbsRecyclerViewCustomGridSizeFragment { + PreferenceUtil.showLyrics = !PreferenceUtil.showLyrics + showLyricsIcon(item) + return true + } R.id.action_toggle_favorite -> { toggleFavorite(song) return true @@ -114,6 +130,8 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme return true } R.id.action_go_to_album -> { + //Hide Bottom Bar First, else Bottom Sheet doesn't collapse fully + mainActivity.setBottomBarVisibility(false) mainActivity.collapsePanel() requireActivity().findNavController(R.id.fragment_container).navigate( R.id.albumDetailsFragment, @@ -122,11 +140,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme return true } R.id.action_go_to_artist -> { - mainActivity.collapsePanel() - requireActivity().findNavController(R.id.fragment_container).navigate( - R.id.artistDetailsFragment, - bundleOf(EXTRA_ARTIST_ID to song.artistId) - ) + goToArtist(requireActivity()) return true } R.id.now_playing -> { @@ -158,7 +172,7 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme val trackUri = ContentUris.withAppendedId( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, - song.id.toLong() + song.id ) retriever.setDataSource(activity, trackUri) var genre: String? = @@ -173,6 +187,18 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme return false } + private fun showLyricsIcon(item: MenuItem) { + val icon = + if (PreferenceUtil.showLyrics) R.drawable.ic_lyrics else R.drawable.ic_lyrics_outline + val drawable: Drawable? = RetroUtil.getTintedVectorDrawable( + requireContext(), + icon, + toolbarIconColor() + ) + item.isChecked = PreferenceUtil.showLyrics + item.icon = drawable + } + abstract fun playerToolbar(): Toolbar? abstract fun onShow() @@ -185,7 +211,6 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme override fun onServiceConnected() { updateIsFavorite() - updateLyrics() } override fun onPlayingMetaChanged() { @@ -193,9 +218,13 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme updateLyrics() } + override fun onFavoriteStateChanged() { + updateIsFavorite(animate = true) + } + protected open fun toggleFavorite(song: Song) { lifecycleScope.launch(IO) { - val playlist: PlaylistEntity? = libraryViewModel.favoritePlaylist() + val playlist: PlaylistEntity = libraryViewModel.favoritePlaylist() if (playlist != null) { val songEntity = song.toSongEntity(playlist.playListId) val isFavorite = libraryViewModel.isFavoriteSong(songEntity).isNotEmpty() @@ -210,26 +239,36 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme } } - fun updateIsFavorite() { + fun updateIsFavorite(animate: Boolean = false) { lifecycleScope.launch(IO) { - val playlist: PlaylistEntity? = libraryViewModel.favoritePlaylist() + val playlist: PlaylistEntity = libraryViewModel.favoritePlaylist() if (playlist != null) { val song: SongEntity = MusicPlayerRemote.currentSong.toSongEntity(playlist.playListId) val isFavorite: Boolean = libraryViewModel.isFavoriteSong(song).isNotEmpty() withContext(Main) { - val icon = + val icon = if (animate) { + if (isFavorite) R.drawable.avd_favorite else R.drawable.avd_unfavorite + } else { if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border + } val drawable: Drawable? = RetroUtil.getTintedVectorDrawable( requireContext(), icon, toolbarIconColor() ) if (playerToolbar() != null) { - playerToolbar()?.menu?.findItem(R.id.action_toggle_favorite) - ?.setIcon(drawable)?.title = - if (isFavorite) getString(R.string.action_remove_from_favorites) - else getString(R.string.action_add_to_favorites) + playerToolbar()?.menu?.findItem(R.id.action_toggle_favorite)?.apply { + setIcon(drawable) + title = + if (isFavorite) getString(R.string.action_remove_from_favorites) + else getString(R.string.action_add_to_favorites) + getIcon().also { + if (it is AnimatedVectorDrawable) { + it.start() + } + } + } } } } @@ -273,7 +312,50 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme playerAlbumCoverFragment?.setCallbacks(this) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) - statusBarShadow?.hide() + view.findViewById(R.id.statusBarShadow)?.hide() + } + + @SuppressLint("ClickableViewAccessibility") + override fun onStart() { + super.onStart() + requireView().setOnTouchListener( + SwipeDetector( + requireContext(), + playerAlbumCoverFragment?.viewPager, + requireView() + ) + ) + } + + class SwipeDetector(val context: Context, val viewPager: ViewPager?, val view: View) : + View.OnTouchListener { + private var flingPlayBackController: GestureDetector = GestureDetector( + context, + object : GestureDetector.SimpleOnGestureListener() { + override fun onScroll( + e1: MotionEvent?, + e2: MotionEvent?, + distanceX: Float, + distanceY: Float + ): Boolean { + return when { + abs(distanceX) > abs(distanceY) -> { + // Disallow Intercept Touch Event so that parent(BottomSheet) doesn't consume the events + view.parent.requestDisallowInterceptTouchEvent(true) + true + } + else -> { + false + } + } + } + }) + + @SuppressLint("ClickableViewAccessibility") + override fun onTouch(v: View, event: MotionEvent?): Boolean { + viewPager?.dispatchTouchEvent(event) + return flingPlayBackController.onTouchEvent(event) + } } companion object { @@ -290,3 +372,44 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme ) } } + +fun goToArtist(activity: Activity) { + if (activity !is MainActivity) return + val song = MusicPlayerRemote.currentSong + activity.apply { + + // Remove exit transition of current fragment so + // it doesn't exit with a weird transition + currentFragment(R.id.fragment_container)?.exitTransition = null + + //Hide Bottom Bar First, else Bottom Sheet doesn't collapse fully + setBottomBarVisibility(false) + if (getBottomSheetBehavior().state == BottomSheetBehavior.STATE_EXPANDED) { + collapsePanel() + } + + findNavController(R.id.fragment_container).navigate( + R.id.artistDetailsFragment, + bundleOf(EXTRA_ARTIST_ID to song.artistId) + ) + } +} + +fun goToAlbum(activity: Activity) { + if (activity !is MainActivity) return + val song = MusicPlayerRemote.currentSong + activity.apply { + currentFragment(R.id.fragment_container)?.exitTransition = null + + //Hide Bottom Bar First, else Bottom Sheet doesn't collapse fully + setBottomBarVisibility(false) + if (getBottomSheetBehavior().state == BottomSheetBehavior.STATE_EXPANDED) { + collapsePanel() + } + + findNavController(R.id.fragment_container).navigate( + R.id.albumDetailsFragment, + bundleOf(EXTRA_ALBUM_ID to song.albumId) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewCustomGridSizeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewCustomGridSizeFragment.kt index 749c82053..5a4723d59 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewCustomGridSizeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewCustomGridSizeFragment.kt @@ -14,12 +14,12 @@ */ package code.name.monkey.retromusic.fragments.base -import android.os.Bundle -import android.view.View -import androidx.annotation.LayoutRes +import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView +import androidx.transition.TransitionManager import code.name.monkey.retromusic.R import code.name.monkey.retromusic.util.RetroUtil +import com.google.android.material.transition.MaterialFade abstract class AbsRecyclerViewCustomGridSizeFragment, LM : RecyclerView.LayoutManager> : AbsRecyclerViewFragment() { @@ -86,6 +86,7 @@ abstract class AbsRecyclerViewCustomGridSizeFragment } else { saveGridSize(gridSize) } + recyclerView().isVisible = false invalidateLayoutManager() // only recreate the adapter and layout manager if the layout currentLayoutRes has changed if (oldLayoutRes != itemLayoutRes()) { @@ -93,26 +94,11 @@ abstract class AbsRecyclerViewCustomGridSizeFragment } else { setGridSize(gridSize) } - } - - protected fun notifyLayoutResChanged(@LayoutRes res: Int) { - this.currentLayoutRes = res - val recyclerView = recyclerView() - applyRecyclerViewPaddingForLayoutRes(recyclerView, currentLayoutRes) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - applyRecyclerViewPaddingForLayoutRes(recyclerView(), currentLayoutRes) - } - - private fun applyRecyclerViewPaddingForLayoutRes(recyclerView: RecyclerView, res: Int) { - val padding: Int = if (res == R.layout.item_grid) { - (resources.displayMetrics.density * 2).toInt() - } else { - 0 + val transition = MaterialFade().apply { + addTarget(recyclerView()) } - //recyclerView.setPadding(padding, padding, padding, padding) + TransitionManager.beginDelayedTransition(getContainer(), transition) + recyclerView().isVisible = true } protected abstract fun setGridSize(gridSize: Int) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt index b895d831d..87227dc9c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt @@ -15,80 +15,73 @@ package code.name.monkey.retromusic.fragments.base import android.os.Bundle -import android.view.Menu -import android.view.MenuInflater -import android.view.MenuItem -import android.view.View +import android.view.* import androidx.annotation.NonNull import androidx.annotation.StringRes -import androidx.core.text.HtmlCompat +import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.view.doOnPreDraw import androidx.core.view.updatePadding import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.RecyclerView -import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.ATHToolbarActivity import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentMainRecyclerBinding import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.util.DensityUtil import code.name.monkey.retromusic.util.ThemedFastScroller.create -import com.google.android.material.appbar.AppBarLayout -import kotlinx.android.synthetic.main.fragment_main_recycler.* +import com.google.android.material.transition.MaterialFadeThrough +import com.google.android.material.transition.MaterialSharedAxis import me.zhanghai.android.fastscroll.FastScroller import me.zhanghai.android.fastscroll.FastScrollerBuilder abstract class AbsRecyclerViewFragment, LM : RecyclerView.LayoutManager> : - AbsMainActivityFragment(R.layout.fragment_main_recycler), - AppBarLayout.OnOffsetChangedListener { - - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) - setHasOptionsMenu(true) - } + AbsMainActivityFragment(R.layout.fragment_main_recycler) { + private var _binding: FragmentMainRecyclerBinding? = null + private val binding get() = _binding!! protected var adapter: A? = null protected var layoutManager: LM? = null override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - + _binding = FragmentMainRecyclerBinding.bind(view) + enterTransition = MaterialFadeThrough() + exitTransition = MaterialFadeThrough() postponeEnterTransition() view.doOnPreDraw { startPostponedEnterTransition() } - mainActivity.setBottomBarVisibility(true) - mainActivity.setSupportActionBar(toolbar) + mainActivity.setSupportActionBar(binding.toolbar) mainActivity.supportActionBar?.title = null initLayoutManager() initAdapter() setUpRecyclerView() - setupTitle() + setupToolbar() } - private fun setupTitle() { - toolbar.setNavigationOnClickListener { + private fun setupToolbar() { + binding.toolbar.setNavigationOnClickListener { + exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true).addTarget(requireView()) + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) findNavController().navigate( R.id.searchFragment, null, navOptions ) } - val color = ThemeStore.accentColor(requireContext()) - val hexColor = String.format("#%06X", 0xFFFFFF and color) - val appName = HtmlCompat.fromHtml( - "Retro Music", - HtmlCompat.FROM_HTML_MODE_COMPACT - ) - appNameText.text = appName + val appName = resources.getString(titleRes) + binding.appNameText.text = appName } + abstract val titleRes: Int + private fun setUpRecyclerView() { - recyclerView.apply { + binding.recyclerView.apply { layoutManager = this@AbsRecyclerViewFragment.layoutManager adapter = this@AbsRecyclerViewFragment.adapter - val fastScroller = create(this) + create(this) } checkForPadding() } @@ -116,8 +109,8 @@ abstract class AbsRecyclerViewFragment, LM : Recycle } private fun checkIsEmpty() { - emptyText.setText(emptyMessage) - empty.visibility = if (adapter!!.itemCount == 0) View.VISIBLE else View.GONE + binding.emptyText.setText(emptyMessage) + binding.empty.visibility = if (adapter!!.itemCount == 0) View.VISIBLE else View.GONE } private fun checkForPadding() { @@ -125,10 +118,10 @@ abstract class AbsRecyclerViewFragment, LM : Recycle if (itemCount > 0 && MusicPlayerRemote.playingQueue.isNotEmpty()) { val height = DensityUtil.dip2px(requireContext(), 112f) - recyclerView.updatePadding(0, 0, 0, height) + binding.recyclerView.updatePadding(0, 0, 0, height) } else { val height = DensityUtil.dip2px(requireContext(), 56f) - recyclerView.updatePadding(0, 0, 0, height) + binding.recyclerView.updatePadding(0, 0, 0, height) } } @@ -141,15 +134,6 @@ abstract class AbsRecyclerViewFragment, LM : Recycle @NonNull protected abstract fun createAdapter(): A - override fun onOffsetChanged(p0: AppBarLayout?, i: Int) { - /*recyclerView.setPadding( - recyclerView.paddingLeft, - recyclerView.paddingTop, - recyclerView.paddingRight, - i - )*/ - } - override fun onQueueChanged() { super.onQueueChanged() checkForPadding() @@ -162,22 +146,31 @@ abstract class AbsRecyclerViewFragment, LM : Recycle protected fun invalidateLayoutManager() { initLayoutManager() - recyclerView.layoutManager = layoutManager + binding.recyclerView.layoutManager = layoutManager } protected fun invalidateAdapter() { initAdapter() checkIsEmpty() - recyclerView.adapter = adapter + binding.recyclerView.adapter = adapter } fun recyclerView(): RecyclerView { - return recyclerView + return binding.recyclerView + } + + fun getContainer(): CoordinatorLayout { + return binding.root + } + + fun scrollToTop() { + recyclerView().scrollToPosition(0) + binding.appBarLayout.setExpanded(true, true) } override fun onPrepareOptionsMenu(menu: Menu) { super.onPrepareOptionsMenu(menu) - ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), toolbar) + ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), binding.toolbar) } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { @@ -185,9 +178,9 @@ abstract class AbsRecyclerViewFragment, LM : Recycle inflater.inflate(R.menu.menu_main, menu) ToolbarContentTintHelper.handleOnCreateOptionsMenu( requireContext(), - toolbar, + binding.toolbar, menu, - ATHToolbarActivity.getToolbarBackgroundColor(toolbar) + ATHToolbarActivity.getToolbarBackgroundColor(binding.toolbar) ) } @@ -209,4 +202,9 @@ abstract class AbsRecyclerViewFragment, LM : Recycle } return super.onOptionsItemSelected(item) } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.java index 2f50fe112..d9803ac72 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.java @@ -14,13 +14,14 @@ package code.name.monkey.retromusic.fragments.folder; +import static code.name.monkey.appthemehelper.common.ATHToolbarActivity.getToolbarBackgroundColor; + import android.app.Dialog; import android.content.Context; import android.media.MediaScannerConnection; import android.os.Bundle; import android.os.Environment; import android.text.Html; -import android.text.Spanned; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -30,13 +31,11 @@ import android.view.ViewGroup; import android.view.ViewGroup.MarginLayoutParams; import android.webkit.MimeTypeMap; import android.widget.PopupMenu; -import android.widget.TextView; import android.widget.Toast; +import androidx.activity.OnBackPressedCallback; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.widget.Toolbar; -import androidx.core.text.HtmlCompat; import androidx.loader.app.LoaderManager; import androidx.loader.content.Loader; import androidx.navigation.Navigation; @@ -46,25 +45,36 @@ import androidx.recyclerview.widget.RecyclerView; import com.afollestad.materialcab.MaterialCab; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.transition.MaterialFadeThrough; +import com.google.android.material.transition.MaterialSharedAxis; import org.jetbrains.annotations.NotNull; +import java.io.BufferedReader; import java.io.File; import java.io.FileFilter; +import java.io.FileReader; import java.io.IOException; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; +import java.util.StringTokenizer; import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.util.ATHUtil; import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; +import code.name.monkey.retromusic.App; import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.adapter.SongFileAdapter; +import code.name.monkey.retromusic.adapter.Storage; +import code.name.monkey.retromusic.adapter.StorageAdapter; +import code.name.monkey.retromusic.adapter.StorageClickListener; +import code.name.monkey.retromusic.databinding.FragmentFolderBinding; import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment; import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.helper.menu.SongMenuHelper; @@ -76,6 +86,7 @@ import code.name.monkey.retromusic.misc.DialogAsyncTask; import code.name.monkey.retromusic.misc.UpdateToastMediaScannerCompletionListener; import code.name.monkey.retromusic.misc.WrappedAsyncTaskLoader; import code.name.monkey.retromusic.model.Song; +import code.name.monkey.retromusic.providers.BlacklistStore; import code.name.monkey.retromusic.util.DensityUtil; import code.name.monkey.retromusic.util.FileUtil; import code.name.monkey.retromusic.util.PreferenceUtil; @@ -85,15 +96,14 @@ import code.name.monkey.retromusic.views.BreadCrumbLayout; import code.name.monkey.retromusic.views.ScrollingViewOnApplyWindowInsetsListener; import me.zhanghai.android.fastscroll.FastScroller; -import static code.name.monkey.appthemehelper.common.ATHToolbarActivity.getToolbarBackgroundColor; - public class FoldersFragment extends AbsMainActivityFragment implements IMainActivityFragmentCallbacks, ICabHolder, BreadCrumbLayout.SelectionCallback, ICallbacks, - LoaderManager.LoaderCallbacks> { + LoaderManager.LoaderCallbacks>, StorageClickListener { + private FragmentFolderBinding binding; public static final String TAG = FoldersFragment.class.getSimpleName(); public static final FileFilter AUDIO_FILE_FILTER = file -> @@ -106,14 +116,9 @@ public class FoldersFragment extends AbsMainActivityFragment private static final String CRUMBS = "crumbs"; private static final int LOADER_ID = 5; private SongFileAdapter adapter; - private Toolbar toolbar; - private TextView appNameText; - private BreadCrumbLayout breadCrumbs; + private StorageAdapter storageAdapter; private MaterialCab cab; - private View coordinatorLayout; - private View empty; - private TextView emojiText; - private Comparator fileComparator = + private final Comparator fileComparator = (lhs, rhs) -> { if (lhs.isDirectory() && !rhs.isDirectory()) { return -1; @@ -123,7 +128,7 @@ public class FoldersFragment extends AbsMainActivityFragment return lhs.getName().compareToIgnoreCase(rhs.getName()); } }; - private RecyclerView recyclerView; + private final ArrayList storageItems = new ArrayList<>(); public FoldersFragment() { super(R.layout.fragment_folder); @@ -158,35 +163,43 @@ public class FoldersFragment extends AbsMainActivityFragment @Override public View onCreateView( @NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_folder, container, false); - initViews(view); - return view; + binding = FragmentFolderBinding.inflate(inflater, container, false); + return binding.getRoot(); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + setEnterTransition(new MaterialFadeThrough()); + setExitTransition(new MaterialFadeThrough()); getMainActivity().addMusicServiceEventListener(getLibraryViewModel()); - getMainActivity().setBottomBarVisibility(true); - getMainActivity().setSupportActionBar(toolbar); + getMainActivity().setSupportActionBar(binding.toolbar); getMainActivity().getSupportActionBar().setTitle(null); setStatusBarColorAuto(view); setUpAppbarColor(); setUpBreadCrumbs(); setUpRecyclerView(); + listRoots(); setUpAdapter(); setUpTitle(); + requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) { + @Override + public void handleOnBackPressed() { + if (!handleBackPress()) { + remove(); + requireActivity().onBackPressed(); + } + } + }); } private void setUpTitle() { - toolbar.setNavigationOnClickListener( - v -> Navigation.findNavController(v).navigate(R.id.searchFragment, null, getNavOptions())); - int color = ThemeStore.Companion.accentColor(requireContext()); - String hexColor = String.format("#%06X", 0xFFFFFF & color); - Spanned appName = - HtmlCompat.fromHtml( - "Retro Music", - HtmlCompat.FROM_HTML_MODE_COMPACT); - appNameText.setText(appName); + binding.toolbar.setNavigationOnClickListener( + v -> { + setExitTransition(new MaterialSharedAxis(MaterialSharedAxis.Z, true).setDuration(300)); + setReenterTransition(new MaterialSharedAxis(MaterialSharedAxis.Z, false).setDuration(300)); + Navigation.findNavController(v).navigate(R.id.searchFragment, null, getNavOptions()); + }); + binding.appNameText.setText(getResources().getString(R.string.folders)); } @Override @@ -194,12 +207,14 @@ public class FoldersFragment extends AbsMainActivityFragment super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); if (savedInstanceState == null) { + switchToFileAdapter(); setCrumb( new BreadCrumbLayout.Crumb( FileUtil.safeGetCanonicalFile(PreferenceUtil.INSTANCE.getStartDirectory())), true); + } else { - breadCrumbs.restoreFromStateWrapper(savedInstanceState.getParcelable(CRUMBS)); + binding.breadCrumbs.restoreFromStateWrapper(savedInstanceState.getParcelable(CRUMBS)); LoaderManager.getInstance(this).initLoader(LOADER_ID, null, this); } } @@ -213,8 +228,8 @@ public class FoldersFragment extends AbsMainActivityFragment @Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); - if (breadCrumbs != null) { - outState.putParcelable(CRUMBS, breadCrumbs.getStateWrapper()); + if (binding != null) { + outState.putParcelable(CRUMBS, binding.breadCrumbs.getStateWrapper()); } } @@ -224,8 +239,8 @@ public class FoldersFragment extends AbsMainActivityFragment cab.finish(); return true; } - if (breadCrumbs != null && breadCrumbs.popHistory()) { - setCrumb(breadCrumbs.lastHistory(), false); + if (binding.breadCrumbs.popHistory()) { + setCrumb(binding.breadCrumbs.lastHistory(), false); return true; } return false; @@ -268,6 +283,9 @@ public class FoldersFragment extends AbsMainActivityFragment new ListSongsAsyncTask.LoadingInfo( toList(file), AUDIO_FILE_FILTER, getFileComparator())); return true; + case R.id.action_add_to_blacklist: + BlacklistStore.getInstance(App.Companion.getContext()).addPath(file); + return true; case R.id.action_set_as_start_directory: PreferenceUtil.INSTANCE.setStartDirectory(file); Toast.makeText( @@ -347,7 +365,7 @@ public class FoldersFragment extends AbsMainActivityFragment } else { final File finalFile = file1; Snackbar.make( - coordinatorLayout, + binding.coordinatorLayout, Html.fromHtml( String.format( getString(R.string.not_listed_in_media_store), file1.getName())), @@ -376,7 +394,7 @@ public class FoldersFragment extends AbsMainActivityFragment @Override public void onLoaderReset(@NonNull Loader> loader) { - updateAdapter(new LinkedList()); + updateAdapter(new LinkedList<>()); } @Override @@ -393,7 +411,7 @@ public class FoldersFragment extends AbsMainActivityFragment @Override public void onPrepareOptionsMenu(@NonNull Menu menu) { super.onPrepareOptionsMenu(menu); - ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), toolbar); + ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), binding.toolbar); } @Override @@ -407,7 +425,7 @@ public class FoldersFragment extends AbsMainActivityFragment menu.removeItem(R.id.action_layout_type); menu.removeItem(R.id.action_sort_order); ToolbarContentTintHelper.handleOnCreateOptionsMenu( - requireContext(), toolbar, menu, getToolbarBackgroundColor(toolbar)); + requireContext(), binding.toolbar, menu, getToolbarBackgroundColor(binding.toolbar)); } @Override @@ -462,26 +480,32 @@ public class FoldersFragment extends AbsMainActivityFragment private void checkForPadding() { final int count = adapter.getItemCount(); - final MarginLayoutParams params = (MarginLayoutParams) coordinatorLayout.getLayoutParams(); - params.bottomMargin = - count > 0 && !MusicPlayerRemote.getPlayingQueue().isEmpty() - ? DensityUtil.dip2px(requireContext(), 104f) - : DensityUtil.dip2px(requireContext(), 54f); + if (binding != null) { + final MarginLayoutParams params = (MarginLayoutParams) binding.coordinatorLayout.getLayoutParams(); + params.bottomMargin = + count > 0 && !MusicPlayerRemote.getPlayingQueue().isEmpty() + ? DensityUtil.dip2px(requireContext(), 104f) + : DensityUtil.dip2px(requireContext(), 54f); + binding.coordinatorLayout.setLayoutParams(params); + } } private void checkIsEmpty() { - emojiText.setText(getEmojiByUnicode(0x1F631)); - if (empty != null) { - empty.setVisibility( + if (binding != null) { + binding.emptyEmoji.setText(getEmojiByUnicode(0x1F631)); + binding.empty.setVisibility( adapter == null || adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE); } } @Nullable private BreadCrumbLayout.Crumb getActiveCrumb() { - return breadCrumbs != null && breadCrumbs.size() > 0 - ? breadCrumbs.getCrumb(breadCrumbs.getActiveIndex()) - : null; + if (binding != null) { + return binding.breadCrumbs.size() > 0 + ? binding.breadCrumbs.getCrumb(binding.breadCrumbs.getActiveIndex()) + : null; + } + return null; } private String getEmojiByUnicode(int unicode) { @@ -492,21 +516,11 @@ public class FoldersFragment extends AbsMainActivityFragment return fileComparator; } - private void initViews(View view) { - coordinatorLayout = view.findViewById(R.id.coordinatorLayout); - recyclerView = view.findViewById(R.id.recyclerView); - breadCrumbs = view.findViewById(R.id.breadCrumbs); - empty = view.findViewById(android.R.id.empty); - emojiText = view.findViewById(R.id.emptyEmoji); - toolbar = view.findViewById(R.id.toolbar); - appNameText = view.findViewById(R.id.appNameText); - } - private void saveScrollPosition() { BreadCrumbLayout.Crumb crumb = getActiveCrumb(); if (crumb != null) { crumb.setScrollPosition( - ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition()); + ((LinearLayoutManager) binding.recyclerView.getLayoutManager()).findFirstVisibleItemPosition()); } } @@ -529,46 +543,39 @@ public class FoldersFragment extends AbsMainActivityFragment if (crumb == null) { return; } - saveScrollPosition(); - breadCrumbs.setActiveOrAdd(crumb, false); - if (addToHistory) { - breadCrumbs.addHistory(crumb); + String path = crumb.getFile().getPath(); + if (path.equals("/") || path.equals("/storage") || path.equals("/storage/emulated")) { + switchToStorageAdapter(); + } else { + saveScrollPosition(); + binding.breadCrumbs.setActiveOrAdd(crumb, false); + if (addToHistory) { + binding.breadCrumbs.addHistory(crumb); + } + LoaderManager.getInstance(this).restartLoader(LOADER_ID, null, this); } - LoaderManager.getInstance(this).restartLoader(LOADER_ID, null, this); } private void setUpAdapter() { - adapter = - new SongFileAdapter(getMainActivity(), new LinkedList<>(), R.layout.item_list, this, this); - adapter.registerAdapterDataObserver( - new RecyclerView.AdapterDataObserver() { - @Override - public void onChanged() { - super.onChanged(); - checkIsEmpty(); - checkForPadding(); - } - }); - recyclerView.setAdapter(adapter); - checkIsEmpty(); + switchToFileAdapter(); } private void setUpAppbarColor() { - breadCrumbs.setActivatedContentColor( + binding.breadCrumbs.setActivatedContentColor( ATHUtil.INSTANCE.resolveColor(requireContext(), android.R.attr.textColorPrimary)); - breadCrumbs.setDeactivatedContentColor( + binding.breadCrumbs.setDeactivatedContentColor( ATHUtil.INSTANCE.resolveColor(requireContext(), android.R.attr.textColorSecondary)); } private void setUpBreadCrumbs() { - breadCrumbs.setCallback(this); + binding.breadCrumbs.setCallback(this); } private void setUpRecyclerView() { - recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); - FastScroller fastScroller = ThemedFastScroller.INSTANCE.create(recyclerView); - recyclerView.setOnApplyWindowInsetsListener( - new ScrollingViewOnApplyWindowInsetsListener(recyclerView, fastScroller)); + binding.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + FastScroller fastScroller = ThemedFastScroller.INSTANCE.create(binding.recyclerView); + binding.recyclerView.setOnApplyWindowInsetsListener( + new ScrollingViewOnApplyWindowInsetsListener(binding.recyclerView, fastScroller)); } private ArrayList toList(File file) { @@ -580,16 +587,22 @@ public class FoldersFragment extends AbsMainActivityFragment private void updateAdapter(@NonNull List files) { adapter.swapDataSet(files); BreadCrumbLayout.Crumb crumb = getActiveCrumb(); - if (crumb != null && recyclerView != null) { - ((LinearLayoutManager) recyclerView.getLayoutManager()) + if (crumb != null) { + ((LinearLayoutManager) binding.recyclerView.getLayoutManager()) .scrollToPositionWithOffset(crumb.getScrollPosition(), 0); } } + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } + public static class ListPathsAsyncTask extends ListingFilesDialogAsyncTask { - private WeakReference onPathsListedCallbackWeakReference; + private final WeakReference onPathsListedCallbackWeakReference; public ListPathsAsyncTask(Context context, OnPathsListedCallback callback) { super(context); @@ -679,7 +692,7 @@ public class FoldersFragment extends AbsMainActivityFragment private static class AsyncFileLoader extends WrappedAsyncTaskLoader> { - private WeakReference fragmentWeakReference; + private final WeakReference fragmentWeakReference; AsyncFileLoader(FoldersFragment foldersFragment) { super(foldersFragment.requireActivity()); @@ -710,8 +723,8 @@ public class FoldersFragment extends AbsMainActivityFragment extends ListingFilesDialogAsyncTask> { private final Object extra; - private WeakReference callbackWeakReference; - private WeakReference contextWeakReference; + private final WeakReference callbackWeakReference; + private final WeakReference contextWeakReference; ListSongsAsyncTask(Context context, Object extra, OnSongsListedCallback callback) { super(context); @@ -823,4 +836,107 @@ public class FoldersFragment extends AbsMainActivityFragment .create(); } } + + // https://github.com/DrKLO/Telegram/blob/ab221dafadbc17459d78d9ea3e643ae18e934b16/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertDocumentLayout.java#L939 + private void listRoots() { + storageItems.clear(); + HashSet paths = new HashSet<>(); + String defaultPath = Environment.getExternalStorageDirectory().getPath(); + String defaultPathState = Environment.getExternalStorageState(); + if (defaultPathState.equals(Environment.MEDIA_MOUNTED) || defaultPathState.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) { + Storage ext = new Storage(); + if (Environment.isExternalStorageRemovable()) { + ext.title = "SD Card"; + } else { + ext.title = "Internal Storage"; + } + ext.file = Environment.getExternalStorageDirectory(); + storageItems.add(ext); + paths.add(defaultPath); + } + + BufferedReader bufferedReader = null; + try { + bufferedReader = new BufferedReader(new FileReader("/proc/mounts")); + String line; + while ((line = bufferedReader.readLine()) != null) { + if (line.contains("vfat") || line.contains("/mnt")) { + StringTokenizer tokens = new StringTokenizer(line, " "); + tokens.nextToken(); + String path = tokens.nextToken(); + if (paths.contains(path)) { + continue; + } + if (line.contains("/dev/block/vold")) { + if (!line.contains("/mnt/secure") && !line.contains("/mnt/asec") && !line.contains("/mnt/obb") && !line.contains("/dev/mapper") && !line.contains("tmpfs")) { + if (!new File(path).isDirectory()) { + int index = path.lastIndexOf('/'); + if (index != -1) { + String newPath = "/storage/" + path.substring(index + 1); + if (new File(newPath).isDirectory()) { + path = newPath; + } + } + } + paths.add(path); + try { + Storage item = new Storage(); + if (path.toLowerCase().contains("sd")) { + item.title = "SD Card"; + } else { + item.title = "External Storage"; + } + item.file = new File(path); + storageItems.add(item); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (bufferedReader != null) { + try { + bufferedReader.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + @Override + public void onStorageClicked(@NonNull Storage storage) { + switchToFileAdapter(); + setCrumb( + new BreadCrumbLayout.Crumb( + FileUtil.safeGetCanonicalFile(storage.file)), + true); + } + + public void switchToFileAdapter() { + adapter = + new SongFileAdapter(getMainActivity(), new LinkedList<>(), R.layout.item_list, this, this); + adapter.registerAdapterDataObserver( + new RecyclerView.AdapterDataObserver() { + @Override + public void onChanged() { + super.onChanged(); + checkIsEmpty(); + checkForPadding(); + } + }); + binding.recyclerView.setAdapter(adapter); + checkIsEmpty(); + } + + public void switchToStorageAdapter() { + listRoots(); + storageAdapter = new StorageAdapter(storageItems, this); + binding.recyclerView.setAdapter(storageAdapter); + binding.breadCrumbs.clearCrumbs(); + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsFragment.kt index e226ceed4..567df41f8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsFragment.kt @@ -14,28 +14,26 @@ */ package code.name.monkey.retromusic.fragments.genres -import android.graphics.Color import android.os.Bundle import android.view.Menu import android.view.MenuInflater import android.view.MenuItem import android.view.View import androidx.core.view.ViewCompat +import androidx.core.view.doOnPreDraw import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.song.SongAdapter +import code.name.monkey.retromusic.databinding.FragmentPlaylistDetailBinding import code.name.monkey.retromusic.extensions.dipToPix -import code.name.monkey.retromusic.extensions.resolveColor import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.helper.menu.GenreMenuHelper import code.name.monkey.retromusic.model.Genre import code.name.monkey.retromusic.model.Song -import com.google.android.material.transition.MaterialArcMotion -import com.google.android.material.transition.MaterialContainerTransform -import kotlinx.android.synthetic.main.fragment_playlist_detail.* +import com.google.android.material.transition.MaterialSharedAxis import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.core.parameter.parametersOf import java.util.* @@ -47,37 +45,33 @@ class GenreDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playlist_ } private lateinit var genre: Genre private lateinit var songAdapter: SongAdapter - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - sharedElementEnterTransition = MaterialContainerTransform().apply { - drawingViewId = R.id.fragment_container - duration = 300L - scrimColor = Color.TRANSPARENT - setAllContainerColors(requireContext().resolveColor(R.attr.colorSurface)) - setPathMotion(MaterialArcMotion()) - } - } + private var _binding: FragmentPlaylistDetailBinding? = null + private val binding get() = _binding!! override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true).addTarget(view) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) + _binding = FragmentPlaylistDetailBinding.bind(view) setHasOptionsMenu(true) - mainActivity.setBottomBarVisibility(false) mainActivity.addMusicServiceEventListener(detailsViewModel) - mainActivity.setSupportActionBar(toolbar) - ViewCompat.setTransitionName(container, "genre") + mainActivity.setSupportActionBar(binding.toolbar) + ViewCompat.setTransitionName(binding.container, "genre") genre = arguments.extraGenre - toolbar?.title = arguments.extraGenre.name + binding.toolbar.title = arguments.extraGenre.name setupRecyclerView() detailsViewModel.getSongs().observe(viewLifecycleOwner, { songs(it) }) - + postponeEnterTransition() + view.doOnPreDraw { + startPostponedEnterTransition() + } } private fun setupRecyclerView() { songAdapter = SongAdapter(requireActivity(), ArrayList(), R.layout.item_list, null) - recyclerView.apply { + binding.recyclerView.apply { itemAnimator = DefaultItemAnimator() layoutManager = LinearLayoutManager(requireContext()) adapter = songAdapter @@ -91,7 +85,7 @@ class GenreDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playlist_ } fun songs(songs: List) { - progressIndicator.hide() + binding.progressIndicator.hide() if (songs.isNotEmpty()) songAdapter.swapDataSet(songs) else songAdapter.swapDataSet(emptyList()) } @@ -102,13 +96,13 @@ class GenreDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playlist_ private fun checkIsEmpty() { checkForPadding() - emptyEmoji.text = getEmojiByUnicode(0x1F631) - empty?.visibility = if (songAdapter.itemCount == 0) View.VISIBLE else View.GONE + binding.emptyEmoji.text = getEmojiByUnicode(0x1F631) + binding.empty.visibility = if (songAdapter.itemCount == 0) View.VISIBLE else View.GONE } private fun checkForPadding() { val height = dipToPix(52f).toInt() - recyclerView.setPadding(0, 0, 0, height) + binding.recyclerView.setPadding(0, 0, 0, height) } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { @@ -119,4 +113,9 @@ class GenreDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playlist_ override fun onOptionsItemSelected(item: MenuItem): Boolean { return GenreMenuHelper.handleMenuClick(requireActivity(), genre, item) } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsViewModel.kt index 43f941df8..113ec34cf 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenreDetailsViewModel.kt @@ -60,4 +60,5 @@ class GenreDetailsViewModel( override fun onPlayStateChanged() {} override fun onRepeatModeChanged() {} override fun onShuffleModeChanged() {} + override fun onFavoriteStateChanged() {} } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt index 813859aa6..de1cb4d62 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/genres/GenresFragment.kt @@ -15,25 +15,31 @@ package code.name.monkey.retromusic.fragments.genres import android.os.Bundle +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem import android.view.View import androidx.core.os.bundleOf -import androidx.lifecycle.Observer -import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.findNavController +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import code.name.monkey.retromusic.EXTRA_GENRE import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.GenreAdapter +import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewFragment import code.name.monkey.retromusic.interfaces.IGenreClickListener import code.name.monkey.retromusic.model.Genre -import com.google.android.material.transition.MaterialElevationScale +import code.name.monkey.retromusic.util.RetroUtil +import com.google.android.gms.cast.framework.CastButtonFactory +import com.google.android.material.transition.MaterialSharedAxis -class GenresFragment : AbsRecyclerViewFragment(), +class +GenresFragment : AbsRecyclerViewFragment(), IGenreClickListener { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - libraryViewModel.getGenre().observe(viewLifecycleOwner, Observer { + libraryViewModel.getGenre().observe(viewLifecycleOwner, { if (it.isNotEmpty()) adapter?.swapDataSet(it) else @@ -42,14 +48,37 @@ class GenresFragment : AbsRecyclerViewFragmentMusic", HtmlCompat.FROM_HTML_MODE_COMPACT ) - appNameText.text = appName + binding.appNameText.text = appName } private fun loadProfile() { - bannerImage?.let { - ProfileBannerGlideRequest.Builder.from( - Glide.with(requireContext()), - ProfileBannerGlideRequest.getBannerModel() - ).build().into(it) + binding.bannerImage?.let { + GlideApp.with(requireContext()) + .asBitmap() + .profileBannerOptions(RetroGlideExtension.getBannerModel()) + .load(RetroGlideExtension.getBannerModel()) + .into(it) } - UserProfileGlideRequest.Builder.from( - Glide.with(requireActivity()), - UserProfileGlideRequest.getUserModel() - ).build().into(userImage) + GlideApp.with(requireActivity()).asBitmap() + .userProfileOptions(RetroGlideExtension.getUserModel()) + .load(RetroGlideExtension.getUserModel()) + .into(binding.userImage) } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { @@ -162,10 +169,31 @@ class HomeFragment : menu.findItem(R.id.action_settings).setShowAsAction(SHOW_AS_ACTION_IF_ROOM) ToolbarContentTintHelper.handleOnCreateOptionsMenu( requireContext(), - toolbar, + binding.toolbar, menu, - ATHToolbarActivity.getToolbarBackgroundColor(toolbar) + ATHToolbarActivity.getToolbarBackgroundColor(binding.toolbar) ) + //Setting up cast button + CastButtonFactory.setUpMediaRouteButton(requireContext(), menu, R.id.action_cast) + } + + fun scrollToTop() { + binding.container.scrollTo(0, 0) + binding.appBarLayout.setExpanded(true) + } + + fun setSharedAxisXTransitions() { + exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, true).apply { + addTarget(binding.root) + } + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) + } + + private fun setSharedAxisYTransitions() { + exitTransition = MaterialSharedAxis(MaterialSharedAxis.Y, true).apply { + addTarget(binding.root) + } + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Y, false) } companion object { @@ -199,6 +227,16 @@ class HomeFragment : override fun onPrepareOptionsMenu(menu: Menu) { super.onPrepareOptionsMenu(menu) - ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), toolbar) + ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), binding.toolbar) + } + + override fun onResume() { + super.onResume() + libraryViewModel.fetchHomeSections() + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/library/LibraryFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/library/LibraryFragment.kt index 753a321bc..a9d4af026 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/library/LibraryFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/library/LibraryFragment.kt @@ -27,24 +27,32 @@ import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.ATHToolbarActivity.getToolbarBackgroundColor import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentLibraryBinding import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.model.CategoryInfo -import code.name.monkey.retromusic.state.NowPlayingPanelState import code.name.monkey.retromusic.util.PreferenceUtil -import kotlinx.android.synthetic.main.fragment_library.* +import com.google.android.gms.cast.framework.CastButtonFactory class LibraryFragment : AbsMainActivityFragment(R.layout.fragment_library) { + private var _binding: FragmentLibraryBinding? = null + private val binding get() = _binding!! + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = FragmentLibraryBinding.bind(view) + } + override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) setHasOptionsMenu(true) mainActivity.setBottomBarVisibility(true) - mainActivity.setSupportActionBar(toolbar) + mainActivity.setSupportActionBar(binding.toolbar) mainActivity.supportActionBar?.title = null - toolbar.setNavigationOnClickListener { + binding.toolbar.setNavigationOnClickListener { findNavController().navigate( R.id.searchFragment, null, @@ -62,7 +70,7 @@ class LibraryFragment : AbsMainActivityFragment(R.layout.fragment_library) { "Retro Music", HtmlCompat.FROM_HTML_MODE_COMPACT ) - appNameText.text = appName + binding.appNameText.text = appName } private fun setupNavigationController() { @@ -73,18 +81,18 @@ class LibraryFragment : AbsMainActivityFragment(R.layout.fragment_library) { val categoryInfo: CategoryInfo = PreferenceUtil.libraryCategory.first { it.visible } if (categoryInfo.visible) { - navGraph.startDestination = categoryInfo.category.id + navGraph.setStartDestination(categoryInfo.category.id) } navController.graph = navGraph NavigationUI.setupWithNavController(mainActivity.getBottomNavigationView(), navController) navController.addOnDestinationChangedListener { _, _, _ -> - appBarLayout.setExpanded(true, true) + binding.appBarLayout.setExpanded(true, true) } } override fun onPrepareOptionsMenu(menu: Menu) { super.onPrepareOptionsMenu(menu) - ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), toolbar) + ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), binding.toolbar) } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { @@ -92,10 +100,12 @@ class LibraryFragment : AbsMainActivityFragment(R.layout.fragment_library) { inflater.inflate(R.menu.menu_main, menu) ToolbarContentTintHelper.handleOnCreateOptionsMenu( requireContext(), - toolbar, + binding.toolbar, menu, - getToolbarBackgroundColor(toolbar) + getToolbarBackgroundColor(binding.toolbar) ) + //Setting up cast button + CastButtonFactory.setUpMediaRouteButton(requireContext(), menu, R.id.action_cast) } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -116,4 +126,9 @@ class LibraryFragment : AbsMainActivityFragment(R.layout.fragment_library) { } return super.onOptionsItemSelected(item) } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt index 15a962c86..9249fcb74 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt @@ -14,26 +14,53 @@ */ package code.name.monkey.retromusic.fragments.player +import android.content.SharedPreferences import android.os.Bundle +import android.text.TextUtils import android.view.View +import android.widget.FrameLayout +import android.widget.TextView +import androidx.core.view.isVisible +import androidx.lifecycle.lifecycleScope +import androidx.preference.PreferenceManager import androidx.viewpager.widget.ViewPager import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.SHOW_LYRICS import code.name.monkey.retromusic.adapter.album.AlbumCoverPagerAdapter import code.name.monkey.retromusic.adapter.album.AlbumCoverPagerAdapter.AlbumCoverFragment +import code.name.monkey.retromusic.databinding.FragmentPlayerAlbumCoverBinding import code.name.monkey.retromusic.fragments.NowPlayingScreen.* import code.name.monkey.retromusic.fragments.base.AbsMusicServiceFragment +import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote +import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper +import code.name.monkey.retromusic.model.lyrics.AbsSynchronizedLyrics +import code.name.monkey.retromusic.model.lyrics.Lyrics import code.name.monkey.retromusic.transform.CarousalPagerTransformer import code.name.monkey.retromusic.transform.ParallaxPagerTransformer +import code.name.monkey.retromusic.util.LyricUtil +import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_player_album_cover.* +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import org.jaudiotagger.audio.AudioFileIO +import org.jaudiotagger.audio.exceptions.CannotReadException +import org.jaudiotagger.tag.FieldKey +import java.io.File +import java.io.FileNotFoundException class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_player_album_cover), - ViewPager.OnPageChangeListener { + ViewPager.OnPageChangeListener, MusicProgressViewUpdateHelper.Callback, + SharedPreferences.OnSharedPreferenceChangeListener { + private var _binding: FragmentPlayerAlbumCoverBinding? = null + private val binding get() = _binding!! private var callbacks: Callbacks? = null private var currentPosition: Int = 0 + val viewPager get() = binding.viewPager + private val colorReceiver = object : AlbumCoverFragment.ColorReceiver { override fun onColorReady(color: MediaNotificationProcessor, request: Int) { if (currentPosition == request) { @@ -41,64 +68,221 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe } } } + private var progressViewUpdateHelper: MusicProgressViewUpdateHelper? = null + + private val lyricsLayout: FrameLayout get() = binding.playerLyrics + private val lyricsLine1: TextView get() = binding.playerLyricsLine1 + private val lyricsLine2: TextView get() = binding.playerLyricsLine2 + + var lyrics: Lyrics? = null fun removeSlideEffect() { val transformer = ParallaxPagerTransformer(R.id.player_image) transformer.setSpeed(0.3f) } + private fun updateLyrics() { + lyrics = null + lifecycleScope.launch(Dispatchers.IO) { + val song = MusicPlayerRemote.currentSong + val lyrics = try { + var lrcFile: File? = null + if (LyricUtil.isLrcOriginalFileExist(song.data)) { + lrcFile = LyricUtil.getLocalLyricOriginalFile(song.data) + } else if (LyricUtil.isLrcFileExist(song.title, song.artistName)) { + lrcFile = LyricUtil.getLocalLyricFile(song.title, song.artistName) + } + val data: String = LyricUtil.getStringFromLrc(lrcFile) + if (!TextUtils.isEmpty(data)) { + Lyrics.parse(song, data) + } else { + // Get Embedded Lyrics and check if they are Synchronized + val embeddedLyrics = try{ + AudioFileIO.read(File(song.data)).tagOrCreateDefault.getFirst(FieldKey.LYRICS) + } catch(e: Exception){ + null + } + if (AbsSynchronizedLyrics.isSynchronized(embeddedLyrics)) { + Lyrics.parse(song, embeddedLyrics) + } else { + null + } + } + } catch (err: FileNotFoundException) { + null + } catch (e: CannotReadException){ + null + } + withContext(Dispatchers.Main) { + this@PlayerAlbumCoverFragment.lyrics = lyrics + } + } + } + + override fun onUpdateProgressViews(progress: Int, total: Int) { + if (_binding == null) return + + if (!isLyricsLayoutVisible()) { + hideLyricsLayout() + return + } + + if (lyrics !is AbsSynchronizedLyrics) return + val synchronizedLyrics = lyrics as AbsSynchronizedLyrics + + lyricsLayout.visibility = View.VISIBLE + lyricsLayout.alpha = 1f + + val oldLine = lyricsLine2.text.toString() + val line = synchronizedLyrics.getLine(progress) + + if (oldLine != line || oldLine.isEmpty()) { + lyricsLine1.text = oldLine + lyricsLine2.text = line + + lyricsLine1.visibility = View.VISIBLE + lyricsLine2.visibility = View.VISIBLE + + lyricsLine2.measure( + View.MeasureSpec.makeMeasureSpec( + lyricsLine2.measuredWidth, + View.MeasureSpec.EXACTLY + ), + View.MeasureSpec.UNSPECIFIED + ) + val h: Float = lyricsLine2.measuredHeight.toFloat() + + lyricsLine1.alpha = 1f + lyricsLine1.translationY = 0f + lyricsLine1.animate().alpha(0f).translationY(-h).duration = + AbsPlayerFragment.VISIBILITY_ANIM_DURATION + + lyricsLine2.alpha = 0f + lyricsLine2.translationY = h + lyricsLine2.animate().alpha(1f).translationY(0f).duration = + AbsPlayerFragment.VISIBILITY_ANIM_DURATION + } + } + + private fun isLyricsLayoutVisible(): Boolean { + return lyrics != null && lyrics!!.isSynchronized && lyrics!!.isValid + } + + private fun hideLyricsLayout() { + lyricsLayout.animate().alpha(0f).setDuration(AbsPlayerFragment.VISIBILITY_ANIM_DURATION) + .withEndAction { + if (_binding == null) return@withEndAction + lyricsLayout.visibility = View.GONE + lyricsLine1.text = null + lyricsLine2.text = null + } + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - viewPager.addOnPageChangeListener(this) + _binding = FragmentPlayerAlbumCoverBinding.bind(view) + binding.viewPager.addOnPageChangeListener(this) val nps = PreferenceUtil.nowPlayingScreen val metrics = resources.displayMetrics val ratio = metrics.heightPixels.toFloat() / metrics.widthPixels.toFloat() if (nps == Full || nps == Classic || nps == Fit || nps == Gradient) { - viewPager.offscreenPageLimit = 2 + binding.viewPager.offscreenPageLimit = 2 } else if (PreferenceUtil.isCarouselEffect) { - viewPager.clipToPadding = false + binding.viewPager.clipToPadding = false val padding = if (ratio >= 1.777f) { 40 } else { 100 } - viewPager.setPadding(padding, 0, padding, 0) - viewPager.pageMargin = 0 - viewPager.setPageTransformer(false, CarousalPagerTransformer(requireContext())) + binding.viewPager.setPadding(padding, 0, padding, 0) + binding.viewPager.pageMargin = 0 + binding.viewPager.setPageTransformer(false, CarousalPagerTransformer(requireContext())) } else { - viewPager.offscreenPageLimit = 2 - viewPager.setPageTransformer( + binding.viewPager.offscreenPageLimit = 2 + binding.viewPager.setPageTransformer( true, PreferenceUtil.albumCoverTransform ) } + progressViewUpdateHelper = MusicProgressViewUpdateHelper(this, 500, 1000) + // Don't show lyrics container for below conditions + if (!(nps == Circle || nps == Peak || nps == Tiny || !PreferenceUtil.showLyrics)) { + progressViewUpdateHelper?.start() + } + // Go to lyrics activity when clicked lyrics + binding.playerLyricsLine2.setOnClickListener { + NavigationUtil.goToLyrics(requireActivity()) + } + } + + override fun onResume() { + super.onResume() + val nps = PreferenceUtil.nowPlayingScreen + // Don't show lyrics container for below conditions + if (nps == Circle || nps == Peak || nps == Tiny || !PreferenceUtil.showLyrics) { + lyricsLayout.isVisible = false + progressViewUpdateHelper?.stop() + } else { + lyricsLayout.isVisible = true + progressViewUpdateHelper?.start() + } + PreferenceManager.getDefaultSharedPreferences(requireContext()) + .registerOnSharedPreferenceChangeListener(this) } override fun onDestroyView() { super.onDestroyView() - viewPager.removeOnPageChangeListener(this) + PreferenceManager.getDefaultSharedPreferences(requireContext()) + .unregisterOnSharedPreferenceChangeListener(this) + binding.viewPager.removeOnPageChangeListener(this) + progressViewUpdateHelper?.stop() + _binding = null } override fun onServiceConnected() { updatePlayingQueue() + updateLyrics() } override fun onPlayingMetaChanged() { - viewPager.currentItem = MusicPlayerRemote.position + binding.viewPager.currentItem = MusicPlayerRemote.position + updateLyrics() } override fun onQueueChanged() { updatePlayingQueue() } + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) { + if (key == SHOW_LYRICS) { + if (sharedPreferences.getBoolean(key, false)) { + progressViewUpdateHelper?.start() + lyricsLayout.animate().alpha(1f).duration = + AbsPlayerFragment.VISIBILITY_ANIM_DURATION + binding.playerLyrics.isVisible = true + } else { + progressViewUpdateHelper?.stop() + lyricsLayout.animate().alpha(0f) + .setDuration(AbsPlayerFragment.VISIBILITY_ANIM_DURATION) + .withEndAction { + if (_binding != null) { + binding.playerLyrics.isVisible = false + lyricsLine1.text = null + lyricsLine2.text = null + } + } + } + } + } + private fun updatePlayingQueue() { - viewPager.apply { + binding.viewPager.apply { adapter = AlbumCoverPagerAdapter(childFragmentManager, MusicPlayerRemote.playingQueue) - viewPager.adapter!!.notifyDataSetChanged() - viewPager.currentItem = MusicPlayerRemote.position + adapter!!.notifyDataSetChanged() + currentItem = MusicPlayerRemote.position onPageSelected(MusicPlayerRemote.position) } } @@ -108,8 +292,11 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe override fun onPageSelected(position: Int) { currentPosition = position - if (viewPager.adapter != null) { - (viewPager.adapter as AlbumCoverPagerAdapter).receiveColor(colorReceiver, position) + if (binding.viewPager.adapter != null) { + (binding.viewPager.adapter as AlbumCoverPagerAdapter).receiveColor( + colorReceiver, + position + ) } if (position != MusicPlayerRemote.position) { MusicPlayerRemote.playSongAt(position) @@ -119,6 +306,7 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe override fun onPageScrollStateChanged(state: Int) { } + private fun notifyColorChange(color: MediaNotificationProcessor) { callbacks?.onColorChanged(color) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt index 7978c0eae..34f8baf56 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptiveFragment.kt @@ -20,6 +20,7 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentAdaptivePlayerBinding import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.extensions.textColorPrimary import code.name.monkey.retromusic.extensions.textColorSecondary @@ -28,12 +29,13 @@ import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_adaptive_player.* class AdaptiveFragment : AbsPlayerFragment(R.layout.fragment_adaptive_player) { + private var _binding: FragmentAdaptivePlayerBinding? = null + private val binding get() = _binding!! override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } private var lastColor: Int = 0 @@ -41,6 +43,7 @@ class AdaptiveFragment : AbsPlayerFragment(R.layout.fragment_adaptive_player) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentAdaptivePlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() } @@ -57,7 +60,7 @@ class AdaptiveFragment : AbsPlayerFragment(R.layout.fragment_adaptive_player) { } private fun setUpPlayerToolbar() { - playerToolbar.apply { + binding.playerToolbar.apply { inflateMenu(R.menu.menu_player) setNavigationOnClickListener { requireActivity().onBackPressed() } ToolbarContentTintHelper.colorizeToolbar(this, surfaceColor(), requireActivity()) @@ -80,7 +83,7 @@ class AdaptiveFragment : AbsPlayerFragment(R.layout.fragment_adaptive_player) { private fun updateSong() { val song = MusicPlayerRemote.currentSong - playerToolbar.apply { + binding.playerToolbar.apply { title = song.title subtitle = song.artistName } @@ -102,7 +105,7 @@ class AdaptiveFragment : AbsPlayerFragment(R.layout.fragment_adaptive_player) { lastColor = color.primaryTextColor libraryViewModel.updateColor(color.primaryTextColor) ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal), requireActivity() ) @@ -119,6 +122,11 @@ class AdaptiveFragment : AbsPlayerFragment(R.layout.fragment_adaptive_player) { return false } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + override fun toolbarIconColor(): Int { return ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt index df01a4c23..a1196a03e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/adaptive/AdaptivePlaybackControlsFragment.kt @@ -28,6 +28,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentAdaptivePlayerPlaybackControlsBinding import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.ripAlpha @@ -41,7 +42,6 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_adaptive_player_playback_controls.* class AdaptivePlaybackControlsFragment : AbsPlayerControlsFragment(R.layout.fragment_adaptive_player_playback_controls) { @@ -49,6 +49,8 @@ class AdaptivePlaybackControlsFragment : private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 private var progressViewUpdateHelper: MusicProgressViewUpdateHelper? = null + private var _binding: FragmentAdaptivePlayerPlaybackControlsBinding? = null + private val binding get() = _binding!! override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -59,34 +61,31 @@ class AdaptivePlaybackControlsFragment : inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate( - R.layout.fragment_adaptive_player_playback_controls, - container, - false - ) + ): View { + _binding = FragmentAdaptivePlayerPlaybackControlsBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setUpMusicControllers() - playPauseButton.setOnClickListener { + binding.playPauseButton.setOnClickListener { if (MusicPlayerRemote.isPlaying) { MusicPlayerRemote.pauseSong() } else { MusicPlayerRemote.resumePlaying() } - showBonceAnimation(playPauseButton) + showBounceAnimation(binding.playPauseButton) } } private fun updateSong() { if (PreferenceUtil.isSongInfo) { - songInfo?.text = getSongInfo(MusicPlayerRemote.currentSong) - songInfo.show() + binding.songInfo.text = getSongInfo(MusicPlayerRemote.currentSong) + binding.songInfo.show() } else { - songInfo?.hide() + binding.songInfo.hide() } } @@ -153,12 +152,12 @@ class AdaptivePlaybackControlsFragment : }.ripAlpha() TintHelper.setTintAuto( - playPauseButton, + binding.playPauseButton, MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(colorFinal)), false ) - TintHelper.setTintAuto(playPauseButton, colorFinal, true) - progressSlider.applyColor(colorFinal) + TintHelper.setTintAuto(binding.playPauseButton, colorFinal, true) + binding.progressSlider.applyColor(colorFinal) volumeFragment?.setTintable(colorFinal) } @@ -167,14 +166,14 @@ class AdaptivePlaybackControlsFragment : } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) + binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } @@ -188,17 +187,17 @@ class AdaptivePlaybackControlsFragment : private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun show() { @@ -209,11 +208,11 @@ class AdaptivePlaybackControlsFragment : override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -221,31 +220,37 @@ class AdaptivePlaybackControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } override fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -259,14 +264,19 @@ class AdaptivePlaybackControlsFragment : } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt index 4cccb54c5..55f8e3225 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlaybackControlsFragment.kt @@ -28,9 +28,12 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentBlurPlayerPlaybackControlsBinding import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler @@ -39,11 +42,11 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_blur_player_playback_controls.* class BlurPlaybackControlsFragment : AbsPlayerControlsFragment(R.layout.fragment_blur_player_playback_controls) { - + private var _binding: FragmentBlurPlayerPlaybackControlsBinding? = null + private val binding get() = _binding!! private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 private var progressViewUpdateHelper: MusicProgressViewUpdateHelper? = null @@ -55,30 +58,37 @@ class BlurPlaybackControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentBlurPlayerPlaybackControlsBinding.bind(view) setUpMusicControllers() - playPauseButton.setOnClickListener { + binding.playPauseButton.setOnClickListener { if (MusicPlayerRemote.isPlaying) { MusicPlayerRemote.pauseSong() } else { MusicPlayerRemote.resumePlaying() } - showBonceAnimation() + showBounceAnimation() + } + binding.title.isSelected = true + binding.text.isSelected = true + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) } - title.isSelected = true - text.isSelected = true } private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = String.format("%s • %s", song.artistName, song.albumName) + binding.title.text = song.title + binding.text.text = String.format("%s • %s", song.artistName, song.albumName) if (PreferenceUtil.isSongInfo) { - songInfo.show() - songInfo?.text = getSongInfo(song) + binding.songInfo.show() + binding.songInfo.text = getSongInfo(song) } else { - songInfo?.hide() + binding.songInfo.hide() } } @@ -121,41 +131,41 @@ class BlurPlaybackControlsFragment : lastDisabledPlaybackControlsColor = ContextCompat.getColor(requireContext(), R.color.md_grey_500) - title.setTextColor(lastPlaybackControlsColor) + binding.title.setTextColor(lastPlaybackControlsColor) - songCurrentProgress.setTextColor(lastPlaybackControlsColor) - songTotalTime.setTextColor(lastPlaybackControlsColor) + binding.songCurrentProgress.setTextColor(lastPlaybackControlsColor) + binding.songTotalTime.setTextColor(lastPlaybackControlsColor) updateRepeatState() updateShuffleState() updatePrevNextColor() - text.setTextColor(lastDisabledPlaybackControlsColor) - songInfo.setTextColor(lastDisabledPlaybackControlsColor) + binding.text.setTextColor(lastPlaybackControlsColor) + binding.songInfo.setTextColor(lastDisabledPlaybackControlsColor) - TintHelper.setTintAuto(progressSlider, lastPlaybackControlsColor, false) + TintHelper.setTintAuto(binding.progressSlider, lastPlaybackControlsColor, false) volumeFragment?.setTintableColor(lastPlaybackControlsColor) setFabColor(lastPlaybackControlsColor) } private fun setFabColor(i: Int) { TintHelper.setTintAuto( - playPauseButton, + binding.playPauseButton, MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(i)), false ) - TintHelper.setTintAuto(playPauseButton, i, true) + TintHelper.setTintAuto(binding.playPauseButton, i, true) } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) + binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } @@ -169,26 +179,26 @@ class BlurPlaybackControlsFragment : private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -196,31 +206,37 @@ class BlurPlaybackControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } public override fun show() { - playPauseButton!!.animate() + binding.playPauseButton.animate() .scaleX(1f) .scaleY(1f) .rotation(360f) @@ -229,17 +245,15 @@ class BlurPlaybackControlsFragment : } public override fun hide() { - if (playPauseButton != null) { - playPauseButton!!.apply { - scaleX = 0f - scaleY = 0f - rotation = 0f - } + binding.playPauseButton.apply { + scaleX = 0f + scaleY = 0f + rotation = 0f } } - private fun showBonceAnimation() { - playPauseButton.apply { + private fun showBounceAnimation() { + binding.playPauseButton.apply { clearAnimation() scaleX = 0.9f scaleY = 0.9f @@ -262,7 +276,7 @@ class BlurPlaybackControlsFragment : } override fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -276,14 +290,19 @@ class BlurPlaybackControlsFragment : } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt index e08e441b2..a4f3df43b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/blur/BlurPlayerFragment.kt @@ -23,30 +23,35 @@ import androidx.preference.PreferenceManager import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.NEW_BLUR_AMOUNT import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentBlurBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.glide.BlurTransformation +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget -import code.name.monkey.retromusic.glide.SongGlideRequest import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.Glide -import kotlinx.android.synthetic.main.fragment_blur.* class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur), SharedPreferences.OnSharedPreferenceChangeListener { override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } private lateinit var playbackControlsFragment: BlurPlaybackControlsFragment private var lastColor: Int = 0 + private var _binding: FragmentBlurBinding? = null + private val binding get() = _binding!! + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentBlurBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() } @@ -60,7 +65,7 @@ class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur), } private fun setUpPlayerToolbar() { - playerToolbar.apply { + binding.playerToolbar.apply { inflateMenu(R.menu.menu_player) setNavigationOnClickListener { requireActivity().onBackPressed() } ToolbarContentTintHelper.colorizeToolbar(this, Color.WHITE, activity) @@ -75,7 +80,7 @@ class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur), playbackControlsFragment.setColor(color) lastColor = color.backgroundColor libraryViewModel.updateColor(color.backgroundColor) - ToolbarContentTintHelper.colorizeToolbar(playerToolbar, Color.WHITE, activity) + ToolbarContentTintHelper.colorizeToolbar(binding.playerToolbar, Color.WHITE, activity) } override fun toggleFavorite(song: Song) { @@ -105,20 +110,20 @@ class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur), private fun updateBlur() { val blurAmount = PreferenceManager.getDefaultSharedPreferences(requireContext()) .getInt(NEW_BLUR_AMOUNT, 25) - colorBackground.clearColorFilter() - SongGlideRequest.Builder.from(Glide.with(requireActivity()), MusicPlayerRemote.currentSong) - .checkIgnoreMediaStore(requireContext()) - .generatePalette(requireContext()).build() + binding.colorBackground.clearColorFilter() + GlideApp.with(requireActivity()).asBitmapPalette() + .songCoverOptions(MusicPlayerRemote.currentSong) + .load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong)) .dontAnimate() .transform( BlurTransformation.Builder(requireContext()) .blurRadius(blurAmount.toFloat()) .build() ) - .into(object : RetroMusicColoredTarget(colorBackground) { + .into(object : RetroMusicColoredTarget(binding.colorBackground) { override fun onColorReady(colors: MediaNotificationProcessor) { if (colors.backgroundColor == defaultFooterColor) { - colorBackground.setColorFilter(colors.backgroundColor) + binding.colorBackground.setColorFilter(colors.backgroundColor) } } }) @@ -144,6 +149,7 @@ class BlurPlayerFragment : AbsPlayerFragment(R.layout.fragment_blur), super.onDestroyView() PreferenceManager.getDefaultSharedPreferences(requireContext()) .unregisterOnSharedPreferenceChangeListener(this) + _binding = null } override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt index 01d586b6e..698bf5135 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardFragment.kt @@ -20,17 +20,17 @@ import android.view.View import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentCardPlayerBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_card_player.* class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) { override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } private var lastColor: Int = 0 @@ -38,6 +38,9 @@ class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) { get() = lastColor private lateinit var playbackControlsFragment: CardPlaybackControlsFragment + private var _binding: FragmentCardPlayerBinding? = null + private val binding get() = _binding!! + override fun onShow() { playbackControlsFragment.show() @@ -60,7 +63,7 @@ class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) { playbackControlsFragment.setColor(color) lastColor = color.primaryTextColor libraryViewModel.updateColor(color.primaryTextColor) - ToolbarContentTintHelper.colorizeToolbar(playerToolbar, Color.WHITE, activity) + ToolbarContentTintHelper.colorizeToolbar(binding.playerToolbar, Color.WHITE, activity) } override fun toggleFavorite(song: Song) { @@ -76,6 +79,7 @@ class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentCardPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() } @@ -90,11 +94,11 @@ class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) { } private fun setUpPlayerToolbar() { - playerToolbar.inflateMenu(R.menu.menu_player) - playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } - playerToolbar.setOnMenuItemClickListener(this) + binding.playerToolbar.inflateMenu(R.menu.menu_player) + binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } + binding.playerToolbar.setOnMenuItemClickListener(this) - ToolbarContentTintHelper.colorizeToolbar(playerToolbar, Color.WHITE, activity) + ToolbarContentTintHelper.colorizeToolbar(binding.playerToolbar, Color.WHITE, activity) } override fun onServiceConnected() { @@ -105,6 +109,11 @@ class CardFragment : AbsPlayerFragment(R.layout.fragment_card_player) { updateIsFavorite() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + companion object { fun newInstance(): PlayerFragment { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt index 3ec3f299e..a142ebaf2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/card/CardPlaybackControlsFragment.kt @@ -26,10 +26,13 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentCardPlayerPlaybackControlsBinding import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.ripAlpha import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler @@ -38,8 +41,6 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_card_player_playback_controls.* -import kotlinx.android.synthetic.main.media_button.* class CardPlaybackControlsFragment : AbsPlayerControlsFragment(R.layout.fragment_card_player_playback_controls) { @@ -47,6 +48,9 @@ class CardPlaybackControlsFragment : private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 private var progressViewUpdateHelper: MusicProgressViewUpdateHelper? = null + private var _binding: FragmentCardPlayerPlaybackControlsBinding? = null + private val binding get() = _binding!! + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -55,30 +59,37 @@ class CardPlaybackControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentCardPlayerPlaybackControlsBinding.bind(view) setUpMusicControllers() - playPauseButton.setOnClickListener { + binding.mediaButton.playPauseButton.setOnClickListener { if (MusicPlayerRemote.isPlaying) { MusicPlayerRemote.pauseSong() } else { MusicPlayerRemote.resumePlaying() } - showBonceAnimation(playPauseButton) + showBounceAnimation(binding.mediaButton.playPauseButton) + } + binding.title.isSelected = true + binding.text.isSelected = true + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) } - title.isSelected = true - text.isSelected = true } private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(MusicPlayerRemote.currentSong) - songInfo.show() + binding.songInfo.text = getSongInfo(MusicPlayerRemote.currentSong) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } @@ -139,13 +150,13 @@ class CardPlaybackControlsFragment : } else { ThemeStore.accentColor(requireContext()).ripAlpha() } - image.setColorFilter(colorFinal, PorterDuff.Mode.SRC_IN) + binding.image.setColorFilter(colorFinal, PorterDuff.Mode.SRC_IN) TintHelper.setTintAuto( - playPauseButton, + binding.mediaButton.playPauseButton, MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(colorFinal)), false ) - TintHelper.setTintAuto(playPauseButton, colorFinal, true) + TintHelper.setTintAuto(binding.mediaButton.playPauseButton, colorFinal, true) volumeFragment?.setTintable(colorFinal) } @@ -155,14 +166,14 @@ class CardPlaybackControlsFragment : } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.mediaButton.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.mediaButton.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) + binding.mediaButton.playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } @@ -176,26 +187,32 @@ class CardPlaybackControlsFragment : private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.mediaButton.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.mediaButton.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.mediaButton.nextButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) + binding.mediaButton.previousButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.mediaButton.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.mediaButton.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.mediaButton.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -203,45 +220,51 @@ class CardPlaybackControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.mediaButton.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.mediaButton.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.mediaButton.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.mediaButton.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.mediaButton.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.mediaButton.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.mediaButton.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } private fun updateProgressTextColor() { val color = MaterialValueHelper.getPrimaryTextColor(context, false) - songTotalTime!!.setTextColor(color) - songCurrentProgress!!.setTextColor(color) + binding.songTotalTime.setTextColor(color) + binding.songCurrentProgress.setTextColor(color) } public override fun show() { @@ -253,7 +276,7 @@ class CardPlaybackControlsFragment : } override fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -265,4 +288,10 @@ class CardPlaybackControlsFragment : } }) } + + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt index 669661c5e..5c5432a85 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurFragment.kt @@ -23,22 +23,22 @@ import androidx.preference.PreferenceManager import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.NEW_BLUR_AMOUNT import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentCardBlurPlayerBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment import code.name.monkey.retromusic.glide.BlurTransformation +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget -import code.name.monkey.retromusic.glide.SongGlideRequest import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.Glide -import kotlinx.android.synthetic.main.fragment_card_blur_player.* class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), SharedPreferences.OnSharedPreferenceChangeListener { override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } private var lastColor: Int = 0 @@ -46,6 +46,9 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), get() = lastColor private lateinit var playbackControlsFragment: CardBlurPlaybackControlsFragment + private var _binding: FragmentCardBlurPlayerBinding? = null + private val binding get() = _binding!! + override fun onShow() { playbackControlsFragment.show() } @@ -67,10 +70,10 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), playbackControlsFragment.setColor(color) lastColor = color.backgroundColor libraryViewModel.updateColor(color.backgroundColor) - ToolbarContentTintHelper.colorizeToolbar(playerToolbar, Color.WHITE, activity) + ToolbarContentTintHelper.colorizeToolbar(binding.playerToolbar, Color.WHITE, activity) - playerToolbar.setTitleTextColor(Color.WHITE) - playerToolbar.setSubtitleTextColor(Color.WHITE) + binding.playerToolbar.setTitleTextColor(Color.WHITE) + binding.playerToolbar.setSubtitleTextColor(Color.WHITE) } override fun toggleFavorite(song: Song) { @@ -86,6 +89,7 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentCardBlurPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() } @@ -99,12 +103,12 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), } private fun setUpPlayerToolbar() { - playerToolbar.apply { + binding.playerToolbar.apply { inflateMenu(R.menu.menu_player) setNavigationOnClickListener { requireActivity().onBackPressed() } setTitleTextColor(Color.WHITE) setSubtitleTextColor(Color.WHITE) - ToolbarContentTintHelper.colorizeToolbar(playerToolbar, Color.WHITE, activity) + ToolbarContentTintHelper.colorizeToolbar(binding.playerToolbar, Color.WHITE, activity) }.setOnMenuItemClickListener(this) } @@ -122,7 +126,7 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), private fun updateSong() { val song = MusicPlayerRemote.currentSong - playerToolbar.apply { + binding.playerToolbar.apply { title = song.title subtitle = song.artistName } @@ -131,19 +135,19 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), private fun updateBlur() { val blurAmount = PreferenceManager.getDefaultSharedPreferences(requireContext()) .getInt(NEW_BLUR_AMOUNT, 25) - colorBackground!!.clearColorFilter() - SongGlideRequest.Builder.from(Glide.with(requireActivity()), MusicPlayerRemote.currentSong) - .checkIgnoreMediaStore(requireContext()) - .generatePalette(requireContext()).build() + binding.colorBackground.clearColorFilter() + GlideApp.with(requireActivity()).asBitmapPalette() + .songCoverOptions(MusicPlayerRemote.currentSong) + .load(RetroGlideExtension.getSongModel(MusicPlayerRemote.currentSong)) .dontAnimate() .transform( BlurTransformation.Builder(requireContext()).blurRadius(blurAmount.toFloat()) .build() ) - .into(object : RetroMusicColoredTarget(colorBackground) { + .into(object : RetroMusicColoredTarget(binding.colorBackground) { override fun onColorReady(colors: MediaNotificationProcessor) { if (colors.backgroundColor == defaultFooterColor) { - colorBackground.setColorFilter(colors.backgroundColor) + binding.colorBackground.setColorFilter(colors.backgroundColor) } } }) @@ -159,6 +163,7 @@ class CardBlurFragment : AbsPlayerFragment(R.layout.fragment_card_blur_player), super.onDestroyView() PreferenceManager.getDefaultSharedPreferences(requireContext()) .unregisterOnSharedPreferenceChangeListener(this) + _binding = null } override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt index c641efa52..a78ed7507 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/cardblur/CardBlurPlaybackControlsFragment.kt @@ -25,6 +25,7 @@ import android.widget.SeekBar import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentCardBlurPlayerPlaybackControlsBinding import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show @@ -37,8 +38,6 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_card_blur_player_playback_controls.* -import kotlinx.android.synthetic.main.media_button.* class CardBlurPlaybackControlsFragment : AbsPlayerControlsFragment(R.layout.fragment_card_blur_player_playback_controls) { @@ -47,6 +46,10 @@ class CardBlurPlaybackControlsFragment : private var lastDisabledPlaybackControlsColor: Int = 0 private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper + private var _binding: FragmentCardBlurPlayerPlaybackControlsBinding? = null + private val binding get() = _binding!! + + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) progressViewUpdateHelper = MusicProgressViewUpdateHelper(this) @@ -54,6 +57,7 @@ class CardBlurPlaybackControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentCardBlurPlayerPlaybackControlsBinding.bind(view) setUpMusicControllers() } @@ -70,7 +74,7 @@ class CardBlurPlaybackControlsFragment : } private fun setUpPlayPauseFab() { - playPauseButton.apply { + binding.mediaButton.playPauseButton.apply { TintHelper.setTintAuto(this, Color.WHITE, true) TintHelper.setTintAuto(this, Color.BLACK, false) setOnClickListener(PlayPauseButtonOnClickHandler()) @@ -79,16 +83,16 @@ class CardBlurPlaybackControlsFragment : private fun updatePlayPauseDrawableState() { when { - MusicPlayerRemote.isPlaying -> playPauseButton.setImageResource(R.drawable.ic_pause) - else -> playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) + MusicPlayerRemote.isPlaying -> binding.mediaButton.playPauseButton.setImageResource(R.drawable.ic_pause) + else -> binding.mediaButton.playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } private fun updateProgressTextColor() { val color = Color.WHITE - songTotalTime.setTextColor(color) - songCurrentProgress.setTextColor(color) - songInfo.setTextColor(color) + binding.songTotalTime.setTextColor(color) + binding.songCurrentProgress.setTextColor(color) + binding.songInfo.setTextColor(color) } override fun onResume() { @@ -115,10 +119,10 @@ class CardBlurPlaybackControlsFragment : private fun updateSong() { if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(MusicPlayerRemote.currentSong) - songInfo.show() + binding.songInfo.text = getSongInfo(MusicPlayerRemote.currentSong) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } @@ -144,26 +148,32 @@ class CardBlurPlaybackControlsFragment : private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.mediaButton.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.mediaButton.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.mediaButton.nextButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) + binding.mediaButton.previousButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.mediaButton.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.mediaButton.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.mediaButton.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -171,31 +181,37 @@ class CardBlurPlaybackControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.mediaButton.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.mediaButton.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.mediaButton.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.mediaButton.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.mediaButton.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.mediaButton.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.mediaButton.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } public override fun show() { - playPauseButton!!.animate() + binding.mediaButton.playPauseButton.animate() .scaleX(1f) .scaleY(1f) .rotation(360f) @@ -204,18 +220,16 @@ class CardBlurPlaybackControlsFragment : } public override fun hide() { - if (playPauseButton != null) { - playPauseButton!!.apply { - scaleX = 0f - scaleY = 0f - rotation = 0f - } + binding.mediaButton.playPauseButton.apply { + scaleX = 0f + scaleY = 0f + rotation = 0f } } override fun setUpProgressSlider() { - progressSlider.applyColor(Color.WHITE) - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.applyColor(Color.WHITE) + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -229,14 +243,19 @@ class CardBlurPlaybackControlsFragment : } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt index 7a762af1f..5701f5288 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/circle/CirclePlayerFragment.kt @@ -32,12 +32,15 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentCirclePlayerBinding import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback @@ -51,7 +54,6 @@ import code.name.monkey.retromusic.views.SeekArc import code.name.monkey.retromusic.views.SeekArc.OnSeekArcChangeListener import code.name.monkey.retromusic.volume.AudioVolumeObserver import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener -import kotlinx.android.synthetic.main.fragment_circle_player.* /** * Created by hemanths on 2020-01-06. @@ -67,6 +69,9 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), private val audioManager: AudioManager? get() = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager + private var _binding: FragmentCirclePlayerBinding? = null + private val binding get() = _binding!! + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) progressViewUpdateHelper = MusicProgressViewUpdateHelper(this) @@ -76,18 +81,25 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_circle_player, container, false) + ): View { + _binding = FragmentCirclePlayerBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setupViews() - title.isSelected = true + binding.title.isSelected = true + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) + } } private fun setUpPlayerToolbar() { - playerToolbar.apply { + binding.playerToolbar.apply { inflateMenu(R.menu.menu_player) setNavigationOnClickListener { requireActivity().onBackPressed() } setOnMenuItemClickListener(this@CirclePlayerFragment) @@ -102,12 +114,12 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), private fun setupViews() { setUpProgressSlider() ViewUtil.setProgressDrawable( - progressSlider, + binding.progressSlider, ThemeStore.accentColor(requireContext()), false ) - volumeSeekBar.progressColor = accentColor() - volumeSeekBar.arcColor = ColorUtil.withAlpha(accentColor(), 0.25f) + binding.volumeSeekBar.progressColor = accentColor() + binding.volumeSeekBar.arcColor = ColorUtil.withAlpha(accentColor(), 0.25f) setUpPlayPauseFab() setUpPrevNext() setUpPlayerToolbar() @@ -115,19 +127,23 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { val accentColor = ThemeStore.accentColor(requireContext()) - nextButton.setColorFilter(accentColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(accentColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(accentColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(accentColor, PorterDuff.Mode.SRC_IN) } private fun setUpPlayPauseFab() { - TintHelper.setTintAuto(playPauseButton, ThemeStore.accentColor(requireContext()), false) - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + TintHelper.setTintAuto( + binding.playPauseButton, + ThemeStore.accentColor(requireContext()), + false + ) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } override fun onResume() { @@ -140,10 +156,10 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), val audioManager = audioManager if (audioManager != null) { - volumeSeekBar.max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) - volumeSeekBar.progress = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) + binding.volumeSeekBar.max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) + binding.volumeSeekBar.progress = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) } - volumeSeekBar.setOnSeekArcChangeListener(this) + binding.volumeSeekBar.setOnSeekArcChangeListener(this) } override fun onPause() { @@ -151,8 +167,8 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), progressViewUpdateHelper.stop() } - override fun playerToolbar(): Toolbar? { - return playerToolbar + override fun playerToolbar(): Toolbar { + return binding.playerToolbar } override fun onShow() { @@ -192,30 +208,27 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(song) - songInfo.show() + binding.songInfo.text = getSongInfo(song) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } private fun updatePlayPauseDrawableState() { when { - MusicPlayerRemote.isPlaying -> playPauseButton.setImageResource(R.drawable.ic_pause) - else -> playPauseButton.setImageResource(R.drawable.ic_play_arrow) + MusicPlayerRemote.isPlaying -> binding.playPauseButton.setImageResource(R.drawable.ic_pause) + else -> binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow) } } override fun onAudioVolumeChanged(currentVolume: Int, maxVolume: Int) { - if (volumeSeekBar == null) { - return - } - volumeSeekBar.max = maxVolume - volumeSeekBar.progress = currentVolume + _binding?.volumeSeekBar?.max = maxVolume + _binding?.volumeSeekBar?.progress = currentVolume } override fun onDestroyView() { @@ -223,6 +236,7 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), if (audioVolumeObserver != null) { audioVolumeObserver!!.unregister() } + _binding = null } override fun onProgressChanged(seekArc: SeekArc?, progress: Int, fromUser: Boolean) { @@ -237,8 +251,8 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), } fun setUpProgressSlider() { - progressSlider.applyColor(accentColor()) - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.applyColor(accentColor()) + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -252,14 +266,14 @@ class CirclePlayerFragment : AbsPlayerFragment(R.layout.fragment_circle_player), } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt index 2e1ac8832..34f30bd2b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/classic/ClassicPlayerFragment.kt @@ -35,11 +35,14 @@ import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.RetroBottomSheetBehavior import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter +import code.name.monkey.retromusic.databinding.FragmentClassicPlayerBinding import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.VolumeFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper @@ -60,13 +63,14 @@ import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropM import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils -import kotlinx.android.synthetic.main.fragment_classic_controls.* -import kotlinx.android.synthetic.main.fragment_classic_player.* class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player), View.OnLayoutChangeListener, MusicProgressViewUpdateHelper.Callback { + private var _binding: FragmentClassicPlayerBinding? = null + private val binding get() = _binding!! + private var lastColor: Int = 0 private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 @@ -83,11 +87,11 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player private val bottomSheetCallbackList = object : BottomSheetBehavior.BottomSheetCallback() { override fun onSlide(bottomSheet: View, slideOffset: Float) { mainActivity.getBottomSheetBehavior().setAllowDragging(false) - playerQueueSheet.setContentPadding( - playerQueueSheet.contentPaddingLeft, - (slideOffset * status_bar.height).toInt(), - playerQueueSheet.contentPaddingRight, - playerQueueSheet.contentPaddingBottom + binding.playerQueueSheet.setContentPadding( + binding.playerQueueSheet.contentPaddingLeft, + (slideOffset * binding.statusBar.height).toInt(), + binding.playerQueueSheet.contentPaddingRight, + binding.playerQueueSheet.contentPaddingBottom ) shapeDrawable.interpolation = 1 - slideOffset @@ -118,6 +122,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player @SuppressLint("ClickableViewAccessibility") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentClassicPlayerBinding.bind(view) setupPanel() setUpMusicControllers() setUpPlayerToolbar() @@ -139,19 +144,25 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player ) shapeDrawable.fillColor = ColorStateList.valueOf(ATHUtil.resolveColor(requireContext(), R.attr.colorSurface)) - playerQueueSheet.background = shapeDrawable + binding.playerQueueSheet.background = shapeDrawable - playerQueueSheet.setOnTouchListener { _, _ -> + binding.playerQueueSheet.setOnTouchListener { _, _ -> mainActivity.getBottomSheetBehavior().setAllowDragging(false) getQueuePanel().setAllowDragging(true) return@setOnTouchListener false } ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, Color.WHITE, requireActivity() ) + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) + } } private fun hideVolumeIfAvailable() { @@ -179,18 +190,19 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player } WrapperAdapterUtils.releaseAll(wrappedAdapter) + _binding = null } private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(song) - songInfo.show() + binding.playerControlsContainer.songInfo.text = getSongInfo(song) + binding.playerControlsContainer.songInfo.show() } else { - songInfo.hide() + binding.playerControlsContainer.songInfo.hide() } } @@ -236,7 +248,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player } override fun playerToolbar(): Toolbar? { - return playerToolbar + return binding.playerToolbar } override fun onShow() { @@ -269,25 +281,37 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player lastPlaybackControlsColor = color.primaryTextColor lastDisabledPlaybackControlsColor = ColorUtil.withAlpha(color.primaryTextColor, 0.3f) - playerContainer.setBackgroundColor(color.backgroundColor) - songInfo.setTextColor(color.primaryTextColor) - player_queue_sub_header.setTextColor(color.primaryTextColor) + binding.playerContainer.setBackgroundColor(color.backgroundColor) + binding.playerControlsContainer.songInfo.setTextColor(color.primaryTextColor) + binding.playerQueueSubHeader.setTextColor(color.primaryTextColor) - songCurrentProgress.setTextColor(lastPlaybackControlsColor) - songTotalTime.setTextColor(lastPlaybackControlsColor) + binding.playerControlsContainer.songCurrentProgress.setTextColor(lastPlaybackControlsColor) + binding.playerControlsContainer.songTotalTime.setTextColor(lastPlaybackControlsColor) - ViewUtil.setProgressDrawable(progressSlider, color.primaryTextColor, true) + ViewUtil.setProgressDrawable( + binding.playerControlsContainer.progressSlider, + color.primaryTextColor, + true + ) volumeFragment?.setTintableColor(color.primaryTextColor) - TintHelper.setTintAuto(playPauseButton, color.primaryTextColor, true) - TintHelper.setTintAuto(playPauseButton, color.backgroundColor, false) + TintHelper.setTintAuto( + binding.playerControlsContainer.playPauseButton, + color.primaryTextColor, + true + ) + TintHelper.setTintAuto( + binding.playerControlsContainer.playPauseButton, + color.backgroundColor, + false + ) updateRepeatState() updateShuffleState() updatePrevNextColor() ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, Color.WHITE, requireActivity() ) @@ -305,15 +329,21 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.playerControlsContainer.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt( + binding.playerControlsContainer.progressSlider, + "progress", + progress + ) animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.playerControlsContainer.songTotalTime.text = + MusicUtil.getReadableDurationString(total.toLong()) + binding.playerControlsContainer.songCurrentProgress.text = + MusicUtil.getReadableDurationString(progress.toLong()) } private fun updateQueuePosition() { @@ -327,33 +357,33 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player } private fun resetToCurrentPosition() { - recyclerView.stopScroll() + binding.recyclerView.stopScroll() linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) } private fun getQueuePanel(): RetroBottomSheetBehavior { - return RetroBottomSheetBehavior.from(playerQueueSheet) as RetroBottomSheetBehavior + return RetroBottomSheetBehavior.from(binding.playerQueueSheet) as RetroBottomSheetBehavior } private fun setupPanel() { - if (!ViewCompat.isLaidOut(playerContainer) || playerContainer.isLayoutRequested) { - playerContainer.addOnLayoutChangeListener(this) + if (!ViewCompat.isLaidOut(binding.playerContainer) || binding.playerContainer.isLayoutRequested) { + binding.playerContainer.addOnLayoutChangeListener(this) return } - val height = playerContainer.height - val width = playerContainer.width + val height = binding.playerContainer.height + val width = binding.playerContainer.width val finalHeight = height - width val panel = getQueuePanel() panel.peekHeight = finalHeight } private fun setUpPlayerToolbar() { - playerToolbar.inflateMenu(R.menu.menu_player) - playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } - playerToolbar.setOnMenuItemClickListener(this) + binding.playerToolbar.inflateMenu(R.menu.menu_player) + binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } + binding.playerToolbar.setOnMenuItemClickListener(this) ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, Color.WHITE, requireActivity() ) @@ -377,18 +407,19 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player recyclerViewDragDropManager?.createWrappedAdapter(playingQueueAdapter!!) as RecyclerView.Adapter<*> wrappedAdapter = recyclerViewSwipeManager?.createWrappedAdapter(wrappedAdapter) as RecyclerView.Adapter<*> - recyclerView.layoutManager = linearLayoutManager - recyclerView.adapter = wrappedAdapter - recyclerView.itemAnimator = animator - recyclerViewTouchActionGuardManager?.attachRecyclerView(recyclerView) - recyclerViewDragDropManager?.attachRecyclerView(recyclerView) - recyclerViewSwipeManager?.attachRecyclerView(recyclerView) + binding.recyclerView.layoutManager = linearLayoutManager + binding.recyclerView.adapter = wrappedAdapter + binding.recyclerView.itemAnimator = animator + recyclerViewTouchActionGuardManager?.attachRecyclerView(binding.recyclerView) + recyclerViewDragDropManager?.attachRecyclerView(binding.recyclerView) + recyclerViewSwipeManager?.attachRecyclerView(binding.recyclerView) linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) } fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.playerControlsContainer.progressSlider.setOnSeekBarChangeListener(object : + SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -402,14 +433,16 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playerControlsContainer.playPauseButton.setOnClickListener( + PlayPauseButtonOnClickHandler() + ) } private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.playerControlsContainer.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow) + binding.playerControlsContainer.playPauseButton.setImageResource(R.drawable.ic_play_arrow) } } @@ -423,27 +456,33 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.playerControlsContainer.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.playerControlsContainer.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.playerControlsContainer.nextButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) + binding.playerControlsContainer.previousButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.playerControlsContainer.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { MusicService.SHUFFLE_MODE_SHUFFLE -> - shuffleButton.setColorFilter( + binding.playerControlsContainer.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.playerControlsContainer.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -451,25 +490,31 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.playerControlsContainer.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.playerControlsContainer.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.playerControlsContainer.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.playerControlsContainer.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.playerControlsContainer.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.playerControlsContainer.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.playerControlsContainer.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } @@ -485,9 +530,9 @@ class ClassicPlayerFragment : AbsPlayerFragment(R.layout.fragment_classic_player oldRight: Int, oldBottom: Int ) { - val height = playerContainer.height - val width = playerContainer.width - val finalHeight = height - (playerControlsContainer.height + width) + val height = binding.playerContainer.height + val width = binding.playerContainer.width + val finalHeight = height - (binding.playerControlsContainer.root.height + width) val panel = getQueuePanel() panel.peekHeight = finalHeight } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt index 87dffad56..461afbcfb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorFragment.kt @@ -19,16 +19,17 @@ import android.os.Bundle import android.os.Handler import android.view.View import androidx.appcompat.widget.Toolbar +import androidx.core.animation.doOnEnd import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentColorPlayerBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_color_player.* class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) { @@ -36,9 +37,12 @@ class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) { private var navigationColor: Int = 0 private lateinit var playbackControlsFragment: ColorPlaybackControlsFragment private var valueAnimator: ValueAnimator? = null + private var _binding: FragmentColorPlayerBinding? = null + private val binding get() = _binding!! + override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } override val paletteColor: Int @@ -50,11 +54,17 @@ class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) { playbackControlsFragment.setColor(color) navigationColor = color.backgroundColor - colorGradientBackground?.setBackgroundColor(color.backgroundColor) + binding.colorGradientBackground.setBackgroundColor(color.backgroundColor) + val animator = + playbackControlsFragment.createRevealAnimator(binding.colorGradientBackground) + animator.doOnEnd { + _binding?.root?.setBackgroundColor(color.backgroundColor) + } + animator.start() serviceActivity?.setLightNavigationBar(ColorUtil.isColorLight(color.backgroundColor)) Handler().post { ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, color.secondaryTextColor, requireActivity() ) @@ -95,10 +105,12 @@ class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) { valueAnimator!!.cancel() valueAnimator = null } + _binding = null } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentColorPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() val playerAlbumCoverFragment = @@ -112,7 +124,7 @@ class ColorFragment : AbsPlayerFragment(R.layout.fragment_color_player) { } private fun setUpPlayerToolbar() { - playerToolbar.apply { + binding.playerToolbar.apply { inflateMenu(R.menu.menu_player) setNavigationOnClickListener { requireActivity().onBackPressed() } setOnMenuItemClickListener(this@ColorFragment) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt index 3cd0ecb9b..7b3170af2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/color/ColorPlaybackControlsFragment.kt @@ -14,23 +14,29 @@ */ package code.name.monkey.retromusic.fragments.player.color +import android.animation.Animator import android.animation.ObjectAnimator import android.graphics.Color import android.graphics.PorterDuff import android.os.Bundle import android.view.LayoutInflater import android.view.View +import android.view.ViewAnimationUtils import android.view.ViewGroup +import android.view.animation.AccelerateInterpolator import android.view.animation.DecelerateInterpolator import android.view.animation.LinearInterpolator import android.widget.SeekBar import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentColorPlayerPlaybackControlsBinding import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler @@ -39,7 +45,7 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_color_player_playback_controls.* +import kotlin.math.sqrt class ColorPlaybackControlsFragment : AbsPlayerControlsFragment(R.layout.fragment_adaptive_player_playback_controls) { @@ -47,6 +53,9 @@ class ColorPlaybackControlsFragment : private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper + private var _binding: FragmentColorPlayerPlaybackControlsBinding? = null + private val binding get() = _binding!! + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -57,8 +66,9 @@ class ColorPlaybackControlsFragment : inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_color_player_playback_controls, container, false) + ): View { + _binding = FragmentColorPlayerPlaybackControlsBinding.inflate(inflater, container, false) + return binding.root } override fun onResume() { @@ -74,20 +84,26 @@ class ColorPlaybackControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setUpMusicControllers() - title.isSelected = true - text.isSelected = true + binding.title.isSelected = true + binding.text.isSelected = true + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) + } } private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(song) - songInfo.show() + binding.songInfo.text = getSongInfo(song) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } @@ -116,15 +132,15 @@ class ColorPlaybackControlsFragment : } override fun setColor(color: MediaNotificationProcessor) { - TintHelper.setTintAuto(playPauseButton, color.primaryTextColor, true) - TintHelper.setTintAuto(playPauseButton, color.backgroundColor, false) - progressSlider.applyColor(color.primaryTextColor) + TintHelper.setTintAuto(binding.playPauseButton, color.primaryTextColor, true) + TintHelper.setTintAuto(binding.playPauseButton, color.backgroundColor, false) + binding.progressSlider.applyColor(color.primaryTextColor) - title.setTextColor(color.primaryTextColor) - text.setTextColor(color.secondaryTextColor) - songInfo.setTextColor(color.secondaryTextColor) - songCurrentProgress.setTextColor(color.secondaryTextColor) - songTotalTime.setTextColor(color.secondaryTextColor) + binding.title.setTextColor(color.primaryTextColor) + binding.text.setTextColor(color.secondaryTextColor) + binding.songInfo.setTextColor(color.secondaryTextColor) + binding.songCurrentProgress.setTextColor(color.secondaryTextColor) + binding.songTotalTime.setTextColor(color.secondaryTextColor) volumeFragment?.setTintableColor(color.primaryTextColor) lastPlaybackControlsColor = color.secondaryTextColor @@ -136,15 +152,15 @@ class ColorPlaybackControlsFragment : } private fun setUpPlayPauseFab() { - TintHelper.setTintAuto(playPauseButton, Color.WHITE, true) - TintHelper.setTintAuto(playPauseButton, Color.BLACK, false) - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + TintHelper.setTintAuto(binding.playPauseButton, Color.WHITE, true) + TintHelper.setTintAuto(binding.playPauseButton, Color.BLACK, false) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun updatePlayPauseDrawableState() { when { - MusicPlayerRemote.isPlaying -> playPauseButton.setImageResource(R.drawable.ic_pause) - else -> playPauseButton.setImageResource(R.drawable.ic_play_arrow) + MusicPlayerRemote.isPlaying -> binding.playPauseButton.setImageResource(R.drawable.ic_pause) + else -> binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow) } } @@ -158,26 +174,26 @@ class ColorPlaybackControlsFragment : private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -185,31 +201,37 @@ class ColorPlaybackControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } public override fun show() { - playPauseButton!!.animate() + binding.playPauseButton.animate() .scaleX(1f) .scaleY(1f) .rotation(360f) @@ -218,7 +240,7 @@ class ColorPlaybackControlsFragment : } public override fun hide() { - playPauseButton.apply { + binding.playPauseButton.apply { scaleX = 0f scaleY = 0f rotation = 0f @@ -226,7 +248,7 @@ class ColorPlaybackControlsFragment : } override fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -240,14 +262,37 @@ class ColorPlaybackControlsFragment : } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } + + fun createRevealAnimator(view: View): Animator { + val location = IntArray(2) + binding.playPauseButton.getLocationOnScreen(location) + val x = (location[0] + binding.playPauseButton.measuredWidth / 2) + val y = (location[1] + binding.playPauseButton.measuredHeight / 2) + val endRadius = sqrt((x * x + y * y).toFloat()) + val startRadius = + binding.playPauseButton.measuredWidth.coerceAtMost(binding.playPauseButton.measuredHeight) + return ViewAnimationUtils.createCircularReveal( + view, x, y, startRadius.toFloat(), + endRadius + ).apply { + duration = 300 + interpolator = AccelerateInterpolator() + } + + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt index d036dd422..936e380e8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitFragment.kt @@ -20,16 +20,19 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentFitBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_fit.* class FitFragment : AbsPlayerFragment(R.layout.fragment_fit) { + private var _binding: FragmentFitBinding? = null + private val binding get() = _binding!! + override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } private var lastColor: Int = 0 @@ -60,7 +63,7 @@ class FitFragment : AbsPlayerFragment(R.layout.fragment_fit) { lastColor = color.primaryTextColor libraryViewModel.updateColor(color.primaryTextColor) ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal), requireActivity() ) @@ -79,6 +82,7 @@ class FitFragment : AbsPlayerFragment(R.layout.fragment_fit) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentFitBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() } @@ -92,7 +96,7 @@ class FitFragment : AbsPlayerFragment(R.layout.fragment_fit) { } private fun setUpPlayerToolbar() { - playerToolbar.apply { + binding.playerToolbar.apply { inflateMenu(R.menu.menu_player) setNavigationOnClickListener { requireActivity().onBackPressed() } setOnMenuItemClickListener(this@FitFragment) @@ -112,6 +116,11 @@ class FitFragment : AbsPlayerFragment(R.layout.fragment_fit) { updateIsFavorite() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + companion object { fun newInstance(): FitFragment { return FitFragment() diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt index dc76a12f9..e7bab2071 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt @@ -28,10 +28,13 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentFitPlaybackControlsBinding import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.ripAlpha import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler @@ -40,10 +43,12 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_fit_playback_controls.* class FitPlaybackControlsFragment : AbsPlayerControlsFragment(R.layout.fragment_fit_playback_controls) { + private var _binding: FragmentFitPlaybackControlsBinding? = null + private val binding get() = _binding!! + private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 @@ -56,30 +61,38 @@ class FitPlaybackControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentFitPlaybackControlsBinding.bind(view) setUpMusicControllers() - title.isSelected = true - text.isSelected = true + binding.title.isSelected = true + binding.text.isSelected = true - playPauseButton.setOnClickListener { + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) + } + + binding.playPauseButton.setOnClickListener { if (MusicPlayerRemote.isPlaying) { MusicPlayerRemote.pauseSong() } else { MusicPlayerRemote.resumePlaying() } - showBonceAnimation() + showBounceAnimation() } } private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(song) - songInfo.show() + binding.songInfo.text = getSongInfo(song) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } @@ -146,22 +159,22 @@ class FitPlaybackControlsFragment : private fun setFabColor(i: Int) { TintHelper.setTintAuto( - playPauseButton, + binding.playPauseButton, MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(i)), false ) - TintHelper.setTintAuto(playPauseButton, i, true) + TintHelper.setTintAuto(binding.playPauseButton, i, true) } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) + binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } @@ -175,26 +188,26 @@ class FitPlaybackControlsFragment : private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton!!.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton!!.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -202,31 +215,37 @@ class FitPlaybackControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } public override fun show() { - playPauseButton!!.animate() + binding.playPauseButton.animate() .scaleX(1f) .scaleY(1f) .rotation(360f) @@ -235,17 +254,15 @@ class FitPlaybackControlsFragment : } public override fun hide() { - if (playPauseButton != null) { - playPauseButton!!.apply { - scaleX = 0f - scaleY = 0f - rotation = 0f - } + binding.playPauseButton.apply { + scaleX = 0f + scaleY = 0f + rotation = 0f } } - private fun showBonceAnimation() { - playPauseButton.apply { + private fun showBounceAnimation() { + binding.playPauseButton.apply { clearAnimation() scaleX = 0.9f scaleY = 0.9f @@ -268,7 +285,7 @@ class FitPlaybackControlsFragment : } override fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -282,14 +299,19 @@ class FitPlaybackControlsFragment : } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt index ac10555b1..4d277fa2e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlaybackControlsFragment.kt @@ -27,11 +27,14 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentFlatPlayerPlaybackControlsBinding import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.ripAlpha import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper.Callback @@ -41,7 +44,6 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_flat_player_playback_controls.* class FlatPlaybackControlsFragment : AbsPlayerControlsFragment(R.layout.fragment_flat_player_playback_controls), Callback { @@ -49,6 +51,9 @@ class FlatPlaybackControlsFragment : private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper + private var _binding: FragmentFlatPlayerPlaybackControlsBinding? = null + private val binding get() = _binding!! + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -57,9 +62,16 @@ class FlatPlaybackControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentFlatPlayerPlaybackControlsBinding.bind(view) setUpMusicControllers() - title.isSelected = true - text.isSelected = true + binding.title.isSelected = true + binding.text.isSelected = true + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) + } } override fun onResume() { @@ -73,7 +85,7 @@ class FlatPlaybackControlsFragment : } public override fun show() { - playPauseButton!!.animate() + binding.playPauseButton.animate() .scaleX(1f) .scaleY(1f) .setInterpolator(DecelerateInterpolator()) @@ -81,7 +93,7 @@ class FlatPlaybackControlsFragment : } public override fun hide() { - playPauseButton!!.apply { + binding.playPauseButton.apply { scaleX = 0f scaleY = 0f rotation = 0f @@ -109,7 +121,7 @@ class FlatPlaybackControlsFragment : updateTextColors(colorFinal) volumeFragment?.setTintable(colorFinal) - progressSlider.applyColor(colorFinal) + binding.progressSlider.applyColor(colorFinal) updateRepeatState() updateShuffleState() } @@ -121,15 +133,15 @@ class FlatPlaybackControlsFragment : val colorSecondary = MaterialValueHelper.getSecondaryTextColor(context, ColorUtil.isColorLight(darkColor)) - TintHelper.setTintAuto(playPauseButton, colorPrimary, false) - TintHelper.setTintAuto(playPauseButton, color, true) + TintHelper.setTintAuto(binding.playPauseButton, colorPrimary, false) + TintHelper.setTintAuto(binding.playPauseButton, color, true) - title.setBackgroundColor(color) - title.setTextColor(colorPrimary) - text.setBackgroundColor(darkColor) - text.setTextColor(colorSecondary) - songInfo.setBackgroundColor(darkColor) - songInfo.setTextColor(colorSecondary) + binding.title.setBackgroundColor(color) + binding.title.setTextColor(colorPrimary) + binding.text.setBackgroundColor(darkColor) + binding.text.setTextColor(colorSecondary) + binding.songInfo.setBackgroundColor(darkColor) + binding.songInfo.setTextColor(colorSecondary) } override fun onServiceConnected() { @@ -149,14 +161,14 @@ class FlatPlaybackControlsFragment : } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) + binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } @@ -169,13 +181,13 @@ class FlatPlaybackControlsFragment : private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(song) - songInfo.show() + binding.songInfo.text = getSongInfo(song) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } @@ -188,40 +200,46 @@ class FlatPlaybackControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -229,7 +247,7 @@ class FlatPlaybackControlsFragment : } override fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -243,14 +261,19 @@ class FlatPlaybackControlsFragment : } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt index 6ed5f0fb4..5cad96dec 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/flat/FlatPlayerFragment.kt @@ -25,6 +25,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentFlatPlayerBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -33,11 +34,10 @@ import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.views.DrawableGradient -import kotlinx.android.synthetic.main.fragment_flat_player.* class FlatPlayerFragment : AbsPlayerFragment(R.layout.fragment_flat_player) { override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } private var valueAnimator: ValueAnimator? = null @@ -46,6 +46,10 @@ class FlatPlayerFragment : AbsPlayerFragment(R.layout.fragment_flat_player) { override val paletteColor: Int get() = lastColor + private var _binding: FragmentFlatPlayerBinding? = null + private val binding get() = _binding!! + + private fun setUpSubFragments() { controlsFragment = childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as FlatPlaybackControlsFragment @@ -55,11 +59,11 @@ class FlatPlayerFragment : AbsPlayerFragment(R.layout.fragment_flat_player) { } private fun setUpPlayerToolbar() { - playerToolbar.inflateMenu(R.menu.menu_player) - playerToolbar.setNavigationOnClickListener { _ -> requireActivity().onBackPressed() } - playerToolbar.setOnMenuItemClickListener(this) + binding.playerToolbar.inflateMenu(R.menu.menu_player) + binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } + binding.playerToolbar.setOnMenuItemClickListener(this) ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal), requireActivity() ) @@ -76,13 +80,14 @@ class FlatPlayerFragment : AbsPlayerFragment(R.layout.fragment_flat_player) { GradientDrawable.Orientation.TOP_BOTTOM, intArrayOf(animation.animatedValue as Int, android.R.color.transparent), 0 ) - colorGradientBackground?.background = drawable + binding.colorGradientBackground.background = drawable } valueAnimator?.setDuration(ViewUtil.RETRO_MUSIC_ANIM_TIME.toLong())?.start() } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentFlatPlayerBinding.bind(view) setUpPlayerToolbar() setUpSubFragments() } @@ -117,7 +122,11 @@ class FlatPlayerFragment : AbsPlayerFragment(R.layout.fragment_flat_player) { MaterialValueHelper.getPrimaryTextColor(requireContext(), isLight) else ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal) - ToolbarContentTintHelper.colorizeToolbar(playerToolbar, iconColor, requireActivity()) + ToolbarContentTintHelper.colorizeToolbar( + binding.playerToolbar, + iconColor, + requireActivity() + ) if (PreferenceUtil.isAdaptiveColor) { colorize(color.backgroundColor) } @@ -133,4 +142,9 @@ class FlatPlayerFragment : AbsPlayerFragment(R.layout.fragment_flat_player) { updateIsFavorite() } } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt index d15a6d98a..9dbfd766d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlaybackControlsFragment.kt @@ -15,13 +15,12 @@ package code.name.monkey.retromusic.fragments.player.full import android.animation.ObjectAnimator -import android.annotation.SuppressLint import android.content.Intent import android.content.res.ColorStateList import android.graphics.Color import android.graphics.PorterDuff +import android.graphics.drawable.AnimatedVectorDrawable import android.graphics.drawable.Drawable -import android.os.AsyncTask import android.os.Bundle import android.view.MenuItem import android.view.View @@ -31,8 +30,8 @@ import android.widget.PopupMenu import android.widget.SeekBar import androidx.lifecycle.lifecycleScope import code.name.monkey.appthemehelper.util.ColorUtil -import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentFullPlayerControlsBinding import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.SongEntity import code.name.monkey.retromusic.db.toSongEntity @@ -42,6 +41,8 @@ import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler @@ -52,7 +53,6 @@ import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_full_player_controls.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -70,6 +70,8 @@ class FullPlaybackControlsFragment : private var lastDisabledPlaybackControlsColor: Int = 0 private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper private val libraryViewModel: LibraryViewModel by sharedViewModel() + private var _binding: FragmentFullPlayerControlsBinding? = null + private val binding get() = _binding!! override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -78,11 +80,18 @@ class FullPlaybackControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - setUpMusicControllers() + _binding = FragmentFullPlayerControlsBinding.bind(view) - songTotalTime.setTextColor(Color.WHITE) - songCurrentProgress.setTextColor(Color.WHITE) - title.isSelected = true + setUpMusicControllers() + binding.songTotalTime.setTextColor(Color.WHITE) + binding.songCurrentProgress.setTextColor(Color.WHITE) + binding.title.isSelected = true + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) + } } override fun onResume() { @@ -96,7 +105,7 @@ class FullPlaybackControlsFragment : } public override fun show() { - playPauseButton!!.animate() + binding.playPauseButton.animate() .scaleX(1f) .scaleY(1f) .setInterpolator(DecelerateInterpolator()) @@ -104,7 +113,7 @@ class FullPlaybackControlsFragment : } public override fun hide() { - playPauseButton.apply { + binding.playPauseButton.apply { scaleX = 0f scaleY = 0f rotation = 0f @@ -116,18 +125,18 @@ class FullPlaybackControlsFragment : lastDisabledPlaybackControlsColor = ColorUtil.withAlpha(color.primaryTextColor, 0.3f) val tintList = ColorStateList.valueOf(color.primaryTextColor) - playerMenu.imageTintList = tintList - songFavourite.imageTintList = tintList + binding.playerMenu.imageTintList = tintList + binding.songFavourite.imageTintList = tintList volumeFragment?.setTintableColor(color.primaryTextColor) - progressSlider.applyColor(color.primaryTextColor) - title.setTextColor(color.primaryTextColor) - text.setTextColor(color.secondaryTextColor) - songInfo.setTextColor(color.secondaryTextColor) - songCurrentProgress.setTextColor(color.secondaryTextColor) - songTotalTime.setTextColor(color.secondaryTextColor) + binding.progressSlider.applyColor(color.primaryTextColor) + binding.title.setTextColor(color.primaryTextColor) + binding.text.setTextColor(color.secondaryTextColor) + binding.songInfo.setTextColor(color.secondaryTextColor) + binding.songCurrentProgress.setTextColor(color.secondaryTextColor) + binding.songTotalTime.setTextColor(color.secondaryTextColor) - playPauseButton.backgroundTintList = tintList - playPauseButton.imageTintList = ColorStateList.valueOf(color.backgroundColor) + binding.playPauseButton.backgroundTintList = tintList + binding.playPauseButton.imageTintList = ColorStateList.valueOf(color.backgroundColor) updateRepeatState() updateShuffleState() @@ -143,14 +152,14 @@ class FullPlaybackControlsFragment : private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName updateIsFavorite() if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(song) - songInfo.show() + binding.songInfo.text = getSongInfo(song) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } @@ -165,19 +174,17 @@ class FullPlaybackControlsFragment : private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) + binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) - playPauseButton.post { - if (playPauseButton != null) { - playPauseButton.pivotX = (playPauseButton.width / 2).toFloat() - playPauseButton.pivotY = (playPauseButton.height / 2).toFloat() - } + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playPauseButton.post { + binding.playPauseButton.pivotX = (binding.playPauseButton.width / 2).toFloat() + binding.playPauseButton.pivotY = (binding.playPauseButton.height / 2).toFloat() } } @@ -192,10 +199,11 @@ class FullPlaybackControlsFragment : } private fun setupMenu() { - playerMenu.setOnClickListener { + binding.playerMenu.setOnClickListener { val popupMenu = PopupMenu(requireContext(), it) popupMenu.setOnMenuItemClickListener(this) popupMenu.inflate(R.menu.menu_player) + popupMenu.menu.findItem(R.id.action_toggle_favorite).isVisible = false popupMenu.show() } } @@ -206,17 +214,17 @@ class FullPlaybackControlsFragment : private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } override fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -230,15 +238,15 @@ class FullPlaybackControlsFragment : } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } override fun onRepeatModeChanged() { @@ -250,16 +258,16 @@ class FullPlaybackControlsFragment : } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -267,36 +275,46 @@ class FullPlaybackControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } private fun setupFavourite() { - songFavourite?.setOnClickListener { + binding.songFavourite.setOnClickListener { toggleFavorite(MusicPlayerRemote.currentSong) } } - fun updateIsFavorite() { + override fun onFavoriteStateChanged() { + updateIsFavorite(animate = true) + } + + fun updateIsFavorite(animate: Boolean = false) { lifecycleScope.launch(Dispatchers.IO) { val playlist: PlaylistEntity? = libraryViewModel.favoritePlaylist() if (playlist != null) { @@ -304,19 +322,30 @@ class FullPlaybackControlsFragment : MusicPlayerRemote.currentSong.toSongEntity(playlist.playListId) val isFavorite: Boolean = libraryViewModel.isFavoriteSong(song).isNotEmpty() withContext(Dispatchers.Main) { - val icon = + val icon = if (animate) { + if (isFavorite) R.drawable.avd_favorite else R.drawable.avd_unfavorite + } else { if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border - val drawable = TintHelper.createTintedDrawable(activity, icon, Color.WHITE) - songFavourite?.setImageDrawable(drawable) + } + val drawable: Drawable? = RetroUtil.getTintedVectorDrawable( + requireContext(), + icon, + Color.WHITE + ) + binding.songFavourite.apply { + setImageDrawable(drawable) + getDrawable().also { + if (it is AnimatedVectorDrawable) { + it.start() + } + } + } } } } } private fun toggleFavorite(song: Song) { - if (song.id == MusicPlayerRemote.currentSong.id) { - updateIsFavorite() - } lifecycleScope.launch(Dispatchers.IO) { val playlist: PlaylistEntity? = libraryViewModel.favoritePlaylist() if (playlist != null) { @@ -336,4 +365,9 @@ class FullPlaybackControlsFragment : fun onFavoriteToggled() { toggleFavorite(MusicPlayerRemote.currentSong) } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt index 925144726..bb2eee369 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/full/FullPlayerFragment.kt @@ -18,119 +18,29 @@ import android.content.res.ColorStateList import android.graphics.Color import android.os.Bundle import android.view.View -import android.widget.FrameLayout -import android.widget.TextView import androidx.appcompat.widget.Toolbar -import androidx.core.os.bundleOf -import androidx.navigation.fragment.findNavController import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper -import code.name.monkey.retromusic.EXTRA_ARTIST_ID import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentFullBinding import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment -import code.name.monkey.retromusic.glide.ArtistGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.helper.MusicPlayerRemote -import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.model.Song -import code.name.monkey.retromusic.model.lyrics.AbsSynchronizedLyrics -import code.name.monkey.retromusic.model.lyrics.Lyrics import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.Glide -import kotlinx.android.synthetic.main.fragment_full.* -class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full), - MusicProgressViewUpdateHelper.Callback { - private lateinit var lyricsLayout: FrameLayout - private lateinit var lyricsLine1: TextView - private lateinit var lyricsLine2: TextView - - private var lyrics: Lyrics? = null - private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper - - override fun onUpdateProgressViews(progress: Int, total: Int) { - if (!isLyricsLayoutBound()) return - - if (!isLyricsLayoutVisible()) { - hideLyricsLayout() - return - } - - if (lyrics !is AbsSynchronizedLyrics) return - val synchronizedLyrics = lyrics as AbsSynchronizedLyrics - - lyricsLayout.visibility = View.VISIBLE - lyricsLayout.alpha = 1f - - val oldLine = lyricsLine2.text.toString() - val line = synchronizedLyrics.getLine(progress) - - if (oldLine != line || oldLine.isEmpty()) { - lyricsLine1.text = oldLine - lyricsLine2.text = line - - lyricsLine1.visibility = View.VISIBLE - lyricsLine2.visibility = View.VISIBLE - - lyricsLine2.measure( - View.MeasureSpec.makeMeasureSpec( - lyricsLine2.measuredWidth, - View.MeasureSpec.EXACTLY - ), - View.MeasureSpec.UNSPECIFIED - ) - val h: Float = lyricsLine2.measuredHeight.toFloat() - - lyricsLine1.alpha = 1f - lyricsLine1.translationY = 0f - lyricsLine1.animate().alpha(0f).translationY(-h).duration = VISIBILITY_ANIM_DURATION - - lyricsLine2.alpha = 0f - lyricsLine2.translationY = h - lyricsLine2.animate().alpha(1f).translationY(0f).duration = VISIBILITY_ANIM_DURATION - } - } - - private fun isLyricsLayoutVisible(): Boolean { - return lyrics != null && lyrics!!.isSynchronized && lyrics!!.isValid - } - - private fun isLyricsLayoutBound(): Boolean { - return lyricsLayout != null && lyricsLine1 != null && lyricsLine2 != null - } - - private fun hideLyricsLayout() { - lyricsLayout.animate().alpha(0f).setDuration(VISIBILITY_ANIM_DURATION) - .withEndAction(Runnable { - if (!isLyricsLayoutBound()) return@Runnable - lyricsLayout.visibility = View.GONE - lyricsLine1.text = null - lyricsLine2.text = null - }) - } - - override fun setLyrics(l: Lyrics?) { - lyrics = l - - if (!isLyricsLayoutBound()) return - - if (!isLyricsLayoutVisible()) { - hideLyricsLayout() - return - } - - lyricsLine1.text = null - lyricsLine2.text = null - - lyricsLayout.visibility = View.VISIBLE - lyricsLayout.animate().alpha(1f).duration = VISIBILITY_ANIM_DURATION - } +class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full) { + private var _binding: FragmentFullBinding? = null + private val binding get() = _binding!! override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } private var lastColor: Int = 0 @@ -139,33 +49,24 @@ class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full), private lateinit var controlsFragment: FullPlaybackControlsFragment private fun setUpPlayerToolbar() { - playerToolbar.apply { + binding.playerToolbar.apply { setNavigationOnClickListener { requireActivity().onBackPressed() } } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - lyricsLayout = view.findViewById(R.id.playerLyrics) - lyricsLine1 = view.findViewById(R.id.player_lyrics_line1) - lyricsLine2 = view.findViewById(R.id.player_lyrics_line2) + _binding = FragmentFullBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() setupArtist() - nextSong.isSelected = true - - progressViewUpdateHelper = MusicProgressViewUpdateHelper(this, 500, 1000) - progressViewUpdateHelper.start() + binding.nextSong.isSelected = true } private fun setupArtist() { - artistImage.setOnClickListener { - mainActivity.collapsePanel() - findNavController().navigate( - R.id.artistDetailsFragment, - bundleOf(EXTRA_ARTIST_ID to MusicPlayerRemote.currentSong.artistId), - ) + binding.artistImage.setOnClickListener { + goToArtist(mainActivity) } } @@ -192,10 +93,10 @@ class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full), override fun onColorChanged(color: MediaNotificationProcessor) { lastColor = color.backgroundColor - mask.backgroundTintList = ColorStateList.valueOf(color.backgroundColor) + binding.mask.backgroundTintList = ColorStateList.valueOf(color.backgroundColor) controlsFragment.setColor(color) libraryViewModel.updateColor(color.backgroundColor) - ToolbarContentTintHelper.colorizeToolbar(playerToolbar, Color.WHITE, activity) + ToolbarContentTintHelper.colorizeToolbar(binding.playerToolbar, Color.WHITE, activity) } override fun onFavoriteToggled() { @@ -224,16 +125,15 @@ class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full), override fun onDestroyView() { super.onDestroyView() - progressViewUpdateHelper.stop() + _binding = null } private fun updateArtistImage() { libraryViewModel.artist(MusicPlayerRemote.currentSong.artistId) .observe(viewLifecycleOwner, { artist -> - ArtistGlideRequest.Builder.from(Glide.with(requireContext()), artist) - .generatePalette(requireContext()) - .build() - .into(object : RetroMusicColoredTarget(artistImage) { + GlideApp.with(requireActivity()).asBitmapPalette().artistImageOptions(artist) + .load(RetroGlideExtension.getArtistModel(artist)) + .into(object : RetroMusicColoredTarget(binding.artistImage) { override fun onColorReady(colors: MediaNotificationProcessor) { } }) @@ -248,12 +148,12 @@ class FullPlayerFragment : AbsPlayerFragment(R.layout.fragment_full), private fun updateLabel() { (MusicPlayerRemote.playingQueue.size - 1).apply { if (this == (MusicPlayerRemote.position)) { - nextSongLabel.setText(R.string.last_song) - nextSong.hide() + binding.nextSongLabel.setText(R.string.last_song) + binding.nextSong.hide() } else { val title = MusicPlayerRemote.playingQueue[MusicPlayerRemote.position + 1].title - nextSongLabel.setText(R.string.next_song) - nextSong.apply { + binding.nextSongLabel.setText(R.string.next_song) + binding.nextSong.apply { text = title show() } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt index cf11bd78d..68725bab3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt @@ -19,6 +19,7 @@ import android.annotation.SuppressLint import android.content.res.ColorStateList import android.graphics.Color import android.graphics.PorterDuff +import android.graphics.drawable.AnimatedVectorDrawable import android.os.Bundle import android.view.View import android.view.animation.LinearInterpolator @@ -35,6 +36,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.retromusic.R import code.name.monkey.retromusic.RetroBottomSheetBehavior import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter +import code.name.monkey.retromusic.databinding.FragmentGradientPlayerBinding import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.SongEntity import code.name.monkey.retromusic.db.toSongEntity @@ -44,11 +46,12 @@ import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.VolumeFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener -import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil @@ -60,9 +63,6 @@ import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropM import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils -import kotlinx.android.synthetic.main.fragment_gradient_controls.* -import kotlinx.android.synthetic.main.fragment_gradient_player.* -import kotlinx.android.synthetic.main.status_bar.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -82,14 +82,17 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play private var playingQueueAdapter: PlayingQueueAdapter? = null private lateinit var linearLayoutManager: LinearLayoutManager + private var _binding: FragmentGradientPlayerBinding? = null + private val binding get() = _binding!! + private val bottomSheetCallbackList = object : BottomSheetCallback() { override fun onSlide(bottomSheet: View, slideOffset: Float) { mainActivity.getBottomSheetBehavior().setAllowDragging(false) - playerQueueSheet.setPadding( - playerQueueSheet.paddingLeft, - (slideOffset * status_bar.height).toInt(), - playerQueueSheet.paddingRight, - playerQueueSheet.paddingBottom + binding.playerQueueSheet.setPadding( + binding.playerQueueSheet.paddingLeft, + (slideOffset * binding.statusBarLayout.statusBar.height).toInt(), + binding.playerQueueSheet.paddingRight, + binding.playerQueueSheet.paddingBottom ) } @@ -111,23 +114,24 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play } private fun setupFavourite() { - songFavourite.setOnClickListener { + binding.playbackControlsFragment.songFavourite.setOnClickListener { toggleFavorite(MusicPlayerRemote.currentSong) } } private fun setupMenu() { - playerMenu.setOnClickListener { + binding.playbackControlsFragment.playerMenu.setOnClickListener { val popupMenu = PopupMenu(requireContext(), it) popupMenu.setOnMenuItemClickListener(this) popupMenu.inflate(R.menu.menu_player) + popupMenu.menu.findItem(R.id.action_toggle_favorite).isVisible = false popupMenu.show() } } private fun setupPanel() { - if (!ViewCompat.isLaidOut(colorBackground) || colorBackground.isLayoutRequested) { - colorBackground.addOnLayoutChangeListener(this) + if (!ViewCompat.isLaidOut(binding.colorBackground) || binding.colorBackground.isLayoutRequested) { + binding.colorBackground.addOnLayoutChangeListener(this) return } } @@ -139,6 +143,7 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentGradientPlayerBinding.bind(view) hideVolumeIfAvailable() setUpMusicControllers() setupPanel() @@ -146,12 +151,18 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play setupSheet() setupMenu() setupFavourite() + binding.playbackControlsFragment.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.playbackControlsFragment.text.setOnClickListener { + goToArtist(requireActivity()) + } } @SuppressLint("ClickableViewAccessibility") private fun setupSheet() { getQueuePanel().addBottomSheetCallback(bottomSheetCallbackList) - playerQueueSheet.setOnTouchListener { _, _ -> + binding.playerQueueSheet.setOnTouchListener { _, _ -> mainActivity.getBottomSheetBehavior().setAllowDragging(false) getQueuePanel().setAllowDragging(true) return@setOnTouchListener false @@ -159,7 +170,7 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play } private fun getQueuePanel(): RetroBottomSheetBehavior { - return RetroBottomSheetBehavior.from(playerQueueSheet) as RetroBottomSheetBehavior + return RetroBottomSheetBehavior.from(binding.playerQueueSheet) as RetroBottomSheetBehavior } override fun onResume() { @@ -184,6 +195,7 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play } override fun onBackPressed(): Boolean { + println("OK") var wasExpanded = false if (getQueuePanel().state == STATE_EXPANDED) { wasExpanded = getQueuePanel().state == STATE_EXPANDED @@ -203,46 +215,62 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play override fun onColorChanged(color: MediaNotificationProcessor) { lastColor = color.backgroundColor libraryViewModel.updateColor(color.backgroundColor) - mask.backgroundTintList = ColorStateList.valueOf(color.backgroundColor) - colorBackground.setBackgroundColor(color.backgroundColor) - playerQueueSheet.setBackgroundColor(ColorUtil.darkenColor(color.backgroundColor)) + binding.mask.backgroundTintList = ColorStateList.valueOf(color.backgroundColor) + binding.colorBackground.setBackgroundColor(color.backgroundColor) + binding.playerQueueSheet.setBackgroundColor(ColorUtil.darkenColor(color.backgroundColor)) lastPlaybackControlsColor = color.primaryTextColor lastDisabledPlaybackControlsColor = ColorUtil.withAlpha(color.primaryTextColor, 0.3f) - title.setTextColor(lastPlaybackControlsColor) - text.setTextColor(lastDisabledPlaybackControlsColor) - playPauseButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - songFavourite.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - queueIcon.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - playerMenu.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - songCurrentProgress.setTextColor(lastDisabledPlaybackControlsColor) - songTotalTime.setTextColor(lastDisabledPlaybackControlsColor) - nextSong.setTextColor(lastPlaybackControlsColor) - songInfo.setTextColor(lastDisabledPlaybackControlsColor) + binding.playbackControlsFragment.title.setTextColor(lastPlaybackControlsColor) + binding.playbackControlsFragment.text.setTextColor(lastDisabledPlaybackControlsColor) + binding.playbackControlsFragment.playPauseButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) + binding.playbackControlsFragment.nextButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) + binding.playbackControlsFragment.previousButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) + binding.playbackControlsFragment.songFavourite.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) + binding.queueIcon.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.playbackControlsFragment.playerMenu.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) + binding.playbackControlsFragment.songCurrentProgress.setTextColor( + lastDisabledPlaybackControlsColor + ) + binding.playbackControlsFragment.songTotalTime.setTextColor( + lastDisabledPlaybackControlsColor + ) + binding.nextSong.setTextColor(lastPlaybackControlsColor) + binding.playbackControlsFragment.songInfo.setTextColor(lastDisabledPlaybackControlsColor) volumeFragment?.setTintableColor(lastPlaybackControlsColor.ripAlpha()) - ViewUtil.setProgressDrawable(progressSlider, lastPlaybackControlsColor.ripAlpha(), true) + ViewUtil.setProgressDrawable( + binding.playbackControlsFragment.progressSlider, + lastPlaybackControlsColor.ripAlpha(), + true + ) updateRepeatState() updateShuffleState() updatePrevNextColor() } - override fun toggleFavorite(song: Song) { - super.toggleFavorite(song) - if (song.id == MusicPlayerRemote.currentSong.id) { - updateIsFavoriteIcon() - } - } - override fun onFavoriteToggled() { toggleFavorite(MusicPlayerRemote.currentSong) } - private fun updateIsFavoriteIcon() { + private fun updateIsFavoriteIcon(animate: Boolean = false) { lifecycleScope.launch(Dispatchers.IO) { val playlist: PlaylistEntity? = libraryViewModel.favoritePlaylist() if (playlist != null) { @@ -250,10 +278,19 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play MusicPlayerRemote.currentSong.toSongEntity(playlist.playListId) val isFavorite: Boolean = libraryViewModel.isFavoriteSong(song).isNotEmpty() withContext(Dispatchers.Main) { - val icon = - if (isFavorite) R.drawable.ic_favorite - else R.drawable.ic_favorite_border - songFavourite.setImageResource(icon) + val icon = if (animate) { + if (isFavorite) R.drawable.avd_favorite else R.drawable.avd_unfavorite + } else { + if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border + } + binding.playbackControlsFragment.songFavourite.apply { + setImageResource(icon) + drawable.also { + if (it is AnimatedVectorDrawable) { + it.start() + } + } + } } } } @@ -298,6 +335,10 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play updateIsFavoriteIcon() } + override fun onFavoriteStateChanged() { + updateIsFavoriteIcon(animate = true) + } + override fun onQueueChanged() { super.onQueueChanged() updateLabel() @@ -306,14 +347,14 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.playbackControlsFragment.title.text = song.title + binding.playbackControlsFragment.text.text = song.artistName updateLabel() if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(song) - songInfo.show() + binding.playbackControlsFragment.songInfo.text = getSongInfo(song) + binding.playbackControlsFragment.songInfo.show() } else { - songInfo.hide() + binding.playbackControlsFragment.songInfo.hide() } } @@ -323,45 +364,53 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play setUpRepeatButton() setUpShuffleButton() setUpProgressSlider() - title.isSelected = true - text.isSelected = true + binding.playbackControlsFragment.title.isSelected = true + binding.playbackControlsFragment.text.isSelected = true } private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause_white_64dp) + binding.playbackControlsFragment.playPauseButton.setImageResource(R.drawable.ic_pause_white_64dp) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_64dp) + binding.playbackControlsFragment.playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_64dp) } } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playbackControlsFragment.playPauseButton.setOnClickListener( + PlayPauseButtonOnClickHandler() + ) } private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.playbackControlsFragment.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.playbackControlsFragment.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.playbackControlsFragment.nextButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) + binding.playbackControlsFragment.previousButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { MusicService.SHUFFLE_MODE_SHUFFLE -> - shuffleButton.setColorFilter( + binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -369,25 +418,31 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } @@ -395,10 +450,10 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play private fun updateLabel() { (MusicPlayerRemote.playingQueue.size - 1).apply { if (this == (MusicPlayerRemote.position)) { - nextSong.text = "Last song" + binding.nextSong.text = "Last song" } else { val title = MusicPlayerRemote.playingQueue[MusicPlayerRemote.position + 1].title - nextSong.text = title + binding.nextSong.text = title } } } @@ -415,7 +470,7 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play oldBottom: Int ) { val panel = getQueuePanel() - panel.peekHeight = container.height + panel.peekHeight = binding.container.height } private fun setupRecyclerView() { @@ -436,12 +491,14 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play recyclerViewDragDropManager?.createWrappedAdapter(playingQueueAdapter!!) as RecyclerView.Adapter<*> wrappedAdapter = recyclerViewSwipeManager?.createWrappedAdapter(wrappedAdapter) as RecyclerView.Adapter<*> - recyclerView.layoutManager = linearLayoutManager - recyclerView.adapter = wrappedAdapter - recyclerView.itemAnimator = animator - recyclerViewTouchActionGuardManager?.attachRecyclerView(recyclerView) - recyclerViewDragDropManager?.attachRecyclerView(recyclerView) - recyclerViewSwipeManager?.attachRecyclerView(recyclerView) + binding.recyclerView.apply { + layoutManager = linearLayoutManager + adapter = wrappedAdapter + itemAnimator = animator + recyclerViewTouchActionGuardManager?.attachRecyclerView(this) + recyclerViewDragDropManager?.attachRecyclerView(this) + recyclerViewSwipeManager?.attachRecyclerView(this) + } linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) } @@ -460,6 +517,7 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play } WrapperAdapterUtils.releaseAll(wrappedAdapter) + _binding = null } private fun updateQueuePosition() { @@ -473,12 +531,13 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play } private fun resetToCurrentPosition() { - recyclerView.stopScroll() + binding.recyclerView.stopScroll() linearLayoutManager.scrollToPositionWithOffset(MusicPlayerRemote.position + 1, 0) } fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.playbackControlsFragment.progressSlider.setOnSeekBarChangeListener(object : + SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -492,12 +551,18 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + binding.playbackControlsFragment.progressSlider.max = total + val animator = ObjectAnimator.ofInt( + binding.playbackControlsFragment.progressSlider, + "progress", + progress + ) animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.playbackControlsFragment.songTotalTime.text = + MusicUtil.getReadableDurationString(total.toLong()) + binding.playbackControlsFragment.songCurrentProgress.text = + MusicUtil.getReadableDurationString(progress.toLong()) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/home/HomePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/home/HomePlayerFragment.kt index c2925301c..d32716d21 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/home/HomePlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/home/HomePlayerFragment.kt @@ -21,19 +21,23 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentHomePlayerBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_home_player.* class HomePlayerFragment : AbsPlayerFragment(R.layout.fragment_home_player), MusicProgressViewUpdateHelper.Callback { private var lastColor: Int = 0 private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper + private var _binding: FragmentHomePlayerBinding? = null + private val binding get() = _binding!! + + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) progressViewUpdateHelper = MusicProgressViewUpdateHelper(this) @@ -41,6 +45,7 @@ class HomePlayerFragment : AbsPlayerFragment(R.layout.fragment_home_player), override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentHomePlayerBinding.bind(view) setUpPlayerToolbar() } @@ -54,8 +59,8 @@ class HomePlayerFragment : AbsPlayerFragment(R.layout.fragment_home_player), progressViewUpdateHelper.stop() } - override fun playerToolbar(): Toolbar? { - return playerToolbar + override fun playerToolbar(): Toolbar { + return binding.playerToolbar } override fun onShow() { @@ -76,8 +81,8 @@ class HomePlayerFragment : AbsPlayerFragment(R.layout.fragment_home_player), private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName } override fun onBackPressed(): Boolean { @@ -95,7 +100,7 @@ class HomePlayerFragment : AbsPlayerFragment(R.layout.fragment_home_player), lastColor = color.backgroundColor libraryViewModel.updateColor(color.backgroundColor) ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, Color.WHITE, requireActivity() ) @@ -113,18 +118,23 @@ class HomePlayerFragment : AbsPlayerFragment(R.layout.fragment_home_player), } override fun onUpdateProgressViews(progress: Int, total: Int) { - songTotalTime.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(progress.toLong()) } private fun setUpPlayerToolbar() { - playerToolbar.inflateMenu(R.menu.menu_player) - playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } - playerToolbar.setOnMenuItemClickListener(this) + binding.playerToolbar.inflateMenu(R.menu.menu_player) + binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } + binding.playerToolbar.setOnMenuItemClickListener(this) ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal), requireActivity() ) } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenControlsFragment.kt index 40612a616..9e9df3298 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/lockscreen/LockScreenControlsFragment.kt @@ -26,6 +26,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentLockScreenPlaybackControlsBinding import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.ripAlpha import code.name.monkey.retromusic.extensions.textColorSecondary @@ -38,7 +39,6 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_lock_screen_playback_controls.* /** * @author Hemanth S (h4h13). @@ -50,6 +50,10 @@ class LockScreenControlsFragment : private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 + private var _binding: FragmentLockScreenPlaybackControlsBinding? = null + private val binding get() = _binding!! + + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) progressViewUpdateHelper = MusicProgressViewUpdateHelper(this) @@ -57,14 +61,15 @@ class LockScreenControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentLockScreenPlaybackControlsBinding.bind(view) setUpMusicControllers() - title.isSelected = true + binding.title.isSelected = true } private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = String.format("%s - %s", song.artistName, song.albumName) + binding.title.text = song.title + binding.text.text = String.format("%s - %s", song.artistName, song.albumName) } override fun onResume() { @@ -123,32 +128,32 @@ class LockScreenControlsFragment : }.ripAlpha() volumeFragment?.setTintable(colorFinal) - progressSlider.applyColor(colorFinal) + binding.progressSlider.applyColor(colorFinal) updateRepeatState() updateShuffleState() updatePrevNextColor() val isDark = ColorUtil.isColorLight(colorFinal) - text.setTextColor(colorFinal) + binding.text.setTextColor(colorFinal) TintHelper.setTintAuto( - playPauseButton, + binding.playPauseButton, MaterialValueHelper.getPrimaryTextColor(requireContext(), isDark), false ) - TintHelper.setTintAuto(playPauseButton, colorFinal, true) + TintHelper.setTintAuto(binding.playPauseButton, colorFinal, true) } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) + binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } @@ -162,26 +167,26 @@ class LockScreenControlsFragment : private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -189,31 +194,37 @@ class LockScreenControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } public override fun show() { - playPauseButton!!.animate() + binding.playPauseButton.animate() .scaleX(1f) .scaleY(1f) .rotation(360f) @@ -222,17 +233,15 @@ class LockScreenControlsFragment : } public override fun hide() { - if (playPauseButton != null) { - playPauseButton!!.apply { - scaleX = 0f - scaleY = 0f - rotation = 0f - } + binding.playPauseButton.apply { + scaleX = 0f + scaleY = 0f + rotation = 0f } } override fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -246,14 +255,19 @@ class LockScreenControlsFragment : } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt index ce3fea96a..2be4a5c62 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialControlsFragment.kt @@ -20,11 +20,15 @@ import android.os.Bundle import android.view.View import android.view.animation.LinearInterpolator import android.widget.SeekBar +import androidx.core.content.ContextCompat import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentMaterialPlaybackControlsBinding import code.name.monkey.retromusic.extensions.* import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler @@ -33,7 +37,6 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_material_playback_controls.* /** * @author Hemanth S (h4h13). @@ -44,6 +47,9 @@ class MaterialControlsFragment : private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper + private var _binding: FragmentMaterialPlaybackControlsBinding? = null + private val binding get() = _binding!! + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -52,21 +58,28 @@ class MaterialControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentMaterialPlaybackControlsBinding.bind(view) setUpMusicControllers() - title.isSelected = true - text.isSelected = true + binding.title.isSelected = true + binding.text.isSelected = true + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) + } } private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(song) - songInfo.show() + binding.songInfo.text = getSongInfo(song) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } @@ -125,8 +138,8 @@ class MaterialControlsFragment : textColorSecondary() }.ripAlpha() - text.setTextColor(colorFinal) - progressSlider.applyColor(colorFinal) + binding.text.setTextColor(colorFinal) + binding.progressSlider.applyColor(colorFinal) volumeFragment?.setTintable(colorFinal) @@ -137,18 +150,28 @@ class MaterialControlsFragment : } private fun updatePlayPauseColor() { - playPauseButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.playPauseButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause_sharp_white_64dp) - } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_sharp_white_64dp) + binding.playPauseButton.setImageDrawable( + ContextCompat.getDrawable( + requireContext(), + R.drawable.ic_pause_outline + ) + ) + } else if (!MusicPlayerRemote.isPlaying) { + binding.playPauseButton.setImageDrawable( + ContextCompat.getDrawable( + requireContext(), + R.drawable.ic_play_arrow_outline + ) + ) } } @@ -162,26 +185,26 @@ class MaterialControlsFragment : private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -189,25 +212,31 @@ class MaterialControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat_sharp) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat_sharp) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat_sharp) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_sharp) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one_sharp) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one_sharp) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } @@ -219,7 +248,7 @@ class MaterialControlsFragment : } override fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -233,14 +262,19 @@ class MaterialControlsFragment : } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt index eb98c5e1d..888f6ad98 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/material/MaterialFragment.kt @@ -20,13 +20,13 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentMaterialBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_material.* /** * @author Hemanth S (h4h13). @@ -34,7 +34,7 @@ import kotlinx.android.synthetic.main.fragment_material.* class MaterialFragment : AbsPlayerFragment(R.layout.fragment_material) { override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } private var lastColor: Int = 0 @@ -44,6 +44,10 @@ class MaterialFragment : AbsPlayerFragment(R.layout.fragment_material) { private lateinit var playbackControlsFragment: MaterialControlsFragment + private var _binding: FragmentMaterialBinding? = null + private val binding get() = _binding!! + + override fun onShow() { playbackControlsFragment.show() } @@ -67,7 +71,7 @@ class MaterialFragment : AbsPlayerFragment(R.layout.fragment_material) { libraryViewModel.updateColor(color.backgroundColor) ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal), requireActivity() ) @@ -86,6 +90,7 @@ class MaterialFragment : AbsPlayerFragment(R.layout.fragment_material) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentMaterialBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() } @@ -99,7 +104,7 @@ class MaterialFragment : AbsPlayerFragment(R.layout.fragment_material) { } private fun setUpPlayerToolbar() { - playerToolbar.apply { + binding.playerToolbar.apply { inflateMenu(R.menu.menu_player) setNavigationOnClickListener { requireActivity().onBackPressed() } setOnMenuItemClickListener(this@MaterialFragment) @@ -125,4 +130,9 @@ class MaterialFragment : AbsPlayerFragment(R.layout.fragment_material) { return PlayerFragment() } } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt index b712e2c74..50a3a4662 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt @@ -23,6 +23,7 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentPlayerBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -31,7 +32,6 @@ import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.views.DrawableGradient -import kotlinx.android.synthetic.main.fragment_player.* class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player) { @@ -42,6 +42,10 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player) { private lateinit var controlsFragment: PlayerPlaybackControlsFragment private var valueAnimator: ValueAnimator? = null + private var _binding: FragmentPlayerBinding? = null + private val binding get() = _binding!! + + private fun colorize(i: Int) { if (valueAnimator != null) { valueAnimator?.cancel() @@ -61,7 +65,7 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player) { ATHUtil.resolveColor(requireContext(), R.attr.colorSurface) ), 0 ) - colorGradientBackground?.background = drawable + binding.colorGradientBackground.background = drawable } } valueAnimator?.setDuration(ViewUtil.RETRO_MUSIC_ANIM_TIME.toLong())?.start() @@ -90,7 +94,7 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player) { libraryViewModel.updateColor(color.backgroundColor) ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal), requireActivity() ) @@ -113,10 +117,16 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + private fun setUpSubFragments() { controlsFragment = childFragmentManager.findFragmentById(R.id.playbackControlsFragment) as PlayerPlaybackControlsFragment @@ -126,12 +136,13 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player) { } private fun setUpPlayerToolbar() { - playerToolbar.inflateMenu(R.menu.menu_player) - playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } - playerToolbar.setOnMenuItemClickListener(this) + binding.playerToolbar.inflateMenu(R.menu.menu_player) + //binding.playerToolbar.menu.setUpWithIcons() + binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } + binding.playerToolbar.setOnMenuItemClickListener(this) ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal), requireActivity() ) @@ -146,7 +157,7 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player) { } override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } companion object { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt index ec5daaa96..79631258c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerPlaybackControlsFragment.kt @@ -27,11 +27,14 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentPlayerPlaybackControlsBinding import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.ripAlpha import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler @@ -40,7 +43,6 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_player_playback_controls.* class PlayerPlaybackControlsFragment : AbsPlayerControlsFragment(R.layout.fragment_player_playback_controls) { @@ -48,6 +50,8 @@ class PlayerPlaybackControlsFragment : private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper + private var _binding: FragmentPlayerPlaybackControlsBinding? = null + private val binding get() = _binding!! override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -56,17 +60,24 @@ class PlayerPlaybackControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentPlayerPlaybackControlsBinding.bind(view) setUpMusicControllers() - playPauseButton.setOnClickListener { + binding.playPauseButton.setOnClickListener { if (MusicPlayerRemote.isPlaying) { MusicPlayerRemote.pauseSong() } else { MusicPlayerRemote.resumePlaying() } - showBonceAnimation(playPauseButton) + showBounceAnimation(binding.playPauseButton) + } + binding.title.isSelected = true + binding.text.isSelected = true + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) } - title.isSelected = true - text.isSelected = true } override fun setColor(color: MediaNotificationProcessor) { @@ -90,15 +101,15 @@ class PlayerPlaybackControlsFragment : }.ripAlpha() TintHelper.setTintAuto( - playPauseButton, + binding.playPauseButton, MaterialValueHelper.getPrimaryTextColor( requireContext(), ColorUtil.isColorLight(colorFinal) ), false ) - TintHelper.setTintAuto(playPauseButton, colorFinal, true) - progressSlider.applyColor(colorFinal) + TintHelper.setTintAuto(binding.playPauseButton, colorFinal, true) + binding.progressSlider.applyColor(colorFinal) volumeFragment?.setTintable(colorFinal) updateRepeatState() updateShuffleState() @@ -107,14 +118,14 @@ class PlayerPlaybackControlsFragment : private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(song) - songInfo.show() + binding.songInfo.text = getSongInfo(song) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } @@ -153,14 +164,14 @@ class PlayerPlaybackControlsFragment : } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow) + binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow) } } @@ -174,26 +185,26 @@ class PlayerPlaybackControlsFragment : private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -201,31 +212,37 @@ class PlayerPlaybackControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } public override fun show() { - playPauseButton.animate() + binding.playPauseButton.animate() .scaleX(1f) .scaleY(1f) .rotation(360f) @@ -234,7 +251,7 @@ class PlayerPlaybackControlsFragment : } public override fun hide() { - playPauseButton.apply { + binding.playPauseButton.apply { scaleX = 0f scaleY = 0f rotation = 0f @@ -242,7 +259,7 @@ class PlayerPlaybackControlsFragment : } override fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -256,14 +273,19 @@ class PlayerPlaybackControlsFragment : } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerControlFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerControlFragment.kt index 578feb781..6bb06ccde 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerControlFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerControlFragment.kt @@ -26,6 +26,7 @@ import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentPeakControlPlayerBinding import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote @@ -36,7 +37,6 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_peak_control_player.* /** * Created by hemanths on 2019-10-04. @@ -47,6 +47,8 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 + private var _binding: FragmentPeakControlPlayerBinding? = null + private val binding get() = _binding!! override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -68,6 +70,7 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe savedInstanceState: Bundle? ) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentPeakControlPlayerBinding.bind(view) setUpMusicControllers() } @@ -84,11 +87,11 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe } else { ThemeStore.accentColor(requireContext()) } - progressSlider.applyColor(controlsColor) + binding.progressSlider.applyColor(controlsColor) volumeFragment?.setTintableColor(controlsColor) - playPauseButton.setColorFilter(controlsColor, PorterDuff.Mode.SRC_IN) - nextButton.setColorFilter(controlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(controlsColor, PorterDuff.Mode.SRC_IN) + binding.playPauseButton.setColorFilter(controlsColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(controlsColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(controlsColor, PorterDuff.Mode.SRC_IN) if (!ATHUtil.isWindowBackgroundDark(requireContext())) { lastPlaybackControlsColor = @@ -107,9 +110,9 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) + binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } @@ -122,19 +125,19 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -148,41 +151,41 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) } private fun setUpPlayPauseFab() { - TintHelper.setTintAuto(playPauseButton, Color.WHITE, true) - TintHelper.setTintAuto(playPauseButton, Color.BLACK, false) - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + TintHelper.setTintAuto(binding.playPauseButton, Color.WHITE, true) + TintHelper.setTintAuto(binding.playPauseButton, Color.BLACK, false) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -192,19 +195,25 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } @@ -226,4 +235,9 @@ class PeakPlayerControlFragment : AbsPlayerControlsFragment(R.layout.fragment_pe override fun onShuffleModeChanged() { updateShuffleState() } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt index 0f8299060..3fe48ac44 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/peak/PeakPlayerFragment.kt @@ -20,14 +20,16 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentPeakPlayerBinding import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_peak_player.* /** * Created by hemanths on 2019-10-03. @@ -37,12 +39,22 @@ class PeakPlayerFragment : AbsPlayerFragment(R.layout.fragment_peak_player) { private lateinit var controlsFragment: PeakPlayerControlFragment private var lastColor: Int = 0 + private var _binding: FragmentPeakPlayerBinding? = null + private val binding get() = _binding!! + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentPeakPlayerBinding.bind(view) setUpPlayerToolbar() setUpSubFragments() - title.isSelected = true + binding.title.isSelected = true + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) + } } private fun setUpSubFragments() { @@ -55,7 +67,7 @@ class PeakPlayerFragment : AbsPlayerFragment(R.layout.fragment_peak_player) { } private fun setUpPlayerToolbar() { - playerToolbar.apply { + binding.playerToolbar.apply { inflateMenu(R.menu.menu_player) setNavigationOnClickListener { requireActivity().onBackPressed() } setOnMenuItemClickListener(this@PeakPlayerFragment) @@ -68,7 +80,7 @@ class PeakPlayerFragment : AbsPlayerFragment(R.layout.fragment_peak_player) { } override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } override fun onShow() { @@ -99,14 +111,14 @@ class PeakPlayerFragment : AbsPlayerFragment(R.layout.fragment_peak_player) { private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(song) - songInfo.show() + binding.songInfo.text = getSongInfo(song) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } @@ -119,4 +131,9 @@ class PeakPlayerFragment : AbsPlayerFragment(R.layout.fragment_peak_player) { super.onPlayingMetaChanged() updateSong() } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt index eeea0970f..2f3d45c34 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlaybackControlsFragment.kt @@ -28,6 +28,7 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentPlainControlsFragmentBinding import code.name.monkey.retromusic.extensions.applyColor import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show @@ -40,15 +41,6 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_adaptive_player_playback_controls.* -import kotlinx.android.synthetic.main.fragment_plain_controls_fragment.nextButton -import kotlinx.android.synthetic.main.fragment_plain_controls_fragment.playPauseButton -import kotlinx.android.synthetic.main.fragment_plain_controls_fragment.previousButton -import kotlinx.android.synthetic.main.fragment_plain_controls_fragment.progressSlider -import kotlinx.android.synthetic.main.fragment_plain_controls_fragment.repeatButton -import kotlinx.android.synthetic.main.fragment_plain_controls_fragment.shuffleButton -import kotlinx.android.synthetic.main.fragment_plain_controls_fragment.songCurrentProgress -import kotlinx.android.synthetic.main.fragment_plain_controls_fragment.songTotalTime /** * @author Hemanth S (h4h13). @@ -60,6 +52,8 @@ class PlainPlaybackControlsFragment : private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper + private var _binding: FragmentPlainControlsFragmentBinding? = null + private val binding get() = _binding!! override fun onPlayStateChanged() { updatePlayPauseDrawableState() @@ -87,10 +81,10 @@ class PlainPlaybackControlsFragment : private fun updateSong() { if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(MusicPlayerRemote.currentSong) - songInfo.show() + binding.songInfo.text = getSongInfo(MusicPlayerRemote.currentSong) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } @@ -111,20 +105,21 @@ class PlainPlaybackControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentPlainControlsFragmentBinding.bind(view) setUpMusicControllers() - playPauseButton.setOnClickListener { + binding.playPauseButton.setOnClickListener { if (MusicPlayerRemote.isPlaying) { MusicPlayerRemote.pauseSong() } else { MusicPlayerRemote.resumePlaying() } - showBonceAnimation() + showBounceAnimation() } } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun setUpMusicControllers() { @@ -137,13 +132,13 @@ class PlainPlaybackControlsFragment : private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } override fun setColor(color: MediaNotificationProcessor) { @@ -166,17 +161,17 @@ class PlainPlaybackControlsFragment : ThemeStore.accentColor(requireContext()) } volumeFragment?.setTintable(colorFinal) - progressSlider.applyColor(colorFinal) + binding.progressSlider.applyColor(colorFinal) TintHelper.setTintAuto( - playPauseButton, + binding.playPauseButton, MaterialValueHelper.getPrimaryTextColor( requireContext(), ColorUtil.isColorLight(colorFinal) ), false ) - TintHelper.setTintAuto(playPauseButton, colorFinal, true) + TintHelper.setTintAuto(binding.playPauseButton, colorFinal, true) updateRepeatState() updateShuffleState() @@ -184,16 +179,16 @@ class PlainPlaybackControlsFragment : } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -201,31 +196,37 @@ class PlainPlaybackControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } public override fun show() { - playPauseButton!!.animate() + binding.playPauseButton.animate() .scaleX(1f) .scaleY(1f) .rotation(360f) @@ -234,17 +235,15 @@ class PlainPlaybackControlsFragment : } public override fun hide() { - if (playPauseButton != null) { - playPauseButton!!.apply { - scaleX = 0f - scaleY = 0f - rotation = 0f - } + binding.playPauseButton.apply { + scaleX = 0f + scaleY = 0f + rotation = 0f } } - private fun showBonceAnimation() { - playPauseButton.apply { + private fun showBounceAnimation() { + binding.playPauseButton.apply { clearAnimation() scaleX = 0.9f scaleY = 0.9f @@ -268,14 +267,14 @@ class PlainPlaybackControlsFragment : private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) + binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } override fun setUpProgressSlider() { - progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { + binding.progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() { override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { if (fromUser) { MusicPlayerRemote.seekTo(progress) @@ -289,14 +288,19 @@ class PlainPlaybackControlsFragment : } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressSlider.max = total + binding.progressSlider.max = total - val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress) + val animator = ObjectAnimator.ofInt(binding.progressSlider, "progress", progress) animator.duration = SLIDER_ANIMATION_TIME animator.interpolator = LinearInterpolator() animator.start() - songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) - songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + binding.songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong()) + binding.songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong()) + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt index 8d26e678f..220ef458c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/plain/PlainPlayerFragment.kt @@ -20,22 +20,27 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentPlainPlayerBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_plain_player.* class PlainPlayerFragment : AbsPlayerFragment(R.layout.fragment_plain_player) { override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } private lateinit var plainPlaybackControlsFragment: PlainPlaybackControlsFragment private var lastColor: Int = 0 override val paletteColor: Int get() = lastColor + private var _binding: FragmentPlainPlayerBinding? = null + private val binding get() = _binding!! + override fun onPlayingMetaChanged() { super.onPlayingMetaChanged() @@ -44,8 +49,8 @@ class PlainPlayerFragment : AbsPlayerFragment(R.layout.fragment_plain_player) { private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName } override fun onServiceConnected() { @@ -54,7 +59,7 @@ class PlainPlayerFragment : AbsPlayerFragment(R.layout.fragment_plain_player) { } private fun setUpPlayerToolbar() { - playerToolbar.apply { + binding.playerToolbar.apply { inflateMenu(R.menu.menu_player) setNavigationOnClickListener { requireActivity().onBackPressed() } setOnMenuItemClickListener(this@PlainPlayerFragment) @@ -68,10 +73,17 @@ class PlainPlayerFragment : AbsPlayerFragment(R.layout.fragment_plain_player) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentPlainPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() - title.isSelected = true - text.isSelected = true + binding.title.isSelected = true + binding.text.isSelected = true + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) + } } private fun setUpSubFragments() { @@ -104,7 +116,7 @@ class PlainPlayerFragment : AbsPlayerFragment(R.layout.fragment_plain_player) { lastColor = color.primaryTextColor libraryViewModel.updateColor(color.primaryTextColor) ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal), requireActivity() ) @@ -120,4 +132,9 @@ class PlainPlayerFragment : AbsPlayerFragment(R.layout.fragment_plain_player) { updateIsFavorite() } } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt index 5a27715c8..16aaaf713 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlaybackControlsFragment.kt @@ -24,9 +24,12 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentSimpleControlsFragmentBinding import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler @@ -34,7 +37,6 @@ import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_simple_controls_fragment.* /** * @author Hemanth S (h4h13). @@ -43,6 +45,10 @@ import kotlinx.android.synthetic.main.fragment_simple_controls_fragment.* class SimplePlaybackControlsFragment : AbsPlayerControlsFragment(R.layout.fragment_simple_controls_fragment) { + private var _binding: FragmentSimpleControlsFragmentBinding? = null + private val binding get() = _binding!! + + private var lastPlaybackControlsColor: Int = 0 private var lastDisabledPlaybackControlsColor: Int = 0 private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper @@ -83,15 +89,25 @@ class SimplePlaybackControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentSimpleControlsFragmentBinding.bind(view) setUpMusicControllers() - title.isSelected = true - playPauseButton.setOnClickListener { + binding.title.isSelected = true + binding.text.setOnClickListener { + goToArtist(requireActivity()) + } + binding.playPauseButton.setOnClickListener { if (MusicPlayerRemote.isPlaying) { MusicPlayerRemote.pauseSong() } else { MusicPlayerRemote.resumePlaying() } - showBonceAnimation(playPauseButton) + showBounceAnimation(binding.playPauseButton) + } + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) } } @@ -105,26 +121,26 @@ class SimplePlaybackControlsFragment : private fun setUpPrevNext() { updatePrevNextColor() - nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } - previousButton.setOnClickListener { MusicPlayerRemote.back() } + binding.nextButton.setOnClickListener { MusicPlayerRemote.playNextSong() } + binding.previousButton.setOnClickListener { MusicPlayerRemote.back() } } private fun updatePrevNextColor() { - nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) - previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.nextButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.previousButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) } private fun setUpShuffleButton() { - shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.shuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> shuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.shuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> shuffleButton.setColorFilter( + else -> binding.shuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -132,39 +148,45 @@ class SimplePlaybackControlsFragment : } private fun setUpRepeatButton() { - repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.repeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter( + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - repeatButton.setImageResource(R.drawable.ic_repeat) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - repeatButton.setImageResource(R.drawable.ic_repeat_one) - repeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.repeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.repeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = song.artistName + binding.title.text = song.title + binding.text.text = song.artistName if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(song) - songInfo.show() + binding.songInfo.text = getSongInfo(song) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } @@ -174,7 +196,7 @@ class SimplePlaybackControlsFragment : } public override fun show() { - playPauseButton!!.animate() + binding.playPauseButton.animate() .scaleX(1f) .scaleY(1f) .rotation(360f) @@ -183,12 +205,10 @@ class SimplePlaybackControlsFragment : } public override fun hide() { - if (playPauseButton != null) { - playPauseButton!!.apply { - scaleX = 0f - scaleY = 0f - rotation = 0f - } + binding.playPauseButton.apply { + scaleX = 0f + scaleY = 0f + rotation = 0f } } @@ -196,7 +216,7 @@ class SimplePlaybackControlsFragment : } override fun onUpdateProgressViews(progress: Int, total: Int) { - songCurrentProgress!!.text = String.format( + binding.songCurrentProgress.text = String.format( "%s / %s", MusicUtil.getReadableDurationString(progress.toLong()), MusicUtil.getReadableDurationString(total.toLong()) @@ -226,15 +246,15 @@ class SimplePlaybackControlsFragment : volumeFragment?.setTintable(colorFinal) TintHelper.setTintAuto( - playPauseButton, + binding.playPauseButton, MaterialValueHelper.getPrimaryTextColor( requireContext(), ColorUtil.isColorLight(colorFinal) ), false ) - TintHelper.setTintAuto(playPauseButton, colorFinal, true) - text.setTextColor(colorFinal) + TintHelper.setTintAuto(binding.playPauseButton, colorFinal, true) + binding.text.setTextColor(colorFinal) updateRepeatState() updateShuffleState() @@ -242,14 +262,19 @@ class SimplePlaybackControlsFragment : } private fun setUpPlayPauseFab() { - playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.playPauseButton.setOnClickListener(PlayPauseButtonOnClickHandler()) } private fun updatePlayPauseDrawableState() { if (MusicPlayerRemote.isPlaying) { - playPauseButton.setImageResource(R.drawable.ic_pause) + binding.playPauseButton.setImageResource(R.drawable.ic_pause) } else { - playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) + binding.playPauseButton.setImageResource(R.drawable.ic_play_arrow_white_32dp) } } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt index 161cdb630..1a2b354d0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/simple/SimplePlayerFragment.kt @@ -20,12 +20,12 @@ import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentSimplePlayerBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_simple_player.* /** * @author Hemanth S (h4h13). @@ -33,8 +33,11 @@ import kotlinx.android.synthetic.main.fragment_simple_player.* class SimplePlayerFragment : AbsPlayerFragment(R.layout.fragment_simple_player) { + private var _binding: FragmentSimplePlayerBinding? = null + private val binding get() = _binding!! + override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } private var lastColor: Int = 0 @@ -45,6 +48,7 @@ class SimplePlayerFragment : AbsPlayerFragment(R.layout.fragment_simple_player) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentSimplePlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() } @@ -78,7 +82,7 @@ class SimplePlayerFragment : AbsPlayerFragment(R.layout.fragment_simple_player) libraryViewModel.updateColor(color.backgroundColor) controlsFragment.setColor(color) ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal), requireActivity() ) @@ -96,13 +100,18 @@ class SimplePlayerFragment : AbsPlayerFragment(R.layout.fragment_simple_player) } private fun setUpPlayerToolbar() { - playerToolbar.inflateMenu(R.menu.menu_player) - playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } - playerToolbar.setOnMenuItemClickListener(this) + binding.playerToolbar.inflateMenu(R.menu.menu_player) + binding.playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() } + binding.playerToolbar.setOnMenuItemClickListener(this) ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal), requireActivity() ) } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlaybackControlsFragment.kt index 04ab12046..3cfbc2f87 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlaybackControlsFragment.kt @@ -19,14 +19,16 @@ import android.os.Bundle import android.view.View import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentTinyControlsFragmentBinding import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_tiny_controls_fragment.* class TinyPlaybackControlsFragment : AbsPlayerControlsFragment(R.layout.fragment_tiny_controls_fragment) { + private var _binding: FragmentTinyControlsFragmentBinding? = null + private val binding get() = _binding!! override fun show() { } @@ -53,6 +55,7 @@ class TinyPlaybackControlsFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentTinyControlsFragmentBinding.bind(view) setUpMusicControllers() } @@ -63,20 +66,20 @@ class TinyPlaybackControlsFragment : } private fun setUpShuffleButton() { - playerShuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } + binding.playerShuffleButton.setOnClickListener { MusicPlayerRemote.toggleShuffleMode() } } private fun setUpRepeatButton() { - playerRepeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } + binding.playerRepeatButton.setOnClickListener { MusicPlayerRemote.cycleRepeatMode() } } override fun updateShuffleState() { when (MusicPlayerRemote.shuffleMode) { - MusicService.SHUFFLE_MODE_SHUFFLE -> playerShuffleButton.setColorFilter( + MusicService.SHUFFLE_MODE_SHUFFLE -> binding.playerShuffleButton.setColorFilter( lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) - else -> playerShuffleButton.setColorFilter( + else -> binding.playerShuffleButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) @@ -86,19 +89,25 @@ class TinyPlaybackControlsFragment : override fun updateRepeatState() { when (MusicPlayerRemote.repeatMode) { MusicService.REPEAT_MODE_NONE -> { - playerRepeatButton.setImageResource(R.drawable.ic_repeat) - playerRepeatButton.setColorFilter( + binding.playerRepeatButton.setImageResource(R.drawable.ic_repeat) + binding.playerRepeatButton.setColorFilter( lastDisabledPlaybackControlsColor, PorterDuff.Mode.SRC_IN ) } MusicService.REPEAT_MODE_ALL -> { - playerRepeatButton.setImageResource(R.drawable.ic_repeat) - playerRepeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.playerRepeatButton.setImageResource(R.drawable.ic_repeat) + binding.playerRepeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } MusicService.REPEAT_MODE_THIS -> { - playerRepeatButton.setImageResource(R.drawable.ic_repeat_one) - playerRepeatButton.setColorFilter(lastPlaybackControlsColor, PorterDuff.Mode.SRC_IN) + binding.playerRepeatButton.setImageResource(R.drawable.ic_repeat_one) + binding.playerRepeatButton.setColorFilter( + lastPlaybackControlsColor, + PorterDuff.Mode.SRC_IN + ) } } } @@ -115,4 +124,9 @@ class TinyPlaybackControlsFragment : override fun onShuffleModeChanged() { updateShuffleState() } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt index 9f4833c20..630efbcef 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/tiny/TinyPlayerFragment.kt @@ -16,17 +16,22 @@ package code.name.monkey.retromusic.fragments.player.tiny import android.animation.AnimatorSet import android.animation.ObjectAnimator -import android.os.Bundle -import android.os.Handler +import android.annotation.SuppressLint +import android.content.Context +import android.os.* +import android.view.GestureDetector +import android.view.MotionEvent import android.view.View import android.view.animation.LinearInterpolator import androidx.appcompat.widget.Toolbar import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentTinyPlayerBinding import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show -import code.name.monkey.retromusic.fragments.MiniPlayerFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment +import code.name.monkey.retromusic.fragments.base.goToAlbum +import code.name.monkey.retromusic.fragments.base.goToArtist import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper @@ -36,15 +41,20 @@ import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import kotlinx.android.synthetic.main.fragment_tiny_player.* +import kotlin.math.abs class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player), MusicProgressViewUpdateHelper.Callback { + private var _binding: FragmentTinyPlayerBinding? = null + private val binding get() = _binding!! + private var lastColor: Int = 0 private var toolbarColor: Int = 0 + private var isDragEnabled = false + lateinit var animator: ObjectAnimator override fun playerToolbar(): Toolbar { - return playerToolbar + return binding.playerToolbar } override fun onShow() { @@ -70,21 +80,22 @@ class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player), toolbarColor = color.secondaryTextColor controlsFragment.setColor(color) - title.setTextColor(color.primaryTextColor) - playerSongTotalTime.setTextColor(color.primaryTextColor) - text.setTextColor(color.secondaryTextColor) - songInfo.setTextColor(color.secondaryTextColor) - ViewUtil.setProgressDrawable(progressBar, color.backgroundColor) + binding.title.setTextColor(color.primaryTextColor) + binding.playerSongTotalTime.setTextColor(color.primaryTextColor) + binding.text.setTextColor(color.secondaryTextColor) + binding.songInfo.setTextColor(color.secondaryTextColor) + ViewUtil.setProgressDrawable(binding.progressBar, color.backgroundColor) - Handler().post { + Handler(Looper.myLooper()!!).post { ToolbarContentTintHelper.colorizeToolbar( - playerToolbar, + binding.playerToolbar, color.secondaryTextColor, requireActivity() ) } } + override fun onFavoriteToggled() { toggleFavorite(MusicPlayerRemote.currentSong) } @@ -109,25 +120,33 @@ class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player), private fun updateSong() { val song = MusicPlayerRemote.currentSong - title.text = song.title - text.text = String.format("%s \nby - %s", song.albumName, song.artistName) + binding.title.text = song.title + binding.text.text = String.format("%s \nby - %s", song.albumName, song.artistName) if (PreferenceUtil.isSongInfo) { - songInfo.text = getSongInfo(song) - songInfo.show() + binding.songInfo.text = getSongInfo(song) + binding.songInfo.show() } else { - songInfo.hide() + binding.songInfo.hide() } } + @SuppressLint("ClickableViewAccessibility") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - title.isSelected = true - progressBar.setOnClickListener(PlayPauseButtonOnClickHandler()) - progressBar.setOnTouchListener(MiniPlayerFragment.FlingPlayBackController(requireContext())) + _binding = FragmentTinyPlayerBinding.bind(view) + binding.title.isSelected = true + binding.progressBar.setOnClickListener(PlayPauseButtonOnClickHandler()) + binding.progressBar.setOnTouchListener(ProgressHelper(requireContext())) setUpPlayerToolbar() setUpSubFragments() + binding.title.setOnClickListener { + goToAlbum(requireActivity()) + } + binding.text.setOnClickListener { + goToArtist(requireActivity()) + } } private fun setUpSubFragments() { @@ -139,7 +158,7 @@ class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player), } private fun setUpPlayerToolbar() { - playerToolbar.apply { + binding.playerToolbar.apply { inflateMenu(R.menu.menu_player) setNavigationOnClickListener { requireActivity().onBackPressed() } setOnMenuItemClickListener(this@TinyPlayerFragment) @@ -164,20 +183,113 @@ class TinyPlayerFragment : AbsPlayerFragment(R.layout.fragment_tiny_player), } override fun onUpdateProgressViews(progress: Int, total: Int) { - progressBar.max = total + binding.progressBar.max = total - val animator = ObjectAnimator.ofInt(progressBar, "progress", progress) + if (isDragEnabled) { + binding.progressBar.progress = progress + } else { + animator = ObjectAnimator.ofInt(binding.progressBar, "progress", progress) - val animatorSet = AnimatorSet() - animatorSet.playSequentially(animator) + val animatorSet = AnimatorSet() + animatorSet.playSequentially(animator) - animatorSet.duration = 1500 - animatorSet.interpolator = LinearInterpolator() - animatorSet.start() - - playerSongTotalTime.text = String.format( + animatorSet.duration = 1500 + animatorSet.interpolator = LinearInterpolator() + animatorSet.start() + } + binding.playerSongTotalTime.text = String.format( "%s/%s", MusicUtil.getReadableDurationString(total.toLong()), MusicUtil.getReadableDurationString(progress.toLong()) ) } + + inner class ProgressHelper(context: Context) : View.OnTouchListener { + private var initialY: Int = 0 + private var initialProgress = 0 + private var progress: Int = 0 + private val displayHeight = resources.displayMetrics.heightPixels + private var gestureDetector: GestureDetector + + init { + gestureDetector = GestureDetector(context, object : + GestureDetector.SimpleOnGestureListener() { + + override fun onLongPress(e: MotionEvent?) { + if (abs(e!!.y - initialY) <= 2) { + vibrate() + isDragEnabled = true + binding.progressBar.parent.requestDisallowInterceptTouchEvent(true) + animator.pause() + } + super.onLongPress(e) + } + + override fun onFling( + e1: MotionEvent, + e2: MotionEvent, + velocityX: Float, + velocityY: Float + ): Boolean { + if (abs(velocityX) > abs(velocityY)) { + if (velocityX < 0) { + MusicPlayerRemote.playNextSong() + return true + } else if (velocityX > 0) { + MusicPlayerRemote.playPreviousSong() + return true + } + } + return false + } + }) + } + + @SuppressLint("ClickableViewAccessibility") + override fun onTouch(v: View, event: MotionEvent): Boolean { + when (event.actionMasked) { + MotionEvent.ACTION_DOWN -> { + initialProgress = MusicPlayerRemote.songProgressMillis + initialY = event.y.toInt() + progressViewUpdateHelper.stop() + } + MotionEvent.ACTION_UP, + MotionEvent.ACTION_CANCEL -> { + progressViewUpdateHelper.start() + if (isDragEnabled) { + MusicPlayerRemote.seekTo(progress) + isDragEnabled = false + return true + } + } + MotionEvent.ACTION_MOVE -> { + if (isDragEnabled) { + val diffY = (initialY - event.y).toInt() + progress = + initialProgress + diffY * (binding.progressBar.max / displayHeight) // Multiplier + if (progress > 0 && progress < binding.progressBar.max) { + onUpdateProgressViews( + progress, + MusicPlayerRemote.songDurationMillis + ) + } + } + } + } + return gestureDetector.onTouchEvent(event) + } + + private fun vibrate() { + val v = requireContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator? + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + v!!.vibrate(VibrationEffect.createOneShot(10, VibrationEffect.DEFAULT_AMPLITUDE)) + } else { + v!!.vibrate(10) + } + } + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt index 38c149b56..320f9a88f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt @@ -1,77 +1,101 @@ package code.name.monkey.retromusic.fragments.playlists -import android.graphics.Color import android.os.Bundle +import android.util.Log import android.view.Menu import android.view.MenuInflater import android.view.MenuItem import android.view.View +import androidx.activity.addCallback import androidx.core.view.ViewCompat +import androidx.core.view.doOnPreDraw import androidx.core.view.isVisible import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.adapter.song.ShuffleButtonSongAdapter +import code.name.monkey.retromusic.adapter.song.OrderablePlaylistSongAdapter +import code.name.monkey.retromusic.databinding.FragmentPlaylistDetailBinding import code.name.monkey.retromusic.db.PlaylistWithSongs import code.name.monkey.retromusic.db.toSongs import code.name.monkey.retromusic.extensions.dipToPix -import code.name.monkey.retromusic.extensions.resolveColor +import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper +import code.name.monkey.retromusic.interfaces.ICabHolder import code.name.monkey.retromusic.model.Song -import com.google.android.material.transition.MaterialArcMotion -import com.google.android.material.transition.MaterialContainerTransform -import kotlinx.android.synthetic.main.fragment_playlist_detail.* +import code.name.monkey.retromusic.util.RetroColorUtil +import com.afollestad.materialcab.MaterialCab +import com.google.android.material.transition.MaterialSharedAxis +import com.h6ah4i.android.widget.advrecyclerview.animator.DraggableItemAnimator +import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator +import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.core.parameter.parametersOf -class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playlist_detail) { + +class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playlist_detail), + ICabHolder { private val arguments by navArgs() private val viewModel by viewModel { parametersOf(arguments.extraPlaylist) } - private lateinit var playlist: PlaylistWithSongs - private lateinit var playlistSongAdapter: ShuffleButtonSongAdapter + private var _binding: FragmentPlaylistDetailBinding? = null + private val binding get() = _binding!! - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - sharedElementEnterTransition = MaterialContainerTransform().apply { - drawingViewId = R.id.fragment_container - duration = 300L - scrimColor = Color.TRANSPARENT - setAllContainerColors(requireContext().resolveColor(R.attr.colorSurface)) - setPathMotion(MaterialArcMotion()) - } - } + + private lateinit var playlist: PlaylistWithSongs + private lateinit var playlistSongAdapter: OrderablePlaylistSongAdapter override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentPlaylistDetailBinding.bind(view) + enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true).addTarget(view) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) setHasOptionsMenu(true) - mainActivity.setBottomBarVisibility(false) mainActivity.addMusicServiceEventListener(viewModel) - mainActivity.setSupportActionBar(toolbar) - ViewCompat.setTransitionName(container, "playlist") + mainActivity.setSupportActionBar(binding.toolbar) + ViewCompat.setTransitionName(binding.container, "playlist") playlist = arguments.extraPlaylist - toolbar.title = playlist.playlistEntity.playlistName + binding.toolbar.title = playlist.playlistEntity.playlistName setUpRecyclerView() viewModel.getSongs().observe(viewLifecycleOwner, { songs(it.toSongs()) }) + postponeEnterTransition() + requireView().doOnPreDraw { startPostponedEnterTransition() } + requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { + if (!handleBackPress()) { + remove() + requireActivity().onBackPressed() + } + } } private fun setUpRecyclerView() { - playlistSongAdapter = ShuffleButtonSongAdapter( + playlistSongAdapter = OrderablePlaylistSongAdapter( + playlist.playlistEntity, requireActivity(), ArrayList(), R.layout.item_list, - null, + this ) - recyclerView.apply { + + val dragDropManager = RecyclerViewDragDropManager() + + val wrappedAdapter: RecyclerView.Adapter<*> = + dragDropManager.createWrappedAdapter(playlistSongAdapter) + + + val animator: GeneralItemAnimator = DraggableItemAnimator() + binding.recyclerView.itemAnimator = animator + + dragDropManager.attachRecyclerView(binding.recyclerView) + + binding.recyclerView.apply { layoutManager = LinearLayoutManager(requireContext()) - adapter = playlistSongAdapter + binding.recyclerView.adapter = wrappedAdapter } playlistSongAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { @@ -93,32 +117,70 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli private fun checkForPadding() { val height = dipToPix(52f) - recyclerView.setPadding(0, 0, 0, height.toInt()) + binding.recyclerView.setPadding(0, 0, 0, height.toInt()) } private fun checkIsEmpty() { checkForPadding() - empty.isVisible = playlistSongAdapter.itemCount == 0 - emptyText.isVisible = playlistSongAdapter.itemCount == 0 + binding.empty.isVisible = playlistSongAdapter.itemCount == 0 + binding.emptyText.isVisible = playlistSongAdapter.itemCount == 0 } override fun onDestroy() { - recyclerView?.itemAnimator = null - recyclerView?.adapter = null super.onDestroy() + _binding = null + } + + override fun onPause() { + playlistSongAdapter.saveSongs(playlist.playlistEntity) + super.onPause() } private fun showEmptyView() { - empty.visibility = View.VISIBLE - emptyText.visibility = View.VISIBLE + binding.empty.visibility = View.VISIBLE + binding.emptyText.visibility = View.VISIBLE } fun songs(songs: List) { - progressIndicator.hide() + binding.progressIndicator.hide() if (songs.isNotEmpty()) { + Log.i("Updated", songs[0].title) playlistSongAdapter.swapDataSet(songs) } else { showEmptyView() } } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + + private fun handleBackPress(): Boolean { + cab?.let { + if (it.isActive) { + it.finish() + return true + } + } + return false + } + + private var cab: MaterialCab? = null + + override fun openCab(menuRes: Int, callback: MaterialCab.Callback): MaterialCab { + cab?.let { + println("Cab") + if (it.isActive) { + it.finish() + } + } + cab = MaterialCab(mainActivity, R.id.cab_stub) + .setMenu(menuRes) + .setCloseDrawableRes(R.drawable.ic_close) + .setBackgroundColor(RetroColorUtil.shiftBackgroundColorForLightText(surfaceColor())) + .start(callback) + return cab as MaterialCab + } + } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsViewModel.kt index 3f6f874e6..3416caa23 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsViewModel.kt @@ -41,4 +41,5 @@ class PlaylistDetailsViewModel( override fun onPlayStateChanged() {} override fun onRepeatModeChanged() {} override fun onShuffleModeChanged() {} + override fun onFavoriteStateChanged() {} } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt index f99a43cec..9a4880fed 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistsFragment.kt @@ -15,17 +15,11 @@ package code.name.monkey.retromusic.fragments.playlists import android.os.Bundle -import android.view.Menu -import android.view.MenuInflater -import android.view.MenuItem -import android.view.SubMenu -import android.view.View +import android.view.* import androidx.core.os.bundleOf import androidx.core.view.MenuCompat -import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.GridLayoutManager -import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.retromusic.EXTRA_PLAYLIST import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.playlist.PlaylistAdapter @@ -35,12 +29,13 @@ import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewCustomGridSizeF import code.name.monkey.retromusic.helper.SortOrder.PlaylistSortOrder import code.name.monkey.retromusic.interfaces.IPlaylistClickListener import code.name.monkey.retromusic.util.PreferenceUtil -import com.google.android.material.transition.MaterialElevationScale -import kotlinx.android.synthetic.main.fragment_library.* +import com.google.android.gms.cast.framework.CastButtonFactory +import com.google.android.material.transition.MaterialSharedAxis class PlaylistsFragment : AbsRecyclerViewCustomGridSizeFragment(), IPlaylistClickListener { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) libraryViewModel.getPlaylists().observe(viewLifecycleOwner, { @@ -51,6 +46,8 @@ class PlaylistsFragment : }) } + override val titleRes: Int + get() = R.string.playlists override val emptyMessage: Int get() = R.string.no_playlists @@ -68,11 +65,6 @@ class PlaylistsFragment : ) } - override fun onPrepareOptionsMenu(menu: Menu) { - super.onPrepareOptionsMenu(menu) - ToolbarContentTintHelper.handleOnPrepareOptionsMenu(requireActivity(), toolbar) - } - override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { super.onCreateOptionsMenu(menu, inflater) menu.removeItem(R.id.action_grid_size) @@ -81,7 +73,9 @@ class PlaylistsFragment : menu.add(0, R.id.action_import_playlist, 0, R.string.import_playlist) menu.findItem(R.id.action_settings).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER) setUpSortOrderMenu(menu.findItem(R.id.action_sort_order).subMenu) - MenuCompat.setGroupDividerEnabled(menu, true); + MenuCompat.setGroupDividerEnabled(menu, true) + //Setting up cast button + CastButtonFactory.setUpMediaRouteButton(requireContext(), menu, R.id.action_cast) } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -160,7 +154,7 @@ class PlaylistsFragment : } override fun loadGridSize(): Int { - return 1 + return 2 } override fun saveGridSize(gridColumns: Int) { @@ -168,7 +162,7 @@ class PlaylistsFragment : } override fun loadGridSizeLand(): Int { - return 2 + return 4 } override fun saveGridSizeLand(gridColumns: Int) { @@ -176,7 +170,7 @@ class PlaylistsFragment : } override fun loadLayoutRes(): Int { - return R.layout.item_list + return R.layout.item_card } override fun saveLayoutRes(layoutRes: Int) { @@ -184,17 +178,13 @@ class PlaylistsFragment : } override fun onPlaylistClick(playlistWithSongs: PlaylistWithSongs, view: View) { - exitTransition = MaterialElevationScale(false).apply { - duration = 300L - } - reenterTransition = MaterialElevationScale(true).apply { - duration = 300L - } + exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true).addTarget(requireView()) + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) findNavController().navigate( R.id.playlistDetailsFragment, bundleOf(EXTRA_PLAYLIST to playlistWithSongs), null, - FragmentNavigatorExtras(view to "playlist") + null ) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt index 0af0c72c4..c8a218c72 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/queue/PlayingQueueFragment.kt @@ -28,7 +28,6 @@ import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropM import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils -import kotlinx.android.synthetic.main.activity_playing_queue.* /** * Created by hemanths on 2019-12-08. @@ -39,6 +38,8 @@ class PlayingQueueFragment : AbsRecyclerViewFragment) { @@ -100,21 +129,21 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa searchAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { override fun onChanged() { super.onChanged() - empty.isVisible = searchAdapter.itemCount < 1 + binding.empty.isVisible = searchAdapter.itemCount < 1 val height = dipToPix(52f) - recyclerView.setPadding(0, 0, 0, height.toInt()) + binding.recyclerView.setPadding(0, 0, 0, height.toInt()) } }) - recyclerView.apply { + binding.recyclerView.apply { layoutManager = LinearLayoutManager(requireContext()) adapter = searchAdapter addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) if (dy > 0) { - keyboardPopup.shrink() + binding.keyboardPopup.shrink() } else if (dy < 0) { - keyboardPopup.extend() + binding.keyboardPopup.extend() } } }) @@ -122,7 +151,7 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa } override fun afterTextChanged(newText: Editable?) { - search(newText.toString()) + if (!newText.isNullOrEmpty()) search(newText.toString()) } override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { @@ -133,10 +162,17 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa private fun search(query: String) { this.query = query - TransitionManager.beginDelayedTransition(appBarLayout) - voiceSearch.isGone = query.isNotEmpty() - clearText.isVisible = query.isNotEmpty() - libraryViewModel.search(query) + TransitionManager.beginDelayedTransition(binding.appBarLayout) + binding.voiceSearch.isGone = query.isNotEmpty() + binding.clearText.isVisible = query.isNotEmpty() + val filters = getFilters() + libraryViewModel.search(query, filters) + } + + private fun getFilters(): List { + return binding.searchFilterGroup.children.toList().map { + (it as Chip).isChecked + } } private fun startMicSearch() { @@ -161,6 +197,17 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa override fun onDestroyView() { hideKeyboard(view) super.onDestroyView() + _binding = null + } + + override fun onPause() { + super.onPause() + hideKeyboard(view) + } + + override fun onResume() { + super.onResume() + mainActivity.setBottomBarVisibility(false) } private fun hideKeyboard(view: View?) { @@ -170,6 +217,27 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWa imm.hideSoftInputFromWindow(view.windowToken, 0) } } + + override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) { + val checkedChip = (buttonView as Chip) + checkedChip.isCloseIconVisible = isChecked + if (isChecked) { + val color = ThemeStore.textColorPrimaryInverse(requireContext()) + checkedChip.apply { + setTextColor(color) + chipIconTint = ColorStateList.valueOf(color) + chipStrokeWidth = 0F + } + } else { + val color = ThemeStore.textColorPrimary(requireContext()) + checkedChip.apply { + setTextColor(color) + chipIconTint = ColorStateList.valueOf(color) + chipStrokeWidth = 2F + } + } + search(binding.searchView.text.toString()) + } } fun TextInputEditText.clearText() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt index 19190713f..5ef8ce7e1 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/AbsSettingsFragment.kt @@ -87,6 +87,10 @@ abstract class AbsSettingsFragment : ATEPreferenceFragmentCompat() { val fragment = BlacklistPreferenceDialog.newInstance() fragment.show(childFragmentManager, preference.key) } + is DurationPreference -> { + val fragment = DurationPreferenceDialog.newInstance() + fragment.show(childFragmentManager, preference.key) + } else -> super.onDisplayPreferenceDialog(preference) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt index 45160814e..30b39fa5f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/MainSettingsFragment.kt @@ -24,12 +24,17 @@ import androidx.navigation.fragment.findNavController import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.FragmentMainSettingsBinding import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show import code.name.monkey.retromusic.util.NavigationUtil -import kotlinx.android.synthetic.main.fragment_main_settings.* class MainSettingsFragment : Fragment(), View.OnClickListener { + + private var _binding: FragmentMainSettingsBinding? = null + private val binding get() = _binding!! + + override fun onClick(view: View) { when (view.id) { R.id.generalSettings -> findNavController().navigate(R.id.action_mainSettingsFragment_to_themeSettingsFragment) @@ -47,34 +52,40 @@ class MainSettingsFragment : Fragment(), View.OnClickListener { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_main_settings, container, false) + ): View { + _binding = FragmentMainSettingsBinding.inflate(inflater, container, false) + return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - generalSettings.setOnClickListener(this) - audioSettings.setOnClickListener(this) - nowPlayingSettings.setOnClickListener(this) - personalizeSettings.setOnClickListener(this) - imageSettings.setOnClickListener(this) - notificationSettings.setOnClickListener(this) - otherSettings.setOnClickListener(this) - aboutSettings.setOnClickListener(this) + binding.generalSettings.setOnClickListener(this) + binding.audioSettings.setOnClickListener(this) + binding.nowPlayingSettings.setOnClickListener(this) + binding.personalizeSettings.setOnClickListener(this) + binding.imageSettings.setOnClickListener(this) + binding.notificationSettings.setOnClickListener(this) + binding.otherSettings.setOnClickListener(this) + binding.aboutSettings.setOnClickListener(this) - buyProContainer.apply { + binding.buyProContainer.apply { if (App.isProVersion()) hide() else show() setOnClickListener { NavigationUtil.goToProVersion(requireContext()) } } - buyPremium.setOnClickListener { + binding.buyPremium.setOnClickListener { NavigationUtil.goToProVersion(requireContext()) } ThemeStore.accentColor(requireContext()).let { - buyPremium.setTextColor(it) - diamondIcon.imageTintList = ColorStateList.valueOf(it) + binding.buyPremium.setTextColor(it) + binding.diamondIcon.imageTintList = ColorStateList.valueOf(it) } } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/OtherSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/OtherSettingsFragment.kt index 319fcda8c..f7fb48fef 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/OtherSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/OtherSettingsFragment.kt @@ -23,7 +23,10 @@ import code.name.monkey.retromusic.LAST_ADDED_CUTOFF import code.name.monkey.retromusic.R import code.name.monkey.retromusic.fragments.LibraryViewModel import code.name.monkey.retromusic.fragments.ReloadType.HomeSections +import com.google.android.play.core.splitinstall.SplitInstallManagerFactory +import com.google.android.play.core.splitinstall.SplitInstallRequest import org.koin.androidx.viewmodel.ext.android.sharedViewModel +import java.util.* /** * @author Hemanth S (h4h13). @@ -35,6 +38,7 @@ class OtherSettingsFragment : AbsSettingsFragment() { override fun invalidateSettings() { val languagePreference: ATEListPreference? = findPreference(LANGUAGE_NAME) languagePreference?.setOnPreferenceChangeListener { _, _ -> + println("Invalidated") requireActivity().recreate() return@setOnPreferenceChangeListener true } @@ -55,6 +59,21 @@ class OtherSettingsFragment : AbsSettingsFragment() { val languagePreference: Preference? = findPreference(LANGUAGE_NAME) languagePreference?.setOnPreferenceChangeListener { prefs, newValue -> setSummary(prefs, newValue) + val code = newValue.toString() + val manager = SplitInstallManagerFactory.create(requireContext()) + if (code != "auto") { + // Try to download language resources + val request = + SplitInstallRequest.newBuilder().addLanguage(Locale.forLanguageTag(code)) + .build() + manager.startInstall(request) + // Recreate the activity on download complete + .addOnCompleteListener { + activity?.recreate() + } + } else { + requireActivity().recreate() + } true } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt index b138d2995..befbca95c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/settings/ThemeSettingsFragment.kt @@ -18,6 +18,8 @@ import android.os.Build import android.os.Bundle import androidx.preference.Preference import androidx.preference.TwoStatePreference +import code.name.monkey.appthemehelper.ACCENT_COLORS +import code.name.monkey.appthemehelper.ACCENT_COLORS_SUB import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEColorPreference import code.name.monkey.appthemehelper.common.prefs.supportv7.ATESwitchPreference @@ -26,7 +28,8 @@ import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.* import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager import code.name.monkey.retromusic.util.PreferenceUtil -import com.afollestad.materialdialogs.color.ColorChooserDialog +import com.afollestad.materialdialogs.MaterialDialog +import com.afollestad.materialdialogs.color.colorChooser /** * @author Hemanth S (h4h13). @@ -55,12 +58,19 @@ class ThemeSettingsFragment : AbsSettingsFragment() { val accentColor = ThemeStore.accentColor(requireContext()) accentColorPref?.setColor(accentColor, ColorUtil.darkenColor(accentColor)) accentColorPref?.setOnPreferenceClickListener { - ColorChooserDialog.Builder(requireContext(), R.string.accent_color) - .accentMode(true) - .allowUserColorInput(true) - .allowUserColorInputAlpha(false) - .preselect(accentColor) - .show(requireActivity()) + MaterialDialog(requireContext()).show { + colorChooser( + initialSelection = accentColor, + showAlphaSelector = false, + colors = ACCENT_COLORS, + subColors = ACCENT_COLORS_SUB, allowCustomArgb = true + ) { _, color -> + ThemeStore.editTheme(requireContext()).accentColor(color).commit() + if (VersionUtils.hasNougatMR()) + DynamicShortcutManager(requireContext()).updateDynamicShortcuts() + requireActivity().recreate() + } + } return@setOnPreferenceClickListener true } val blackTheme: ATESwitchPreference? = findPreference(BLACK_THEME) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt index c9f791412..022b4999a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/songs/SongsFragment.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Hemanth Savarla. + * Cop()yright (c) 2020 Hemanth Savarla. * * Licensed under the GNU General Public License v3 * @@ -16,8 +16,8 @@ package code.name.monkey.retromusic.fragments.songs import android.os.Bundle import android.view.* +import androidx.activity.addCallback import androidx.annotation.LayoutRes -import androidx.lifecycle.Observer import androidx.recyclerview.widget.GridLayoutManager import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.song.ShuffleButtonSongAdapter @@ -31,6 +31,7 @@ import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroColorUtil import code.name.monkey.retromusic.util.RetroUtil import com.afollestad.materialcab.MaterialCab +import com.google.android.gms.cast.framework.CastButtonFactory class SongsFragment : AbsRecyclerViewCustomGridSizeFragment(), ICabHolder { @@ -42,13 +43,29 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment SongSortOrder.SONG_A_Z R.id.action_song_sort_order_desc -> SongSortOrder.SONG_Z_A R.id.action_song_sort_order_artist -> SongSortOrder.SONG_ARTIST + R.id.action_song_sort_order_album_artist -> SongSortOrder.SONG_ALBUM_ARTIST R.id.action_song_sort_order_album -> SongSortOrder.SONG_ALBUM R.id.action_song_sort_order_year -> SongSortOrder.SONG_YEAR R.id.action_song_sort_order_date -> SongSortOrder.SONG_DATE @@ -306,6 +333,11 @@ class SongsFragment : AbsRecyclerViewCustomGridSizeFragment build() { - //noinspection unchecked - return createBaseRequest(requestManager, song, ignoreMediaStore) - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(DEFAULT_ERROR_IMAGE) - .animate(DEFAULT_ANIMATION) - .signature(createSignature(song)); - } - } - - public static class BitmapBuilder { - private final Builder builder; - - BitmapBuilder(Builder builder) { - this.builder = builder; - } - - public BitmapRequestBuilder build() { - //noinspection unchecked - return createBaseRequest(builder.requestManager, builder.song, builder.ignoreMediaStore) - .asBitmap() - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(DEFAULT_ERROR_IMAGE) - .animate(DEFAULT_ANIMATION) - .dontTransform() - .signature(createSignature(builder.song)); - } - } - - public static class PaletteBuilder { - private final Context context; - private final Builder builder; - - PaletteBuilder(Builder builder, Context context) { - this.builder = builder; - this.context = context; - } - - public BitmapRequestBuilder build() { - - //noinspection unchecked - return createBaseRequest(builder.requestManager, builder.song, builder.ignoreMediaStore) - .asBitmap() - .transcode(new BitmapPaletteTranscoder(context), BitmapPaletteWrapper.class) - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(DEFAULT_ERROR_IMAGE) - .animate(DEFAULT_ANIMATION) - .signature(createSignature(builder.song)); - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/ArtistGlideRequest.java b/app/src/main/java/code/name/monkey/retromusic/glide/ArtistGlideRequest.java deleted file mode 100644 index b04854fac..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/glide/ArtistGlideRequest.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.glide; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; -import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; -import code.name.monkey.appthemehelper.ThemeStore; -import code.name.monkey.appthemehelper.util.TintHelper; -import code.name.monkey.retromusic.App; -import code.name.monkey.retromusic.R; -import code.name.monkey.retromusic.glide.artistimage.ArtistImage; -import code.name.monkey.retromusic.glide.palette.BitmapPaletteTranscoder; -import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper; -import code.name.monkey.retromusic.model.Artist; -import code.name.monkey.retromusic.util.ArtistSignatureUtil; -import code.name.monkey.retromusic.util.CustomArtistImageUtil; -import com.bumptech.glide.BitmapRequestBuilder; -import com.bumptech.glide.DrawableRequestBuilder; -import com.bumptech.glide.DrawableTypeRequest; -import com.bumptech.glide.Priority; -import com.bumptech.glide.RequestManager; -import com.bumptech.glide.load.Key; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.drawable.GlideDrawable; -import com.bumptech.glide.request.target.Target; - -public class ArtistGlideRequest { - private static final int DEFAULT_ANIMATION = android.R.anim.fade_in; - - private static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.SOURCE; - - private static final int DEFAULT_ERROR_IMAGE = R.drawable.default_artist_art; - - @NonNull - private static Key createSignature(@NonNull Artist artist) { - return ArtistSignatureUtil.getInstance(App.Companion.getContext()) - .getArtistSignature(artist.getName()); - } - - @NonNull - private static DrawableTypeRequest createBaseRequest( - @NonNull RequestManager requestManager, - @NonNull Artist artist, - boolean noCustomImage, - boolean forceDownload) { - boolean hasCustomImage = - CustomArtistImageUtil.Companion.getInstance(App.Companion.getContext()) - .hasCustomArtistImage(artist); - if (noCustomImage || !hasCustomImage) { - return requestManager.load(new ArtistImage(artist)); - } else { - return requestManager.load(CustomArtistImageUtil.getFile(artist)); - } - } - - public static class Builder { - final Artist artist; - final RequestManager requestManager; - private Drawable error; - private boolean forceDownload; - private boolean noCustomImage; - - private Builder(@NonNull RequestManager requestManager, Artist artist) { - this.requestManager = requestManager; - this.artist = artist; - error = - TintHelper.createTintedDrawable( - ContextCompat.getDrawable(App.Companion.getContext(), R.drawable.default_artist_art), - ThemeStore.Companion.accentColor(App.Companion.getContext())); - } - - public static Builder from(@NonNull RequestManager requestManager, Artist artist) { - return new Builder(requestManager, artist); - } - - public BitmapBuilder asBitmap() { - return new BitmapBuilder(this); - } - - public DrawableRequestBuilder build() { - //noinspection unchecked - return createBaseRequest(requestManager, artist, noCustomImage, forceDownload) - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .animate(DEFAULT_ANIMATION) - .error(DEFAULT_ERROR_IMAGE) - .priority(Priority.LOW) - .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) - .dontTransform() - .signature(createSignature(artist)); - } - - public Builder forceDownload(boolean forceDownload) { - this.forceDownload = forceDownload; - return this; - } - - public PaletteBuilder generatePalette(Context context) { - return new PaletteBuilder(this, context); - } - - public Builder noCustomImage(boolean noCustomImage) { - this.noCustomImage = noCustomImage; - return this; - } - } - - public static class BitmapBuilder { - - private final Builder builder; - - BitmapBuilder(Builder builder) { - this.builder = builder; - } - - public BitmapRequestBuilder build() { - //noinspection unchecked - return createBaseRequest( - builder.requestManager, builder.artist, builder.noCustomImage, builder.forceDownload) - .asBitmap() - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .animate(DEFAULT_ANIMATION) - .error(DEFAULT_ERROR_IMAGE) - .priority(Priority.LOW) - .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) - .dontTransform() - .signature(createSignature(builder.artist)); - } - } - - public static class PaletteBuilder { - - final Context context; - - private final Builder builder; - - PaletteBuilder(Builder builder, Context context) { - this.builder = builder; - this.context = context; - } - - public BitmapRequestBuilder build() { - //noinspection unchecked - return createBaseRequest( - builder.requestManager, builder.artist, builder.noCustomImage, builder.forceDownload) - .asBitmap() - .transcode(new BitmapPaletteTranscoder(context), BitmapPaletteWrapper.class) - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(DEFAULT_ERROR_IMAGE) - .animate(DEFAULT_ANIMATION) - .priority(Priority.LOW) - .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) - .dontTransform() - .signature(createSignature(builder.artist)); - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/BlurTransformation.kt b/app/src/main/java/code/name/monkey/retromusic/glide/BlurTransformation.kt index 0996b5532..a6fb89570 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/BlurTransformation.kt +++ b/app/src/main/java/code/name/monkey/retromusic/glide/BlurTransformation.kt @@ -1,24 +1,9 @@ -/* - * Copyright (c) 2020 Hemanth Savarla. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - */ package code.name.monkey.retromusic.glide import android.content.Context import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.Paint -import android.os.Build import android.renderscript.* import androidx.annotation.FloatRange import code.name.monkey.retromusic.BuildConfig @@ -26,12 +11,14 @@ import code.name.monkey.retromusic.helper.StackBlur import code.name.monkey.retromusic.util.ImageUtil import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool import com.bumptech.glide.load.resource.bitmap.BitmapTransformation +import java.security.MessageDigest + class BlurTransformation : BitmapTransformation { private var context: Context? = null - private var blurRadius: Float = 0.toFloat() - private var sampling: Int = 0 + private var blurRadius = 0f + private var sampling = 0 private fun init(builder: Builder) { this.context = builder.context @@ -39,18 +26,18 @@ class BlurTransformation : BitmapTransformation { this.sampling = builder.sampling } - private constructor(builder: Builder) : super(builder.context) { + private constructor(builder: Builder) : super() { init(builder) } - private constructor(builder: Builder, bitmapPool: BitmapPool) : super(bitmapPool) { + private constructor(builder: Builder, bitmapPool: BitmapPool) : super() { init(builder) } class Builder(val context: Context) { private var bitmapPool: BitmapPool? = null var blurRadius = DEFAULT_BLUR_RADIUS - var sampling: Int = 0 + var sampling = 0 /** * @param blurRadius The radius to use. Must be between 0 and 25. Default is 5. @@ -74,7 +61,7 @@ class BlurTransformation : BitmapTransformation { * @param bitmapPool The BitmapPool to use. * @return the same Builder */ - fun bitmapPool(bitmapPool: BitmapPool): Builder { + fun bitmapPool(bitmapPool: BitmapPool?): Builder { this.bitmapPool = bitmapPool return this } @@ -91,65 +78,60 @@ class BlurTransformation : BitmapTransformation { toTransform: Bitmap, outWidth: Int, outHeight: Int - ): Bitmap? { - val sampling: Int - if (this.sampling == 0) { - sampling = ImageUtil.calculateInSampleSize(toTransform.width, toTransform.height, 100) + ): Bitmap { + val sampling = if (this.sampling == 0) { + ImageUtil.calculateInSampleSize(toTransform.width, toTransform.height, 100) } else { - sampling = this.sampling + this.sampling } - val width = toTransform.width val height = toTransform.height val scaledWidth = width / sampling val scaledHeight = height / sampling - - var out: Bitmap? = pool.get(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888) - if (out == null) { - out = Bitmap.createBitmap(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888) - } - - val canvas = Canvas(out!!) + val out = pool[scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888] + val canvas = Canvas(out) canvas.scale(1 / sampling.toFloat(), 1 / sampling.toFloat()) val paint = Paint() paint.flags = Paint.FILTER_BITMAP_FLAG canvas.drawBitmap(toTransform, 0f, 0f, paint) - if (Build.VERSION.SDK_INT >= 17) { - try { - val rs = RenderScript.create(context!!.applicationContext) - val input = Allocation.createFromBitmap( - rs, - out, - Allocation.MipmapControl.MIPMAP_NONE, - Allocation.USAGE_SCRIPT - ) - val output = Allocation.createTyped(rs, input.type) - val script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)) + try { + val rs = RenderScript.create(context!!.applicationContext) + val input = Allocation.createFromBitmap( + rs, + out, + Allocation.MipmapControl.MIPMAP_NONE, + Allocation.USAGE_SCRIPT + ) + val output = Allocation.createTyped(rs, input.type) + val script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)) - script.setRadius(blurRadius) - script.setInput(input) - script.forEach(output) + script.setRadius(blurRadius) + script.setInput(input) + script.forEach(output) - output.copyTo(out) + output.copyTo(out) - rs.destroy() + rs.destroy() - return out - } catch (e: RSRuntimeException) { - // on some devices RenderScript.create() throws: android.support.v8.renderscript.RSRuntimeException: Error loading libRSSupport library - if (BuildConfig.DEBUG) e.printStackTrace() - } + return out + } catch (e: RSRuntimeException) { + // on some devices RenderScript.create() throws: android.support.v8.renderscript.RSRuntimeException: Error loading libRSSupport library + if (BuildConfig.DEBUG) e.printStackTrace() } return StackBlur.blur(out, blurRadius) } - override fun getId(): String { - return "BlurTransformation(radius=$blurRadius, sampling=$sampling)" + override fun updateDiskCacheKey(messageDigest: MessageDigest) { + messageDigest.update( + "BlurTransformation(radius=$blurRadius, sampling=$sampling)".toByteArray( + CHARSET + ) + ) } companion object { - val DEFAULT_BLUR_RADIUS = 5f + const val DEFAULT_BLUR_RADIUS = 5f } } diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/ProfileBannerGlideRequest.java b/app/src/main/java/code/name/monkey/retromusic/glide/ProfileBannerGlideRequest.java deleted file mode 100644 index 8a27576a3..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/glide/ProfileBannerGlideRequest.java +++ /dev/null @@ -1,76 +0,0 @@ -package code.name.monkey.retromusic.glide; - -import static code.name.monkey.retromusic.Constants.USER_BANNER; - -import android.graphics.Bitmap; -import androidx.annotation.NonNull; -import code.name.monkey.retromusic.App; -import code.name.monkey.retromusic.R; -import com.bumptech.glide.BitmapRequestBuilder; -import com.bumptech.glide.BitmapTypeRequest; -import com.bumptech.glide.RequestManager; -import com.bumptech.glide.load.Key; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.signature.MediaStoreSignature; -import java.io.File; - -public class ProfileBannerGlideRequest { - private static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.NONE; - private static final int DEFAULT_ERROR_IMAGE = R.drawable.material_design_default; - private static final int DEFAULT_ANIMATION = android.R.anim.fade_in; - - public static File getBannerModel() { - File dir = App.Companion.getContext().getFilesDir(); - return new File(dir, USER_BANNER); - } - - private static BitmapTypeRequest createBaseRequest( - RequestManager requestManager, File profile) { - return requestManager.load(profile).asBitmap(); - } - - private static Key createSignature(File file) { - return new MediaStoreSignature("", file.lastModified(), 0); - } - - public static class Builder { - private RequestManager requestManager; - private File profile; - - private Builder(RequestManager requestManager, File profile) { - this.requestManager = requestManager; - this.profile = profile; - } - - public static Builder from(@NonNull RequestManager requestManager, File profile) { - return new Builder(requestManager, profile); - } - - @NonNull - public BitmapRequestBuilder build() { - //noinspection unchecked - return createBaseRequest(requestManager, profile) - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .placeholder(DEFAULT_ERROR_IMAGE) - .animate(DEFAULT_ANIMATION) - .signature(createSignature(profile)); - } - } - - public static class BitmapBuilder { - private final Builder builder; - - BitmapBuilder(Builder builder) { - this.builder = builder; - } - - public BitmapRequestBuilder build() { - //noinspection unchecked - return createBaseRequest(builder.requestManager, builder.profile) - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(DEFAULT_ERROR_IMAGE) - .animate(DEFAULT_ANIMATION) - .signature(createSignature(builder.profile)); - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt new file mode 100644 index 000000000..3f5edc8cb --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/glide/RetroGlideExtension.kt @@ -0,0 +1,192 @@ +package code.name.monkey.retromusic.glide + +import android.graphics.drawable.Drawable +import code.name.monkey.appthemehelper.ThemeStore.Companion.accentColor +import code.name.monkey.appthemehelper.util.TintHelper +import code.name.monkey.retromusic.App.Companion.getContext +import code.name.monkey.retromusic.Constants.USER_BANNER +import code.name.monkey.retromusic.Constants.USER_PROFILE +import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.glide.artistimage.ArtistImage +import code.name.monkey.retromusic.glide.audiocover.AudioFileCover +import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper +import code.name.monkey.retromusic.model.Artist +import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.util.ArtistSignatureUtil +import code.name.monkey.retromusic.util.CustomArtistImageUtil.Companion.getFile +import code.name.monkey.retromusic.util.CustomArtistImageUtil.Companion.getInstance +import code.name.monkey.retromusic.util.MusicUtil.getMediaStoreAlbumCoverUri +import code.name.monkey.retromusic.util.PreferenceUtil +import com.bumptech.glide.GenericTransitionOptions +import com.bumptech.glide.Priority +import com.bumptech.glide.RequestBuilder +import com.bumptech.glide.annotation.GlideExtension +import com.bumptech.glide.annotation.GlideOption +import com.bumptech.glide.annotation.GlideType +import com.bumptech.glide.load.Key +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.request.BaseRequestOptions +import com.bumptech.glide.request.target.Target.SIZE_ORIGINAL +import com.bumptech.glide.signature.MediaStoreSignature +import java.io.File + + +@GlideExtension +object RetroGlideExtension { + + private const val DEFAULT_ERROR_ARTIST_IMAGE = + R.drawable.default_artist_art + private const val DEFAULT_ERROR_SONG_IMAGE: Int = R.drawable.default_audio_art + private const val DEFAULT_ERROR_ALBUM_IMAGE = R.drawable.default_album_art + private const val DEFAULT_ERROR_IMAGE_BANNER = R.drawable.material_design_default + + private val DEFAULT_DISK_CACHE_STRATEGY_ARTIST = DiskCacheStrategy.RESOURCE + private val DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.NONE + + private const val DEFAULT_ANIMATION = android.R.anim.fade_in + + @JvmStatic + @GlideType(BitmapPaletteWrapper::class) + fun asBitmapPalette(requestBuilder: RequestBuilder): RequestBuilder { + return requestBuilder + } + + private fun getSongModel(song: Song, ignoreMediaStore: Boolean): Any { + return if (ignoreMediaStore) { + AudioFileCover(song.data) + } else { + getMediaStoreAlbumCoverUri(song.albumId) + } + } + + fun getSongModel(song: Song): Any { + return getSongModel(song, PreferenceUtil.isIgnoreMediaStoreArtwork) + } + + fun getArtistModel(artist: Artist): Any { + return getArtistModel( + artist, + getInstance(getContext()).hasCustomArtistImage(artist), + false + ) + } + + fun getArtistModel(artist: Artist, forceDownload: Boolean): Any { + return getArtistModel( + artist, + getInstance(getContext()).hasCustomArtistImage(artist), + forceDownload + ) + } + + private fun getArtistModel(artist: Artist, hasCustomImage: Boolean, forceDownload: Boolean): Any { + return if (!hasCustomImage) { + ArtistImage(artist) + } else { + getFile(artist) + } + } + + @JvmStatic + @GlideOption + fun artistImageOptions( + baseRequestOptions: BaseRequestOptions<*>, + artist: Artist + ): BaseRequestOptions<*> { + return baseRequestOptions + .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY_ARTIST) + .priority(Priority.LOW) + .error(DEFAULT_ERROR_ARTIST_IMAGE) + .override(SIZE_ORIGINAL, SIZE_ORIGINAL) + .signature(createSignature(artist)) + } + + @JvmStatic + @GlideOption + fun songCoverOptions( + baseRequestOptions: BaseRequestOptions<*>, + song: Song + ): BaseRequestOptions<*> { + return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) + .error(DEFAULT_ERROR_SONG_IMAGE) + .signature(createSignature(song)) + } + + @JvmStatic + @GlideOption + fun albumCoverOptions( + baseRequestOptions: BaseRequestOptions<*>, + song: Song + ): BaseRequestOptions<*> { + return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) + .error(DEFAULT_ERROR_ALBUM_IMAGE) + .signature(createSignature(song)) + } + + @JvmStatic + @GlideOption + fun userProfileOptions( + baseRequestOptions: BaseRequestOptions<*>, + file: File + ): BaseRequestOptions<*> { + return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) + .error(getErrorUserProfile()) + .signature(createSignature(file)) + } + + @JvmStatic + @GlideOption + fun profileBannerOptions( + baseRequestOptions: BaseRequestOptions<*>, + file: File + ): BaseRequestOptions<*> { + return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) + .placeholder(DEFAULT_ERROR_IMAGE_BANNER) + .error(DEFAULT_ERROR_IMAGE_BANNER) + .signature(createSignature(file)) + } + + @JvmStatic + @GlideOption + fun playlistOptions( + baseRequestOptions: BaseRequestOptions<*> + ): BaseRequestOptions<*> { + return baseRequestOptions.diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) + .error(DEFAULT_ERROR_ALBUM_IMAGE) + } + + private fun createSignature(song: Song): Key { + return MediaStoreSignature("", song.dateModified, 0) + } + + private fun createSignature(file: File): Key { + return MediaStoreSignature("", file.lastModified(), 0) + } + + private fun createSignature(artist: Artist): Key { + return ArtistSignatureUtil.getInstance(getContext()) + .getArtistSignature(artist.name) + } + + fun getUserModel(): File { + val dir = getContext().filesDir + return File(dir, USER_PROFILE) + } + + fun getBannerModel(): File { + val dir = getContext().filesDir + return File(dir, USER_BANNER) + } + + private fun getErrorUserProfile(): Drawable { + return TintHelper.createTintedDrawable( + getContext(), + R.drawable.ic_account, + accentColor(getContext()) + ) + } + + fun getDefaultTransition(): GenericTransitionOptions { + return GenericTransitionOptions().transition(DEFAULT_ANIMATION) + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/RetroMusicColoredTarget.kt b/app/src/main/java/code/name/monkey/retromusic/glide/RetroMusicColoredTarget.kt index 023dc396d..195f7010b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/RetroMusicColoredTarget.kt +++ b/app/src/main/java/code/name/monkey/retromusic/glide/RetroMusicColoredTarget.kt @@ -22,7 +22,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.glide.palette.BitmapPaletteTarget import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.util.color.MediaNotificationProcessor -import com.bumptech.glide.request.animation.GlideAnimation +import com.bumptech.glide.request.transition.Transition abstract class RetroMusicColoredTarget(view: ImageView) : BitmapPaletteTarget(view) { @@ -31,21 +31,19 @@ abstract class RetroMusicColoredTarget(view: ImageView) : BitmapPaletteTarget(vi abstract fun onColorReady(colors: MediaNotificationProcessor) - override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) { - super.onLoadFailed(e, errorDrawable) + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) val colors = MediaNotificationProcessor(App.getContext(), errorDrawable) onColorReady(colors) } override fun onResourceReady( - resource: BitmapPaletteWrapper?, - glideAnimation: GlideAnimation? + resource: BitmapPaletteWrapper, + transition: Transition? ) { - super.onResourceReady(resource, glideAnimation) - resource?.let { bitmapWrap -> - MediaNotificationProcessor(App.getContext()).getPaletteAsync({ - onColorReady(it) - }, bitmapWrap.bitmap) - } + super.onResourceReady(resource, transition) + MediaNotificationProcessor(App.getContext()).getPaletteAsync({ + onColorReady(it) + }, resource.bitmap) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/RetroMusicGlideModule.kt b/app/src/main/java/code/name/monkey/retromusic/glide/RetroMusicGlideModule.kt index 74fbe5655..8f6630893 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/RetroMusicGlideModule.kt +++ b/app/src/main/java/code/name/monkey/retromusic/glide/RetroMusicGlideModule.kt @@ -15,25 +15,38 @@ package code.name.monkey.retromusic.glide import android.content.Context +import android.graphics.Bitmap import code.name.monkey.retromusic.glide.artistimage.ArtistImage import code.name.monkey.retromusic.glide.artistimage.Factory import code.name.monkey.retromusic.glide.audiocover.AudioFileCover import code.name.monkey.retromusic.glide.audiocover.AudioFileCoverLoader +import code.name.monkey.retromusic.glide.palette.BitmapPaletteTranscoder +import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper +import code.name.monkey.retromusic.glide.playlistPreview.PlaylistPreview +import code.name.monkey.retromusic.glide.playlistPreview.PlaylistPreviewLoader import com.bumptech.glide.Glide -import com.bumptech.glide.GlideBuilder -import com.bumptech.glide.module.GlideModule +import com.bumptech.glide.Registry +import com.bumptech.glide.annotation.GlideModule +import com.bumptech.glide.module.AppGlideModule import java.io.InputStream -class RetroMusicGlideModule : GlideModule { - override fun applyOptions(context: Context, builder: GlideBuilder) { - } - - override fun registerComponents(context: Context, glide: Glide) { - glide.register( +@GlideModule +class RetroMusicGlideModule : AppGlideModule() { + override fun registerComponents(context: Context, glide: Glide, registry: Registry) { + registry.prepend(PlaylistPreview::class.java, Bitmap::class.java, PlaylistPreviewLoader.Factory(context)) + registry.prepend( AudioFileCover::class.java, InputStream::class.java, AudioFileCoverLoader.Factory() ) - glide.register(ArtistImage::class.java, InputStream::class.java, Factory(context)) + registry.prepend(ArtistImage::class.java, InputStream::class.java, Factory(context)) + registry.register( + Bitmap::class.java, + BitmapPaletteWrapper::class.java, BitmapPaletteTranscoder() + ) } -} + + override fun isManifestParsingEnabled(): Boolean { + return false + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/SingleColorTarget.kt b/app/src/main/java/code/name/monkey/retromusic/glide/SingleColorTarget.kt index 989419fbf..4991418ea 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/SingleColorTarget.kt +++ b/app/src/main/java/code/name/monkey/retromusic/glide/SingleColorTarget.kt @@ -21,7 +21,7 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.glide.palette.BitmapPaletteTarget import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.util.ColorUtil -import com.bumptech.glide.request.animation.GlideAnimation +import com.bumptech.glide.request.transition.Transition abstract class SingleColorTarget(view: ImageView) : BitmapPaletteTarget(view) { @@ -30,23 +30,21 @@ abstract class SingleColorTarget(view: ImageView) : BitmapPaletteTarget(view) { abstract fun onColorReady(color: Int) - override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) { - super.onLoadFailed(e, errorDrawable) + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) onColorReady(defaultFooterColor) } override fun onResourceReady( - resource: BitmapPaletteWrapper?, - glideAnimation: GlideAnimation? + resource: BitmapPaletteWrapper, + transition: Transition? ) { - super.onResourceReady(resource, glideAnimation) - resource?.let { - onColorReady( - ColorUtil.getColor( - it.palette, - ATHUtil.resolveColor(view.context, R.attr.colorPrimary) - ) + super.onResourceReady(resource, transition) + onColorReady( + ColorUtil.getColor( + resource.palette, + ATHUtil.resolveColor(view.context, R.attr.colorPrimary) ) - } + ) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/SongGlideRequest.java b/app/src/main/java/code/name/monkey/retromusic/glide/SongGlideRequest.java deleted file mode 100644 index 5f424e4ae..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/glide/SongGlideRequest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.glide; - -import android.content.Context; -import android.graphics.Bitmap; -import androidx.annotation.NonNull; -import code.name.monkey.retromusic.R; -import code.name.monkey.retromusic.glide.audiocover.AudioFileCover; -import code.name.monkey.retromusic.glide.palette.BitmapPaletteTranscoder; -import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper; -import code.name.monkey.retromusic.model.Song; -import code.name.monkey.retromusic.util.MusicUtil; -import code.name.monkey.retromusic.util.PreferenceUtil; -import com.bumptech.glide.BitmapRequestBuilder; -import com.bumptech.glide.DrawableRequestBuilder; -import com.bumptech.glide.DrawableTypeRequest; -import com.bumptech.glide.RequestManager; -import com.bumptech.glide.load.Key; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.drawable.GlideDrawable; -import com.bumptech.glide.signature.MediaStoreSignature; - -/** Created by hemanths on 2019-09-15. */ -public class SongGlideRequest { - - private static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.NONE; - private static final int DEFAULT_ERROR_IMAGE = R.drawable.default_audio_art; - private static final int DEFAULT_ANIMATION = android.R.anim.fade_in; - - @NonNull - private static DrawableTypeRequest createBaseRequest( - @NonNull RequestManager requestManager, @NonNull Song song, boolean ignoreMediaStore) { - if (ignoreMediaStore) { - return requestManager.load(new AudioFileCover(song.getData())); - } else { - return requestManager.loadFromMediaStore( - MusicUtil.INSTANCE.getMediaStoreAlbumCoverUri(song.getAlbumId())); - } - } - - @NonNull - private static Key createSignature(@NonNull Song song) { - return new MediaStoreSignature("", song.getDateModified(), 0); - } - - public static class Builder { - final RequestManager requestManager; - final Song song; - boolean ignoreMediaStore; - - private Builder(@NonNull RequestManager requestManager, Song song) { - this.requestManager = requestManager; - this.song = song; - } - - @NonNull - public static Builder from(@NonNull RequestManager requestManager, Song song) { - return new Builder(requestManager, song); - } - - @NonNull - public PaletteBuilder generatePalette(@NonNull Context context) { - return new PaletteBuilder(this, context); - } - - @NonNull - public BitmapBuilder asBitmap() { - return new BitmapBuilder(this); - } - - @NonNull - public Builder checkIgnoreMediaStore(@NonNull Context context) { - return ignoreMediaStore(PreferenceUtil.INSTANCE.isIgnoreMediaStoreArtwork()); - } - - @NonNull - public Builder ignoreMediaStore(boolean ignoreMediaStore) { - this.ignoreMediaStore = ignoreMediaStore; - return this; - } - - @NonNull - public DrawableRequestBuilder build() { - //noinspection unchecked - return createBaseRequest(requestManager, song, ignoreMediaStore) - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(DEFAULT_ERROR_IMAGE) - .animate(DEFAULT_ANIMATION) - .signature(createSignature(song)); - } - } - - public static class BitmapBuilder { - private final Builder builder; - - BitmapBuilder(Builder builder) { - this.builder = builder; - } - - public BitmapRequestBuilder build() { - //noinspection unchecked - return createBaseRequest(builder.requestManager, builder.song, builder.ignoreMediaStore) - .asBitmap() - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(DEFAULT_ERROR_IMAGE) - .animate(DEFAULT_ANIMATION) - .signature(createSignature(builder.song)); - } - } - - public static class PaletteBuilder { - final Context context; - private final Builder builder; - - PaletteBuilder(Builder builder, Context context) { - this.builder = builder; - this.context = context; - } - - public BitmapRequestBuilder build() { - //noinspection unchecked - return createBaseRequest(builder.requestManager, builder.song, builder.ignoreMediaStore) - .asBitmap() - .transcode(new BitmapPaletteTranscoder(context), BitmapPaletteWrapper.class) - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(DEFAULT_ERROR_IMAGE) - .animate(DEFAULT_ANIMATION) - .signature(createSignature(builder.song)); - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/UserProfileGlideRequest.java b/app/src/main/java/code/name/monkey/retromusic/glide/UserProfileGlideRequest.java deleted file mode 100644 index f3b2fd420..000000000 --- a/app/src/main/java/code/name/monkey/retromusic/glide/UserProfileGlideRequest.java +++ /dev/null @@ -1,83 +0,0 @@ -package code.name.monkey.retromusic.glide; - -import static code.name.monkey.retromusic.Constants.USER_PROFILE; - -import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; -import androidx.annotation.NonNull; -import code.name.monkey.appthemehelper.ThemeStore; -import code.name.monkey.appthemehelper.util.TintHelper; -import code.name.monkey.retromusic.App; -import code.name.monkey.retromusic.R; -import com.bumptech.glide.BitmapRequestBuilder; -import com.bumptech.glide.BitmapTypeRequest; -import com.bumptech.glide.RequestManager; -import com.bumptech.glide.load.Key; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.signature.MediaStoreSignature; -import java.io.File; - -public class UserProfileGlideRequest { - private static final DiskCacheStrategy DEFAULT_DISK_CACHE_STRATEGY = DiskCacheStrategy.NONE; - private static final int DEFAULT_ERROR_IMAGE = R.drawable.ic_account; - private static final int DEFAULT_ANIMATION = android.R.anim.fade_in; - - public static File getUserModel() { - File dir = App.Companion.getContext().getFilesDir(); - return new File(dir, USER_PROFILE); - } - - private static BitmapTypeRequest createBaseRequest( - RequestManager requestManager, File profile) { - return requestManager.load(profile).asBitmap(); - } - - private static Key createSignature(File file) { - return new MediaStoreSignature("", file.lastModified(), 0); - } - - public static class Builder { - private RequestManager requestManager; - private File profile; - private Drawable error; - - private Builder(RequestManager requestManager, File profile) { - this.requestManager = requestManager; - this.profile = profile; - error = - TintHelper.createTintedDrawable( - App.Companion.getContext(), - R.drawable.ic_account, - ThemeStore.Companion.accentColor(App.Companion.getContext())); - } - - public static Builder from(@NonNull RequestManager requestManager, File profile) { - return new Builder(requestManager, profile); - } - - @NonNull - public BitmapRequestBuilder build() { - return createBaseRequest(requestManager, profile) - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(error) - .animate(DEFAULT_ANIMATION) - .signature(createSignature(profile)); - } - } - - public static class BitmapBuilder { - private final Builder builder; - - BitmapBuilder(Builder builder) { - this.builder = builder; - } - - public BitmapRequestBuilder build() { - return createBaseRequest(builder.requestManager, builder.profile) - .diskCacheStrategy(DEFAULT_DISK_CACHE_STRATEGY) - .error(builder.error) - .animate(DEFAULT_ANIMATION) - .signature(createSignature(builder.profile)); - } - } -} diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImage.kt b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImage.kt new file mode 100644 index 000000000..da9de7d42 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImage.kt @@ -0,0 +1,16 @@ +package code.name.monkey.retromusic.glide.artistimage + +import code.name.monkey.retromusic.model.Artist + +class ArtistImage(val artist: Artist){ + override fun equals(other: Any?): Boolean { + if (other is ArtistImage){ + return other.artist == artist + } + return false + } + + override fun hashCode(): Int { + return artist.hashCode() + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageFetcher.kt b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageFetcher.kt new file mode 100644 index 000000000..19449ff17 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageFetcher.kt @@ -0,0 +1,121 @@ +package code.name.monkey.retromusic.glide.artistimage + +import android.content.Context +import code.name.monkey.retromusic.model.Data +import code.name.monkey.retromusic.model.DeezerResponse +import code.name.monkey.retromusic.network.DeezerService +import code.name.monkey.retromusic.util.MusicUtil +import code.name.monkey.retromusic.util.PreferenceUtil +import com.bumptech.glide.Priority +import com.bumptech.glide.integration.okhttp3.OkHttpStreamFetcher +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.data.DataFetcher +import com.bumptech.glide.load.model.GlideUrl +import okhttp3.OkHttpClient +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import java.io.FileNotFoundException +import java.io.IOException +import java.io.InputStream + + +class ArtistImageFetcher( + private val context: Context, + private val deezerService: DeezerService, + val model: ArtistImage, + private val okhttp: OkHttpClient +) : DataFetcher { + + private var streamFetcher: OkHttpStreamFetcher? = null + private var response: Call? = null + private var isCancelled: Boolean = false + + override fun getDataClass(): Class { + return InputStream::class.java + } + + override fun getDataSource(): DataSource { + return DataSource.REMOTE + } + + override fun loadData(priority: Priority, callback: DataFetcher.DataCallback) { + try { + if (!MusicUtil.isArtistNameUnknown(model.artist.name) && + PreferenceUtil.isAllowedToDownloadMetadata() + ) { + val artists = model.artist.name.split(",", "&") + response = deezerService.getArtistImage(artists[0]) + response?.enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + if (!response.isSuccessful) { + throw IOException("Request failed with code: " + response.code()) + } + + if (isCancelled) { + callback.onDataReady(null) + return + } + + try { + val deezerResponse = response.body() + val imageUrl = + deezerResponse?.data?.get(0)?.let { getHighestQuality(it) } + // Fragile way to detect a place holder image returned from Deezer: + // ex: "https://e-cdns-images.dzcdn.net/images/artist//250x250-000000-80-0-0.jpg" + // the double slash implies no artist identified + val placeHolder = imageUrl?.contains("/images/artist//") ?: false + if (!placeHolder) { + streamFetcher = OkHttpStreamFetcher(okhttp, GlideUrl(imageUrl)) + streamFetcher?.loadData(priority, callback) + } else { + callback.onDataReady(getFallbackAlbumImage()) + } + } catch (e: Exception) { + callback.onDataReady(getFallbackAlbumImage()) + } + } + + override fun onFailure(call: Call, t: Throwable) { + callback.onDataReady(getFallbackAlbumImage()) + } + }) + } else callback.onDataReady(null) + } catch (e: Exception) { + callback.onLoadFailed(e) + } + } + + private fun getFallbackAlbumImage(): InputStream? { + val imageUri = MusicUtil.getMediaStoreAlbumCoverUri(model.artist.safeGetFirstAlbum().id) + return try { + context.contentResolver.openInputStream(imageUri) + } catch (e: FileNotFoundException){ + null + } + } + + private fun getHighestQuality(imageUrl: Data): String { + return when { + imageUrl.pictureXl.isNotEmpty() -> imageUrl.pictureXl + imageUrl.pictureBig.isNotEmpty() -> imageUrl.pictureBig + imageUrl.pictureMedium.isNotEmpty() -> imageUrl.pictureMedium + imageUrl.pictureSmall.isNotEmpty() -> imageUrl.pictureSmall + imageUrl.picture.isNotEmpty() -> imageUrl.picture + else -> "" + } + } + + override fun cleanup() { + streamFetcher?.cleanup() + } + + override fun cancel() { + isCancelled = true + response?.cancel() + streamFetcher?.cancel() + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageLoader.kt b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageLoader.kt index c07beeb70..d2fff90de 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageLoader.kt +++ b/app/src/main/java/code/name/monkey/retromusic/glide/artistimage/ArtistImageLoader.kt @@ -15,115 +15,39 @@ package code.name.monkey.retromusic.glide.artistimage import android.content.Context -import code.name.monkey.retromusic.model.Artist -import code.name.monkey.retromusic.model.Data import code.name.monkey.retromusic.network.DeezerService -import code.name.monkey.retromusic.util.MusicUtil -import code.name.monkey.retromusic.util.PreferenceUtil -import com.bumptech.glide.Priority -import com.bumptech.glide.integration.okhttp3.OkHttpUrlLoader -import com.bumptech.glide.load.data.DataFetcher -import com.bumptech.glide.load.model.GenericLoaderFactory -import com.bumptech.glide.load.model.GlideUrl +import com.bumptech.glide.load.Options import com.bumptech.glide.load.model.ModelLoader +import com.bumptech.glide.load.model.ModelLoader.LoadData import com.bumptech.glide.load.model.ModelLoaderFactory -import com.bumptech.glide.load.model.stream.StreamModelLoader -import java.io.IOException -import java.io.InputStream -import java.util.concurrent.TimeUnit +import com.bumptech.glide.load.model.MultiModelLoaderFactory +import com.bumptech.glide.signature.ObjectKey import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor - -class ArtistImage(val artist: Artist) - -class ArtistImageFetcher( - private val context: Context, - private val deezerService: DeezerService, - val model: ArtistImage, - val urlLoader: ModelLoader, - val width: Int, - val height: Int -) : DataFetcher { - - private var urlFetcher: DataFetcher? = null - private var isCancelled: Boolean = false - - override fun cleanup() { - urlFetcher?.cleanup() - } - - override fun getId(): String { - return model.artist.name - } - - override fun cancel() { - isCancelled = true - urlFetcher?.cancel() - } - - override fun loadData(priority: Priority?): InputStream? { - if (!MusicUtil.isArtistNameUnknown(model.artist.name) && - PreferenceUtil.isAllowedToDownloadMetadata() - ) { - val artists = model.artist.name.split(",") - val response = deezerService.getArtistImage(artists[0]).execute() - - if (!response.isSuccessful) { - throw IOException("Request failed with code: " + response.code()) - } - - if (isCancelled) return null - - return try { - val deezerResponse = response.body() - val imageUrl = deezerResponse?.data?.get(0)?.let { getHighestQuality(it) } - // Fragile way to detect a place holder image returned from Deezer: - // ex: "https://e-cdns-images.dzcdn.net/images/artist//250x250-000000-80-0-0.jpg" - // the double slash implies no artist identified - val placeHolder = imageUrl?.contains("/images/artist//") ?: false - if (!placeHolder) { - val glideUrl = GlideUrl(imageUrl) - urlFetcher = urlLoader.getResourceFetcher(glideUrl, width, height) - urlFetcher?.loadData(priority) - } else { - getFallbackAlbumImage() - } - } catch (e: Exception) { - getFallbackAlbumImage() - } - } else return null - } - - private fun getFallbackAlbumImage(): InputStream? { - val imageUri = MusicUtil.getMediaStoreAlbumCoverUri(model.artist.safeGetFirstAlbum().id) - return context.contentResolver.openInputStream(imageUri) - } - - private fun getHighestQuality(imageUrl: Data): String { - return when { - imageUrl.pictureXl.isNotEmpty() -> imageUrl.pictureXl - imageUrl.pictureBig.isNotEmpty() -> imageUrl.pictureBig - imageUrl.pictureMedium.isNotEmpty() -> imageUrl.pictureMedium - imageUrl.pictureSmall.isNotEmpty() -> imageUrl.pictureSmall - imageUrl.picture.isNotEmpty() -> imageUrl.picture - else -> "" - } - } -} +import java.io.InputStream +import java.util.concurrent.TimeUnit class ArtistImageLoader( val context: Context, private val deezerService: DeezerService, - private val urlLoader: ModelLoader -) : StreamModelLoader { + private val okhttp: OkHttpClient +) : ModelLoader { - override fun getResourceFetcher( + override fun buildLoadData( model: ArtistImage, width: Int, - height: Int - ): DataFetcher { - return ArtistImageFetcher(context, deezerService, model, urlLoader, width, height) + height: Int, + options: Options + ): LoadData { + return LoadData( + ObjectKey(model.artist.name), + ArtistImageFetcher(context, deezerService, model, okhttp) + ) + } + + override fun handles(model: ArtistImage): Boolean { + return true } } @@ -132,16 +56,15 @@ class Factory( ) : ModelLoaderFactory { private var deezerService: DeezerService - private var okHttpFactory: OkHttpUrlLoader.Factory + private var okHttp: OkHttpClient init { - okHttpFactory = OkHttpUrlLoader.Factory( + okHttp = OkHttpClient.Builder() .connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS) .readTimeout(TIMEOUT, TimeUnit.MILLISECONDS) .writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS) .build() - ) deezerService = DeezerService.invoke( DeezerService.createDefaultOkHttpClient(context) .connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS) @@ -158,23 +81,18 @@ class Factory( return interceptor } - override fun build( - context: Context?, - factories: GenericLoaderFactory? - ): ModelLoader { + override fun build(multiFactory: MultiModelLoaderFactory): ModelLoader { return ArtistImageLoader( - context!!, + context, deezerService, - okHttpFactory.build(context, factories) + okHttp ) } - override fun teardown() { - okHttpFactory.teardown() - } + override fun teardown() {} companion object { // we need these very low values to make sure our artist image loading calls doesn't block the image loading queue - private const val TIMEOUT: Long = 700 + private const val TIMEOUT: Long = 500 } } diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCover.java b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCover.java index 9a5fd6a05..346e0591a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCover.java +++ b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCover.java @@ -14,6 +14,8 @@ package code.name.monkey.retromusic.glide.audiocover; +import androidx.annotation.Nullable; + /** @author Karim Abou Zeid (kabouzeid) */ public class AudioFileCover { public final String filePath; @@ -21,4 +23,17 @@ public class AudioFileCover { public AudioFileCover(String filePath) { this.filePath = filePath; } + + @Override + public int hashCode() { + return filePath.hashCode(); + } + + @Override + public boolean equals(@Nullable Object object) { + if (object instanceof AudioFileCover){ + return ((AudioFileCover) object).filePath.equals(filePath); + } + return false; + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverFetcher.java b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverFetcher.java index 5240d1d17..a95bb46a7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverFetcher.java +++ b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverFetcher.java @@ -15,9 +15,15 @@ package code.name.monkey.retromusic.glide.audiocover; import android.media.MediaMetadataRetriever; + import com.bumptech.glide.Priority; +import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.data.DataFetcher; + +import org.jetbrains.annotations.NotNull; + import java.io.ByteArrayInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; @@ -27,19 +33,11 @@ public class AudioFileCoverFetcher implements DataFetcher { private InputStream stream; public AudioFileCoverFetcher(AudioFileCover model) { - this.model = model; } @Override - public String getId() { - // makes sure we never ever return null here - return String.valueOf(model.filePath); - } - - @Override - public InputStream loadData(final Priority priority) throws Exception { - + public void loadData(@NotNull Priority priority, @NotNull DataCallback callback) { final MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setDataSource(model.filePath); @@ -49,11 +47,12 @@ public class AudioFileCoverFetcher implements DataFetcher { } else { stream = AudioFileCoverUtils.fallback(model.filePath); } + callback.onDataReady(stream); + } catch (FileNotFoundException e) { + callback.onLoadFailed(e); } finally { retriever.release(); } - - return stream; } @Override @@ -72,4 +71,16 @@ public class AudioFileCoverFetcher implements DataFetcher { public void cancel() { // cannot cancel } + + @NotNull + @Override + public Class getDataClass() { + return InputStream.class; + } + + @NotNull + @Override + public DataSource getDataSource() { + return DataSource.LOCAL; + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverLoader.java b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverLoader.java index 02ffb16d1..69c0f907e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverLoader.java +++ b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverLoader.java @@ -14,29 +14,40 @@ package code.name.monkey.retromusic.glide.audiocover; -import android.content.Context; -import com.bumptech.glide.load.data.DataFetcher; -import com.bumptech.glide.load.model.GenericLoaderFactory; +import androidx.annotation.NonNull; + +import com.bumptech.glide.load.Options; import com.bumptech.glide.load.model.ModelLoader; import com.bumptech.glide.load.model.ModelLoaderFactory; -import com.bumptech.glide.load.model.stream.StreamModelLoader; +import com.bumptech.glide.load.model.MultiModelLoaderFactory; +import com.bumptech.glide.signature.ObjectKey; + +import org.jetbrains.annotations.NotNull; + import java.io.InputStream; -public class AudioFileCoverLoader implements StreamModelLoader { +public class AudioFileCoverLoader implements ModelLoader { @Override - public DataFetcher getResourceFetcher(AudioFileCover model, int width, int height) { - return new AudioFileCoverFetcher(model); + public LoadData buildLoadData(@NonNull @NotNull AudioFileCover audioFileCover, int width, int height, @NonNull @NotNull Options options) { + return new LoadData<>(new ObjectKey(audioFileCover.filePath), new AudioFileCoverFetcher(audioFileCover)); + } + + @Override + public boolean handles(@NonNull @NotNull AudioFileCover audioFileCover) { + return audioFileCover.filePath != null; } public static class Factory implements ModelLoaderFactory { + + @NotNull @Override - public ModelLoader build( - Context context, GenericLoaderFactory factories) { + public ModelLoader build(@NonNull @NotNull MultiModelLoaderFactory multiFactory) { return new AudioFileCoverLoader(); } @Override - public void teardown() {} + public void teardown() { + } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverUtils.java b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverUtils.java index aaf612f1e..5ffe040cc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverUtils.java +++ b/app/src/main/java/code/name/monkey/retromusic/glide/audiocover/AudioFileCoverUtils.java @@ -14,17 +14,18 @@ package code.name.monkey.retromusic.glide.audiocover; +import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException; +import org.jaudiotagger.audio.exceptions.ReadOnlyFileException; +import org.jaudiotagger.audio.mp3.MP3File; +import org.jaudiotagger.tag.TagException; +import org.jaudiotagger.tag.images.Artwork; + import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException; -import org.jaudiotagger.audio.exceptions.ReadOnlyFileException; -import org.jaudiotagger.audio.mp3.MP3File; -import org.jaudiotagger.tag.TagException; -import org.jaudiotagger.tag.images.Artwork; public class AudioFileCoverUtils { @@ -44,10 +45,7 @@ public class AudioFileCoverUtils { } } // If there are any exceptions, we ignore them and continue to the other fallback method - } catch (ReadOnlyFileException ignored) { - } catch (InvalidAudioFrameException ignored) { - } catch (TagException ignored) { - } catch (IOException ignored) { + } catch (ReadOnlyFileException | InvalidAudioFrameException | TagException | IOException ignored) { } // Method 2: look for album art in external files diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteResource.java b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteResource.java index d94c2c6da..da3c4bb6c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteResource.java +++ b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteResource.java @@ -14,25 +14,31 @@ package code.name.monkey.retromusic.glide.palette; +import androidx.annotation.NonNull; + import com.bumptech.glide.load.engine.Resource; -import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.util.Util; public class BitmapPaletteResource implements Resource { private final BitmapPaletteWrapper bitmapPaletteWrapper; - private final BitmapPool bitmapPool; - public BitmapPaletteResource(BitmapPaletteWrapper bitmapPaletteWrapper, BitmapPool bitmapPool) { + public BitmapPaletteResource(BitmapPaletteWrapper bitmapPaletteWrapper) { this.bitmapPaletteWrapper = bitmapPaletteWrapper; - this.bitmapPool = bitmapPool; } + @NonNull @Override public BitmapPaletteWrapper get() { return bitmapPaletteWrapper; } + @NonNull + @Override + public Class getResourceClass() { + return BitmapPaletteWrapper.class; + } + @Override public int getSize() { return Util.getBitmapByteSize(bitmapPaletteWrapper.getBitmap()); @@ -40,8 +46,6 @@ public class BitmapPaletteResource implements Resource { @Override public void recycle() { - if (!bitmapPool.put(bitmapPaletteWrapper.getBitmap())) { - bitmapPaletteWrapper.getBitmap().recycle(); - } + bitmapPaletteWrapper.getBitmap().recycle(); } } diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTarget.java b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTarget.java index 2ce727750..4fb766049 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTarget.java +++ b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTarget.java @@ -15,6 +15,7 @@ package code.name.monkey.retromusic.glide.palette; import android.widget.ImageView; + import com.bumptech.glide.request.target.ImageViewTarget; public class BitmapPaletteTarget extends ImageViewTarget { @@ -24,6 +25,8 @@ public class BitmapPaletteTarget extends ImageViewTarget { @Override protected void setResource(BitmapPaletteWrapper bitmapPaletteWrapper) { - view.setImageBitmap(bitmapPaletteWrapper.getBitmap()); + if (bitmapPaletteWrapper != null) { + view.setImageBitmap(bitmapPaletteWrapper.getBitmap()); + } } } diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTranscoder.java b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTranscoder.java index 7fd4bfade..0e96b8090 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTranscoder.java +++ b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteTranscoder.java @@ -14,35 +14,23 @@ package code.name.monkey.retromusic.glide.palette; -import android.content.Context; import android.graphics.Bitmap; -import code.name.monkey.retromusic.util.RetroColorUtil; -import com.bumptech.glide.Glide; + +import androidx.annotation.NonNull; + +import com.bumptech.glide.load.Options; import com.bumptech.glide.load.engine.Resource; -import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.resource.transcode.ResourceTranscoder; -public class BitmapPaletteTranscoder implements ResourceTranscoder { - private final BitmapPool bitmapPool; +import code.name.monkey.retromusic.util.RetroColorUtil; - public BitmapPaletteTranscoder(Context context) { - this(Glide.get(context).getBitmapPool()); - } +public class BitmapPaletteTranscoder implements ResourceTranscoder { - public BitmapPaletteTranscoder(BitmapPool bitmapPool) { - this.bitmapPool = bitmapPool; - } - - @Override - public Resource transcode(Resource bitmapResource) { - Bitmap bitmap = bitmapResource.get(); + @Override + public Resource transcode(@NonNull Resource toTranscode, @NonNull Options options) { + Bitmap bitmap = toTranscode.get(); BitmapPaletteWrapper bitmapPaletteWrapper = - new BitmapPaletteWrapper(bitmap, RetroColorUtil.generatePalette(bitmap)); - return new BitmapPaletteResource(bitmapPaletteWrapper, bitmapPool); - } - - @Override - public String getId() { - return "BitmapPaletteTranscoder.com.kabouzeid.gramophone.glide.palette"; + new BitmapPaletteWrapper(bitmap, RetroColorUtil.generatePalette(bitmap)); + return new BitmapPaletteResource(bitmapPaletteWrapper); } } diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteWrapper.java b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteWrapper.java index df713937c..db647f6ef 100644 --- a/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteWrapper.java +++ b/app/src/main/java/code/name/monkey/retromusic/glide/palette/BitmapPaletteWrapper.java @@ -15,6 +15,7 @@ package code.name.monkey.retromusic.glide.palette; import android.graphics.Bitmap; + import androidx.palette.graphics.Palette; public class BitmapPaletteWrapper { diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreview.kt b/app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreview.kt new file mode 100644 index 000000000..b9257db62 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreview.kt @@ -0,0 +1,31 @@ +package code.name.monkey.retromusic.glide.playlistPreview + +import code.name.monkey.retromusic.db.PlaylistEntity +import code.name.monkey.retromusic.db.PlaylistWithSongs +import code.name.monkey.retromusic.db.toSongs +import code.name.monkey.retromusic.model.Song + +class PlaylistPreview(val playlistWithSongs: PlaylistWithSongs) { + + val playlistEntity: PlaylistEntity get() = playlistWithSongs.playlistEntity + val songs: List get() = playlistWithSongs.songs.toSongs() + + override fun equals(other: Any?): Boolean { + if (other is PlaylistPreview) { + if (other.playlistEntity.playListId != playlistEntity.playListId) { + return false + } + if (other.songs.size != songs.size) { + return false + } + return true + } + return false + } + + override fun hashCode(): Int { + var result = playlistEntity.playListId.hashCode() + result = 31 * result + playlistWithSongs.songs.size + return result + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreviewFetcher.kt b/app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreviewFetcher.kt new file mode 100644 index 000000000..0b18f6e0f --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreviewFetcher.kt @@ -0,0 +1,51 @@ +package code.name.monkey.retromusic.glide.playlistPreview + +import android.content.Context +import android.graphics.Bitmap +import code.name.monkey.retromusic.util.AutoGeneratedPlaylistBitmap +import com.bumptech.glide.Priority +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.data.DataFetcher +import kotlinx.coroutines.* +import java.util.concurrent.Executors + +class PlaylistPreviewFetcher(val context: Context, private val playlistPreview: PlaylistPreview) : + DataFetcher, CoroutineScope by GlideScope() { + override fun loadData(priority: Priority, callback: DataFetcher.DataCallback) { + launch { + try { + val bitmap = + AutoGeneratedPlaylistBitmap.getBitmap( + context, + playlistPreview.songs.shuffled(), + true, + false + ) + callback.onDataReady(bitmap) + } catch (e: Exception) { + callback.onLoadFailed(e) + } + } + } + + override fun cleanup() {} + + override fun cancel() { + cancel(null) + } + + override fun getDataClass(): Class { + return Bitmap::class.java + } + + override fun getDataSource(): DataSource { + return DataSource.LOCAL + } +} + +private val glideDispatcher: CoroutineDispatcher by lazy { + Executors.newFixedThreadPool(4).asCoroutineDispatcher() +} + +@Suppress("FunctionName") +internal fun GlideScope(): CoroutineScope = CoroutineScope(SupervisorJob() + glideDispatcher) \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreviewLoader.kt b/app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreviewLoader.kt new file mode 100644 index 000000000..6dae74c9a --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/glide/playlistPreview/PlaylistPreviewLoader.kt @@ -0,0 +1,36 @@ +package code.name.monkey.retromusic.glide.playlistPreview + +import android.content.Context +import android.graphics.Bitmap +import com.bumptech.glide.load.Options +import com.bumptech.glide.load.model.ModelLoader +import com.bumptech.glide.load.model.ModelLoader.LoadData +import com.bumptech.glide.load.model.ModelLoaderFactory +import com.bumptech.glide.load.model.MultiModelLoaderFactory +import com.bumptech.glide.signature.ObjectKey + +class PlaylistPreviewLoader(val context: Context) : ModelLoader { + override fun buildLoadData( + model: PlaylistPreview, + width: Int, + height: Int, + options: Options + ): LoadData { + return LoadData( + ObjectKey(model), + PlaylistPreviewFetcher(context, model) + ) + } + + override fun handles(model: PlaylistPreview): Boolean { + return true + } + + class Factory(val context: Context) : ModelLoaderFactory { + override fun build(multiFactory: MultiModelLoaderFactory): ModelLoader { + return PlaylistPreviewLoader(context) + } + + override fun teardown() {} + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt index fc815fe01..4f7b5c930 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt @@ -29,10 +29,11 @@ import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.repository.SongRepository import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.PreferenceUtil -import java.io.File -import java.util.* import org.koin.core.KoinComponent import org.koin.core.inject +import java.io.File +import java.util.* + object MusicPlayerRemote : KoinComponent { val TAG: String = MusicPlayerRemote::class.java.simpleName @@ -41,6 +42,15 @@ object MusicPlayerRemote : KoinComponent { private val songRepository by inject() + var isCasting: Boolean = false + set(value) { + field = value + if (value) { + musicService?.quit() + } + println(value.toString() + "" + isCasting.toString()) + } + @JvmStatic val isPlaying: Boolean get() = musicService != null && musicService!!.isPlaying @@ -56,6 +66,11 @@ object MusicPlayerRemote : KoinComponent { musicService!!.currentSong } else Song.emptySong + val nextSong: Song? + get() = if (musicService != null) { + musicService?.nextSong + } else Song.emptySong + /** * Async */ @@ -73,7 +88,7 @@ object MusicPlayerRemote : KoinComponent { val playingQueue: List get() = if (musicService != null) { musicService?.playingQueue as List - } else listOf() + } else listOf() val songProgressMillis: Int get() = if (musicService != null) { @@ -295,7 +310,7 @@ object MusicPlayerRemote : KoinComponent { fun playNext(song: Song): Boolean { if (musicService != null) { - if (playingQueue.size > 0) { + if (playingQueue.isNotEmpty()) { musicService?.addSong(position + 1, song) } else { val queue = ArrayList() @@ -314,7 +329,7 @@ object MusicPlayerRemote : KoinComponent { fun playNext(songs: List): Boolean { if (musicService != null) { - if (playingQueue.size > 0) { + if (playingQueue.isNotEmpty()) { musicService?.addSongs(position + 1, songs) } else { openQueue(songs, 0, false) @@ -332,7 +347,7 @@ object MusicPlayerRemote : KoinComponent { fun enqueue(song: Song): Boolean { if (musicService != null) { - if (playingQueue.size > 0) { + if (playingQueue.isNotEmpty()) { musicService?.addSong(song) } else { val queue = ArrayList() @@ -351,7 +366,7 @@ object MusicPlayerRemote : KoinComponent { fun enqueue(songs: List): Boolean { if (musicService != null) { - if (playingQueue.size > 0) { + if (playingQueue.isNotEmpty()) { musicService?.addSongs(songs) } else { openQueue(songs, 0, false) diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt index 936af2b91..36e9728a1 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/SearchQueryHelper.kt @@ -19,9 +19,9 @@ import android.os.Bundle import android.provider.MediaStore import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.repository.RealSongRepository -import java.util.* import org.koin.core.KoinComponent import org.koin.core.inject +import java.util.* object SearchQueryHelper : KoinComponent { private const val TITLE_SELECTION = "lower(" + MediaStore.Audio.AudioColumns.TITLE + ") = ?" @@ -44,9 +44,9 @@ object SearchQueryHelper : KoinComponent { songRepository.makeSongCursor( ARTIST_SELECTION + AND + ALBUM_SELECTION + AND + TITLE_SELECTION, arrayOf( - artistName.toLowerCase(Locale.getDefault()), - albumName.toLowerCase(Locale.getDefault()), - titleName.toLowerCase(Locale.getDefault()) + artistName.lowercase(), + albumName.lowercase(), + titleName.lowercase() ) ) ) @@ -59,8 +59,8 @@ object SearchQueryHelper : KoinComponent { songRepository.makeSongCursor( ARTIST_SELECTION + AND + TITLE_SELECTION, arrayOf( - artistName.toLowerCase(Locale.getDefault()), - titleName.toLowerCase(Locale.getDefault()) + artistName.lowercase(), + titleName.lowercase() ) ) ) @@ -73,8 +73,8 @@ object SearchQueryHelper : KoinComponent { songRepository.makeSongCursor( ALBUM_SELECTION + AND + TITLE_SELECTION, arrayOf( - albumName.toLowerCase(Locale.getDefault()), - titleName.toLowerCase(Locale.getDefault()) + albumName.lowercase(), + titleName.lowercase() ) ) ) @@ -86,7 +86,7 @@ object SearchQueryHelper : KoinComponent { songs = songRepository.songs( songRepository.makeSongCursor( ARTIST_SELECTION, - arrayOf(artistName.toLowerCase(Locale.getDefault())) + arrayOf(artistName.lowercase()) ) ) } @@ -97,7 +97,7 @@ object SearchQueryHelper : KoinComponent { songs = songRepository.songs( songRepository.makeSongCursor( ALBUM_SELECTION, - arrayOf(albumName.toLowerCase(Locale.getDefault())) + arrayOf(albumName.lowercase()) ) ) } @@ -108,7 +108,7 @@ object SearchQueryHelper : KoinComponent { songs = songRepository.songs( songRepository.makeSongCursor( TITLE_SELECTION, - arrayOf(titleName.toLowerCase(Locale.getDefault())) + arrayOf(titleName.lowercase()) ) ) } @@ -118,7 +118,7 @@ object SearchQueryHelper : KoinComponent { songs = songRepository.songs( songRepository.makeSongCursor( ARTIST_SELECTION, - arrayOf(query.toLowerCase(Locale.getDefault())) + arrayOf(query.lowercase()) ) ) @@ -128,7 +128,7 @@ object SearchQueryHelper : KoinComponent { songs = songRepository.songs( songRepository.makeSongCursor( ALBUM_SELECTION, - arrayOf(query.toLowerCase(Locale.getDefault())) + arrayOf(query.lowercase()) ) ) if (songs.isNotEmpty()) { @@ -137,7 +137,7 @@ object SearchQueryHelper : KoinComponent { songs = songRepository.songs( songRepository.makeSongCursor( TITLE_SELECTION, - arrayOf(query.toLowerCase(Locale.getDefault())) + arrayOf(query.lowercase()) ) ) return if (songs.isNotEmpty()) { diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/SortOrder.kt b/app/src/main/java/code/name/monkey/retromusic/helper/SortOrder.kt index 22f92a09f..7c7d68e2c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/SortOrder.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/SortOrder.kt @@ -15,6 +15,7 @@ package code.name.monkey.retromusic.helper import android.provider.MediaStore +import code.name.monkey.retromusic.ALBUM_ARTIST class SortOrder { @@ -53,7 +54,7 @@ class SortOrder { const val ALBUM_Z_A = "$ALBUM_A_Z DESC" /* Album sort order songs */ - const val ALBUM_NUMBER_OF_SONGS = MediaStore.Audio.Albums.NUMBER_OF_SONGS + " DESC" + const val ALBUM_NUMBER_OF_SONGS = MediaStore.Audio.AlbumColumns.NUMBER_OF_SONGS + " DESC" /* Album sort order artist */ const val ALBUM_ARTIST = (MediaStore.Audio.Artists.DEFAULT_SORT_ORDER + @@ -80,6 +81,9 @@ class SortOrder { /* Song sort order artist */ const val SONG_ARTIST = MediaStore.Audio.Artists.DEFAULT_SORT_ORDER + /* Song sort order album artist */ + const val SONG_ALBUM_ARTIST = ALBUM_ARTIST + /* Song sort order album */ const val SONG_ALBUM = MediaStore.Audio.Albums.DEFAULT_SORT_ORDER diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/StackBlur.java b/app/src/main/java/code/name/monkey/retromusic/helper/StackBlur.java index 9756fa130..91370fe89 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/StackBlur.java +++ b/app/src/main/java/code/name/monkey/retromusic/helper/StackBlur.java @@ -1,6 +1,7 @@ package code.name.monkey.retromusic.helper; import android.graphics.Bitmap; + import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/menu/SongMenuHelper.kt b/app/src/main/java/code/name/monkey/retromusic/helper/menu/SongMenuHelper.kt index 76a6b585b..114a2ec2e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/menu/SongMenuHelper.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/menu/SongMenuHelper.kt @@ -21,6 +21,7 @@ import android.widget.PopupMenu import androidx.core.os.bundleOf import androidx.fragment.app.FragmentActivity import androidx.navigation.findNavController +import code.name.monkey.retromusic.App import code.name.monkey.retromusic.EXTRA_ALBUM_ID import code.name.monkey.retromusic.EXTRA_ARTIST_ID import code.name.monkey.retromusic.R @@ -29,9 +30,12 @@ import code.name.monkey.retromusic.activities.tageditor.SongTagEditorActivity import code.name.monkey.retromusic.dialogs.AddToPlaylistDialog import code.name.monkey.retromusic.dialogs.DeleteSongsDialog import code.name.monkey.retromusic.dialogs.SongDetailDialog +import code.name.monkey.retromusic.fragments.LibraryViewModel +import code.name.monkey.retromusic.fragments.ReloadType import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.interfaces.IPaletteColorHolder import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.providers.BlacklistStore import code.name.monkey.retromusic.repository.RealRepository import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.RingtoneManager @@ -39,13 +43,16 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.koin.androidx.viewmodel.ext.android.getViewModel import org.koin.core.KoinComponent import org.koin.core.get +import java.io.File object SongMenuHelper : KoinComponent { const val MENU_RES = R.menu.menu_item_song fun handleMenuClick(activity: FragmentActivity, song: Song, menuItemId: Int): Boolean { + val libraryViewModel = activity.getViewModel() as LibraryViewModel when (menuItemId) { R.id.action_set_as_ringtone -> { if (RingtoneManager.requiresDialog(activity)) { @@ -116,6 +123,11 @@ object SongMenuHelper : KoinComponent { ) return true } + R.id.action_add_to_blacklist -> { + BlacklistStore.getInstance(App.getContext()).addPath(File(song.data)) + libraryViewModel.forceReload(ReloadType.Songs) + return true + } } return false } diff --git a/app/src/main/java/code/name/monkey/retromusic/interfaces/IAlbumArtistClickListener.kt b/app/src/main/java/code/name/monkey/retromusic/interfaces/IAlbumArtistClickListener.kt new file mode 100644 index 000000000..4def2ad35 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/interfaces/IAlbumArtistClickListener.kt @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2020 Hemanth Savarla. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + */ +package code.name.monkey.retromusic.interfaces + +import android.view.View + +interface IAlbumArtistClickListener { + fun onAlbumArtist(artistName: String, view: View) +} diff --git a/app/src/main/java/code/name/monkey/retromusic/interfaces/IMusicServiceEventListener.kt b/app/src/main/java/code/name/monkey/retromusic/interfaces/IMusicServiceEventListener.kt index 29669a3a8..4d3991809 100644 --- a/app/src/main/java/code/name/monkey/retromusic/interfaces/IMusicServiceEventListener.kt +++ b/app/src/main/java/code/name/monkey/retromusic/interfaces/IMusicServiceEventListener.kt @@ -21,6 +21,8 @@ interface IMusicServiceEventListener { fun onQueueChanged() + fun onFavoriteStateChanged() + fun onPlayingMetaChanged() fun onPlayStateChanged() diff --git a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcHelper.java b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcHelper.java index d1b71467d..9770a9f4c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcHelper.java +++ b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcHelper.java @@ -1,6 +1,7 @@ package code.name.monkey.retromusic.lyrics; import android.content.Context; + import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; diff --git a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcUtils.java b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcUtils.java index a54c6c2eb..b81fc782a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcUtils.java +++ b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcUtils.java @@ -17,6 +17,7 @@ package code.name.monkey.retromusic.lyrics; import android.animation.ValueAnimator; import android.text.TextUtils; import android.text.format.DateUtils; + import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; diff --git a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.java b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.java index 92eec91f9..a27f1a19f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.java +++ b/app/src/main/java/code/name/monkey/retromusic/lyrics/LrcView.java @@ -34,13 +34,15 @@ import android.view.MotionEvent; import android.view.View; import android.view.animation.LinearInterpolator; import android.widget.Scroller; -import code.name.monkey.retromusic.BuildConfig; -import code.name.monkey.retromusic.R; + import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import code.name.monkey.retromusic.BuildConfig; +import code.name.monkey.retromusic.R; + /** 歌词 Created by wcy on 2015/11/9. */ @SuppressLint("StaticFieldLeak") public class LrcView extends View { @@ -109,6 +111,7 @@ public class LrcView extends View { mOffset = Math.min(mOffset, getOffset(0)); mOffset = Math.max(mOffset, getOffset(mLrcEntryList.size() - 1)); invalidate(); + getParent().requestDisallowInterceptTouchEvent(true); return true; } return super.onScroll(e1, e2, distanceX, distanceY); diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java b/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java index 2c40d3bd4..b8ff09bf5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java +++ b/app/src/main/java/code/name/monkey/retromusic/misc/CustomFragmentStatePagerAdapter.java @@ -19,12 +19,14 @@ import android.os.Parcelable; import android.util.Log; import android.view.View; import android.view.ViewGroup; + import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; import androidx.fragment.app.FragmentTransaction; import androidx.viewpager.widget.PagerAdapter; + import java.util.ArrayList; /** diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/DialogAsyncTask.java b/app/src/main/java/code/name/monkey/retromusic/misc/DialogAsyncTask.java index d83cc1623..38e41539b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/misc/DialogAsyncTask.java +++ b/app/src/main/java/code/name/monkey/retromusic/misc/DialogAsyncTask.java @@ -17,8 +17,10 @@ package code.name.monkey.retromusic.misc; import android.app.Dialog; import android.content.Context; import android.os.Handler; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + import java.lang.ref.WeakReference; public abstract class DialogAsyncTask diff --git a/app/src/main/java/code/name/monkey/retromusic/misc/LagTracker.java b/app/src/main/java/code/name/monkey/retromusic/misc/LagTracker.java index 402e2b389..983081184 100755 --- a/app/src/main/java/code/name/monkey/retromusic/misc/LagTracker.java +++ b/app/src/main/java/code/name/monkey/retromusic/misc/LagTracker.java @@ -15,6 +15,7 @@ package code.name.monkey.retromusic.misc; import android.util.Log; + import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -25,7 +26,7 @@ public class LagTracker { private boolean mEnabled = true; private LagTracker() { - mMap = new HashMap(); + mMap = new HashMap<>(); } public static LagTracker get() { @@ -64,7 +65,7 @@ public class LagTracker { long nanoTime = System.nanoTime(); if (this.mEnabled) { if (mMap.containsKey(str)) { - print(str, nanoTime - mMap.get(str).longValue()); + print(str, nanoTime - mMap.get(str)); mMap.remove(str); return; } @@ -77,7 +78,7 @@ public class LagTracker { public void start(String str) { long nanoTime = System.nanoTime(); if (this.mEnabled) { - mMap.put(str, Long.valueOf(nanoTime)); + mMap.put(str, nanoTime); } else if (!mMap.isEmpty()) { mMap.clear(); } diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Album.kt b/app/src/main/java/code/name/monkey/retromusic/model/Album.kt index d4369b330..c894955bd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Album.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/Album.kt @@ -19,13 +19,13 @@ data class Album( val songs: List ) { - val title: String? + val title: String get() = safeGetFirstSong().albumName val artistId: Long get() = safeGetFirstSong().artistId - val artistName: String? + val artistName: String get() = safeGetFirstSong().artistName val year: Int diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt b/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt index bb4fd0b1c..12150c459 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/Artist.kt @@ -15,23 +15,34 @@ package code.name.monkey.retromusic.model import code.name.monkey.retromusic.util.MusicUtil -import code.name.monkey.retromusic.util.PreferenceUtil -import java.util.* data class Artist( val id: Long, - val albums: List + val albums: List, + val isAlbumArtist: Boolean = false ) { + constructor( + artistName: String, + albums: List, + isAlbumArtist: Boolean = false + ) : this(albums[0].artistId, albums, isAlbumArtist) { + name = artistName + } - val name: String + var name: String = "" + set(value) { + field = value + } get() { - val name = safeGetFirstAlbum().safeGetFirstSong().albumArtist - if (PreferenceUtil.albumArtistsOnly && MusicUtil.isVariousArtists(name)) { - return VARIOUS_ARTISTS_DISPLAY_NAME + val name = if (isAlbumArtist) getAlbumArtistName() + else getArtistName() + return when { + MusicUtil.isVariousArtists(name) -> + VARIOUS_ARTISTS_DISPLAY_NAME + MusicUtil.isArtistNameUnknown(name) -> + UNKNOWN_ARTIST_DISPLAY_NAME + else -> name!! } - return if (MusicUtil.isArtistNameUnknown(name)) { - UNKNOWN_ARTIST_DISPLAY_NAME - } else safeGetFirstAlbum().safeGetFirstSong().artistName } val songCount: Int @@ -53,10 +64,18 @@ data class Artist( return albums.firstOrNull() ?: Album.empty } + private fun getArtistName(): String { + return safeGetFirstAlbum().safeGetFirstSong().artistName + } + + private fun getAlbumArtistName(): String? { + return safeGetFirstAlbum().safeGetFirstSong().albumArtist + } + companion object { const val UNKNOWN_ARTIST_DISPLAY_NAME = "Unknown Artist" const val VARIOUS_ARTISTS_DISPLAY_NAME = "Various Artists" - const val VARIOUS_ARTISTS_ID : Long = -2 + const val VARIOUS_ARTISTS_ID: Long = -2 val empty = Artist(-1, emptyList()) } diff --git a/app/src/main/java/code/name/monkey/retromusic/model/CategoryInfo.kt b/app/src/main/java/code/name/monkey/retromusic/model/CategoryInfo.kt index e11eb0504..cd62d4c84 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/CategoryInfo.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/CategoryInfo.kt @@ -17,7 +17,7 @@ import android.os.Parcelable import androidx.annotation.DrawableRes import androidx.annotation.StringRes import code.name.monkey.retromusic.R -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize @Parcelize data class CategoryInfo( @@ -31,12 +31,12 @@ data class CategoryInfo( @StringRes val stringRes: Int, @DrawableRes val icon: Int ) { - Home(R.id.action_home, R.string.for_you, R.drawable.ic_face), - Songs(R.id.action_song, R.string.songs, R.drawable.ic_audiotrack), - Albums(R.id.action_album, R.string.albums, R.drawable.ic_album), - Artists(R.id.action_artist, R.string.artists, R.drawable.ic_artist), - Playlists(R.id.action_playlist, R.string.playlists, R.drawable.ic_queue_music), - Genres(R.id.action_genre, R.string.genres, R.drawable.ic_guitar), - Folder(R.id.action_folder, R.string.folders, R.drawable.ic_folder); + Home(R.id.action_home, R.string.for_you, R.drawable.asld_face), + Songs(R.id.action_song, R.string.songs, R.drawable.asld_music_note), + Albums(R.id.action_album, R.string.albums, R.drawable.asld_album), + Artists(R.id.action_artist, R.string.artists, R.drawable.asld_artist), + Playlists(R.id.action_playlist, R.string.playlists, R.drawable.asld_playlist), + Genres(R.id.action_genre, R.string.genres, R.drawable.asld_guitar), + Folder(R.id.action_folder, R.string.folders, R.drawable.asld_folder); } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Contributor.kt b/app/src/main/java/code/name/monkey/retromusic/model/Contributor.kt index 23f952a35..7789366f9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Contributor.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/Contributor.kt @@ -16,7 +16,7 @@ package code.name.monkey.retromusic.model import android.os.Parcelable import com.google.gson.annotations.SerializedName -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize @Parcelize class Contributor( diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Genre.kt b/app/src/main/java/code/name/monkey/retromusic/model/Genre.kt index 961f2ba1e..782c2bccb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Genre.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/Genre.kt @@ -15,7 +15,7 @@ package code.name.monkey.retromusic.model import android.os.Parcelable -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize @Parcelize data class Genre( diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Playlist.kt b/app/src/main/java/code/name/monkey/retromusic/model/Playlist.kt index 690f753b8..ca2e7d779 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Playlist.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/Playlist.kt @@ -4,7 +4,7 @@ import android.content.Context import android.os.Parcelable import code.name.monkey.retromusic.repository.RealPlaylistRepository import code.name.monkey.retromusic.util.MusicUtil -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize import org.koin.core.KoinComponent import org.koin.core.get diff --git a/app/src/main/java/code/name/monkey/retromusic/model/PlaylistSong.kt b/app/src/main/java/code/name/monkey/retromusic/model/PlaylistSong.kt index d972e3181..ccbb31c2f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/PlaylistSong.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/PlaylistSong.kt @@ -13,7 +13,7 @@ */ package code.name.monkey.retromusic.model -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize /** * Created by hemanths on 3/4/19 diff --git a/app/src/main/java/code/name/monkey/retromusic/model/Song.kt b/app/src/main/java/code/name/monkey/retromusic/model/Song.kt index 8c1481e18..cfd61a937 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/Song.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/Song.kt @@ -14,9 +14,7 @@ package code.name.monkey.retromusic.model import android.os.Parcelable -import code.name.monkey.retromusic.db.HistoryEntity -import code.name.monkey.retromusic.db.SongEntity -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize // update equals and hashcode if fields changes @Parcelize diff --git a/app/src/main/java/code/name/monkey/retromusic/model/lyrics/Lyrics.java b/app/src/main/java/code/name/monkey/retromusic/model/lyrics/Lyrics.java index dad81ff6a..c466949f8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/lyrics/Lyrics.java +++ b/app/src/main/java/code/name/monkey/retromusic/model/lyrics/Lyrics.java @@ -14,9 +14,10 @@ package code.name.monkey.retromusic.model.lyrics; -import code.name.monkey.retromusic.model.Song; import java.util.ArrayList; +import code.name.monkey.retromusic.model.Song; + public class Lyrics { private static final ArrayList> FORMATS = new ArrayList<>(); diff --git a/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/HistoryPlaylist.kt b/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/HistoryPlaylist.kt index f9152967f..9506314ce 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/HistoryPlaylist.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/HistoryPlaylist.kt @@ -3,7 +3,7 @@ package code.name.monkey.retromusic.model.smartplaylist import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.model.Song -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize import org.koin.core.KoinComponent @Parcelize diff --git a/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/LastAddedPlaylist.kt b/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/LastAddedPlaylist.kt index 6b8dafd41..f3b7b1b13 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/LastAddedPlaylist.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/LastAddedPlaylist.kt @@ -3,7 +3,7 @@ package code.name.monkey.retromusic.model.smartplaylist import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.model.Song -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize @Parcelize class LastAddedPlaylist : AbsSmartPlaylist( diff --git a/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/NotPlayedPlaylist.kt b/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/NotPlayedPlaylist.kt index d9cbd6af3..f77565daf 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/NotPlayedPlaylist.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/NotPlayedPlaylist.kt @@ -3,7 +3,7 @@ package code.name.monkey.retromusic.model.smartplaylist import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.model.Song -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize @Parcelize class NotPlayedPlaylist : AbsSmartPlaylist( diff --git a/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/ShuffleAllPlaylist.kt b/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/ShuffleAllPlaylist.kt index 69372abe6..35c07d71c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/ShuffleAllPlaylist.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/ShuffleAllPlaylist.kt @@ -3,7 +3,7 @@ package code.name.monkey.retromusic.model.smartplaylist import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.model.Song -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize @Parcelize class ShuffleAllPlaylist : AbsSmartPlaylist( diff --git a/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/TopTracksPlaylist.kt b/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/TopTracksPlaylist.kt index 4348ce828..d33be0207 100644 --- a/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/TopTracksPlaylist.kt +++ b/app/src/main/java/code/name/monkey/retromusic/model/smartplaylist/TopTracksPlaylist.kt @@ -3,7 +3,7 @@ package code.name.monkey.retromusic.model.smartplaylist import code.name.monkey.retromusic.App import code.name.monkey.retromusic.R import code.name.monkey.retromusic.model.Song -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize @Parcelize class TopTracksPlaylist : AbsSmartPlaylist( diff --git a/app/src/main/java/code/name/monkey/retromusic/network/RetrofitClient.kt b/app/src/main/java/code/name/monkey/retromusic/network/RetrofitClient.kt index 719d682f5..fdda85c08 100644 --- a/app/src/main/java/code/name/monkey/retromusic/network/RetrofitClient.kt +++ b/app/src/main/java/code/name/monkey/retromusic/network/RetrofitClient.kt @@ -40,7 +40,7 @@ fun headerInterceptor(context: Context): Interceptor { val request = original.newBuilder() .header("User-Agent", context.packageName) .addHeader("Content-Type", "application/json; charset=utf-8") - .method(original.method(), original.body()) + .method(original.method, original.body) .build() it.proceed(request) } diff --git a/app/src/main/java/code/name/monkey/retromusic/network/conversion/LyricsConverterFactory.kt b/app/src/main/java/code/name/monkey/retromusic/network/conversion/LyricsConverterFactory.kt index 474e81c99..1103653c4 100644 --- a/app/src/main/java/code/name/monkey/retromusic/network/conversion/LyricsConverterFactory.kt +++ b/app/src/main/java/code/name/monkey/retromusic/network/conversion/LyricsConverterFactory.kt @@ -14,8 +14,9 @@ */ package code.name.monkey.retromusic.network.conversion -import okhttp3.MediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.ResponseBody import retrofit2.Converter import retrofit2.Retrofit @@ -41,11 +42,11 @@ class LyricsConverterFactory : Converter.Factory() { ): Converter<*, RequestBody>? { return if (String::class.java == type) { - Converter { value -> RequestBody.create(MEDIA_TYPE, value) } + Converter { value -> value.toRequestBody(MEDIA_TYPE) } } else null } companion object { - private val MEDIA_TYPE = MediaType.parse("text/plain") + private val MEDIA_TYPE = "text/plain".toMediaTypeOrNull() } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmAlbum.java b/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmAlbum.java index b912503c8..481372ffc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmAlbum.java +++ b/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmAlbum.java @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.network.model; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; + import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmArtist.java b/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmArtist.java index 0f91b5e43..ca6a97fe8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmArtist.java +++ b/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmArtist.java @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.network.model; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; + import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmTrack.java b/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmTrack.java index ee8848a38..cdaed55e8 100644 --- a/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmTrack.java +++ b/app/src/main/java/code/name/monkey/retromusic/network/model/LastFmTrack.java @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.network.model; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; + import java.util.List; /** Created by hemanths on 15/06/17. */ diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt index 5c7e91ba8..bdde24be0 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/AlbumCoverStylePreferenceDialog.kt @@ -70,7 +70,7 @@ class AlbumCoverStylePreferenceDialog : DialogFragment(), override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { @SuppressLint("InflateParams") val view = - LayoutInflater.from(requireContext()) + layoutInflater .inflate(R.layout.preference_dialog_now_playing_screen, null) val viewPager = view.findViewById(R.id.now_playing_screen_view_pager) viewPager.adapter = AlbumCoverStyleAdapter(requireContext()) diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/DurationPreference.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/DurationPreference.kt new file mode 100644 index 000000000..c9b5e5d2b --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/DurationPreference.kt @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.preferences + +import android.app.Dialog +import android.content.Context +import android.content.res.ColorStateList +import android.os.Bundle +import android.util.AttributeSet +import android.widget.TextView +import androidx.core.graphics.BlendModeColorFilterCompat +import androidx.core.graphics.BlendModeCompat.SRC_IN +import androidx.fragment.app.DialogFragment +import code.name.monkey.appthemehelper.ThemeStore +import code.name.monkey.appthemehelper.common.prefs.supportv7.ATEDialogPreference +import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.extensions.colorButtons +import code.name.monkey.retromusic.extensions.colorControlNormal +import code.name.monkey.retromusic.extensions.materialDialog +import code.name.monkey.retromusic.util.PreferenceUtil +import com.google.android.material.slider.Slider + + +class DurationPreference @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0, + defStyleRes: Int = 0 +) : ATEDialogPreference(context, attrs, defStyleAttr, defStyleRes) { + init { + icon?.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat( + context.colorControlNormal(), + SRC_IN + ) + } +} + +class DurationPreferenceDialog : DialogFragment() { + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val view = layoutInflater + .inflate(R.layout.preference_dialog_audio_fade, null) + + + val slider = view.findViewById(R.id.slider) + val duration = view.findViewById(R.id.duration) + ColorStateList.valueOf(ThemeStore.accentColor(requireContext())).let { + slider.trackTintList = it + slider.thumbTintList = it + } + slider.value = PreferenceUtil.audioFadeDuration.toFloat() + updateText(slider.value.toInt(), duration) + slider.addOnChangeListener(Slider.OnChangeListener { _, value, fromUser -> + if (fromUser) { + updateText(value.toInt(), duration) + } + }) + + + return materialDialog(R.string.audio_fade_duration) + .setNegativeButton(android.R.string.cancel, null) + .setPositiveButton(R.string.save) { _, _ -> updateDuration(slider.value.toInt()) } + .setView(view) + .create() + .colorButtons() + } + + private fun updateText(value: Int, duration: TextView) { + var durationText = "$value ms" + if (value == 0) durationText += " / Off" + duration.text = durationText + } + + private fun updateDuration(duration: Int) { + PreferenceUtil.audioFadeDuration = duration + } + + companion object { + fun newInstance(): DurationPreferenceDialog { + return DurationPreferenceDialog() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt index ccf12b4b4..1b5192b51 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/LibraryPreference.kt @@ -14,12 +14,10 @@ package code.name.monkey.retromusic.preferences -import android.annotation.SuppressLint import android.app.Dialog import android.content.Context import android.os.Bundle import android.util.AttributeSet -import android.view.LayoutInflater import android.widget.Toast import androidx.core.graphics.BlendModeColorFilterCompat import androidx.core.graphics.BlendModeCompat.SRC_IN @@ -52,9 +50,8 @@ class LibraryPreference @JvmOverloads constructor( class LibraryPreferenceDialog : DialogFragment() { - @SuppressLint("InflateParams") override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val view = LayoutInflater.from(requireContext()) + val view = layoutInflater .inflate(R.layout.preference_dialog_library_categories, null) val categoryAdapter = CategoryInfoAdapter() diff --git a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt index e6760195e..d53c8c1f2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt +++ b/app/src/main/java/code/name/monkey/retromusic/preferences/NowPlayingScreenPreferenceDialog.kt @@ -76,7 +76,7 @@ class NowPlayingScreenPreferenceDialog : DialogFragment(), ViewPager.OnPageChang } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val view = LayoutInflater.from(requireContext()) + val view = layoutInflater .inflate(R.layout.preference_dialog_now_playing_screen, null) val viewPager = view.findViewById(R.id.now_playing_screen_view_pager) ?: throw IllegalStateException("Dialog view must contain a ViewPager with id 'now_playing_screen_view_pager'") diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/BlacklistStore.java b/app/src/main/java/code/name/monkey/retromusic/providers/BlacklistStore.java index ee4486a40..bf274f66c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/providers/BlacklistStore.java +++ b/app/src/main/java/code/name/monkey/retromusic/providers/BlacklistStore.java @@ -23,12 +23,15 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Environment; + import androidx.annotation.NonNull; -import code.name.monkey.retromusic.util.FileUtil; -import code.name.monkey.retromusic.util.PreferenceUtil; + import java.io.File; import java.util.ArrayList; +import code.name.monkey.retromusic.util.FileUtil; +import code.name.monkey.retromusic.util.PreferenceUtil; + public class BlacklistStore extends SQLiteOpenHelper { public static final String DATABASE_NAME = "blacklist.db"; private static final int VERSION = 2; diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/HistoryStore.java b/app/src/main/java/code/name/monkey/retromusic/providers/HistoryStore.java index 996bb57a3..7a6372041 100644 --- a/app/src/main/java/code/name/monkey/retromusic/providers/HistoryStore.java +++ b/app/src/main/java/code/name/monkey/retromusic/providers/HistoryStore.java @@ -19,6 +19,7 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/MusicPlaybackQueueStore.java b/app/src/main/java/code/name/monkey/retromusic/providers/MusicPlaybackQueueStore.java index 1d1934a6a..6875083b9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/providers/MusicPlaybackQueueStore.java +++ b/app/src/main/java/code/name/monkey/retromusic/providers/MusicPlaybackQueueStore.java @@ -20,12 +20,15 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.provider.BaseColumns; import android.provider.MediaStore.Audio.AudioColumns; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + +import java.util.List; + import code.name.monkey.retromusic.App; import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.repository.RealSongRepository; -import java.util.List; /** * @author Andrew Neal, modified for Phonograph by Karim Abou Zeid diff --git a/app/src/main/java/code/name/monkey/retromusic/providers/SongPlayCountStore.java b/app/src/main/java/code/name/monkey/retromusic/providers/SongPlayCountStore.java index c19903f9a..fd74c9076 100644 --- a/app/src/main/java/code/name/monkey/retromusic/providers/SongPlayCountStore.java +++ b/app/src/main/java/code/name/monkey/retromusic/providers/SongPlayCountStore.java @@ -21,6 +21,7 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.view.animation.AccelerateInterpolator; import android.view.animation.Interpolator; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt index 97b8206af..ce0232069 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/AlbumRepository.kt @@ -19,8 +19,6 @@ import code.name.monkey.retromusic.helper.SortOrder import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.PreferenceUtil -import java.util.* -import kotlin.collections.ArrayList /** @@ -71,11 +69,16 @@ class RealAlbumRepository(private val songRepository: RealSongRepository) : return album } + // We don't need sorted list of songs (with sortAlbumSongs()) + // cuz we are just displaying Albums(Cover Arts) anyway and not songs fun splitIntoAlbums( songs: List ): List { - return songs.groupBy { it.albumId } - .map { sortAlbumSongs(Album(it.key, it.value)) } + return if (PreferenceUtil.albumSortOrder != SortOrder.AlbumSortOrder.ALBUM_NUMBER_OF_SONGS) songs.groupBy { it.albumId } + .map { Album(it.key, it.value) } + // We can't sort Album with the help of MediaStore so a hack + else songs.groupBy { it.albumId }.map { Album(it.key, it.value) } + .sortedByDescending { it.songCount } } private fun sortAlbumSongs(album: Album): Album { @@ -98,9 +101,10 @@ class RealAlbumRepository(private val songRepository: RealSongRepository) : } private fun getSongLoaderSortOrder(): String { - return PreferenceUtil.albumSortOrder + ", " + + var albumSortOrder = PreferenceUtil.albumSortOrder + if (albumSortOrder == SortOrder.AlbumSortOrder.ALBUM_NUMBER_OF_SONGS) + albumSortOrder = SortOrder.AlbumSortOrder.ALBUM_A_Z + return albumSortOrder + ", " + PreferenceUtil.albumSongSortOrder } - - } diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt index f0fd932fc..1fe4839d9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/ArtistRepository.kt @@ -15,6 +15,7 @@ package code.name.monkey.retromusic.repository import android.provider.MediaStore.Audio.AudioColumns +import code.name.monkey.retromusic.helper.SortOrder import code.name.monkey.retromusic.model.Album import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.util.PreferenceUtil @@ -24,9 +25,13 @@ interface ArtistRepository { fun albumArtists(): List + fun albumArtists(query: String): List + fun artists(query: String): List fun artist(artistId: Long): Artist + + fun albumArtist(artistName: String): Artist } class RealArtistRepository( @@ -39,6 +44,7 @@ class RealArtistRepository( PreferenceUtil.artistAlbumSortOrder + ", " + PreferenceUtil.artistSongSortOrder } + override fun artist(artistId: Long): Artist { if (artistId == Artist.VARIOUS_ARTISTS_ID) { // Get Various Artists @@ -49,7 +55,8 @@ class RealArtistRepository( getSongLoaderSortOrder() ) ) - val albums = albumRepository.splitIntoAlbums(songs).filter { it.albumArtist == Artist.VARIOUS_ARTISTS_DISPLAY_NAME } + val albums = albumRepository.splitIntoAlbums(songs) + .filter { it.albumArtist == Artist.VARIOUS_ARTISTS_DISPLAY_NAME } return Artist(Artist.VARIOUS_ARTISTS_ID, albums) } @@ -62,6 +69,32 @@ class RealArtistRepository( ) return Artist(artistId, albumRepository.splitIntoAlbums(songs)) } + + override fun albumArtist(artistName: String): Artist { + if (artistName == Artist.VARIOUS_ARTISTS_DISPLAY_NAME) { + // Get Various Artists + val songs = songRepository.songs( + songRepository.makeSongCursor( + null, + null, + getSongLoaderSortOrder() + ) + ) + val albums = albumRepository.splitIntoAlbums(songs) + .filter { it.albumArtist == Artist.VARIOUS_ARTISTS_DISPLAY_NAME } + return Artist(Artist.VARIOUS_ARTISTS_ID, albums, true) + } + + val songs = songRepository.songs( + songRepository.makeSongCursor( + "album_artist" + "=?", + arrayOf(artistName), + getSongLoaderSortOrder() + ) + ) + return Artist(artistName, albumRepository.splitIntoAlbums(songs), true) + } + override fun artists(): List { val songs = songRepository.songs( songRepository.makeSongCursor( @@ -80,7 +113,17 @@ class RealArtistRepository( getSongLoaderSortOrder() ) ) + return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs)) + } + override fun albumArtists(query: String): List { + val songs = songRepository.songs( + songRepository.makeSongCursor( + "album_artist" + " LIKE ?", + arrayOf("%$query%"), + getSongLoaderSortOrder() + ) + ) return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs)) } @@ -98,22 +141,30 @@ class RealArtistRepository( private fun splitIntoAlbumArtists(albums: List): List { return albums.groupBy { it.albumArtist } + .filter { + !it.key.isNullOrEmpty() + } .map { val currentAlbums = it.value if (currentAlbums.isNotEmpty()) { if (currentAlbums[0].albumArtist == Artist.VARIOUS_ARTISTS_DISPLAY_NAME) { - Artist(Artist.VARIOUS_ARTISTS_ID, currentAlbums) + Artist(Artist.VARIOUS_ARTISTS_ID, currentAlbums, true) } else { - Artist(currentAlbums[0].artistId, currentAlbums) + Artist(currentAlbums[0].artistId, currentAlbums, true) } } else { Artist.empty } + }.apply { + if (PreferenceUtil.artistSortOrder == SortOrder.ArtistSortOrder.ARTIST_A_Z) { + sortedBy { it.name.lowercase() } + } else { + sortedByDescending { it.name.lowercase() } + } } } - fun splitIntoArtists(albums: List): List { return albums.groupBy { it.artistId } .map { Artist(it.key, it.value) } diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/GenreRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/GenreRepository.kt index ca7c822a7..2c096092a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/GenreRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/GenreRepository.kt @@ -18,7 +18,6 @@ import android.content.ContentResolver import android.database.Cursor import android.net.Uri import android.provider.BaseColumns -import android.provider.MediaStore import android.provider.MediaStore.Audio.Genres import code.name.monkey.retromusic.Constants.IS_MUSIC import code.name.monkey.retromusic.Constants.baseProjection @@ -33,6 +32,8 @@ interface GenreRepository { fun genres(): List fun songs(genreId: Long): List + + fun song(genreId: Long): Song } class RealGenreRepository( @@ -52,6 +53,10 @@ class RealGenreRepository( } else songRepository.songs(makeGenreSongCursor(genreId)) } + override fun song(genreId: Long): Song { + return songRepository.song(makeGenreSongCursor(genreId)) + } + private fun getGenreFromCursor(cursor: Cursor): Genre { val id = cursor.getLong(Genres._ID) val name = cursor.getStringOrNull(Genres.NAME) @@ -87,7 +92,7 @@ class RealGenreRepository( } private fun makeAllSongsWithGenreCursor(): Cursor? { - println(MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI.toString()) + println(Genres.EXTERNAL_CONTENT_URI.toString()) return contentResolver.query( Uri.parse("content://media/external/audio/genres/all/members"), arrayOf(Genres.Members.AUDIO_ID), null, null, null diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt index cbd29a90a..7eaab7ddb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt @@ -26,6 +26,7 @@ import code.name.monkey.retromusic.network.Result import code.name.monkey.retromusic.network.Result.* import code.name.monkey.retromusic.network.model.LastFmAlbum import code.name.monkey.retromusic.network.model.LastFmArtist +import code.name.monkey.retromusic.util.PreferenceUtil import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -50,12 +51,13 @@ interface Repository { suspend fun albumArtists(): List suspend fun fetchLegacyPlaylist(): List suspend fun fetchGenres(): List - suspend fun search(query: String?): MutableList + suspend fun search(query: String?, filters: List): MutableList suspend fun getPlaylistSongs(playlist: Playlist): List suspend fun getGenre(genreId: Long): List suspend fun artistInfo(name: String, lang: String?, cache: String?): Result suspend fun albumInfo(artist: String, album: String): Result suspend fun artistById(artistId: Long): Artist + suspend fun albumArtistByName(name: String): Artist suspend fun recentArtists(): List suspend fun topArtists(): List suspend fun topAlbums(): List @@ -101,6 +103,7 @@ interface Repository { suspend fun searchArtists(query: String): List suspend fun searchSongs(query: String): List suspend fun searchAlbums(query: String): List + fun getSongByGenre(genreId: Long): Song } class RealRepository( @@ -127,6 +130,8 @@ class RealRepository( override suspend fun searchAlbums(query: String): List = albumRepository.albums(query) + override fun getSongByGenre(genreId: Long): Song = genreRepository.song(genreId) + override suspend fun searchArtists(query: String): List = artistRepository.artists(query) @@ -142,6 +147,8 @@ class RealRepository( override suspend fun artistById(artistId: Long): Artist = artistRepository.artist(artistId) + override suspend fun albumArtistByName(name: String): Artist = artistRepository.albumArtist(name) + override suspend fun recentArtists(): List = lastAddedRepository.recentArtists() override suspend fun recentAlbums(): List = lastAddedRepository.recentAlbums() @@ -156,8 +163,8 @@ class RealRepository( override suspend fun allSongs(): List = songRepository.songs() - override suspend fun search(query: String?): MutableList = - searchRepository.searchAll(context, query) + override suspend fun search(query: String?, filters: List): MutableList = + searchRepository.searchAll(context, query, filters) override suspend fun getPlaylistSongs(playlist: Playlist): List = if (playlist is AbsCustomPlaylist) { @@ -234,7 +241,9 @@ class RealRepository( ) for (section in sections) { if (section.arrayList.isNotEmpty()) { - homeSections.add(section) + if (section.homeSection != SUGGESTIONS || PreferenceUtil.homeSuggestions) { + homeSections.add(section) + } } } return homeSections @@ -332,12 +341,25 @@ class RealRepository( override fun favorites(): LiveData> = roomRepository.favoritePlaylistLiveData(context.getString(R.string.favorites)) + var suggestions = Home( + listOf(), SUGGESTIONS, + R.string.suggestion_songs + ) + override suspend fun suggestionsHome(): Home { - val songs = - NotPlayedPlaylist().songs().shuffled().takeIf { + if (!PreferenceUtil.homeSuggestions) return Home( + listOf(), + SUGGESTIONS, + R.string.suggestion_songs + ) + // Don't reload Suggestions everytime + if (suggestions.arrayList.isEmpty()) { + val songs = NotPlayedPlaylist().songs().shuffled().takeIf { it.size > 9 } ?: emptyList() - return Home(songs, SUGGESTIONS, R.string.suggestion_songs) + suggestions = Home(songs, SUGGESTIONS, R.string.suggestion_songs) + } + return suggestions } override suspend fun genresHome(): Home { diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt index 8c6dd8656..608a45fd1 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt @@ -2,18 +2,7 @@ package code.name.monkey.retromusic.repository import androidx.annotation.WorkerThread import androidx.lifecycle.LiveData -import code.name.monkey.retromusic.db.BlackListStoreDao -import code.name.monkey.retromusic.db.BlackListStoreEntity -import code.name.monkey.retromusic.db.HistoryDao -import code.name.monkey.retromusic.db.HistoryEntity -import code.name.monkey.retromusic.db.LyricsDao -import code.name.monkey.retromusic.db.PlayCountDao -import code.name.monkey.retromusic.db.PlayCountEntity -import code.name.monkey.retromusic.db.PlaylistDao -import code.name.monkey.retromusic.db.PlaylistEntity -import code.name.monkey.retromusic.db.PlaylistWithSongs -import code.name.monkey.retromusic.db.SongEntity -import code.name.monkey.retromusic.db.toHistoryEntity +import code.name.monkey.retromusic.db.* import code.name.monkey.retromusic.helper.SortOrder.PlaylistSortOrder.Companion.PLAYLIST_A_Z import code.name.monkey.retromusic.helper.SortOrder.PlaylistSortOrder.Companion.PLAYLIST_SONG_COUNT import code.name.monkey.retromusic.helper.SortOrder.PlaylistSortOrder.Companion.PLAYLIST_SONG_COUNT_DESC diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SearchRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/SearchRepository.kt index d8bb7b06d..68305890c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/SearchRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/SearchRepository.kt @@ -16,8 +16,10 @@ package code.name.monkey.retromusic.repository import android.content.Context import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.model.Album +import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.model.Genre -import java.util.* +import code.name.monkey.retromusic.model.Song class RealSearchRepository( private val songRepository: SongRepository, @@ -26,28 +28,54 @@ class RealSearchRepository( private val roomRepository: RoomRepository, private val genreRepository: GenreRepository, ) { - fun searchAll(context: Context, query: String?): MutableList { + fun searchAll(context: Context, query: String?, filters: List): MutableList { val results = mutableListOf() query?.let { searchString -> - val songs = songRepository.songs(searchString) + val isAll = !filters.contains(true) + val songs: List = if (filters[0] || isAll) { + songRepository.songs(searchString) + } else { + emptyList() + } + if (songs.isNotEmpty()) { results.add(context.resources.getString(R.string.songs)) results.addAll(songs) } - val artists = artistRepository.artists(searchString) + val artists: List = if (filters[1] || isAll) { + artistRepository.artists(searchString) + } else { + emptyList() + } if (artists.isNotEmpty()) { results.add(context.resources.getString(R.string.artists)) results.addAll(artists) } - - val albums = albumRepository.albums(searchString) + val albums: List = if (filters[2] || isAll) { + albumRepository.albums(searchString) + } else { + emptyList() + } if (albums.isNotEmpty()) { results.add(context.resources.getString(R.string.albums)) results.addAll(albums) } - val genres: List = genreRepository.genres().filter { genre -> - genre.name.toLowerCase(Locale.getDefault()) - .contains(searchString.toLowerCase(Locale.getDefault())) + val albumArtists: List = if (filters[3] || isAll) { + artistRepository.albumArtists(searchString) + } else { + emptyList() + } + if (albumArtists.isNotEmpty()) { + results.add(context.resources.getString(R.string.album_artist)) + results.addAll(albumArtists) + } + val genres: List = if (filters[4] || isAll) { + genreRepository.genres().filter { genre -> + genre.name.lowercase() + .contains(searchString.lowercase()) + } + } else { + emptyList() } if (genres.isNotEmpty()) { results.add(context.resources.getString(R.string.genres)) diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt index da52da288..6a932ab20 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/SongRepository.kt @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.repository import android.content.Context import android.database.Cursor +import android.os.Environment import android.provider.MediaStore import android.provider.MediaStore.Audio.AudioColumns import android.provider.MediaStore.Audio.Media @@ -140,12 +141,24 @@ class RealSongRepository(private val context: Context) : SongRepository { IS_MUSIC } - // Blacklist - val paths = BlacklistStore.getInstance(context).paths - if (paths.isNotEmpty()) { - selectionFinal = generateBlacklistSelection(selectionFinal, paths.size) - selectionValuesFinal = addBlacklistSelectionValues(selectionValuesFinal, paths) + // Whitelist + if (PreferenceUtil.isWhiteList) { + selectionFinal = + selectionFinal + " AND " + AudioColumns.DATA + " LIKE ?" + selectionValuesFinal = addSelectionValues( + selectionValuesFinal, arrayListOf( + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).canonicalPath + ) + ) + } else { + // Blacklist + val paths = BlacklistStore.getInstance(context).paths + if (paths.isNotEmpty()) { + selectionFinal = generateBlacklistSelection(selectionFinal, paths.size) + selectionValuesFinal = addSelectionValues(selectionValuesFinal, paths) + } } + selectionFinal = selectionFinal + " AND " + Media.DURATION + ">= " + (PreferenceUtil.filterLength * 1000) @@ -180,10 +193,10 @@ class RealSongRepository(private val context: Context) : SongRepository { return newSelection.toString() } - private fun addBlacklistSelectionValues( + private fun addSelectionValues( selectionValues: Array?, paths: ArrayList - ): Array? { + ): Array { var selectionValuesFinal = selectionValues if (selectionValuesFinal == null) { selectionValuesFinal = emptyArray() diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SortedCursor.java b/app/src/main/java/code/name/monkey/retromusic/repository/SortedCursor.java index f7705ca4e..0d1cbb308 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/SortedCursor.java +++ b/app/src/main/java/code/name/monkey/retromusic/repository/SortedCursor.java @@ -15,8 +15,10 @@ package code.name.monkey.retromusic.repository; import android.database.AbstractCursor; import android.database.Cursor; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/SortedLongCursor.java b/app/src/main/java/code/name/monkey/retromusic/repository/SortedLongCursor.java index 02ade994b..9884a32ed 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/SortedLongCursor.java +++ b/app/src/main/java/code/name/monkey/retromusic/repository/SortedLongCursor.java @@ -15,8 +15,10 @@ package code.name.monkey.retromusic.repository; import android.database.AbstractCursor; import android.database.Cursor; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; diff --git a/app/src/main/java/code/name/monkey/retromusic/service/AudioFader.kt b/app/src/main/java/code/name/monkey/retromusic/service/AudioFader.kt new file mode 100644 index 000000000..3f8c06055 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/service/AudioFader.kt @@ -0,0 +1,50 @@ +package code.name.monkey.retromusic.service + +import code.name.monkey.retromusic.service.playback.Playback +import java.util.* + +class AudioFader( + private val player: Playback, + durationMillis: Long, + private val fadeIn: Boolean, + private val doOnEnd: Runnable +) { + val timer = Timer() + var volume = if (fadeIn) 0F else 1F + val maxVolume = if (fadeIn) 1F else 0F + private val volumeStep: Float = PERIOD / durationMillis.toFloat() + + fun start() { + timer.scheduleAtFixedRate( + object : TimerTask() { + override fun run() { + setVolume() + if (volume < 0 || volume > 1) { + player.setVolume(maxVolume) + stop() + doOnEnd.run() + } else { + player.setVolume(volume) + } + } + }, 0, PERIOD + ) + } + + fun stop() { + timer.purge() + timer.cancel() + } + + private fun setVolume() { + if (fadeIn) { + volume += volumeStep + } else { + volume -= volumeStep + } + } + + companion object { + const val PERIOD = 100L + } +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt b/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt new file mode 100644 index 000000000..6dda1e070 --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/service/CrossFadePlayer.kt @@ -0,0 +1,406 @@ +package code.name.monkey.retromusic.service + +import android.animation.Animator +import android.animation.ValueAnimator +import android.content.Context +import android.content.Intent +import android.media.AudioAttributes +import android.media.AudioManager +import android.media.MediaPlayer +import android.media.audiofx.AudioEffect +import android.net.Uri +import android.os.Handler +import android.os.Message +import android.os.PowerManager +import android.widget.Toast +import androidx.core.animation.doOnEnd +import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.helper.MusicPlayerRemote +import code.name.monkey.retromusic.service.playback.Playback +import code.name.monkey.retromusic.service.playback.Playback.PlaybackCallbacks +import code.name.monkey.retromusic.util.MusicUtil +import code.name.monkey.retromusic.util.PreferenceUtil + +/** @author Prathamesh M */ + +/* +* To make Crossfade work we need two MediaPlayer's +* Basically, we switch back and forth between those two mp's +* e.g. When song is about to end (Reaches Crossfade duration) we let current mediaplayer +* play but with decreasing volume and start the player with the next song with increasing volume +* and vice versa for upcoming song and so on. +*/ +class CrossFadePlayer(val context: Context) : Playback, MediaPlayer.OnCompletionListener, + MediaPlayer.OnErrorListener { + + private var currentPlayer: CurrentPlayer = CurrentPlayer.NOT_SET + private var player1 = MediaPlayer() + private var player2 = MediaPlayer() + private var durationListener = DurationListener() + private var trackEndHandledByCrossFade = false + private var mIsInitialized = false + private var hasDataSource: Boolean = false /* Whether first player has DataSource */ + private var fadeInAnimator: Animator? = null + private var fadeOutAnimator: Animator? = null + private var callbacks: PlaybackCallbacks? = null + + init { + player1.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK) + player2.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK) + currentPlayer = CurrentPlayer.PLAYER_ONE + } + + override fun start(): Boolean { + durationListener.start() + return try { + getCurrentPlayer()?.start() + true + } catch (e: IllegalStateException) { + e.printStackTrace() + false + } + } + + override fun release() { + getCurrentPlayer()?.release() + getNextPlayer()?.release() + durationListener.stop() + } + + override fun setCallbacks(callbacks: PlaybackCallbacks) { + this.callbacks = callbacks + } + + override fun stop() { + getCurrentPlayer()?.reset() + mIsInitialized = false + } + + override fun pause(): Boolean { + durationListener.stop() + cancelFade() + getCurrentPlayer()?.let { + if (it.isPlaying) { + it.pause() + } + } + getNextPlayer()?.let { + if (it.isPlaying) { + it.pause() + } + } + return true + } + + override fun seek(whereto: Int): Int { + cancelFade() + getNextPlayer()?.stop() + return try { + getCurrentPlayer()?.seekTo(whereto) + whereto + } catch (e: java.lang.IllegalStateException) { + e.printStackTrace() + -1 + } + } + + override fun setVolume(vol: Float): Boolean { + cancelFade() + return try { + getCurrentPlayer()?.setVolume(vol, vol) + true + } catch (e: IllegalStateException) { + e.printStackTrace() + false + } + } + + override val isInitialized: Boolean + get() = mIsInitialized + + override val isPlaying: Boolean + get() = mIsInitialized && getCurrentPlayer()?.isPlaying == true + + // This has to run when queue is changed or song is changed manually by user + fun sourceChangedByUser() { + this.hasDataSource = false + cancelFade() + getCurrentPlayer()?.apply { + if (isPlaying) stop() + } + getNextPlayer()?.apply { + if (isPlaying) stop() + } + } + + override fun setDataSource(path: String): Boolean { + cancelFade() + mIsInitialized = false + /* We've already set DataSource if initialized is true in setNextDataSource */ + if (!hasDataSource) { + getCurrentPlayer()?.let { mIsInitialized = setDataSourceImpl(it, path) } + hasDataSource = true + } else { + mIsInitialized = true + } + return mIsInitialized + } + + override fun setNextDataSource(path: String?) {} + + /** + * @param player The {@link MediaPlayer} to use + * @param path The path of the file, or the http/rtsp URL of the stream you want to play + * @return True if the player has been prepared and is ready to play, false otherwise + */ + private fun setDataSourceImpl( + player: MediaPlayer, + path: String + ): Boolean { + player.reset() + player.setOnPreparedListener(null) + try { + if (path.startsWith("content://")) { + player.setDataSource(context, Uri.parse(path)) + } else { + player.setDataSource(path) + } + player.setAudioAttributes( + AudioAttributes.Builder().setLegacyStreamType(AudioManager.STREAM_MUSIC).build() + ) + player.prepare() + } catch (e: Exception) { + e.printStackTrace() + return false + } + player.setOnCompletionListener(this) + player.setOnErrorListener(this) + val intent = Intent(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION) + intent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, audioSessionId) + intent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, context.packageName) + intent.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC) + context.sendBroadcast(intent) + return true + } + + override fun setAudioSessionId(sessionId: Int): Boolean { + return try { + getCurrentPlayer()?.audioSessionId = sessionId + true + } catch (e: IllegalArgumentException) { + e.printStackTrace() + false + } catch (e: IllegalStateException) { + e.printStackTrace() + false + } + } + + override val audioSessionId: Int + get() = getCurrentPlayer()?.audioSessionId!! + + /** + * Gets the duration of the file. + * + * @return The duration in milliseconds + */ + override fun duration(): Int { + return if (!mIsInitialized) { + -1 + } else try { + getCurrentPlayer()?.duration!! + } catch (e: IllegalStateException) { + e.printStackTrace() + -1 + } + } + + /** + * Gets the current position in audio. + * @return The position in milliseconds + */ + override fun position(): Int { + return if (!mIsInitialized) { + -1 + } else try { + getCurrentPlayer()?.currentPosition!! + } catch (e: IllegalStateException) { + e.printStackTrace() + -1 + } + } + + override fun onCompletion(mp: MediaPlayer?) { + if (mp == getNextPlayer()) { + if (trackEndHandledByCrossFade) { + trackEndHandledByCrossFade = false + } else { + notifyTrackEnded() + } + } + } + + private fun notifyTrackEnded(){ + if (callbacks != null) { + callbacks?.onTrackEnded() + } + } + + private fun getCurrentPlayer(): MediaPlayer? { + return when (currentPlayer) { + CurrentPlayer.PLAYER_ONE -> { + player1 + } + CurrentPlayer.PLAYER_TWO -> { + player2 + } + CurrentPlayer.NOT_SET -> { + null + } + } + } + + private fun getNextPlayer(): MediaPlayer? { + return when (currentPlayer) { + CurrentPlayer.PLAYER_ONE -> { + player2 + } + CurrentPlayer.PLAYER_TWO -> { + player1 + } + CurrentPlayer.NOT_SET -> { + null + } + } + } + + private fun fadeIn(mediaPlayer: MediaPlayer) { + fadeInAnimator = createFadeAnimator(true, mediaPlayer) { + println("Fade In Completed") + fadeInAnimator = null + } + fadeInAnimator?.start() + } + + private fun fadeOut(mediaPlayer: MediaPlayer) { + fadeOutAnimator = createFadeAnimator(false, mediaPlayer) { + println("Fade Out Completed") + fadeOutAnimator = null + } + fadeOutAnimator?.start() + } + + private fun cancelFade() { + fadeInAnimator?.cancel() + fadeOutAnimator?.cancel() + fadeInAnimator = null + fadeOutAnimator = null + getCurrentPlayer()?.setVolume(1f, 1f) + getNextPlayer()?.setVolume(0f, 0f) + } + + private fun createFadeAnimator( + fadeIn: Boolean /* fadeIn -> true fadeOut -> false*/, + mediaPlayer: MediaPlayer, + callback: Runnable /* Code to run when Animator Ends*/ + ): Animator? { + val duration = PreferenceUtil.crossFadeDuration * 1000 + if (duration == 0) { + return null + } + val startValue = if (fadeIn) 0f else 1.0f + val endValue = if (fadeIn) 1.0f else 0f + val animator = ValueAnimator.ofFloat(startValue, endValue) + animator.duration = duration.toLong() + animator.addUpdateListener { animation: ValueAnimator -> + mediaPlayer.setVolume( + animation.animatedValue as Float, animation.animatedValue as Float + ) + } + animator.doOnEnd { + callback.run() + // Set end values + mediaPlayer.setVolume(endValue, endValue) + } + return animator + } + + override fun onError(mp: MediaPlayer?, what: Int, extra: Int): Boolean { + mIsInitialized = false + mp?.release() + player1 = MediaPlayer() + player2 = MediaPlayer() + mIsInitialized = true + mp?.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK) + Toast.makeText( + context, + context.resources.getString(R.string.unplayable_file), + Toast.LENGTH_SHORT + ) + .show() + return false + } + + enum class CurrentPlayer { + PLAYER_ONE, + PLAYER_TWO, + NOT_SET + } + + inner class DurationListener : Handler() { + + fun start() { + nextRefresh() + } + + fun stop() { + removeMessages(DURATION_CHANGED) + } + + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + if (msg.what == DURATION_CHANGED) { + nextRefresh() + onDurationUpdated(position(), duration()) + } + } + + private fun nextRefresh() { + val message = obtainMessage(DURATION_CHANGED) + removeMessages(DURATION_CHANGED) + sendMessageDelayed(message, 100) + } + } + + + fun onDurationUpdated(progress: Int, total: Int) { + if (total > 0 && (total - progress).div(1000) == PreferenceUtil.crossFadeDuration) { + getNextPlayer()?.let { player -> + val nextSong = MusicPlayerRemote.nextSong + if (nextSong != null) { + setDataSourceImpl(player, MusicUtil.getSongFileUri(nextSong.id).toString()) + // Switch to other player / Crossfade only if next song exists + switchPlayer() + } + } + } + } + + private fun switchPlayer() { + getNextPlayer()?.start() + getCurrentPlayer()?.let { fadeOut(it) } + getNextPlayer()?.let { fadeIn(it) } + currentPlayer = + if (currentPlayer == CurrentPlayer.PLAYER_ONE || currentPlayer == CurrentPlayer.NOT_SET) { + CurrentPlayer.PLAYER_TWO + } else { + CurrentPlayer.PLAYER_ONE + } + notifyTrackEnded() + trackEndHandledByCrossFade = true + } + + companion object { + private const val DURATION_CHANGED = 1 + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MediaSessionCallback.kt b/app/src/main/java/code/name/monkey/retromusic/service/MediaSessionCallback.kt index 6a9bcb706..c901a3919 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MediaSessionCallback.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/MediaSessionCallback.kt @@ -18,11 +18,19 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.support.v4.media.session.MediaSessionCompat +import code.name.monkey.retromusic.auto.AutoMediaIDHelper import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote.cycleRepeatMode +import code.name.monkey.retromusic.helper.ShuffleHelper.makeShuffleList +import code.name.monkey.retromusic.model.Album +import code.name.monkey.retromusic.model.Artist +import code.name.monkey.retromusic.model.Playlist import code.name.monkey.retromusic.model.Song +import code.name.monkey.retromusic.repository.* import code.name.monkey.retromusic.service.MusicService.* import code.name.monkey.retromusic.util.MusicUtil +import org.koin.core.KoinComponent +import org.koin.core.inject import java.util.* @@ -33,7 +41,76 @@ import java.util.* class MediaSessionCallback( private val context: Context, private val musicService: MusicService -) : MediaSessionCompat.Callback() { +) : MediaSessionCompat.Callback(), KoinComponent { + + private val songRepository by inject() + private val albumRepository by inject() + private val artistRepository by inject() + private val genreRepository by inject() + private val playlistRepository by inject() + private val topPlayedRepository by inject() + + override fun onPlayFromMediaId(mediaId: String?, extras: Bundle?) { + super.onPlayFromMediaId(mediaId, extras) + val musicId = AutoMediaIDHelper.extractMusicID(mediaId!!) + println(musicId) + val itemId = musicId?.toLong() ?: -1 + val songs: ArrayList = ArrayList() + val category = AutoMediaIDHelper.extractCategory(mediaId) + when (category) { + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_ALBUM -> { + val album: Album = albumRepository.album(itemId) + songs.addAll(album.songs) + musicService.openQueue(songs, 0, true) + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_ARTIST -> { + val artist: Artist = artistRepository.artist(itemId) + songs.addAll(artist.songs) + musicService.openQueue(songs, 0, true) + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_ALBUM_ARTIST -> { + val artist: Artist = + artistRepository.albumArtist(albumRepository.album(itemId).albumArtist!!) + songs.addAll(artist.songs) + musicService.openQueue(songs, 0, true) + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_PLAYLIST -> { + val playlist: Playlist = playlistRepository.playlist(itemId) + songs.addAll(playlist.getSongs()) + musicService.openQueue(songs, 0, true) + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_GENRE -> { + songs.addAll(genreRepository.songs(itemId)) + musicService.openQueue(songs, 0, true) + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_SHUFFLE -> { + val allSongs: ArrayList = songRepository.songs() as ArrayList + makeShuffleList(allSongs, -1) + musicService.openQueue(allSongs, 0, true) + } + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_HISTORY, + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_SUGGESTIONS, + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_TOP_TRACKS, + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_QUEUE -> { + val tracks: List = when (category) { + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_HISTORY -> topPlayedRepository.recentlyPlayedTracks() + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_SUGGESTIONS -> topPlayedRepository.recentlyPlayedTracks() + AutoMediaIDHelper.MEDIA_ID_MUSICS_BY_TOP_TRACKS -> topPlayedRepository.recentlyPlayedTracks() + else -> musicService.playingQueue as List + } + songs.addAll(tracks) + var songIndex = MusicUtil.indexOfSongInList(tracks, itemId) + if (songIndex == -1) { + songIndex = 0 + } + musicService.openQueue(songs, songIndex, true) + } + else -> { + } + } + musicService.play() + } + override fun onPlay() { super.onPlay() diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java b/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java index 9ed12f5ea..c0d7e023d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java +++ b/app/src/main/java/code/name/monkey/retromusic/service/MultiPlayer.java @@ -23,300 +23,302 @@ import android.net.Uri; import android.os.PowerManager; import android.util.Log; import android.widget.Toast; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.service.playback.Playback; import code.name.monkey.retromusic.util.PreferenceUtil; /** @author Andrew Neal, Karim Abou Zeid (kabouzeid) */ public class MultiPlayer - implements Playback, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener { - public static final String TAG = MultiPlayer.class.getSimpleName(); + implements Playback, MediaPlayer.OnErrorListener, MediaPlayer.OnCompletionListener { + public static final String TAG = MultiPlayer.class.getSimpleName(); - private MediaPlayer mCurrentMediaPlayer = new MediaPlayer(); - private MediaPlayer mNextMediaPlayer; + private MediaPlayer mCurrentMediaPlayer = new MediaPlayer(); + private MediaPlayer mNextMediaPlayer; - private Context context; - @Nullable private Playback.PlaybackCallbacks callbacks; + private Context context; + @Nullable private Playback.PlaybackCallbacks callbacks; - private boolean mIsInitialized = false; + private boolean mIsInitialized = false; - /** Constructor of MultiPlayer */ - MultiPlayer(final Context context) { - this.context = context; - mCurrentMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK); - } + /** Constructor of MultiPlayer */ + MultiPlayer(final Context context) { + this.context = context; + mCurrentMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK); + } - /** - * @param path The path of the file, or the http/rtsp URL of the stream you want to play - * @return True if the player has been prepared and is ready to play, false otherwise - */ - @Override - public boolean setDataSource(@NonNull final String path) { - mIsInitialized = false; - mIsInitialized = setDataSourceImpl(mCurrentMediaPlayer, path); - if (mIsInitialized) { - setNextDataSource(null); + /** + * @param path The path of the file, or the http/rtsp URL of the stream you want to play + * @return True if the player has been prepared and is ready to play, false otherwise + */ + @Override + public boolean setDataSource(@NonNull final String path) { + mIsInitialized = false; + mIsInitialized = setDataSourceImpl(mCurrentMediaPlayer, path); + if (mIsInitialized) { + setNextDataSource(null); + } + return mIsInitialized; } - return mIsInitialized; - } - /** - * @param player The {@link MediaPlayer} to use - * @param path The path of the file, or the http/rtsp URL of the stream you want to play - * @return True if the player has been prepared and is ready to play, false otherwise - */ - private boolean setDataSourceImpl(@NonNull final MediaPlayer player, @NonNull final String path) { - if (context == null) { - return false; - } - try { - player.reset(); - player.setOnPreparedListener(null); - if (path.startsWith("content://")) { - player.setDataSource(context, Uri.parse(path)); - } else { - player.setDataSource(path); - } - player.setAudioStreamType(AudioManager.STREAM_MUSIC); - player.prepare(); - } catch (Exception e) { - return false; - } - player.setOnCompletionListener(this); - player.setOnErrorListener(this); - final Intent intent = new Intent(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION); - intent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, getAudioSessionId()); - intent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, context.getPackageName()); - intent.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC); - context.sendBroadcast(intent); - return true; - } - - /** - * Set the MediaPlayer to start when this MediaPlayer finishes playback. - * - * @param path The path of the file, or the http/rtsp URL of the stream you want to play - */ - @Override - public void setNextDataSource(@Nullable final String path) { - if (context == null) { - return; - } - try { - mCurrentMediaPlayer.setNextMediaPlayer(null); - } catch (IllegalArgumentException e) { - Log.i(TAG, "Next media player is current one, continuing"); - } catch (IllegalStateException e) { - Log.e(TAG, "Media player not initialized!"); - return; - } - if (mNextMediaPlayer != null) { - mNextMediaPlayer.release(); - mNextMediaPlayer = null; - } - if (path == null) { - return; - } - if (PreferenceUtil.INSTANCE.isGapLessPlayback()) { - mNextMediaPlayer = new MediaPlayer(); - mNextMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK); - mNextMediaPlayer.setAudioSessionId(getAudioSessionId()); - if (setDataSourceImpl(mNextMediaPlayer, path)) { + /** + * @param player The {@link MediaPlayer} to use + * @param path The path of the file, or the http/rtsp URL of the stream you want to play + * @return True if the player has been prepared and is ready to play, false otherwise + */ + private boolean setDataSourceImpl(@NonNull final MediaPlayer player, @NonNull final String path) { + if (context == null) { + return false; + } try { - mCurrentMediaPlayer.setNextMediaPlayer(mNextMediaPlayer); - } catch (@NonNull IllegalArgumentException | IllegalStateException e) { - Log.e(TAG, "setNextDataSource: setNextMediaPlayer()", e); - if (mNextMediaPlayer != null) { + player.reset(); + player.setOnPreparedListener(null); + if (path.startsWith("content://")) { + player.setDataSource(context, Uri.parse(path)); + } else { + player.setDataSource(path); + } + player.setAudioStreamType(AudioManager.STREAM_MUSIC); + player.prepare(); + } catch (Exception e) { + return false; + } + player.setOnCompletionListener(this); + player.setOnErrorListener(this); + final Intent intent = new Intent(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION); + intent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, getAudioSessionId()); + intent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, context.getPackageName()); + intent.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC); + context.sendBroadcast(intent); + return true; + } + + /** + * Set the MediaPlayer to start when this MediaPlayer finishes playback. + * + * @param path The path of the file, or the http/rtsp URL of the stream you want to play + */ + @Override + public void setNextDataSource(@Nullable final String path) { + if (context == null) { + return; + } + try { + mCurrentMediaPlayer.setNextMediaPlayer(null); + } catch (IllegalArgumentException e) { + Log.i(TAG, "Next media player is current one, continuing"); + } catch (IllegalStateException e) { + Log.e(TAG, "Media player not initialized!"); + return; + } + if (mNextMediaPlayer != null) { mNextMediaPlayer.release(); mNextMediaPlayer = null; - } } - } else { + if (path == null) { + return; + } + if (PreferenceUtil.INSTANCE.isGapLessPlayback()) { + mNextMediaPlayer = new MediaPlayer(); + mNextMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK); + mNextMediaPlayer.setAudioSessionId(getAudioSessionId()); + if (setDataSourceImpl(mNextMediaPlayer, path)) { + try { + mCurrentMediaPlayer.setNextMediaPlayer(mNextMediaPlayer); + } catch (@NonNull IllegalArgumentException | IllegalStateException e) { + Log.e(TAG, "setNextDataSource: setNextMediaPlayer()", e); + if (mNextMediaPlayer != null) { + mNextMediaPlayer.release(); + mNextMediaPlayer = null; + } + } + } else { + if (mNextMediaPlayer != null) { + mNextMediaPlayer.release(); + mNextMediaPlayer = null; + } + } + } + } + + /** + * Sets the callbacks + * + * @param callbacks The callbacks to use + */ + @Override + public void setCallbacks(@Nullable final Playback.PlaybackCallbacks callbacks) { + this.callbacks = callbacks; + } + + /** @return True if the player is ready to go, false otherwise */ + @Override + public boolean isInitialized() { + return mIsInitialized; + } + + /** Starts or resumes playback. */ + @Override + public boolean start() { + try { + mCurrentMediaPlayer.start(); + return true; + } catch (IllegalStateException e) { + return false; + } + } + + /** Resets the MediaPlayer to its uninitialized state. */ + @Override + public void stop() { + mCurrentMediaPlayer.reset(); + mIsInitialized = false; + } + + /** Releases resources associated with this MediaPlayer object. */ + @Override + public void release() { + stop(); + mCurrentMediaPlayer.release(); if (mNextMediaPlayer != null) { - mNextMediaPlayer.release(); - mNextMediaPlayer = null; + mNextMediaPlayer.release(); } - } } - } - /** - * Sets the callbacks - * - * @param callbacks The callbacks to use - */ - @Override - public void setCallbacks(@Nullable final Playback.PlaybackCallbacks callbacks) { - this.callbacks = callbacks; - } - - /** @return True if the player is ready to go, false otherwise */ - @Override - public boolean isInitialized() { - return mIsInitialized; - } - - /** Starts or resumes playback. */ - @Override - public boolean start() { - try { - mCurrentMediaPlayer.start(); - return true; - } catch (IllegalStateException e) { - return false; + /** Pauses playback. Call start() to resume. */ + @Override + public boolean pause() { + try { + mCurrentMediaPlayer.pause(); + return true; + } catch (IllegalStateException e) { + return false; + } } - } - /** Resets the MediaPlayer to its uninitialized state. */ - @Override - public void stop() { - mCurrentMediaPlayer.reset(); - mIsInitialized = false; - } - - /** Releases resources associated with this MediaPlayer object. */ - @Override - public void release() { - stop(); - mCurrentMediaPlayer.release(); - if (mNextMediaPlayer != null) { - mNextMediaPlayer.release(); + /** Checks whether the MultiPlayer is playing. */ + @Override + public boolean isPlaying() { + return mIsInitialized && mCurrentMediaPlayer.isPlaying(); } - } - /** Pauses playback. Call start() to resume. */ - @Override - public boolean pause() { - try { - mCurrentMediaPlayer.pause(); - return true; - } catch (IllegalStateException e) { - return false; + /** + * Gets the duration of the file. + * + * @return The duration in milliseconds + */ + @Override + public int duration() { + if (!mIsInitialized) { + return -1; + } + try { + return mCurrentMediaPlayer.getDuration(); + } catch (IllegalStateException e) { + return -1; + } } - } - /** Checks whether the MultiPlayer is playing. */ - @Override - public boolean isPlaying() { - return mIsInitialized && mCurrentMediaPlayer.isPlaying(); - } + /** + * Gets the current playback position. + * + * @return The current position in milliseconds + */ + @Override + public int position() { + if (!mIsInitialized) { + return -1; + } + try { + return mCurrentMediaPlayer.getCurrentPosition(); + } catch (IllegalStateException e) { + return -1; + } + } - /** - * Gets the duration of the file. - * - * @return The duration in milliseconds - */ - @Override - public int duration() { - if (!mIsInitialized) { - return -1; + /** + * Gets the current playback position. + * + * @param whereto The offset in milliseconds from the start to seek to + * @return The offset in milliseconds from the start to seek to + */ + @Override + public int seek(final int whereto) { + try { + mCurrentMediaPlayer.seekTo(whereto); + return whereto; + } catch (IllegalStateException e) { + return -1; + } } - try { - return mCurrentMediaPlayer.getDuration(); - } catch (IllegalStateException e) { - return -1; - } - } - /** - * Gets the current playback position. - * - * @return The current position in milliseconds - */ - @Override - public int position() { - if (!mIsInitialized) { - return -1; + @Override + public boolean setVolume(final float vol) { + try { + mCurrentMediaPlayer.setVolume(vol, vol); + return true; + } catch (IllegalStateException e) { + return false; + } } - try { - return mCurrentMediaPlayer.getCurrentPosition(); - } catch (IllegalStateException e) { - return -1; - } - } - /** - * Gets the current playback position. - * - * @param whereto The offset in milliseconds from the start to seek to - * @return The offset in milliseconds from the start to seek to - */ - @Override - public int seek(final int whereto) { - try { - mCurrentMediaPlayer.seekTo(whereto); - return whereto; - } catch (IllegalStateException e) { - return -1; + /** + * Sets the audio session ID. + * + * @param sessionId The audio session ID + */ + @Override + public boolean setAudioSessionId(final int sessionId) { + try { + mCurrentMediaPlayer.setAudioSessionId(sessionId); + return true; + } catch (@NonNull IllegalArgumentException | IllegalStateException e) { + return false; + } } - } - @Override - public boolean setVolume(final float vol) { - try { - mCurrentMediaPlayer.setVolume(vol, vol); - return true; - } catch (IllegalStateException e) { - return false; + /** + * Returns the audio session ID. + * + * @return The current audio session ID. + */ + @Override + public int getAudioSessionId() { + return mCurrentMediaPlayer.getAudioSessionId(); } - } - /** - * Sets the audio session ID. - * - * @param sessionId The audio session ID - */ - @Override - public boolean setAudioSessionId(final int sessionId) { - try { - mCurrentMediaPlayer.setAudioSessionId(sessionId); - return true; - } catch (@NonNull IllegalArgumentException | IllegalStateException e) { - return false; + /** {@inheritDoc} */ + @Override + public boolean onError(final MediaPlayer mp, final int what, final int extra) { + mIsInitialized = false; + mCurrentMediaPlayer.release(); + mCurrentMediaPlayer = new MediaPlayer(); + mCurrentMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK); + if (context != null) { + Toast.makeText( + context, + context.getResources().getString(R.string.unplayable_file), + Toast.LENGTH_SHORT) + .show(); + } + return false; } - } - /** - * Returns the audio session ID. - * - * @return The current audio session ID. - */ - @Override - public int getAudioSessionId() { - return mCurrentMediaPlayer.getAudioSessionId(); - } - - /** {@inheritDoc} */ - @Override - public boolean onError(final MediaPlayer mp, final int what, final int extra) { - mIsInitialized = false; - mCurrentMediaPlayer.release(); - mCurrentMediaPlayer = new MediaPlayer(); - mCurrentMediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK); - if (context != null) { - Toast.makeText( - context, - context.getResources().getString(R.string.unplayable_file), - Toast.LENGTH_SHORT) - .show(); + /** {@inheritDoc} */ + @Override + public void onCompletion(final MediaPlayer mp) { + if (mp.equals(mCurrentMediaPlayer) && mNextMediaPlayer != null) { + mIsInitialized = false; + mCurrentMediaPlayer.release(); + mCurrentMediaPlayer = mNextMediaPlayer; + mIsInitialized = true; + mNextMediaPlayer = null; + if (callbacks != null) callbacks.onTrackWentToNext(); + } else { + if (callbacks != null) callbacks.onTrackEnded(); + } } - return false; - } - - /** {@inheritDoc} */ - @Override - public void onCompletion(final MediaPlayer mp) { - if (mp.equals(mCurrentMediaPlayer) && mNextMediaPlayer != null) { - mIsInitialized = false; - mCurrentMediaPlayer.release(); - mCurrentMediaPlayer = mNextMediaPlayer; - mIsInitialized = true; - mNextMediaPlayer = null; - if (callbacks != null) callbacks.onTrackWentToNext(); - } else { - if (callbacks != null) callbacks.onTrackEnded(); - } - } -} +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java index f0b8b110a..6ea0e2f42 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java @@ -14,8 +14,15 @@ package code.name.monkey.retromusic.service; +import static org.koin.java.KoinJavaComponent.get; +import static code.name.monkey.retromusic.ConstantsKt.ALBUM_ART_ON_LOCK_SCREEN; +import static code.name.monkey.retromusic.ConstantsKt.BLURRED_ALBUM_ART; +import static code.name.monkey.retromusic.ConstantsKt.CLASSIC_NOTIFICATION; +import static code.name.monkey.retromusic.ConstantsKt.COLORED_NOTIFICATION; +import static code.name.monkey.retromusic.ConstantsKt.CROSS_FADE_DURATION; +import static code.name.monkey.retromusic.ConstantsKt.TOGGLE_HEADSET; + import android.app.PendingIntent; -import android.app.Service; import android.appwidget.AppWidgetManager; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; @@ -34,12 +41,14 @@ import android.os.Binder; import android.os.Build; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; +import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.os.PowerManager; import android.os.Process; import android.provider.MediaStore; +import android.support.v4.media.MediaBrowserCompat; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.session.MediaSessionCompat; import android.support.v4.media.session.PlaybackStateCompat; @@ -50,11 +59,10 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.media.MediaBrowserServiceCompat; import androidx.preference.PreferenceManager; -import com.bumptech.glide.BitmapRequestBuilder; -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.animation.GlideAnimation; +import com.bumptech.glide.RequestBuilder; import com.bumptech.glide.request.target.SimpleTarget; import java.util.ArrayList; @@ -69,11 +77,13 @@ import code.name.monkey.retromusic.appwidgets.AppWidgetCard; import code.name.monkey.retromusic.appwidgets.AppWidgetClassic; import code.name.monkey.retromusic.appwidgets.AppWidgetSmall; import code.name.monkey.retromusic.appwidgets.AppWidgetText; +import code.name.monkey.retromusic.auto.AutoMediaIDHelper; +import code.name.monkey.retromusic.auto.AutoMusicProvider; import code.name.monkey.retromusic.glide.BlurTransformation; -import code.name.monkey.retromusic.glide.SongGlideRequest; +import code.name.monkey.retromusic.glide.GlideApp; +import code.name.monkey.retromusic.glide.RetroGlideExtension; +import code.name.monkey.retromusic.helper.MusicPlayerRemote; import code.name.monkey.retromusic.helper.ShuffleHelper; -import code.name.monkey.retromusic.model.AbsCustomPlaylist; -import code.name.monkey.retromusic.model.Playlist; import code.name.monkey.retromusic.model.Song; import code.name.monkey.retromusic.model.smartplaylist.AbsSmartPlaylist; import code.name.monkey.retromusic.providers.HistoryStore; @@ -84,20 +94,14 @@ import code.name.monkey.retromusic.service.notification.PlayingNotificationImpl; import code.name.monkey.retromusic.service.notification.PlayingNotificationOreo; import code.name.monkey.retromusic.service.playback.Playback; import code.name.monkey.retromusic.util.MusicUtil; +import code.name.monkey.retromusic.util.PackageValidator; import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.RetroUtil; -import static code.name.monkey.retromusic.ConstantsKt.ALBUM_ART_ON_LOCK_SCREEN; -import static code.name.monkey.retromusic.ConstantsKt.BLURRED_ALBUM_ART; -import static code.name.monkey.retromusic.ConstantsKt.CLASSIC_NOTIFICATION; -import static code.name.monkey.retromusic.ConstantsKt.COLORED_NOTIFICATION; -import static code.name.monkey.retromusic.ConstantsKt.GAP_LESS_PLAYBACK; -import static code.name.monkey.retromusic.ConstantsKt.TOGGLE_HEADSET; - /** * @author Karim Abou Zeid (kabouzeid), Andrew Neal */ -public class MusicService extends Service +public class MusicService extends MediaBrowserServiceCompat implements SharedPreferences.OnSharedPreferenceChangeListener, Playback.PlaybackCallbacks { public static final String TAG = MusicService.class.getSimpleName(); @@ -168,6 +172,12 @@ public class MusicService extends Service @Nullable public Playback playback; + private PackageValidator mPackageValidator; + + private final AutoMusicProvider mMusicProvider = get(AutoMusicProvider.class); + + public boolean trackEndedByCrossfade = false; + public int position = -1; private AppWidgetBig appWidgetBig = AppWidgetBig.Companion.getInstance(); @@ -338,6 +348,7 @@ public class MusicService extends Service private ThrottledSeekHandler throttledSeekHandler; private Handler uiThreadHandler; private PowerManager.WakeLock wakeLock; + private AudioFader fader; private static Bitmap copy(Bitmap bitmap) { Bitmap.Config config = bitmap.getConfig(); @@ -375,7 +386,13 @@ public class MusicService extends Service musicPlayerHandlerThread.start(); playerHandler = new PlaybackHandler(this, musicPlayerHandlerThread.getLooper()); - playback = new MultiPlayer(this); + // Set MultiPlayer when crossfade duration is 0 i.e. off + if (PreferenceUtil.INSTANCE.getCrossFadeDuration() == 0) { + playback = new MultiPlayer(this); + } else { + playback = new CrossFadePlayer(this); + } + playback.setCallbacks(this); setupMediaSession(); @@ -437,6 +454,10 @@ public class MusicService extends Service registerHeadsetEvents(); registerBluetoothConnected(); + + mPackageValidator = new PackageValidator(this, R.xml.allowed_media_browser_callers); + mMusicProvider.setMusicService(this); + setSessionToken(mediaSession.getSessionToken()); } @Override @@ -536,6 +557,14 @@ public class MusicService extends Service return getSongAt(getPosition()); } + public Song getNextSong() { + if (!isLastTrack() || getRepeatMode() == REPEAT_MODE_THIS) { + return getSongAt(getNextPosition(false)); + } else { + return null; + } + } + @NonNull public MediaSessionCompat getMediaSession() { return mediaSession; @@ -764,19 +793,68 @@ public class MusicService extends Service @NonNull @Override public IBinder onBind(Intent intent) { + // For Android auto, need to call super, or onGetRoot won't be called. + if (intent != null && "android.media.browse.MediaBrowserService".equals(intent.getAction())) { + return super.onBind(intent); + } return musicBind; } + @Nullable + @Override + public BrowserRoot onGetRoot(@NonNull String clientPackageName, int clientUid, @Nullable Bundle rootHints) { + + // Check origin to ensure we're not allowing any arbitrary app to browse app contents + if (!mPackageValidator.isKnownCaller(clientPackageName, clientUid)) { + // Request from an untrusted package: return an empty browser root + return new BrowserRoot(AutoMediaIDHelper.MEDIA_ID_EMPTY_ROOT, null); + } + + return new BrowserRoot(AutoMediaIDHelper.MEDIA_ID_ROOT, null); + } + + @Override + public void onLoadChildren(@NonNull String parentId, @NonNull MediaBrowserServiceCompat.Result> result) { + result.sendResult(mMusicProvider.getChildren(parentId, getResources())); + } + @Override public void onSharedPreferenceChanged( @NonNull SharedPreferences sharedPreferences, @NonNull String key) { switch (key) { - case GAP_LESS_PLAYBACK: - if (sharedPreferences.getBoolean(key, false)) { - prepareNext(); - } else { + case CROSS_FADE_DURATION: + int progress = getSongProgressMillis(); + boolean wasPlaying = isPlaying(); + /* Switch to MultiPlayer if Crossfade duration is 0 and + Playback is not an instance of MultiPlayer */ + if (!(playback instanceof MultiPlayer) && PreferenceUtil.INSTANCE.getCrossFadeDuration() == 0) { if (playback != null) { - playback.setNextDataSource(null); + playback.release(); + } + playback = null; + playback = new MultiPlayer(this); + playback.setCallbacks(this); + if (openTrackAndPrepareNextAt(position)) { + seek(progress); + if (wasPlaying) { + play(); + } + } + } + /* Switch to CrossFadePlayer if Crossfade duration is greater than 0 and + Playback is not an instance of CrossFadePlayer */ + else if (!(playback instanceof CrossFadePlayer) && PreferenceUtil.INSTANCE.getCrossFadeDuration() > 0) { + if (playback != null) { + playback.release(); + } + playback = null; + playback = new CrossFadePlayer(this); + playback.setCallbacks(this); + if (openTrackAndPrepareNextAt(position)) { + seek(progress); + if (wasPlaying) { + play(); + } } } break; @@ -901,6 +979,22 @@ public class MusicService extends Service } public void pause() { + pausedByTransientLossOfFocus = false; + if (playback != null && playback.isPlaying()) { + if (fader != null) { + fader.stop(); + } + fader = new AudioFader(playback, PreferenceUtil.INSTANCE.getAudioFadeDuration(), false, () -> { + if (playback != null && playback.isPlaying()) { + playback.pause(); + notifyChange(PLAY_STATE_CHANGED); + } + }); + fader.start(); + } + } + + public void forcePause() { pausedByTransientLossOfFocus = false; if (playback != null && playback.isPlaying()) { playback.pause(); @@ -915,21 +1009,31 @@ public class MusicService extends Service if (!playback.isInitialized()) { playSongAt(getPosition()); } else { - playback.start(); - if (!becomingNoisyReceiverRegistered) { - registerReceiver(becomingNoisyReceiver, becomingNoisyReceiverIntentFilter); - becomingNoisyReceiverRegistered = true; + //Don't Start playing when it's casting + if (MusicPlayerRemote.INSTANCE.isCasting()) { + return; } - if (notHandledMetaChangedForCurrentTrack) { - handleChangeInternal(META_CHANGED); - notHandledMetaChangedForCurrentTrack = false; + if (fader != null) { + fader.stop(); } - notifyChange(PLAY_STATE_CHANGED); + fader = new AudioFader(playback, PreferenceUtil.INSTANCE.getAudioFadeDuration(), false, () -> { + if (!becomingNoisyReceiverRegistered) { + registerReceiver(becomingNoisyReceiver, becomingNoisyReceiverIntentFilter); + becomingNoisyReceiverRegistered = true; + } + if (notHandledMetaChangedForCurrentTrack) { + handleChangeInternal(META_CHANGED); + notHandledMetaChangedForCurrentTrack = false; + } - // fixes a bug where the volume would stay ducked because the - // AudioManager.AUDIOFOCUS_GAIN event is not sent - playerHandler.removeMessages(DUCK); - playerHandler.sendEmptyMessage(UNDUCK); + // fixes a bug where the volume would stay ducked because the + // AudioManager.AUDIOFOCUS_GAIN event is not sent + playerHandler.removeMessages(DUCK); + playerHandler.sendEmptyMessage(UNDUCK); + }); + playback.start(); + notifyChange(PLAY_STATE_CHANGED); + fader.start(); } } } else { @@ -955,6 +1059,14 @@ public class MusicService extends Service } public void playSongAtImpl(int position) { + if (!trackEndedByCrossfade) { + // This is only imp if we are using crossfade + if (playback instanceof CrossFadePlayer) { + ((CrossFadePlayer) playback).sourceChangedByUser(); + } + } else { + trackEndedByCrossfade = false; + } if (openTrackAndPrepareNextAt(position)) { play(); } else { @@ -978,7 +1090,7 @@ public class MusicService extends Service } } - public boolean prepareNextImpl() { + public void prepareNextImpl() { synchronized (this) { try { int nextPosition = getNextPosition(false); @@ -986,9 +1098,7 @@ public class MusicService extends Service playback.setNextDataSource(getTrackUri(Objects.requireNonNull(getSongAt(nextPosition)))); } this.nextPosition = nextPosition; - return true; } catch (Exception e) { - return false; } } } @@ -1176,9 +1286,7 @@ public class MusicService extends Service if (PreferenceUtil.INSTANCE.isAlbumArtOnLockScreen()) { final Point screenSize = RetroUtil.getScreenSize(MusicService.this); - final BitmapRequestBuilder request = SongGlideRequest.Builder.from(Glide.with(MusicService.this), song) - .checkIgnoreMediaStore(MusicService.this) - .asBitmap().build(); + final RequestBuilder request = GlideApp.with(MusicService.this).asBitmap().songCoverOptions(song).load(RetroGlideExtension.INSTANCE.getSongModel(song)); if (PreferenceUtil.INSTANCE.isBlurredAlbumArt()) { request.transform(new BlurTransformation.Builder(MusicService.this).build()); } @@ -1187,14 +1295,13 @@ public class MusicService extends Service public void run() { request.into(new SimpleTarget(screenSize.x, screenSize.y) { @Override - public void onLoadFailed(Exception e, Drawable errorDrawable) { - super.onLoadFailed(e, errorDrawable); + public void onLoadFailed(Drawable errorDrawable) { + super.onLoadFailed(errorDrawable); mediaSession.setMetadata(metaData.build()); } @Override - public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) { - + public void onResourceReady(@NonNull Bitmap resource, @Nullable com.bumptech.glide.request.transition.Transition transition) { metaData.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, copy(resource)); mediaSession.setMetadata(metaData.build()); } @@ -1238,6 +1345,7 @@ public class MusicService extends Service case META_CHANGED: updateNotification(); updateMediaSessionMetaData(); + updateMediaSessionPlaybackState(); savePosition(); savePositionInTrack(); final Song currentSong = getCurrentSong(); @@ -1266,6 +1374,7 @@ public class MusicService extends Service return playback.setDataSource(getTrackUri(Objects.requireNonNull(getCurrentSong()))); } } catch (Exception e) { + e.printStackTrace(); return false; } } diff --git a/app/src/main/java/code/name/monkey/retromusic/service/PlaybackHandler.java b/app/src/main/java/code/name/monkey/retromusic/service/PlaybackHandler.java index 5928a5337..82e90cfbd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/PlaybackHandler.java +++ b/app/src/main/java/code/name/monkey/retromusic/service/PlaybackHandler.java @@ -25,10 +25,13 @@ import android.media.AudioManager; import android.os.Handler; import android.os.Looper; import android.os.Message; + import androidx.annotation.NonNull; -import code.name.monkey.retromusic.util.PreferenceUtil; + import java.lang.ref.WeakReference; +import code.name.monkey.retromusic.util.PreferenceUtil; + class PlaybackHandler extends Handler { @NonNull private final WeakReference mService; @@ -93,6 +96,7 @@ class PlaybackHandler extends Handler { break; case TRACK_ENDED: + service.trackEndedByCrossfade = true; // if there is a timer finished, don't continue if (service.pendingQuit || service.getRepeatMode() == REPEAT_MODE_NONE && service.isLastTrack()) { @@ -143,7 +147,7 @@ class PlaybackHandler extends Handler { case AudioManager.AUDIOFOCUS_LOSS: // Lost focus for an unbounded amount of time: stop playback and release media playback - service.pause(); + service.forcePause(); break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: @@ -151,7 +155,7 @@ class PlaybackHandler extends Handler { // playback. We don't release the media playback because playback // is likely to resume boolean wasPlaying = service.isPlaying(); - service.pause(); + service.forcePause(); service.setPausedByTransientLossOfFocus(wasPlaying); break; diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt index dd7af83d8..bdc0b07dc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationImpl.kt @@ -29,7 +29,8 @@ import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.db.PlaylistEntity import code.name.monkey.retromusic.db.toSongEntity -import code.name.monkey.retromusic.glide.SongGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.service.MusicService.* @@ -37,9 +38,9 @@ import code.name.monkey.retromusic.util.MusicUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.RetroColorUtil import com.bumptech.glide.Glide -import com.bumptech.glide.request.animation.GlideAnimation import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.target.Target +import com.bumptech.glide.request.transition.Transition import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import org.koin.core.KoinComponent @@ -79,11 +80,11 @@ class PlayingNotificationImpl : PlayingNotification(), KoinComponent { .getDimensionPixelSize(R.dimen.notification_big_image_size) service.runOnUiThread { if (target != null) { - Glide.clear(target) + Glide.with(service).clear(target) } - target = SongGlideRequest.Builder.from(Glide.with(service), song) - .checkIgnoreMediaStore(service) - .generatePalette(service).build() + target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) + .load(RetroGlideExtension.getSongModel(song)) + //.checkIgnoreMediaStore() .centerCrop() .into(object : SimpleTarget( bigNotificationImageSize, @@ -91,7 +92,7 @@ class PlayingNotificationImpl : PlayingNotification(), KoinComponent { ) { override fun onResourceReady( resource: BitmapPaletteWrapper, - glideAnimation: GlideAnimation + transition: Transition? ) { update( resource.bitmap, @@ -99,8 +100,8 @@ class PlayingNotificationImpl : PlayingNotification(), KoinComponent { ) } - override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) { - super.onLoadFailed(e, errorDrawable) + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) update(null, Color.TRANSPARENT) } diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt index 7612c7a03..7a5ce7c8b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt @@ -28,7 +28,8 @@ import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity -import code.name.monkey.retromusic.glide.SongGlideRequest +import code.name.monkey.retromusic.glide.GlideApp +import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.service.MusicService @@ -38,9 +39,9 @@ import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.RetroUtil.createBitmap import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import com.bumptech.glide.Glide -import com.bumptech.glide.request.animation.GlideAnimation import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.target.Target +import com.bumptech.glide.request.transition.Transition /** * @author Hemanth S (h4h13). @@ -95,11 +96,10 @@ class PlayingNotificationOreo : PlayingNotification() { .getDimensionPixelSize(R.dimen.notification_big_image_size) service.runOnUiThread { if (target != null) { - Glide.clear(target) + Glide.with(service).clear(target) } - target = SongGlideRequest.Builder.from(Glide.with(service), song) - .checkIgnoreMediaStore(service) - .generatePalette(service).build() + target = GlideApp.with(service).asBitmapPalette().songCoverOptions(song) + .load(RetroGlideExtension.getSongModel(song)) .centerCrop() .into(object : SimpleTarget( bigNotificationImageSize, @@ -107,7 +107,7 @@ class PlayingNotificationOreo : PlayingNotification() { ) { override fun onResourceReady( resource: BitmapPaletteWrapper, - glideAnimation: GlideAnimation + transition: Transition? ) { /* val mediaNotificationProcessor = MediaNotificationProcessor( service, @@ -119,8 +119,8 @@ class PlayingNotificationOreo : PlayingNotification() { update(resource.bitmap, colors.backgroundColor) } - override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) { - super.onLoadFailed(e, errorDrawable) + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) update( null, resolveColor(service, R.attr.colorSurface, Color.WHITE) diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/CascadingPageTransformer.kt b/app/src/main/java/code/name/monkey/retromusic/transform/CascadingPageTransformer.kt index 6330f062b..9db5d5b7a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/transform/CascadingPageTransformer.kt +++ b/app/src/main/java/code/name/monkey/retromusic/transform/CascadingPageTransformer.kt @@ -14,7 +14,6 @@ package code.name.monkey.retromusic.transform -import android.annotation.SuppressLint import android.view.View import androidx.viewpager.widget.ViewPager @@ -22,11 +21,6 @@ class CascadingPageTransformer : ViewPager.PageTransformer { private var mScaleOffset = 40 - fun setScaleOffset(mScaleOffset: Int) { - this.mScaleOffset = mScaleOffset - } - - @SuppressLint("NewApi") override fun transformPage(page: View, position: Float) { if (position <= 0.0f) {//被滑动的那页 position 是-下标~ 0 page.translationX = 0f @@ -34,14 +28,6 @@ class CascadingPageTransformer : ViewPager.PageTransformer { page.rotation = 45 * position //X轴偏移 li: 300/3 * -0.1 = -10 page.translationX = page.width / 3 * position - } else if (position <= 1f) { - val scale = (page.width - mScaleOffset * position) / page.width.toFloat() - - page.scaleX = scale - page.scaleY = scale - - page.translationX = -page.width * position - page.translationY = mScaleOffset * 0.8f * position } else { //缩放比例 val scale = (page.width - mScaleOffset * position) / page.width.toFloat() @@ -50,7 +36,7 @@ class CascadingPageTransformer : ViewPager.PageTransformer { page.scaleY = scale page.translationX = -page.width * position - page.translationY = mScaleOffset * 0.7f * position + page.translationY = mScaleOffset * 0.8f * position } } -} \ No newline at end of file +} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/transform/HingeTransformation.kt b/app/src/main/java/code/name/monkey/retromusic/transform/HingeTransformation.kt index c3804623b..9dc2fedcf 100644 --- a/app/src/main/java/code/name/monkey/retromusic/transform/HingeTransformation.kt +++ b/app/src/main/java/code/name/monkey/retromusic/transform/HingeTransformation.kt @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.transform import android.view.View import androidx.viewpager.widget.ViewPager +import kotlin.math.abs class HingeTransformation : ViewPager.PageTransformer { override fun transformPage(page: View, position: Float) { @@ -25,22 +26,30 @@ class HingeTransformation : ViewPager.PageTransformer { page.pivotY = 0f - if (position < -1) { // [-Infinity,-1) - // This page is way off-screen to the left. - page.alpha = 0f - - } else if (position <= 0) { // [-1,0] - page.rotation = 90 * Math.abs(position) - page.alpha = 1 - Math.abs(position) - - } else if (position <= 1) { // (0,1] - page.rotation = 0f - page.alpha = 1f - - } else { // (1,+Infinity] - // This page is way off-screen to the right. - page.alpha = 0f - + when { + position < -1 -> { // [-Infinity,-1) + // This page is way off-screen to the left. + page.alpha = 0f + // The Page is off-screen but it may still interfere with + // click events of current page if + // it's visibility is not set to Gone + page.visibility = View.GONE + } + position <= 0 -> { // [-1,0] + page.rotation = 90 * abs(position) + page.alpha = 1 - abs(position) + page.visibility = View.VISIBLE + } + position <= 1 -> { // (0,1] + page.rotation = 0f + page.alpha = 1f + page.visibility = View.VISIBLE + } + else -> { // (1,+Infinity] + // This page is way off-screen to the right. + page.alpha = 0f + page.visibility = View.GONE + } } } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/util/AppRater.kt b/app/src/main/java/code/name/monkey/retromusic/util/AppRater.kt index ded848d20..832377391 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/AppRater.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/AppRater.kt @@ -60,7 +60,7 @@ object AppRater { } } - editor.commit() + editor.apply() } private fun showPlayStoreReviewDialog(context: Activity, editor: SharedPreferences.Editor) { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ArtistSignatureUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/ArtistSignatureUtil.java index 6418dae5b..5a069f5a1 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/ArtistSignatureUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/ArtistSignatureUtil.java @@ -14,11 +14,12 @@ package code.name.monkey.retromusic.util; -import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; + import androidx.annotation.NonNull; -import com.bumptech.glide.signature.StringSignature; + +import com.bumptech.glide.signature.ObjectKey; /** @author Karim Abou Zeid (kabouzeid) */ public class ArtistSignatureUtil { @@ -39,16 +40,15 @@ public class ArtistSignatureUtil { return sInstance; } - @SuppressLint("CommitPrefEdits") public void updateArtistSignature(String artistName) { - mPreferences.edit().putLong(artistName, System.currentTimeMillis()).commit(); + mPreferences.edit().putLong(artistName, System.currentTimeMillis()).apply(); } public long getArtistSignatureRaw(String artistName) { return mPreferences.getLong(artistName, 0); } - public StringSignature getArtistSignature(String artistName) { - return new StringSignature(String.valueOf(getArtistSignatureRaw(artistName))); + public ObjectKey getArtistSignature(String artistName) { + return new ObjectKey(String.valueOf(getArtistSignatureRaw(artistName))); } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java b/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java index f219ee391..cf2e38f33 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/AutoGeneratedPlaylistBitmap.java @@ -31,49 +31,19 @@ public class AutoGeneratedPlaylistBitmap { */ public static Bitmap getBitmap( Context context, List songPlaylist, boolean round, boolean blur) { - if (songPlaylist == null || songPlaylist.isEmpty()) return null; - long start = System.currentTimeMillis(); - // lấy toàn bộ album id, loại bỏ trùng nhau + if (songPlaylist == null || songPlaylist.isEmpty()) return getDefaultBitmap(context, round); + if (songPlaylist.size() == 1) return getBitmapWithAlbumId(context, songPlaylist.get(0).getAlbumId()); List albumID = new ArrayList<>(); for (Song song : songPlaylist) { if (!albumID.contains(song.getAlbumId())) albumID.add(song.getAlbumId()); } - - long start2 = System.currentTimeMillis() - start; - - // lấy toàn bộ art tồn tại - List art = new ArrayList(); + List art = new ArrayList<>(); for (Long id : albumID) { Bitmap bitmap = getBitmapWithAlbumId(context, id); if (bitmap != null) art.add(bitmap); - if (art.size() == 6) break; + if (art.size() == 9) break; } return MergedImageUtils.INSTANCE.joinImages(art); - /* - - long start3 = System.currentTimeMillis() - start2 - start; - Bitmap ret; - switch (art.size()) { - // lấy hình mặc định - case 0: - ret = getDefaultBitmap(context, round).copy(Bitmap.Config.ARGB_8888, false); - break; - // dùng hình duy nhất - case 1: - if (round) - ret = BitmapEditor.getRoundedCornerBitmap(art.get(0), art.get(0).getWidth() / 40); - else ret = art.get(0); - break; - // từ 2 trở lên ta cần vẽ canvas - default: - ret = getBitmapCollection(art, round); - } - int w = ret.getWidth(); - if (blur) - return BitmapEditor.GetRoundedBitmapWithBlurShadow(context, ret, w / 24, w / 24, w / 24, w / 24, 0, 200, w / 40, 1); - - Log.d(TAG, "getBitmap: time = " + (System.currentTimeMillis() - start) + ", start2 = " + start2 + ", start3 = " + start3); - return ret;*/ } private static Bitmap getBitmapCollection(ArrayList art, boolean round) { @@ -175,9 +145,9 @@ public class AutoGeneratedPlaylistBitmap { private static Bitmap getBitmapWithAlbumId(@NonNull Context context, Long id) { try { return Glide.with(context) - .load(MusicUtil.INSTANCE.getMediaStoreAlbumCoverUri(id)) .asBitmap() - .into(200, 200) + .load(MusicUtil.INSTANCE.getMediaStoreAlbumCoverUri(id)) + .submit(200, 200) .get(); } catch (Exception e) { return null; @@ -185,8 +155,6 @@ public class AutoGeneratedPlaylistBitmap { } public static Bitmap getDefaultBitmap(@NonNull Context context, boolean round) { - if (round) - return BitmapFactory.decodeResource(context.getResources(), R.drawable.default_album_art); return BitmapFactory.decodeResource(context.getResources(), R.drawable.default_album_art); } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ColorUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/ColorUtil.java index 0f94d96a8..e8f91f5dc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/ColorUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/ColorUtil.java @@ -1,9 +1,11 @@ package code.name.monkey.retromusic.util; import android.graphics.Bitmap; + import androidx.annotation.ColorInt; import androidx.annotation.Nullable; import androidx.palette.graphics.Palette; + import java.util.Collections; import java.util.Comparator; diff --git a/app/src/main/java/code/name/monkey/retromusic/util/Compressor.java b/app/src/main/java/code/name/monkey/retromusic/util/Compressor.java index 21050b74c..6259a52bf 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/Compressor.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/Compressor.java @@ -16,6 +16,7 @@ package code.name.monkey.retromusic.util; import android.content.Context; import android.graphics.Bitmap; + import java.io.File; import java.io.IOException; diff --git a/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt index a3b221b8c..3dd3ea638 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/CustomArtistImageUtil.kt @@ -27,8 +27,8 @@ import code.name.monkey.retromusic.App import code.name.monkey.retromusic.model.Artist import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy -import com.bumptech.glide.request.animation.GlideAnimation import com.bumptech.glide.request.target.SimpleTarget +import com.bumptech.glide.request.transition.Transition import java.io.BufferedOutputStream import java.io.File import java.io.FileOutputStream @@ -38,34 +38,26 @@ import java.util.* class CustomArtistImageUtil private constructor(context: Context) { - private val mPreferences: SharedPreferences - - init { - mPreferences = context.applicationContext.getSharedPreferences( - CUSTOM_ARTIST_IMAGE_PREFS, - Context.MODE_PRIVATE - ) - } + private val mPreferences: SharedPreferences = context.applicationContext.getSharedPreferences( + CUSTOM_ARTIST_IMAGE_PREFS, + Context.MODE_PRIVATE + ) fun setCustomArtistImage(artist: Artist, uri: Uri) { Glide.with(App.getContext()) - .load(uri) .asBitmap() + .load(uri) .diskCacheStrategy(DiskCacheStrategy.NONE) .skipMemoryCache(true) .into(object : SimpleTarget() { - override fun onLoadFailed(e: Exception?, errorDrawable: Drawable?) { - super.onLoadFailed(e, errorDrawable) - e!!.printStackTrace() - Toast.makeText(App.getContext(), e.toString(), Toast.LENGTH_LONG).show() + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) + Toast.makeText(App.getContext(), "Load Failed", Toast.LENGTH_LONG).show() } - override fun onResourceReady( - resource: Bitmap, - glideAnimation: GlideAnimation - ) { + @SuppressLint("StaticFieldLeak") + override fun onResourceReady(resource: Bitmap, transition: Transition?) { object : AsyncTask() { - @SuppressLint("ApplySharedPref") override fun doInBackground(vararg params: Void): Void? { val dir = File(App.getContext().filesDir, FOLDER_NAME) if (!dir.exists()) { @@ -87,7 +79,7 @@ class CustomArtistImageUtil private constructor(context: Context) { } if (succesful) { - mPreferences.edit().putBoolean(getFileName(artist), true).commit() + mPreferences.edit().putBoolean(getFileName(artist), true).apply() ArtistSignatureUtil.getInstance(App.getContext()) .updateArtistSignature(artist.name) App.getContext().contentResolver.notifyChange( @@ -102,6 +94,7 @@ class CustomArtistImageUtil private constructor(context: Context) { }) } + @SuppressLint("StaticFieldLeak") fun resetCustomArtistImage(artist: Artist) { object : AsyncTask() { @SuppressLint("ApplySharedPref") diff --git a/app/src/main/java/code/name/monkey/retromusic/util/DensityUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/DensityUtil.kt index 2e36de9a7..51a7cc420 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/DensityUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/DensityUtil.kt @@ -13,9 +13,7 @@ */ package code.name.monkey.retromusic.util -import android.app.Activity import android.content.Context -import android.util.DisplayMetrics import android.util.TypedValue /** @@ -23,14 +21,12 @@ import android.util.TypedValue */ object DensityUtil { fun getScreenHeight(context: Context): Int { - val displayMetrics = DisplayMetrics() - (context as Activity).windowManager.defaultDisplay.getMetrics(displayMetrics) + val displayMetrics = context.resources.displayMetrics return displayMetrics.heightPixels } fun getScreenWidth(context: Context): Int { - val displayMetrics = DisplayMetrics() - (context as Activity).windowManager.defaultDisplay.getMetrics(displayMetrics) + val displayMetrics = context.resources.displayMetrics return displayMetrics.widthPixels } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/FileUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/FileUtil.java index 9b3126e7f..0023ec5f3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/FileUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/FileUtil.java @@ -19,11 +19,10 @@ import android.database.Cursor; import android.os.Environment; import android.provider.MediaStore; import android.webkit.MimeTypeMap; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import code.name.monkey.retromusic.model.Song; -import code.name.monkey.retromusic.repository.RealSongRepository; -import code.name.monkey.retromusic.repository.SortedCursor; + import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; @@ -37,6 +36,10 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; +import code.name.monkey.retromusic.model.Song; +import code.name.monkey.retromusic.repository.RealSongRepository; +import code.name.monkey.retromusic.repository.SortedCursor; + public final class FileUtil { private FileUtil() {} diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java index a4169fc14..bcba52749 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/ImageUtil.java @@ -26,17 +26,20 @@ import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; import android.media.ExifInterface; import android.os.Build; + import androidx.annotation.ColorInt; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; -import code.name.monkey.appthemehelper.util.TintHelper; + import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import code.name.monkey.appthemehelper.util.TintHelper; + /** * Created on : June 18, 2016 Author : zetbaitsu Name : Zetra GitHub : https://github.com/zetbaitsu */ diff --git a/app/src/main/java/code/name/monkey/retromusic/util/LyricUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/LyricUtil.java index 8b5060646..49f85f13d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/LyricUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/LyricUtil.java @@ -15,120 +15,175 @@ package code.name.monkey.retromusic.util; import android.util.Base64; +import android.util.Log; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; +import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; -/** Created by hefuyi on 2016/11/8. */ +import code.name.monkey.retromusic.model.Song; + +/** + * Created by hefuyi on 2016/11/8. + */ public class LyricUtil { - private static final String lrcRootPath = - android.os.Environment.getExternalStorageDirectory().toString() + "/RetroMusic/lyrics/"; - private static final String TAG = "LyricUtil"; + private static final String lrcRootPath = + android.os.Environment.getExternalStorageDirectory().toString() + "/RetroMusic/lyrics/"; + private static final String TAG = "LyricUtil"; - @Nullable - public static File writeLrcToLoc( - @NonNull String title, @NonNull String artist, @NonNull String lrcContext) { - FileWriter writer = null; - try { - File file = new File(getLrcPath(title, artist)); - if (!file.getParentFile().exists()) { - file.getParentFile().mkdirs(); - } - writer = new FileWriter(getLrcPath(title, artist)); - writer.write(lrcContext); - return file; - } catch (IOException e) { - e.printStackTrace(); - return null; - } finally { - try { - if (writer != null) writer.close(); - } catch (IOException e) { - e.printStackTrace(); - } + @Nullable + public static File writeLrcToLoc( + @NonNull String title, @NonNull String artist, @NonNull String lrcContext) { + FileWriter writer = null; + try { + File file = new File(getLrcPath(title, artist)); + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + writer = new FileWriter(getLrcPath(title, artist)); + writer.write(lrcContext); + return file; + } catch (IOException e) { + e.printStackTrace(); + return null; + } finally { + try { + if (writer != null) writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } } - } - public static boolean deleteLrcFile(@NonNull String title, @NonNull String artist) { - File file = new File(getLrcPath(title, artist)); - return file.delete(); - } + //So in Retro, Lrc file can be same folder as Music File or in RetroMusic Folder + // In this case we pass location of the file and Contents to write to file + public static void writeLrc(@NonNull Song song, @NonNull String lrcContext) { + FileWriter writer = null; + File location; + try { + if (isLrcOriginalFileExist(song.getData())) { + location = getLocalLyricOriginalFile(song.getData()); + } else if (isLrcFileExist(song.getTitle(), song.getArtistName())) { + location = getLocalLyricFile(song.getTitle(), song.getArtistName()); + } else { + location = new File(getLrcPath(song.getTitle(), song.getArtistName())); + if (!location.getParentFile().exists()) { + location.getParentFile().mkdirs(); + } + } + writer = new FileWriter(location); + writer.write(lrcContext); - public static boolean isLrcFileExist(@NonNull String title, @NonNull String artist) { - File file = new File(getLrcPath(title, artist)); - return file.exists(); - } - - public static boolean isLrcOriginalFileExist(@NonNull String path) { - File file = new File(getLrcOriginalPath(path)); - return file.exists(); - } - - @Nullable - public static File getLocalLyricFile(@NonNull String title, @NonNull String artist) { - File file = new File(getLrcPath(title, artist)); - if (file.exists()) { - return file; - } else { - return null; + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (writer != null) writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } } - } - @Nullable - public static File getLocalLyricOriginalFile(@NonNull String path) { - File file = new File(getLrcOriginalPath(path)); - if (file.exists()) { - return file; - } else { - return null; + public static boolean deleteLrcFile(@NonNull String title, @NonNull String artist) { + File file = new File(getLrcPath(title, artist)); + return file.delete(); } - } - private static String getLrcPath(String title, String artist) { - return lrcRootPath + title + " - " + artist + ".lrc"; - } - - private static String getLrcOriginalPath(String filePath) { - return filePath.replace(filePath.substring(filePath.lastIndexOf(".") + 1), "lrc"); - } - - @NonNull - public static String decryptBASE64(@NonNull String str) { - if (str == null || str.length() == 0) { - return null; + public static boolean isLrcFileExist(@NonNull String title, @NonNull String artist) { + File file = new File(getLrcPath(title, artist)); + return file.exists(); } - byte[] encode = str.getBytes(StandardCharsets.UTF_8); - // base64 解密 - return new String( - Base64.decode(encode, 0, encode.length, Base64.DEFAULT), StandardCharsets.UTF_8); - } - @NonNull - public static String getStringFromFile(@NonNull String title, @NonNull String artist) - throws Exception { - File file = new File(getLrcPath(title, artist)); - FileInputStream fin = new FileInputStream(file); - String ret = convertStreamToString(fin); - fin.close(); - return ret; - } - - private static String convertStreamToString(InputStream is) throws Exception { - BufferedReader reader = new BufferedReader(new InputStreamReader(is)); - StringBuilder sb = new StringBuilder(); - String line = null; - while ((line = reader.readLine()) != null) { - sb.append(line).append("\n"); + public static boolean isLrcOriginalFileExist(@NonNull String path) { + File file = new File(getLrcOriginalPath(path)); + return file.exists(); } - reader.close(); - return sb.toString(); - } + + @Nullable + public static File getLocalLyricFile(@NonNull String title, @NonNull String artist) { + File file = new File(getLrcPath(title, artist)); + if (file.exists()) { + return file; + } else { + return null; + } + } + + @Nullable + public static File getLocalLyricOriginalFile(@NonNull String path) { + File file = new File(getLrcOriginalPath(path)); + if (file.exists()) { + return file; + } else { + return null; + } + } + + private static String getLrcPath(String title, String artist) { + return lrcRootPath + title + " - " + artist + ".lrc"; + } + + private static String getLrcOriginalPath(String filePath) { + return filePath.replace(filePath.substring(filePath.lastIndexOf(".") + 1), "lrc"); + } + + @NonNull + public static String decryptBASE64(@NonNull String str) { + if (str == null || str.length() == 0) { + return null; + } + byte[] encode = str.getBytes(StandardCharsets.UTF_8); + // base64 解密 + return new String( + Base64.decode(encode, 0, encode.length, Base64.DEFAULT), StandardCharsets.UTF_8); + } + + @NonNull + public static String getStringFromFile(@NonNull String title, @NonNull String artist) + throws Exception { + File file = new File(getLrcPath(title, artist)); + FileInputStream fin = new FileInputStream(file); + String ret = convertStreamToString(fin); + fin.close(); + return ret; + } + + private static String convertStreamToString(InputStream is) throws Exception { + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + StringBuilder sb = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) { + sb.append(line).append("\n"); + } + reader.close(); + return sb.toString(); + } + + public static String getStringFromLrc(File file) { + try { + BufferedReader reader = new BufferedReader(new FileReader(file)); + StringBuilder sb = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) { + sb.append(line).append("\n"); + } + reader.close(); + return sb.toString(); + } catch (Exception e) { + Log.i("Error", "Error Occurred"); + } + return ""; + } + } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/MergedImageUtils.kt b/app/src/main/java/code/name/monkey/retromusic/util/MergedImageUtils.kt index 8fcfcdf87..e4864bc7e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/MergedImageUtils.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/MergedImageUtils.kt @@ -13,7 +13,7 @@ internal object MergedImageUtils { fun joinImages(list: List): Bitmap { assertBackgroundThread() - val arranged = arrangeBitmaps(list.shuffled()) + val arranged = arrangeBitmaps(list) val mergedImage = create( arranged, diff --git a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt index 4d4746af0..ed89e34d3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt @@ -29,8 +29,10 @@ import code.name.monkey.retromusic.repository.RealSongRepository import code.name.monkey.retromusic.repository.Repository import code.name.monkey.retromusic.repository.SongRepository import code.name.monkey.retromusic.service.MusicService +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.jaudiotagger.audio.AudioFileIO import org.jaudiotagger.tag.FieldKey import org.koin.core.KoinComponent @@ -127,7 +129,7 @@ object MusicUtil : KoinComponent { } catch (e: Exception) { e.printStackTrace() } - if (lyrics == null || lyrics.trim { it <= ' ' }.isEmpty() || !AbsSynchronizedLyrics + if (lyrics == null || lyrics.trim { it <= ' ' }.isEmpty() || AbsSynchronizedLyrics .isSynchronized(lyrics) ) { val dir = file.absoluteFile.parentFile @@ -205,7 +207,7 @@ object MusicUtil : KoinComponent { return getSongCountString(context, songs.size) } - fun getReadableDurationString(songDurationMillis: Long): String? { + fun getReadableDurationString(songDurationMillis: Long): String { var minutes = songDurationMillis / 1000 / 60 val seconds = songDurationMillis / 1000 % 60 return if (minutes < 60) { @@ -217,7 +219,7 @@ object MusicUtil : KoinComponent { ) } else { val hours = minutes / 60 - minutes = minutes % 60 + minutes %= 60 String.format( Locale.getDefault(), "%02d:%02d:%02d", @@ -228,13 +230,13 @@ object MusicUtil : KoinComponent { } } - fun getSectionName(musicMediaTitle: String?): String { - var musicMediaTitle = musicMediaTitle + fun getSectionName(mediaTitle: String?): String { + var musicMediaTitle = mediaTitle return try { if (TextUtils.isEmpty(musicMediaTitle)) { return "" } - musicMediaTitle = musicMediaTitle!!.trim { it <= ' ' }.toLowerCase() + musicMediaTitle = musicMediaTitle!!.trim { it <= ' ' }.lowercase() if (musicMediaTitle.startsWith("the ")) { musicMediaTitle = musicMediaTitle.substring(4) } else if (musicMediaTitle.startsWith("a ")) { @@ -242,7 +244,7 @@ object MusicUtil : KoinComponent { } if (musicMediaTitle.isEmpty()) { "" - } else musicMediaTitle.substring(0, 1).toUpperCase() + } else musicMediaTitle.substring(0, 1).uppercase() } catch (e: Exception) { "" } @@ -257,10 +259,21 @@ object MusicUtil : KoinComponent { fun getSongFileUri(songId: Long): Uri { return ContentUris.withAppendedId( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, - songId.toLong() + songId ) } + fun getSongFilePath(context: Context, uri: Uri): String? { + val projection = arrayOf(MediaStore.MediaColumns.DATA) + return context.contentResolver.query(uri, projection, null, null, null)?.use { + if (it.moveToFirst()) { + it.getString(0) + } else { + "" + } + } + } + fun getTotalDuration(songs: List): Long { var duration: Long = 0 for (i in songs.indices) { @@ -299,7 +312,7 @@ object MusicUtil : KoinComponent { if (artistName == Artist.UNKNOWN_ARTIST_DISPLAY_NAME) { return true } - val tempName = artistName!!.trim { it <= ' ' }.toLowerCase() + val tempName = artistName!!.trim { it <= ' ' }.lowercase() return tempName == "unknown" || tempName == "" } @@ -442,7 +455,7 @@ object MusicUtil : KoinComponent { } } - fun deleteTracks(context: Context, songs: List) { + suspend fun deleteTracks(context: Context, songs: List) { val projection = arrayOf(BaseColumns._ID, MediaStore.MediaColumns.DATA) val selection = StringBuilder() selection.append(BaseColumns._ID + " IN (") @@ -501,13 +514,19 @@ object MusicUtil : KoinComponent { } cursor.close() } - Toast.makeText( - context, - context.getString(R.string.deleted_x_songs, deletedCount), - Toast.LENGTH_SHORT - ).show() + withContext(Dispatchers.Main) { + Toast.makeText( + context, + context.getString(R.string.deleted_x_songs, deletedCount), + Toast.LENGTH_SHORT + ).show() + } + } catch (ignored: SecurityException) { } } + fun songByGenre(genreId: Long): Song { + return repository.getSongByGenre(genreId) + } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java index d1aa3c417..f0d324c7a 100755 --- a/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/NavigationUtil.java @@ -21,8 +21,12 @@ import android.content.Context; import android.content.Intent; import android.media.audiofx.AudioEffect; import android.widget.Toast; + import androidx.annotation.NonNull; import androidx.core.app.ActivityCompat; + +import org.jetbrains.annotations.NotNull; + import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.activities.DriveModeActivity; import code.name.monkey.retromusic.activities.LicenseActivity; @@ -34,7 +38,6 @@ import code.name.monkey.retromusic.activities.UserInfoActivity; import code.name.monkey.retromusic.activities.WhatsNewActivity; import code.name.monkey.retromusic.activities.bugreport.BugReportActivity; import code.name.monkey.retromusic.helper.MusicPlayerRemote; -import org.jetbrains.annotations.NotNull; public class NavigationUtil { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt b/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt new file mode 100644 index 000000000..d75bd28ba --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/util/PackageValidator.kt @@ -0,0 +1,347 @@ +/* + * Copyright (c) 2019 Hemanth Savarala. + * + * Licensed under the GNU General Public License v3 + * + * This is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation either version 3 of the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + */ + +package code.name.monkey.retromusic.util + + +import android.Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE +import android.Manifest.permission.MEDIA_CONTENT_CONTROL +import android.annotation.SuppressLint +import android.content.Context +import android.content.pm.PackageInfo +import android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED +import android.content.pm.PackageManager +import android.content.res.XmlResourceParser +import android.os.Process +import android.support.v4.media.session.MediaSessionCompat +import android.util.Base64 +import android.util.Log +import androidx.annotation.XmlRes +import androidx.media.MediaBrowserServiceCompat +import code.name.monkey.retromusic.BuildConfig +import org.xmlpull.v1.XmlPullParserException +import java.io.IOException +import java.security.MessageDigest +import java.security.NoSuchAlgorithmException + +/** + * Validates that the calling package is authorized to browse a [MediaBrowserServiceCompat]. + * + * The list of allowed signing certificates and their corresponding package names is defined in + * res/xml/allowed_media_browser_callers.xml. + * + * If you want to add a new caller to allowed_media_browser_callers.xml and you don't know + * its signature, this class will print to logcat (INFO level) a message with the proper + * xml tags to add to allow the caller. + * + * For more information, see res/xml/allowed_media_browser_callers.xml. + */ +class PackageValidator( + context: Context, + @XmlRes xmlResId: Int +) { + private val context: Context + private val packageManager: PackageManager + + private val certificateWhitelist: Map + private val platformSignature: String + + private val callerChecked = mutableMapOf>() + + init { + val parser = context.resources.getXml(xmlResId) + this.context = context.applicationContext + this.packageManager = this.context.packageManager + + certificateWhitelist = buildCertificateWhitelist(parser) + platformSignature = getSystemSignature() + } + + /** + * Checks whether the caller attempting to connect to a [MediaBrowserServiceCompat] is known. + * See [MusicService.onGetRoot] for where this is utilized. + * + * @param callingPackage The package name of the caller. + * @param callingUid The user id of the caller. + * @return `true` if the caller is known, `false` otherwise. + */ + fun isKnownCaller(callingPackage: String, callingUid: Int): Boolean { + // If the caller has already been checked, return the previous result here. + val (checkedUid, checkResult) = callerChecked[callingPackage] ?: Pair(0, false) + if (checkedUid == callingUid) { + return checkResult + } + + /** + * Because some of these checks can be slow, we save the results in [callerChecked] after + * this code is run. + * + * In particular, there's little reason to recompute the calling package's certificate + * signature (SHA-256) each call. + * + * This is safe to do as we know the UID matches the package's UID (from the check above), + * and app UIDs are set at install time. Additionally, a package name + UID is guaranteed to + * be constant until a reboot. (After a reboot then a previously assigned UID could be + * reassigned.) + */ + + // Build the caller info for the rest of the checks here. + val callerPackageInfo = buildCallerInfo(callingPackage) + ?: throw IllegalStateException("Caller wasn't found in the system?") + + // Verify that things aren't ... broken. (This test should always pass.) + if (callerPackageInfo.uid != callingUid) { + throw IllegalStateException("Caller's package UID doesn't match caller's actual UID?") + } + + val callerSignature = callerPackageInfo.signature + val isPackageInWhitelist = certificateWhitelist[callingPackage]?.signatures?.first { + it.signature == callerSignature + } != null + + val isCallerKnown = when { + // If it's our own app making the call, allow it. + callingUid == Process.myUid() -> true + // If it's one of the apps on the whitelist, allow it. + isPackageInWhitelist -> true + // If the system is making the call, allow it. + callingUid == Process.SYSTEM_UID -> true + // If the app was signed by the same certificate as the platform itself, also allow it. + callerSignature == platformSignature -> true + /** + * [MEDIA_CONTENT_CONTROL] permission is only available to system applications, and + * while it isn't required to allow these apps to connect to a + * [MediaBrowserServiceCompat], allowing this ensures optimal compatability with apps + * such as Android TV and the Google Assistant. + */ + callerPackageInfo.permissions.contains(MEDIA_CONTENT_CONTROL) -> true + /** + * This last permission can be specifically granted to apps, and, in addition to + * allowing them to retrieve notifications, it also allows them to connect to an + * active [MediaSessionCompat]. + * As with the above, it's not required to allow apps holding this permission to + * connect to your [MediaBrowserServiceCompat], but it does allow easy comparability + * with apps such as Wear OS. + */ + callerPackageInfo.permissions.contains(BIND_NOTIFICATION_LISTENER_SERVICE) -> true + // If none of the pervious checks succeeded, then the caller is unrecognized. + else -> false + } + + if (!isCallerKnown) { + logUnknownCaller(callerPackageInfo) + } + + // Save our work for next time. + callerChecked[callingPackage] = Pair(callingUid, isCallerKnown) + return isCallerKnown + } + + /** + * Logs an info level message with details of how to add a caller to the allowed callers list + * when the app is debuggable. + */ + private fun logUnknownCaller(callerPackageInfo: CallerPackageInfo) { + if (BuildConfig.DEBUG && callerPackageInfo.signature != null) { + Log.i(TAG, "PackageValidator call" + callerPackageInfo.name + callerPackageInfo.packageName + callerPackageInfo.signature) + } + } + + /** + * Builds a [CallerPackageInfo] for a given package that can be used for all the + * various checks that are performed before allowing an app to connect to a + * [MediaBrowserServiceCompat]. + */ + private fun buildCallerInfo(callingPackage: String): CallerPackageInfo? { + val packageInfo = getPackageInfo(callingPackage) ?: return null + + val appName = packageInfo.applicationInfo.loadLabel(packageManager).toString() + val uid = packageInfo.applicationInfo.uid + val signature = getSignature(packageInfo) + + val requestedPermissions = packageInfo.requestedPermissions + val permissionFlags = packageInfo.requestedPermissionsFlags + val activePermissions = mutableSetOf() + requestedPermissions?.forEachIndexed { index, permission -> + if (permissionFlags[index] and REQUESTED_PERMISSION_GRANTED != 0) { + activePermissions += permission + } + } + + return CallerPackageInfo(appName, callingPackage, uid, signature, activePermissions.toSet()) + } + + /** + * Looks up the [PackageInfo] for a package name. + * This requests both the signatures (for checking if an app is on the whitelist) and + * the app's permissions, which allow for more flexibility in the whitelist. + * + * @return [PackageInfo] for the package name or null if it's not found. + */ + @SuppressLint("PackageManagerGetSignatures") + private fun getPackageInfo(callingPackage: String): PackageInfo? = + packageManager.getPackageInfo(callingPackage, + PackageManager.GET_SIGNATURES or PackageManager.GET_PERMISSIONS) + + /** + * Gets the signature of a given package's [PackageInfo]. + * + * The "signature" is a SHA-256 hash of the public key of the signing certificate used by + * the app. + * + * If the app is not found, or if the app does not have exactly one signature, this method + * returns `null` as the signature. + */ + private fun getSignature(packageInfo: PackageInfo): String? { + // Security best practices dictate that an app should be signed with exactly one (1) + // signature. Because of this, if there are multiple signatures, reject it. + if (packageInfo.signatures == null || packageInfo.signatures.size != 1) { + return null + } else { + val certificate = packageInfo.signatures[0].toByteArray() + return getSignatureSha256(certificate) + } + } + + private fun buildCertificateWhitelist(parser: XmlResourceParser): Map { + + val certificateWhitelist = LinkedHashMap() + try { + var eventType = parser.next() + while (eventType != XmlResourceParser.END_DOCUMENT) { + if (eventType == XmlResourceParser.START_TAG) { + val callerInfo = when (parser.name) { + "signing_certificate" -> parseV1Tag(parser) + "signature" -> parseV2Tag(parser) + else -> null + } + + callerInfo?.let { info -> + val packageName = info.packageName + val existingCallerInfo = certificateWhitelist[packageName] + if (existingCallerInfo != null) { + existingCallerInfo.signatures += callerInfo.signatures + } else { + certificateWhitelist[packageName] = callerInfo + } + } + } + + eventType = parser.next() + } + } catch (xmlException: XmlPullParserException) { + Log.e(TAG, "Could not read allowed callers from XML.", xmlException) + } catch (ioException: IOException) { + Log.e(TAG, "Could not read allowed callers from XML.", ioException) + } + + return certificateWhitelist + } + + /** + * Parses a v1 format tag. See allowed_media_browser_callers.xml for more details. + */ + private fun parseV1Tag(parser: XmlResourceParser): KnownCallerInfo { + val name = parser.getAttributeValue(null, "name") + val packageName = parser.getAttributeValue(null, "package") + val isRelease = parser.getAttributeBooleanValue(null, "release", false) + val certificate = parser.nextText().replace(WHITESPACE_REGEX, "") + val signature = getSignatureSha256(certificate) + + val callerSignature = KnownSignature(signature, isRelease) + return KnownCallerInfo(name, packageName, mutableSetOf(callerSignature)) + } + + /** + * Parses a v2 format tag. See allowed_media_browser_callers.xml for more details. + */ + private fun parseV2Tag(parser: XmlResourceParser): KnownCallerInfo { + val name = parser.getAttributeValue(null, "name") + val packageName = parser.getAttributeValue(null, "package") + + val callerSignatures = mutableSetOf() + var eventType = parser.next() + while (eventType != XmlResourceParser.END_TAG) { + val isRelease = parser.getAttributeBooleanValue(null, "release", false) + val signature = parser.nextText().replace(WHITESPACE_REGEX, "").toLowerCase() + callerSignatures += KnownSignature(signature, isRelease) + + eventType = parser.next() + } + + return KnownCallerInfo(name, packageName, callerSignatures) + } + + /** + * Finds the Android platform signing key signature. This key is never null. + */ + private fun getSystemSignature(): String = + getPackageInfo(ANDROID_PLATFORM)?.let { platformInfo -> + getSignature(platformInfo) + } ?: throw IllegalStateException("Platform signature not found") + + /** + * Creates a SHA-256 signature given a Base64 encoded certificate. + */ + private fun getSignatureSha256(certificate: String): String { + return getSignatureSha256(Base64.decode(certificate, Base64.DEFAULT)) + } + + /** + * Creates a SHA-256 signature given a certificate byte array. + */ + private fun getSignatureSha256(certificate: ByteArray): String { + val md: MessageDigest + try { + md = MessageDigest.getInstance("SHA256") + } catch (noSuchAlgorithmException: NoSuchAlgorithmException) { + Log.e(TAG, "No such algorithm: $noSuchAlgorithmException") + throw RuntimeException("Could not find SHA256 hash algorithm", noSuchAlgorithmException) + } + md.update(certificate) + + // This code takes the byte array generated by `md.digest()` and joins each of the bytes + // to a string, applying the string format `%02x` on each digit before it's appended, with + // a colon (':') between each of the items. + // For example: input=[0,2,4,6,8,10,12], output="00:02:04:06:08:0a:0c" + return md.digest().joinToString(":") { String.format("%02x", it) } + } + + private data class KnownCallerInfo( + internal val name: String, + internal val packageName: String, + internal val signatures: MutableSet + ) + + private data class KnownSignature( + internal val signature: String, + internal val release: Boolean + ) + + /** + * Convenience class to hold all of the information about an app that's being checked + * to see if it's a known caller. + */ + private data class CallerPackageInfo( + internal val name: String, + internal val packageName: String, + internal val uid: Int, + internal val signature: String?, + internal val permissions: Set + ) +} + +private const val TAG = "PackageValidator" +private const val ANDROID_PLATFORM = "android" +private val WHITESPACE_REGEX = "\\s|\\n".toRegex() diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PlaylistsUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/PlaylistsUtil.java index bd3a2c9d2..9b677849c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PlaylistsUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/PlaylistsUtil.java @@ -25,18 +25,21 @@ import android.os.Environment; import android.provider.BaseColumns; import android.provider.MediaStore; import android.widget.Toast; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + import code.name.monkey.retromusic.R; import code.name.monkey.retromusic.db.PlaylistWithSongs; import code.name.monkey.retromusic.helper.M3UWriter; import code.name.monkey.retromusic.model.Playlist; import code.name.monkey.retromusic.model.PlaylistSong; import code.name.monkey.retromusic.model.Song; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; public class PlaylistsUtil { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt index 8cca0eeda..62a24375b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt @@ -17,7 +17,7 @@ import code.name.monkey.retromusic.helper.SortOrder.* import code.name.monkey.retromusic.model.CategoryInfo import code.name.monkey.retromusic.transform.* import code.name.monkey.retromusic.util.theme.ThemeMode -import com.google.android.material.bottomnavigation.LabelVisibilityMode +import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.gson.Gson import com.google.gson.JsonSyntaxException import com.google.gson.reflect.TypeToken @@ -218,11 +218,10 @@ object PreferenceUtil { TOGGLE_ADD_CONTROLS, false ) - val typeHomeBanner - get() = sharedPreferences.getStringOrDefault( - TYPE_HOME_BANNER, "0" - ).toInt() - + val isHomeBanner + get() = sharedPreferences.getBoolean( + TOGGLE_HOME_BANNER, false + ) var isClassicNotification get() = sharedPreferences.getBoolean(CLASSIC_NOTIFICATION, false) set(value) = sharedPreferences.edit { putBoolean(CLASSIC_NOTIFICATION, value) } @@ -416,10 +415,10 @@ object PreferenceUtil { ).toInt() val typedArray = App.getContext() .resources.obtainTypedArray(R.array.pref_home_grid_style_layout) - val layoutRes = typedArray.getResourceId(position, 4) + val layoutRes = typedArray.getResourceId(position, 0) typedArray.recycle() return if (layoutRes == 0) { - R.layout.item_artist + R.layout.item_image } else layoutRes } @@ -428,11 +427,11 @@ object PreferenceUtil { return when (sharedPreferences.getStringOrDefault( TAB_TEXT_MODE, "1" ).toInt()) { - 1 -> LabelVisibilityMode.LABEL_VISIBILITY_LABELED - 0 -> LabelVisibilityMode.LABEL_VISIBILITY_AUTO - 2 -> LabelVisibilityMode.LABEL_VISIBILITY_SELECTED - 3 -> LabelVisibilityMode.LABEL_VISIBILITY_UNLABELED - else -> LabelVisibilityMode.LABEL_VISIBILITY_LABELED + 1 -> BottomNavigationView.LABEL_VISIBILITY_LABELED + 0 -> BottomNavigationView.LABEL_VISIBILITY_AUTO + 2 -> BottomNavigationView.LABEL_VISIBILITY_SELECTED + 3 -> BottomNavigationView.LABEL_VISIBILITY_UNLABELED + else -> BottomNavigationView.LABEL_VISIBILITY_LABELED } } @@ -556,8 +555,7 @@ object PreferenceUtil { fun getRecentlyPlayedCutoffTimeMillis(): Long { val calendarUtil = CalendarUtil() - val interval: Long - interval = when (sharedPreferences.getString(RECENTLY_PLAYED_CUTOFF, "")) { + val interval: Long = when (sharedPreferences.getString(RECENTLY_PLAYED_CUTOFF, "")) { "today" -> calendarUtil.elapsedToday "this_week" -> calendarUtil.elapsedWeek "past_seven_days" -> calendarUtil.getElapsedDays(7) @@ -583,4 +581,35 @@ object PreferenceUtil { } return (System.currentTimeMillis() - interval) / 1000 } + + val homeSuggestions: Boolean + get() = sharedPreferences.getBoolean( + TOGGLE_SUGGESTIONS, + true + ) + + var audioFadeDuration + get() = sharedPreferences + .getInt(AUDIO_FADE_DURATION, 0) + set(value) = sharedPreferences.edit { putInt(AUDIO_FADE_DURATION, value) } + + var showLyrics: Boolean + get() = sharedPreferences.getBoolean(SHOW_LYRICS, false) + set(value) = sharedPreferences.edit { putBoolean(SHOW_LYRICS, value) } + + val rememberLastTab: Boolean + get() = sharedPreferences.getBoolean(REMEMBER_LAST_TAB, true) + + var lastTab: Int + get() = sharedPreferences + .getInt(LAST_USED_TAB, 0) + set(value) = sharedPreferences.edit { putInt(LAST_USED_TAB, value) } + + val isWhiteList: Boolean + get() = sharedPreferences.getBoolean(WHITELIST_MUSIC, false) + + var crossFadeDuration + get() = sharedPreferences + .getInt(CROSS_FADE_DURATION, 0) + set(value) = sharedPreferences.edit { putInt(CROSS_FADE_DURATION, value) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java index 47fbdd8b9..061eb17ff 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroColorUtil.java @@ -18,16 +18,19 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Color; + import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.palette.graphics.Palette; -import code.name.monkey.appthemehelper.util.ColorUtil; + import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; +import code.name.monkey.appthemehelper.util.ColorUtil; + public class RetroColorUtil { public static int desaturateColor(int color, float ratio) { float[] hsv = new float[3]; diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java index 61630ce2a..f06aade55 100755 --- a/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/RetroUtil.java @@ -35,14 +35,21 @@ import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; + import androidx.annotation.ColorInt; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; + +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.text.DecimalFormat; +import java.util.Collections; +import java.util.List; + import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.retromusic.App; -import java.text.DecimalFormat; public class RetroUtil { @@ -203,8 +210,43 @@ public class RetroUtil { public static void setAllowDrawUnderStatusBar(@NonNull Window window) { window - .getDecorView() - .setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); + .getDecorView() + .setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); + } + + public static String getIpAddress(boolean useIPv4) { + try { + List interfaces = + Collections.list(NetworkInterface.getNetworkInterfaces()); + for (NetworkInterface intf : interfaces) { + List addrs = Collections.list(intf.getInetAddresses()); + for (InetAddress addr : addrs) { + if (!addr.isLoopbackAddress()) { + String sAddr = addr.getHostAddress(); + //boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr); + boolean isIPv4 = sAddr.indexOf(':') < 0; + if (useIPv4) { + if (isIPv4) return sAddr; + } else { + if (!isIPv4) { + int delim = sAddr.indexOf('%'); // drop ip6 zone suffix + if (delim < 0) { + return sAddr.toUpperCase(); + } else { + return sAddr.substring( + 0, + delim + ).toUpperCase(); + } + } + } + } + } + + } + } catch (Exception ignored) { + } + return ""; } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt b/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt index cf8226d93..c7040ccd1 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/RingtoneManager.kt @@ -23,7 +23,6 @@ import android.provider.BaseColumns import android.provider.MediaStore import android.provider.Settings import android.widget.Toast -import androidx.appcompat.app.AlertDialog import code.name.monkey.retromusic.R import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil.getSongFileUri diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RippleUtils.java b/app/src/main/java/code/name/monkey/retromusic/util/RippleUtils.java index 539166756..335e46bac 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/RippleUtils.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/RippleUtils.java @@ -5,6 +5,7 @@ import android.content.res.ColorStateList; import android.graphics.Color; import android.os.Build; import android.util.StateSet; + import androidx.annotation.ColorInt; import androidx.annotation.Nullable; import androidx.core.graphics.ColorUtils; diff --git a/app/src/main/java/code/name/monkey/retromusic/util/SAFUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/SAFUtil.java index 64150ed0e..c846bc64f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/SAFUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/SAFUtil.java @@ -26,20 +26,24 @@ import android.provider.DocumentsContract; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; + import androidx.annotation.Nullable; import androidx.documentfile.provider.DocumentFile; import androidx.fragment.app.Fragment; -import code.name.monkey.retromusic.R; -import code.name.monkey.retromusic.model.Song; + +import org.jaudiotagger.audio.AudioFile; +import org.jaudiotagger.audio.exceptions.CannotWriteException; +import org.jaudiotagger.audio.generic.Utils; + import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.jaudiotagger.audio.AudioFile; -import org.jaudiotagger.audio.exceptions.CannotWriteException; -import org.jaudiotagger.audio.generic.Utils; + +import code.name.monkey.retromusic.R; +import code.name.monkey.retromusic.model.Song; public class SAFUtil { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/SwipeAndDragHelper.java b/app/src/main/java/code/name/monkey/retromusic/util/SwipeAndDragHelper.java index 2ab25e189..2fdf38273 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/SwipeAndDragHelper.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/SwipeAndDragHelper.java @@ -15,6 +15,7 @@ package code.name.monkey.retromusic.util; import android.graphics.Canvas; + import androidx.annotation.NonNull; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt index 936f35204..c4e1a1761 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/ViewUtil.kt @@ -23,7 +23,6 @@ import android.widget.ProgressBar import android.widget.SeekBar import androidx.core.graphics.BlendModeColorFilterCompat import androidx.core.graphics.BlendModeCompat.SRC_IN -import androidx.core.view.ViewCompat import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper @@ -83,8 +82,8 @@ object ViewUtil { } fun hitTest(v: View, x: Int, y: Int): Boolean { - val tx = (ViewCompat.getTranslationX(v) + 0.5f).toInt() - val ty = (ViewCompat.getTranslationY(v) + 0.5f).toInt() + val tx = (v.translationX + 0.5f).toInt() + val ty = (v.translationY + 0.5f).toInt() val left = v.left + tx val right = v.right + tx val top = v.top + ty diff --git a/app/src/main/java/code/name/monkey/retromusic/util/color/MediaNotificationProcessor.java b/app/src/main/java/code/name/monkey/retromusic/util/color/MediaNotificationProcessor.java index 2e1cb4b1c..6f17f982e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/color/MediaNotificationProcessor.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/color/MediaNotificationProcessor.java @@ -25,14 +25,17 @@ import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Handler; + import androidx.annotation.ColorInt; import androidx.annotation.FloatRange; import androidx.annotation.NonNull; import androidx.palette.graphics.Palette; + +import java.util.List; + import code.name.monkey.appthemehelper.util.ATHUtil; import code.name.monkey.appthemehelper.util.ColorUtil; import code.name.monkey.retromusic.R; -import java.util.List; /** A class the processes media notifications and extracts the right text and background colors. */ public class MediaNotificationProcessor { @@ -75,12 +78,7 @@ public class MediaNotificationProcessor { private static final String TAG = "ColorPicking"; private float[] mFilteredBackgroundHsl = null; private Palette.Filter mBlackWhiteFilter = - new Palette.Filter() { - @Override - public boolean isAllowed(int rgb, @NonNull float[] hsl) { - return !isWhiteOrBlack(hsl); - } - }; + (rgb, hsl) -> !isWhiteOrBlack(hsl); private boolean mIsLowPriority; private int backgroundColor; private int secondaryTextColor; @@ -140,18 +138,10 @@ public class MediaNotificationProcessor { this.drawable = drawable; final Handler handler = new Handler(); new Thread( - new Runnable() { - @Override - public void run() { - getMediaPalette(); - handler.post( - new Runnable() { - @Override - public void run() { - onPaletteLoadedListener.onPaletteLoaded(MediaNotificationProcessor.this); - } - }); - } + () -> { + getMediaPalette(); + handler.post( + () -> onPaletteLoadedListener.onPaletteLoaded(MediaNotificationProcessor.this)); }) .start(); } @@ -175,44 +165,40 @@ public class MediaNotificationProcessor { double factor = Math.sqrt((float) RESIZE_BITMAP_AREA / area); width = (int) (factor * width); height = (int) (factor * height); + } + bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, width, height); + drawable.draw(canvas); - bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bitmap); - drawable.setBounds(0, 0, width, height); - drawable.draw(canvas); - - // for the background we only take the left side of the image to ensure - // a smooth transition - Palette.Builder paletteBuilder = - Palette.from(bitmap) - .setRegion(0, 0, bitmap.getWidth() / 2, bitmap.getHeight()) - .clearFilters() // we want all colors, red / white / black ones too! - .resizeBitmapArea(RESIZE_BITMAP_AREA); - Palette palette = paletteBuilder.generate(); - backgroundColor = findBackgroundColorAndFilter(drawable); - // we want most of the full region again, slightly shifted to the right - float textColorStartWidthFraction = 0.4f; - paletteBuilder.setRegion( - (int) (bitmap.getWidth() * textColorStartWidthFraction), - 0, - bitmap.getWidth(), - bitmap.getHeight()); - if (mFilteredBackgroundHsl != null) { - paletteBuilder.addFilter( - new Palette.Filter() { - @Override - public boolean isAllowed(int rgb, @NonNull float[] hsl) { + // for the background we only take the left side of the image to ensure + // a smooth transition + Palette.Builder paletteBuilder = + Palette.from(bitmap) + .setRegion(0, 0, bitmap.getWidth() / 2, bitmap.getHeight()) + .clearFilters() // we want all colors, red / white / black ones too! + .resizeBitmapArea(RESIZE_BITMAP_AREA); + Palette palette; + backgroundColor = findBackgroundColorAndFilter(drawable); + // we want most of the full region again, slightly shifted to the right + float textColorStartWidthFraction = 0.4f; + paletteBuilder.setRegion( + (int) (bitmap.getWidth() * textColorStartWidthFraction), + 0, + bitmap.getWidth(), + bitmap.getHeight()); + if (mFilteredBackgroundHsl != null) { + paletteBuilder.addFilter( + (rgb, hsl) -> { // at least 10 degrees hue difference float diff = Math.abs(hsl[0] - mFilteredBackgroundHsl[0]); return diff > 10 && diff < 350; - } - }); - } - paletteBuilder.addFilter(mBlackWhiteFilter); - palette = paletteBuilder.generate(); - int foregroundColor = selectForegroundColor(backgroundColor, palette); - ensureColors(backgroundColor, foregroundColor); + }); } + paletteBuilder.addFilter(mBlackWhiteFilter); + palette = paletteBuilder.generate(); + int foregroundColor = selectForegroundColor(backgroundColor, palette); + ensureColors(backgroundColor, foregroundColor); } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/color/NotificationColorUtil.java b/app/src/main/java/code/name/monkey/retromusic/util/color/NotificationColorUtil.java index fe8e4346d..1b7fb758f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/color/NotificationColorUtil.java +++ b/app/src/main/java/code/name/monkey/retromusic/util/color/NotificationColorUtil.java @@ -28,14 +28,17 @@ import android.text.style.ForegroundColorSpan; import android.text.style.TextAppearanceSpan; import android.util.Log; import android.util.Pair; + import androidx.annotation.ColorInt; import androidx.annotation.FloatRange; import androidx.annotation.IntRange; import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; -import code.name.monkey.retromusic.R; + import java.util.WeakHashMap; +import code.name.monkey.retromusic.R; + /** * Helper class to process legacy (Holo) notifications to make them look like material * notifications. diff --git a/app/src/main/java/code/name/monkey/retromusic/views/BaselineGridTextView.java b/app/src/main/java/code/name/monkey/retromusic/views/BaselineGridTextView.java index 711094db2..87d4487f3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/BaselineGridTextView.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/BaselineGridTextView.java @@ -19,10 +19,13 @@ import android.content.res.TypedArray; import android.graphics.Paint; import android.util.AttributeSet; import android.util.TypedValue; + import androidx.annotation.FontRes; -import code.name.monkey.retromusic.R; + import com.google.android.material.textview.MaterialTextView; +import code.name.monkey.retromusic.R; + public class BaselineGridTextView extends MaterialTextView { private final float FOUR_DIP; diff --git a/app/src/main/java/code/name/monkey/retromusic/views/BreadCrumbLayout.java b/app/src/main/java/code/name/monkey/retromusic/views/BreadCrumbLayout.java index c13802b19..b35840f6a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/BreadCrumbLayout.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/BreadCrumbLayout.java @@ -26,16 +26,19 @@ import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; + import androidx.annotation.ColorInt; import androidx.annotation.NonNull; -import code.name.monkey.appthemehelper.util.ATHUtil; -import code.name.monkey.retromusic.R; + import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; +import code.name.monkey.appthemehelper.util.ATHUtil; +import code.name.monkey.retromusic.R; + /** @author Aidan Follestad (afollestad), modified for Phonograph by Karim Abou Zeid (kabouzeid) */ public class BreadCrumbLayout extends HorizontalScrollView implements View.OnClickListener { diff --git a/app/src/main/java/code/name/monkey/retromusic/views/CircularImageView.java b/app/src/main/java/code/name/monkey/retromusic/views/CircularImageView.java index 2c0dccad7..9bdf582f9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/CircularImageView.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/CircularImageView.java @@ -27,7 +27,9 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Log; + import androidx.appcompat.widget.AppCompatImageView; + import code.name.monkey.retromusic.R; public class CircularImageView extends AppCompatImageView { diff --git a/app/src/main/java/code/name/monkey/retromusic/views/ContributorsView.java b/app/src/main/java/code/name/monkey/retromusic/views/ContributorsView.java index 1ce50b0ac..4e4c1a743 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/ContributorsView.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/ContributorsView.java @@ -24,8 +24,10 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; import android.widget.TextView; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + import code.name.monkey.retromusic.R; public class ContributorsView extends FrameLayout { diff --git a/app/src/main/java/code/name/monkey/retromusic/views/ListItemView.kt b/app/src/main/java/code/name/monkey/retromusic/views/ListItemView.kt index b0f1b7536..a034eaf66 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/ListItemView.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/ListItemView.kt @@ -16,18 +16,19 @@ package code.name.monkey.retromusic.views import android.content.Context import android.util.AttributeSet -import android.view.View +import android.view.LayoutInflater import android.widget.FrameLayout import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.ListItemViewNoCardBinding import code.name.monkey.retromusic.extensions.hide import code.name.monkey.retromusic.extensions.show -import kotlinx.android.synthetic.main.list_item_view.view.* /** * Created by hemanths on 2019-10-02. */ class ListItemView : FrameLayout { + private lateinit var binding: ListItemViewNoCardBinding constructor(context: Context) : super(context) { init(context, null) @@ -46,27 +47,27 @@ class ListItemView : FrameLayout { } private fun init(context: Context, attrs: AttributeSet?) { - View.inflate(context, R.layout.list_item_view_no_card, this) + binding = ListItemViewNoCardBinding.inflate(LayoutInflater.from(context)) + addView(binding.root) val typedArray = context.obtainStyledAttributes(attrs, R.styleable.ListItemView) if (typedArray.hasValue(R.styleable.ListItemView_listItemIcon)) { - icon.setImageDrawable(typedArray.getDrawable(R.styleable.ListItemView_listItemIcon)) + binding.icon.setImageDrawable(typedArray.getDrawable(R.styleable.ListItemView_listItemIcon)) } else { - - icon.hide() + binding.icon.hide() } - title.text = typedArray.getText(R.styleable.ListItemView_listItemTitle) + binding.title.text = typedArray.getText(R.styleable.ListItemView_listItemTitle) if (typedArray.hasValue(R.styleable.ListItemView_listItemSummary)) { - summary.text = typedArray.getText(R.styleable.ListItemView_listItemSummary) + binding.summary.text = typedArray.getText(R.styleable.ListItemView_listItemSummary) } else { - summary.hide() + binding.summary.hide() } typedArray.recycle() } fun setSummary(appVersion: String) { - summary.show() - summary.text = appVersion + binding.summary.show() + binding.summary.text = appVersion } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.java b/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.java index f115ff940..8f0916ecd 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/NetworkImageView.java @@ -17,11 +17,14 @@ package code.name.monkey.retromusic.views; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import code.name.monkey.retromusic.R; + import com.bumptech.glide.Glide; +import code.name.monkey.retromusic.R; + /** @author Hemanth S (h4h13). */ public class NetworkImageView extends CircularImageView { diff --git a/app/src/main/java/code/name/monkey/retromusic/views/PermissionItem.kt b/app/src/main/java/code/name/monkey/retromusic/views/PermissionItem.kt index 7e627f242..dfe1d0158 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/PermissionItem.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/PermissionItem.kt @@ -3,12 +3,13 @@ package code.name.monkey.retromusic.views import android.content.Context import android.content.res.ColorStateList import android.util.AttributeSet +import android.view.LayoutInflater import android.widget.FrameLayout import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.retromusic.R +import code.name.monkey.retromusic.databinding.ItemPermissionBinding import code.name.monkey.retromusic.extensions.accentOutlineColor -import kotlinx.android.synthetic.main.item_permission.view.* class PermissionItem @JvmOverloads constructor( context: Context, @@ -16,28 +17,34 @@ class PermissionItem @JvmOverloads constructor( defStyleAttr: Int = -1, defStyleRes: Int = -1 ) : FrameLayout(context, attrs, defStyleAttr, defStyleRes) { + private var binding: ItemPermissionBinding + val checkImage get() = binding.checkImage + init { val attributes = context.obtainStyledAttributes(attrs, R.styleable.PermissionItem, 0, 0) - inflate(context, R.layout.item_permission, this) + binding = ItemPermissionBinding.inflate(LayoutInflater.from(context)) + addView(binding.root) - title.text = attributes.getText(R.styleable.PermissionItem_permissionTitle) - summary.text = attributes.getText(R.styleable.PermissionItem_permissionTitleSubTitle) - number.text = attributes.getText(R.styleable.PermissionItem_permissionTitleNumber) - button.text = attributes.getText(R.styleable.PermissionItem_permissionButtonTitle) - button.setIconResource( + binding.title.text = attributes.getText(R.styleable.PermissionItem_permissionTitle) + binding.summary.text = + attributes.getText(R.styleable.PermissionItem_permissionTitleSubTitle) + binding.number.text = attributes.getText(R.styleable.PermissionItem_permissionTitleNumber) + binding.button.text = attributes.getText(R.styleable.PermissionItem_permissionButtonTitle) + binding.button.setIconResource( attributes.getResourceId( R.styleable.PermissionItem_permissionIcon, R.drawable.ic_album ) ) val color = ThemeStore.accentColor(context) - number.backgroundTintList = ColorStateList.valueOf(ColorUtil.withAlpha(color, 0.22f)) + binding.number.backgroundTintList = + ColorStateList.valueOf(ColorUtil.withAlpha(color, 0.22f)) - button.accentOutlineColor() + binding.button.accentOutlineColor() attributes.recycle() } fun setButtonClick(callBack: () -> Unit) { - button.setOnClickListener { callBack.invoke() } + binding.button.setOnClickListener { callBack.invoke() } } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/views/PopupBackground.java b/app/src/main/java/code/name/monkey/retromusic/views/PopupBackground.java index 685c00892..1c4c814e2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/PopupBackground.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/PopupBackground.java @@ -27,9 +27,11 @@ import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Build; import android.view.View; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.graphics.drawable.DrawableCompat; + import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.retromusic.R; diff --git a/app/src/main/java/code/name/monkey/retromusic/views/ScrollingViewOnApplyWindowInsetsListener.java b/app/src/main/java/code/name/monkey/retromusic/views/ScrollingViewOnApplyWindowInsetsListener.java index 7f2d049a0..a11950a54 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/ScrollingViewOnApplyWindowInsetsListener.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/ScrollingViewOnApplyWindowInsetsListener.java @@ -17,8 +17,10 @@ package code.name.monkey.retromusic.views; import android.graphics.Rect; import android.view.View; import android.view.WindowInsets; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + import me.zhanghai.android.fastscroll.FastScroller; public class ScrollingViewOnApplyWindowInsetsListener implements View.OnApplyWindowInsetsListener { diff --git a/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java b/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java index 82b6b546d..029ef96ed 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/SeekArc.java @@ -24,6 +24,7 @@ import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; + import code.name.monkey.retromusic.R; /** @@ -206,10 +207,6 @@ public class SeekArc extends View { updateOnTouch(event); break; case MotionEvent.ACTION_UP: - onStopTrackingTouch(); - setPressed(false); - this.getParent().requestDisallowInterceptTouchEvent(false); - break; case MotionEvent.ACTION_CANCEL: onStopTrackingTouch(); setPressed(false); diff --git a/app/src/main/java/code/name/monkey/retromusic/views/SettingListItemView.kt b/app/src/main/java/code/name/monkey/retromusic/views/SettingListItemView.kt index 42831ecee..b72ee20f6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/SettingListItemView.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/SettingListItemView.kt @@ -16,10 +16,10 @@ package code.name.monkey.retromusic.views import android.content.Context import android.graphics.Color import android.util.AttributeSet -import android.view.View +import android.view.LayoutInflater import android.widget.FrameLayout import code.name.monkey.retromusic.R -import kotlinx.android.synthetic.main.list_setting_item_view.view.* +import code.name.monkey.retromusic.databinding.ListSettingItemViewBinding /** * Created by hemanths on 2019-12-10. @@ -30,22 +30,26 @@ class SettingListItemView @JvmOverloads constructor( defStyleAttr: Int = -1, defStyleRes: Int = -1 ) : FrameLayout(context, attrs, defStyleAttr, defStyleRes) { + private var binding: ListSettingItemViewBinding = + ListSettingItemViewBinding.inflate(LayoutInflater.from(context)) + init { - View.inflate(context, R.layout.list_setting_item_view, this) + addView(binding.root) val typedArray = context.obtainStyledAttributes(attrs, R.styleable.SettingListItemView) - icon as ColorIconsImageView + binding.icon if (typedArray.hasValue(R.styleable.SettingListItemView_settingListItemIcon)) { - icon.setImageDrawable(typedArray.getDrawable(R.styleable.SettingListItemView_settingListItemIcon)) + binding.icon.setImageDrawable(typedArray.getDrawable(R.styleable.SettingListItemView_settingListItemIcon)) } - icon.setIconBackgroundColor( + binding.icon.setIconBackgroundColor( typedArray.getColor( R.styleable.SettingListItemView_settingListItemIconColor, Color.WHITE ) ) - title.text = typedArray.getText(R.styleable.SettingListItemView_settingListItemTitle) - text.text = typedArray.getText(R.styleable.SettingListItemView_settingListItemText) + binding.title.text = + typedArray.getText(R.styleable.SettingListItemView_settingListItemTitle) + binding.text.text = typedArray.getText(R.styleable.SettingListItemView_settingListItemText) typedArray.recycle() } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java index f4bc8f8fb..6a95753f1 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarMarginFrameLayout.java @@ -19,6 +19,7 @@ import android.os.Build; import android.util.AttributeSet; import android.view.WindowInsets; import android.widget.FrameLayout; + import androidx.annotation.NonNull; public class StatusBarMarginFrameLayout extends FrameLayout { diff --git a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.java b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.java index c149cc3da..21c0dc91b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/StatusBarView.java @@ -18,6 +18,7 @@ import android.content.Context; import android.content.res.Resources; import android.util.AttributeSet; import android.view.View; + import androidx.annotation.NonNull; public class StatusBarView extends View { diff --git a/app/src/main/java/code/name/monkey/retromusic/views/VerticalTextView.java b/app/src/main/java/code/name/monkey/retromusic/views/VerticalTextView.java index 1172bb6af..5c086aada 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/VerticalTextView.java +++ b/app/src/main/java/code/name/monkey/retromusic/views/VerticalTextView.java @@ -19,6 +19,7 @@ import android.graphics.Canvas; import android.text.TextPaint; import android.util.AttributeSet; import android.view.Gravity; + import androidx.appcompat.widget.AppCompatTextView; public class VerticalTextView extends AppCompatTextView { diff --git a/app/src/main/java/code/name/monkey/retromusic/volume/AudioVolumeContentObserver.java b/app/src/main/java/code/name/monkey/retromusic/volume/AudioVolumeContentObserver.java index cea4a85e4..eb0eeec55 100644 --- a/app/src/main/java/code/name/monkey/retromusic/volume/AudioVolumeContentObserver.java +++ b/app/src/main/java/code/name/monkey/retromusic/volume/AudioVolumeContentObserver.java @@ -18,6 +18,7 @@ import android.database.ContentObserver; import android.media.AudioManager; import android.net.Uri; import android.os.Handler; + import androidx.annotation.NonNull; public class AudioVolumeContentObserver extends ContentObserver { diff --git a/app/src/main/res/drawable/asld_album.xml b/app/src/main/res/drawable/asld_album.xml new file mode 100644 index 000000000..2a57875a8 --- /dev/null +++ b/app/src/main/res/drawable/asld_album.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/asld_artist.xml b/app/src/main/res/drawable/asld_artist.xml new file mode 100644 index 000000000..55a8e3679 --- /dev/null +++ b/app/src/main/res/drawable/asld_artist.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/asld_face.xml b/app/src/main/res/drawable/asld_face.xml new file mode 100644 index 000000000..63fd8ae48 --- /dev/null +++ b/app/src/main/res/drawable/asld_face.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/asld_folder.xml b/app/src/main/res/drawable/asld_folder.xml new file mode 100644 index 000000000..c8abb3f6c --- /dev/null +++ b/app/src/main/res/drawable/asld_folder.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/asld_guitar.xml b/app/src/main/res/drawable/asld_guitar.xml new file mode 100644 index 000000000..3f2148678 --- /dev/null +++ b/app/src/main/res/drawable/asld_guitar.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/asld_heart.xml b/app/src/main/res/drawable/asld_heart.xml new file mode 100644 index 000000000..4433377a3 --- /dev/null +++ b/app/src/main/res/drawable/asld_heart.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/asld_music_note.xml b/app/src/main/res/drawable/asld_music_note.xml new file mode 100644 index 000000000..7251de26b --- /dev/null +++ b/app/src/main/res/drawable/asld_music_note.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/asld_playlist.xml b/app/src/main/res/drawable/asld_playlist.xml new file mode 100644 index 000000000..2410010e3 --- /dev/null +++ b/app/src/main/res/drawable/asld_playlist.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/avd_album.xml b/app/src/main/res/drawable/avd_album.xml new file mode 100644 index 000000000..454ae79eb --- /dev/null +++ b/app/src/main/res/drawable/avd_album.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/avd_artist.xml b/app/src/main/res/drawable/avd_artist.xml new file mode 100644 index 000000000..47fe7343b --- /dev/null +++ b/app/src/main/res/drawable/avd_artist.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/avd_face.xml b/app/src/main/res/drawable/avd_face.xml new file mode 100644 index 000000000..0e7bb6b45 --- /dev/null +++ b/app/src/main/res/drawable/avd_face.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/avd_favorite.xml b/app/src/main/res/drawable/avd_favorite.xml new file mode 100644 index 000000000..a94d5f6b3 --- /dev/null +++ b/app/src/main/res/drawable/avd_favorite.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/avd_folder.xml b/app/src/main/res/drawable/avd_folder.xml new file mode 100644 index 000000000..ce8fc6798 --- /dev/null +++ b/app/src/main/res/drawable/avd_folder.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/avd_guitar.xml b/app/src/main/res/drawable/avd_guitar.xml new file mode 100644 index 000000000..a9ceaf7e9 --- /dev/null +++ b/app/src/main/res/drawable/avd_guitar.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/avd_music_note.xml b/app/src/main/res/drawable/avd_music_note.xml new file mode 100644 index 000000000..7cb3488ec --- /dev/null +++ b/app/src/main/res/drawable/avd_music_note.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/avd_playlist.xml b/app/src/main/res/drawable/avd_playlist.xml new file mode 100644 index 000000000..4a0daede2 --- /dev/null +++ b/app/src/main/res/drawable/avd_playlist.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/avd_unfavorite.xml b/app/src/main/res/drawable/avd_unfavorite.xml new file mode 100644 index 000000000..aae7e0365 --- /dev/null +++ b/app/src/main/res/drawable/avd_unfavorite.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_album_artist.xml b/app/src/main/res/drawable/ic_album_artist.xml new file mode 100644 index 000000000..64784443c --- /dev/null +++ b/app/src/main/res/drawable/ic_album_artist.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_baseline.xml b/app/src/main/res/drawable/ic_baseline.xml new file mode 100644 index 000000000..1217c34b1 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_favorite_border.xml b/app/src/main/res/drawable/ic_favorite_border.xml index b399e446b..9286ddd0e 100644 --- a/app/src/main/res/drawable/ic_favorite_border.xml +++ b/app/src/main/res/drawable/ic_favorite_border.xml @@ -2,10 +2,24 @@ - - + android:name="heartbreak" + android:viewportWidth="56" + android:viewportHeight="56"> + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_lyrics.xml b/app/src/main/res/drawable/ic_lyrics.xml new file mode 100644 index 000000000..6a2a3a724 --- /dev/null +++ b/app/src/main/res/drawable/ic_lyrics.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_lyrics_outline.xml b/app/src/main/res/drawable/ic_lyrics_outline.xml new file mode 100644 index 000000000..f1d5843af --- /dev/null +++ b/app/src/main/res/drawable/ic_lyrics_outline.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_pause_outline.xml b/app/src/main/res/drawable/ic_pause_outline.xml new file mode 100644 index 000000000..8d4364c6e --- /dev/null +++ b/app/src/main/res/drawable/ic_pause_outline.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/drawable/ic_play_arrow_outline.xml b/app/src/main/res/drawable/ic_play_arrow_outline.xml new file mode 100644 index 000000000..3bfc086a8 --- /dev/null +++ b/app/src/main/res/drawable/ic_play_arrow_outline.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_playlist_remove.xml b/app/src/main/res/drawable/ic_playlist_remove.xml new file mode 100644 index 000000000..1becc9717 --- /dev/null +++ b/app/src/main/res/drawable/ic_playlist_remove.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_skip_next_outline.xml b/app/src/main/res/drawable/ic_skip_next_outline.xml new file mode 100644 index 000000000..0c9da3b11 --- /dev/null +++ b/app/src/main/res/drawable/ic_skip_next_outline.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_skip_previous_outline.xml b/app/src/main/res/drawable/ic_skip_previous_outline.xml new file mode 100644 index 000000000..cbfdf33c6 --- /dev/null +++ b/app/src/main/res/drawable/ic_skip_previous_outline.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_storage.xml b/app/src/main/res/drawable/ic_storage.xml new file mode 100644 index 000000000..a4a57c40f --- /dev/null +++ b/app/src/main/res/drawable/ic_storage.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/lyrics_mask.xml b/app/src/main/res/drawable/lyrics_mask.xml new file mode 100644 index 000000000..e2d5c451b --- /dev/null +++ b/app/src/main/res/drawable/lyrics_mask.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shadow_blur_theme.xml b/app/src/main/res/drawable/shadow_blur_theme.xml new file mode 100644 index 000000000..fad19a4dd --- /dev/null +++ b/app/src/main/res/drawable/shadow_blur_theme.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tab_lyrics_indicator.xml b/app/src/main/res/drawable/tab_lyrics_indicator.xml new file mode 100644 index 000000000..791c672be --- /dev/null +++ b/app/src/main/res/drawable/tab_lyrics_indicator.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/app/src/main/res/layout-land/activity_drive_mode.xml b/app/src/main/res/layout-land/activity_drive_mode.xml index aeef74ede..6a7fcc8cb 100644 --- a/app/src/main/res/layout-land/activity_drive_mode.xml +++ b/app/src/main/res/layout-land/activity_drive_mode.xml @@ -176,7 +176,7 @@ - + diff --git a/app/src/main/res/layout-land/fragment_artist_details.xml b/app/src/main/res/layout-land/fragment_artist_details.xml index 1daebee82..4e771de75 100644 --- a/app/src/main/res/layout-land/fragment_artist_details.xml +++ b/app/src/main/res/layout-land/fragment_artist_details.xml @@ -2,7 +2,6 @@ - + diff --git a/app/src/main/res/layout-land/fragment_banner_home.xml b/app/src/main/res/layout-land/fragment_banner_home.xml index 0b13fab3a..74920bfd4 100644 --- a/app/src/main/res/layout-land/fragment_banner_home.xml +++ b/app/src/main/res/layout-land/fragment_banner_home.xml @@ -15,7 +15,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:transitionGroup="true"> - - - + android:layout_height="match_parent" + android:layout_marginStart="@dimen/toolbar_margin_horizontal" + android:layout_marginEnd="@dimen/toolbar_margin_horizontal" + android:descendantFocusability="beforeDescendants" + android:focusableInTouchMode="true" + android:overScrollMode="never" + android:transitionGroup="true" + app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"> - - - - - - - - - - - - - - - - - - - - + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-land/fragment_blur.xml b/app/src/main/res/layout-land/fragment_blur.xml index 52efd9c6e..6568c6ae8 100644 --- a/app/src/main/res/layout-land/fragment_blur.xml +++ b/app/src/main/res/layout-land/fragment_blur.xml @@ -52,7 +52,7 @@ android:layout_height="match_parent" android:layout_gravity="center_horizontal"> - - - - - - - - - \ No newline at end of file + diff --git a/app/src/main/res/layout-land/fragment_flat_player.xml b/app/src/main/res/layout-land/fragment_flat_player.xml index d59f06a2b..37ca72b13 100644 --- a/app/src/main/res/layout-land/fragment_flat_player.xml +++ b/app/src/main/res/layout-land/fragment_flat_player.xml @@ -42,7 +42,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + android:layout_height="match_parent" + android:transitionGroup="true"> @@ -108,6 +111,7 @@ tools:text="@tools:sample/lorem" /> - - - @@ -90,7 +93,7 @@ android:layout_height="match_parent" android:layout_weight="1"> - - - - - + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-xlarge-land/fragment_blur.xml b/app/src/main/res/layout-xlarge-land/fragment_blur.xml index c918471ca..c0899dca7 100644 --- a/app/src/main/res/layout-xlarge-land/fragment_blur.xml +++ b/app/src/main/res/layout-xlarge-land/fragment_blur.xml @@ -43,7 +43,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/statusBarContainer"> - - - + - + - + - + \ No newline at end of file diff --git a/app/src/main/res/layout/abs_playlists.xml b/app/src/main/res/layout/abs_playlists.xml index 20128735b..608b697a0 100644 --- a/app/src/main/res/layout/abs_playlists.xml +++ b/app/src/main/res/layout/abs_playlists.xml @@ -37,6 +37,7 @@ android:gravity="center" android:paddingTop="8dp" android:text="@string/history" + android:textAppearance="@style/TextViewNormalCompress" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/v1" /> @@ -72,6 +73,7 @@ android:gravity="center" android:paddingTop="8dp" android:text="@string/last_added" + android:textAppearance="@style/TextViewNormalCompress" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/v2" /> @@ -144,6 +146,7 @@ android:gravity="center" android:paddingTop="8dp" android:text="@string/shuffle" + android:textAppearance="@style/TextViewNormalCompress" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/v4" /> diff --git a/app/src/main/res/layout/activity_bug_report.xml b/app/src/main/res/layout/activity_bug_report.xml index ab45e3419..b1216d921 100644 --- a/app/src/main/res/layout/activity_bug_report.xml +++ b/app/src/main/res/layout/activity_bug_report.xml @@ -45,12 +45,14 @@ android:orientation="vertical"> diff --git a/app/src/main/res/layout/activity_drive_mode.xml b/app/src/main/res/layout/activity_drive_mode.xml index 800b5c4a3..31841df4d 100644 --- a/app/src/main/res/layout/activity_drive_mode.xml +++ b/app/src/main/res/layout/activity_drive_mode.xml @@ -183,7 +183,7 @@ - - - + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 72796a351..c5cc80e55 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -17,21 +17,6 @@ android:layout_height="match_parent" android:background="?attr/colorSurface"> - - - - - + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_song_tag_editor.xml b/app/src/main/res/layout/activity_song_tag_editor.xml index 6354f13c9..e6fbdd7a9 100755 --- a/app/src/main/res/layout/activity_song_tag_editor.xml +++ b/app/src/main/res/layout/activity_song_tag_editor.xml @@ -131,7 +131,8 @@ + android:orientation="horizontal" + android:baselineAligned="false"> + android:inputType="textMultiLine" + android:maxLines="15" /> diff --git a/app/src/main/res/layout/activity_user_info.xml b/app/src/main/res/layout/activity_user_info.xml index f99937744..3d5ec19fa 100644 --- a/app/src/main/res/layout/activity_user_info.xml +++ b/app/src/main/res/layout/activity_user_info.xml @@ -17,6 +17,7 @@ @@ -33,7 +34,7 @@ android:id="@+id/bannerImage" android:layout_width="0dp" android:layout_height="0dp" - android:layout_margin="16dp" + android:layout_margin="8dp" android:scaleType="centerCrop" app:layout_constraintDimensionRatio="21:10" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/activity_whats_new.xml b/app/src/main/res/layout/activity_whats_new.xml index 6420b1c13..aad2a6130 100644 --- a/app/src/main/res/layout/activity_whats_new.xml +++ b/app/src/main/res/layout/activity_whats_new.xml @@ -19,6 +19,17 @@ android:background="?attr/colorSurface"> + + + + diff --git a/app/src/main/res/layout/cast_controller_layout.xml b/app/src/main/res/layout/cast_controller_layout.xml new file mode 100644 index 000000000..1047760d2 --- /dev/null +++ b/app/src/main/res/layout/cast_controller_layout.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/cast_mini_controller.xml b/app/src/main/res/layout/cast_mini_controller.xml new file mode 100644 index 000000000..a8a4f5c9b --- /dev/null +++ b/app/src/main/res/layout/cast_mini_controller.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_edit_lyrics.xml b/app/src/main/res/layout/dialog_edit_lyrics.xml new file mode 100644 index 000000000..ac767afe3 --- /dev/null +++ b/app/src/main/res/layout/dialog_edit_lyrics.xml @@ -0,0 +1,39 @@ + + + + + + +