diff --git a/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java b/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java index d27aadecf..0ca83bbc1 100644 --- a/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java +++ b/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java @@ -1,6 +1,7 @@ package ru.vtosters.lite.downloaders; import static ru.vtosters.lite.music.cache.FileCacheImplementation.getTrackFolder; +import static ru.vtosters.lite.utils.AndroidUtils.getString; import android.app.Notification; import android.os.Build; @@ -68,7 +69,7 @@ public class AudioDownloader { private static void downloadM3U8(MusicTrack track, boolean cache) { if (track.D == null) { - ToastUtils.a(AndroidUtils.getString("link_audio_error")); + ToastUtils.a(getString("link_audio_error")); return; } @@ -104,7 +105,7 @@ public class AudioDownloader { public void onSuccess() { try { notification - .setContentText(AndroidUtils.getString("player_download_finished")) + .setContentText(getString("player_download_finished")) .setProgress(0, 0, false) .setSmallIcon(android.R.drawable.stat_sys_download_done); notificationManager.notify(notificationId, notification.build()); @@ -117,7 +118,7 @@ public class AudioDownloader { @Override public void onFailure() { - notification.setContentText(AndroidUtils.getString("load_audio_error")).setProgress(0, 0, false); + notification.setContentText(getString("load_audio_error")).setProgress(0, 0, false); notificationManager.notify(notificationId, notification.build()); } @@ -194,7 +195,7 @@ public class AudioDownloader { builder.setSmallIcon(com.vtosters.lite.R.drawable.ic_download_outline_28) .setShowWhen(false) - .setContentTitle("Закешированный трек: " + track.toString()); + .setContentTitle(getString("cached_track") + ": " + track.toString()); NotificationChannels.getNotificationManager().notify(track.y1().hashCode(), builder.build()); } @@ -202,7 +203,7 @@ public class AudioDownloader { private static NotificationCompat.Builder buildDownloadNotification(MusicTrack track, int id) { var notificationBuilder = new NotificationCompat.Builder(AndroidUtils.getGlobalContext(), NotificationChannels.MUSIC_DOWNLOAD_CHANNEL_ID) .setSmallIcon(android.R.drawable.stat_sys_download) - .setContentTitle(AndroidUtils.getString("audio_downloading")) + .setContentTitle(getString("audio_downloading")) .setContentText(track.toString()) .setPriority(NotificationCompat.PRIORITY_LOW) .setCategory(NotificationCompat.CATEGORY_PROGRESS) @@ -215,7 +216,7 @@ public class AudioDownloader { private static NotificationCompat.Builder buildPlaylistDownloadNotification(String playlistName, int id) { var notificationBuilder = new NotificationCompat.Builder(AndroidUtils.getGlobalContext(), NotificationChannels.MUSIC_PLAYLIST_DOWNLOAD_CHANNEL_ID) .setSmallIcon(android.R.drawable.stat_sys_download) - .setContentTitle("Загрузка плейлиста " + '«' + playlistName + '»') + .setContentTitle(getString("cached_playlist_loading") + " «" + playlistName + "»") .setContentText(playlistName) .setPriority(NotificationCompat.PRIORITY_LOW) .setCategory(NotificationCompat.CATEGORY_PROGRESS) diff --git a/app/src/main/java/ru/vtosters/lite/downloaders/notifications/NotificationChannels.java b/app/src/main/java/ru/vtosters/lite/downloaders/notifications/NotificationChannels.java index 0718d198b..e479651f5 100644 --- a/app/src/main/java/ru/vtosters/lite/downloaders/notifications/NotificationChannels.java +++ b/app/src/main/java/ru/vtosters/lite/downloaders/notifications/NotificationChannels.java @@ -1,5 +1,7 @@ package ru.vtosters.lite.downloaders.notifications; +import static ru.vtosters.lite.utils.AndroidUtils.getString; + import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -12,14 +14,14 @@ import ru.vtosters.lite.utils.AndroidUtils; public class NotificationChannels { public static final String MUSIC_DOWNLOAD_CHANNEL_ID = "music_download_channel"; - public static final String MUSIC_DOWNLOAD_CHANNEL_NAME = "Загрузка музыки"; - public static final String MUSIC_DOWNLOAD_CHANNEL_DESCRIPTION = "Прогресс загрузки музыки"; + public static final String MUSIC_DOWNLOAD_CHANNEL_NAME = getString("music_downloading"); + public static final String MUSIC_DOWNLOAD_CHANNEL_DESCRIPTION = getString("music_downloading_progress"); public static final String MUSIC_PLAYLIST_DOWNLOAD_CHANNEL_ID = "music_playlist_download_channel"; - public static final String MUSIC_PLAYLIST_DOWNLOAD_CHANNEL_NAME = "Загрузка плейлиста"; - public static final String MUSIC_PLAYLIST_DOWNLOAD_CHANNEL_DESCRIPTION = "Прогресс загрузки плейлиста"; + public static final String MUSIC_PLAYLIST_DOWNLOAD_CHANNEL_NAME = getString("playlist_downloading"); + public static final String MUSIC_PLAYLIST_DOWNLOAD_CHANNEL_DESCRIPTION = getString("playlist_downloading_progress"); - public static final String MUSIC_CACHING_NAME = "Кеширование трека / Обложки"; + public static final String MUSIC_CACHING_NAME = getString("caching_track_or_pic"); private static NotificationManagerCompat notificationManagerCompat; diff --git a/app/src/main/java/ru/vtosters/lite/music/cache/CacheDatabaseDelegate.java b/app/src/main/java/ru/vtosters/lite/music/cache/CacheDatabaseDelegate.java index c9e18dcbf..4244a6603 100644 --- a/app/src/main/java/ru/vtosters/lite/music/cache/CacheDatabaseDelegate.java +++ b/app/src/main/java/ru/vtosters/lite/music/cache/CacheDatabaseDelegate.java @@ -83,14 +83,14 @@ public class CacheDatabaseDelegate { getHelper().getReadableDatabase().execSQL(formula); } catch (Exception e) { e.printStackTrace(); - ToastUtils.a("Ошибка при записи трека в БД! [" + e.getMessage() + "]", true); + ToastUtils.a(getString("track_bd_insert_err") + " [" + e.getMessage() + "]", true); } } public static void clear() { getHelper().getReadableDatabase().execSQL(String.format("DELETE FROM %s", TABLE_NAME)); deleteRecursive(getCacheDir()); - sendToast("Кешированные песни удалены"); + sendToast(getString("cached_tracks_deleted")); } @NonNull diff --git a/app/src/main/java/ru/vtosters/lite/music/cache/helpers/PlaylistHelper.java b/app/src/main/java/ru/vtosters/lite/music/cache/helpers/PlaylistHelper.java index f0a491666..9d977acd8 100644 --- a/app/src/main/java/ru/vtosters/lite/music/cache/helpers/PlaylistHelper.java +++ b/app/src/main/java/ru/vtosters/lite/music/cache/helpers/PlaylistHelper.java @@ -1,5 +1,7 @@ package ru.vtosters.lite.music.cache.helpers; +import static ru.vtosters.lite.utils.AndroidUtils.getString; + import com.vk.dto.music.Playlist; import org.json.JSONArray; @@ -22,9 +24,8 @@ public class PlaylistHelper { .put("owner_id", AccountManagerUtils.getUserId()) .put("type", 0) .put("album_type", "playlist") - .put("title", "Кешированные треки") - .put("description", "Это - список всех кешированных треков. Данный плейлист НЕ СУЩЕСТВУЕТ в вашем профиле.\n\n" + - "При отсутствии соединения с Интернетом данный плейлист превратится в обычный список треков.") + .put("title", getString("cached_tracks_title")) + .put("description", getString("cached_tracks_desc")) .put("count", 0); return new Playlist(obj); } catch (JSONException e) { @@ -60,7 +61,7 @@ public class PlaylistHelper { .put("type", 1) .put("album_type", "main_only") .put("title", title) - .put("description", albumId + "/ Это кешированный альбом!") + .put("description", albumId + "/ " + getString("cached_album_warning")) .put("main_artists", new JSONArray() .put(new JSONObject().put("name", artist) .put("id", "-1") diff --git a/app/src/main/java/ru/vtosters/lite/music/cache/injectors/TracklistInjector.java b/app/src/main/java/ru/vtosters/lite/music/cache/injectors/TracklistInjector.java index df3727006..d4254bdd7 100644 --- a/app/src/main/java/ru/vtosters/lite/music/cache/injectors/TracklistInjector.java +++ b/app/src/main/java/ru/vtosters/lite/music/cache/injectors/TracklistInjector.java @@ -1,6 +1,7 @@ package ru.vtosters.lite.music.cache.injectors; import static ru.vtosters.lite.music.cache.CacheDatabaseDelegate.hasTracks; +import static ru.vtosters.lite.utils.AndroidUtils.getString; import android.util.Log; @@ -68,7 +69,7 @@ public class TracklistInjector { } private static JSONObject getEmptyCatalog() throws JSONException{ - return new JSONObject("{\"catalog\":{\"default_section\":\"cache\",\"sections\":[{\"id\":\"cache\",\"title\":\"Кешированный контент\",\"blocks\":[{\"data_type\":\"placeholder\",\"id\":\"0\",\"layout\":{\"name\":\"placeholder_big\"},\"placeholder_ids\":[\"_synth_trackEmpty\"]}]}]},\"audios\":[],\"playlists\":[],\"placeholders\":[{\"id\":\"_synth_trackEmpty\",\"title\":\"Похоже, тут пусто\",\"text\":\"У вас отсутствует кешированный контент\",\"buttons\":[]}]}"); + return new JSONObject("{\"catalog\":{\"default_section\":\"cache\",\"sections\":[{\"id\":\"cache\",\"title\":\"" + getString("cached_content_title") + "\",\"blocks\":[{\"data_type\":\"placeholder\",\"id\":\"0\",\"layout\":{\"name\":\"placeholder_big\"},\"placeholder_ids\":[\"_synth_trackEmpty\"]}]}]},\"audios\":[],\"playlists\":[],\"placeholders\":[{\"id\":\"_synth_trackEmpty\",\"title\":\"" + getString("cached_content_empty") + "\",\"text\":\"" + getString("cached_content_empty_desc") + "\",\"buttons\":[]}]}"); } public static void injectIntoExistingCatalog(JSONObject catalogNode) { @@ -159,9 +160,8 @@ public class TracklistInjector { var catalogBanner = new JSONObject() .put("id", 1234) .put("image_mode", "cover") - .put("title", "Включите интеграцию VK X!") - .put("text", "Получите доступ к хранилищу треков и возможности включать/кешировать треки из VTosters в VK X.\n\n" + - "Подробнее - в Настройки > Настройки VTosters > Кешированные треки.") + .put("title", getString("vkx_integration_title")) + .put("text", getString("vkx_integration_desc")) .put("click_action", new JSONObject().put("action", clickAction)); var catalogBanners = new JSONArray() .put(catalogBanner); @@ -200,7 +200,7 @@ public class TracklistInjector { var section = new JSONObject() .put("id", randomId) - .put("title", "Сохраненные треки") + .put("title", getString("saved_tracks_title")) .put("url", "synth:cache") .put("blocks", blocks); diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/MediaFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/MediaFragment.java index d650da193..da5d92875 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/MediaFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/MediaFragment.java @@ -96,7 +96,7 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment { findPreference("lastfm_enabled").setEnabled(false); } - findPreference("cached_tracks").setSummary("Всего закешировано " + CacheDatabaseDelegate.getTrackCount() + " песен"); + findPreference("cached_tracks").setSummary(String.format(AndroidUtils.getString("cached_tracks_counter"), CacheDatabaseDelegate.getTrackCount())); findPreference("cached_tracks").setOnPreferenceClickListener(preference -> { delcache(requireContext()); return true; @@ -187,12 +187,12 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment { private void delcache(Context ctx) { VkAlertDialog.Builder alertDialog = new VkAlertDialog.Builder(ctx); - alertDialog.setTitle("Внимание!"); - alertDialog.setMessage("Вы действительно хотите удалить все кешированные песни?"); - alertDialog.setPositiveButton(AndroidUtils.getString("vkim_yes"), (dialog, which) -> { + alertDialog.setTitle(AndroidUtils.getString("warning")); + alertDialog.setMessage(AndroidUtils.getString("cached_tracks_remove_confirm")); + alertDialog.setPositiveButton(AndroidUtils.getString("yes"), (dialog, which) -> { CacheDatabaseDelegate.clear(); }); - alertDialog.setNeutralButton(AndroidUtils.getString("vkim_no"), (dialog, which) -> { + alertDialog.setNeutralButton(AndroidUtils.getString("no"), (dialog, which) -> { dialog.cancel(); }); var alert = alertDialog.create(); @@ -215,7 +215,7 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment { if (response.optInt("response") == 1){ LifecycleUtils.getCurrentActivity().runOnUiThread(() -> sendToast(AndroidUtils.getString("video_history_cleaned"))); } else { - LifecycleUtils.getCurrentActivity().runOnUiThread(() -> sendToast("Ошибка при очистке истории. Подробности в логах")); + LifecycleUtils.getCurrentActivity().runOnUiThread(() -> sendToast(AndroidUtils.getString("delete_video_history_error"))); } Log.d("VideoHistory", response.toString()); diff --git a/smali/res/values-ru/strings.xml b/smali/res/values-ru/strings.xml index b758cc293..8bd64bf92 100644 --- a/smali/res/values-ru/strings.xml +++ b/smali/res/values-ru/strings.xml @@ -5953,9 +5953,12 @@ Скачать как mp3 Удалить из кеша - Добавить в кэш - Воспроизвести в VK X + Добавить в кеш + Удалить из VK X кеша + Добавить в кеш VK X + + Воспроизвести в VK X Спасибо тебе за поддержку проекта! Поддержи проект донатом и получи бонусы @@ -6236,6 +6239,7 @@ ссылки отсутствуют Вы действительно хотите очистить историю видео? + Ошибка при очистке истории. Подробности в логах Размер файла превышает лимит 6 MB @@ -6252,4 +6256,34 @@ Не отправлять информацию о батарее Включение этой функции скроет информацию о состоянии вашего устройства в режиме экономии батареи и ВКонтакте будет отправлять вам медиаконтент без сильного сжатия и блюра + + Ошибка при записи трека в БД! + Кешированные песни удалены + Закешированный трек + Кешированные песни + Сохраненные треки + Это - список всех кешированных треков. Данный плейлист НЕ СУЩЕСТВУЕТ в вашем профиле.\n\nПри отсутствии соединения с Интернетом данный плейлист превратится в обычный список треков. + Это кешированный альбом! + Загрузка плейлиста + + Кешированный контент + Похоже, тут пусто + У вас отсутствует кешированный контент + Вы действительно хотите удалить все кешированные песни? + + Включите интеграцию VK X! + Получите доступ к хранилищу треков и возможности включать/кешировать треки из VTLite в VK X.\n\nПодробнее - в Настройки > Медиа контент > VK X + + Загрузка музыки + Прогресс загрузки музыки + + Загрузка плейлиста + Прогресс загрузки плейлиста + + Кеширование трека / обложки + + Всего закешировано %1$d песен + + Автокеширование песен + Автоматически кешировать все воспроизведенные вами песни \ No newline at end of file diff --git a/smali/res/values/strings.xml b/smali/res/values/strings.xml index 22ee2401f..bd0d5e449 100644 --- a/smali/res/values/strings.xml +++ b/smali/res/values/strings.xml @@ -6090,8 +6090,8 @@ May look like a fake leaving the online" Delete from cache Add to cache - Delete from VKX cache - Add to VKX cache + Delete from VK X cache + Add to VK X cache Play the track in VK X @@ -6377,6 +6377,7 @@ May look like a fake leaving the online" no links Are you sure you want to clear your video history? + Error clearing video history. Details in the logs File size exceeds 6 MB limit @@ -6393,4 +6394,34 @@ May look like a fake leaving the online" Don\'t send battery information Enabling this feature will hide information about the state of your device in battery saving mode and VK will send you media content without strong compression and blur + + Error writing track to database! + Cached songs deleted + Cached track + Cached songs + Saved tracks + This is a list of all cached tracks. This playlist DOES NOT EXIST on your profile.\n\nIf there is no Internet connection, this playlist will turn into a regular track list. + This is a cached album! + Playlist loading + + Cached content + Looks like it\'s empty + You have no cached content + Are you sure you want to delete all cached songs? + + Enable VK X integration! + Get access to the track storage and the ability to include/cache tracks from VTLite to VK X.\n\nFor details, go to Settings > Media Content > VK X + + Downloading music + Music download progress + + Downloading a playlist + Playlist download progress + + Caching track / cover art + + Total %1$d song(s) cached + + Autocache songs + Automatically cache all songs you have played diff --git a/smali/res/xml/preferences_media.xml b/smali/res/xml/preferences_media.xml index ca51e5545..8724791b4 100644 --- a/smali/res/xml/preferences_media.xml +++ b/smali/res/xml/preferences_media.xml @@ -50,12 +50,12 @@ + android:title="@string/cached_tracks_title"/> + android:summary="@string/autocache_summ" + android:title="@string/autocache_title" />