diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 7766ceab2..3ccf49af8 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -21,14 +21,21 @@ jobs:
runs-on: ubuntu-latest
steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Set up NDK
+ uses: nttld/setup-ndk@v1
+ with:
+ ndk-version: r25c
+ add-to-path: false
+
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'adopt'
-
- - uses: actions/checkout@v3
-
+
- name: Download tools
run: |
sudo apt update
@@ -47,6 +54,8 @@ jobs:
java -jar scripts/apktool.jar b smali -o smali/VTLite.apk --use-aapt2 -p scripts/framework/
zipalign -p -f 4 smali/VTLite.apk smali/VTLite.apk_aligned
mv smali/VTLite.apk_aligned smali/VTLite.apk
+ env:
+ ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
- name: Sign and verify the apk
run: |
diff --git a/app/build.gradle b/app/build.gradle
index c1b2a4af1..728b02f73 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -78,7 +78,7 @@ android {
targetCompatibility JavaVersion.VERSION_14
}
namespace 'ru.vtosters.lite'
- ndkVersion '26.1.10909125'
+ ndkVersion '25.2.9519653'
buildFeatures {
aidl true
}
diff --git a/app/src/main/java/com/vtosters/lite/R.java b/app/src/main/java/com/vtosters/lite/R.java
index 957d3984b..4c02e7486 100644
--- a/app/src/main/java/com/vtosters/lite/R.java
+++ b/app/src/main/java/com/vtosters/lite/R.java
@@ -19661,38 +19661,39 @@ public final class R {
public static final int cache_size = 0x7f12188d; // 2131892365
public static final int cache_size_summ = 0x7f12188e; // 2131892366
public static final int clear_all_cache = 0x7f12188f; // 2131892367
- public static final int invalidate_theme_cache_each_update_title = 0x7f121890; // 2131892368
- public static final int invertFilters = 0x7f121891; // 2131892369
- public static final int invertFilters_summ = 0x7f121892; // 2131892370
- public static final int invertcached_summ = 0x7f121893; // 2131892371
- public static final int invertcached_title = 0x7f121894; // 2131892372
- public static final int microg_dialog1 = 0x7f121895; // 2131892373
- public static final int microg_dialog2 = 0x7f121896; // 2131892374
- public static final int microg_dialog3 = 0x7f121897; // 2131892375
- public static final int serverFeaturesDisable = 0x7f121898; // 2131892376
- public static final int serverFeaturesDisable_summ = 0x7f121899; // 2131892377
- public static final int sett_autoupdates = 0x7f12189a; // 2131892378
- public static final int sett_autoupdates_summ = 0x7f12189b; // 2131892379
- public static final int sett_battery = 0x7f12189c; // 2131892380
- public static final int sett_battery_summ1 = 0x7f12189d; // 2131892381
- public static final int sett_battery_summ2 = 0x7f12189e; // 2131892382
- public static final int sett_chats = 0x7f12189f; // 2131892383
- public static final int sett_chats_summ = 0x7f1218a0; // 2131892384
- public static final int sett_community = 0x7f1218a1; // 2131892385
- public static final int sett_community_summ = 0x7f1218a2; // 2131892386
- public static final int sett_missing_links = 0x7f1218a3; // 2131892387
- public static final int sett_missing_links_summ = 0x7f1218a4; // 2131892388
- public static final int sett_nogms_summ = 0x7f1218a5; // 2131892389
- public static final int sett_notifs = 0x7f1218a6; // 2131892390
- public static final int sett_notifs_summ = 0x7f1218a7; // 2131892391
- public static final int sett_recommendations = 0x7f1218a8; // 2131892392
- public static final int tgs_token_missing = 0x7f1218aa; // 2131892394
- public static final int tgs_token_reset = 0x7f1218ab; // 2131892395
- public static final int tgs_token_reset_dialog = 0x7f1218ac; // 2131892396
- public static final int tgs_token_reset_menu = 0x7f1218ad; // 2131892397
- public static final int update_err = 0x7f1218ae; // 2131892398
- public static final int update_latest = 0x7f1218af; // 2131892399
- public static final int APKTOOL_DUMMY_18a9 = 0x7f1218a9; // 2131892393
+ public static final int disable_roaming_state = 0x7f121890; // 2131892368
+ public static final int disable_roaming_state_submit = 0x7f121891; // 2131892369
+ public static final int invalidate_theme_cache_each_update_title = 0x7f121892; // 2131892370
+ public static final int invertFilters = 0x7f121893; // 2131892371
+ public static final int invertFilters_summ = 0x7f121894; // 2131892372
+ public static final int invertcached_summ = 0x7f121895; // 2131892373
+ public static final int invertcached_title = 0x7f121896; // 2131892374
+ public static final int microg_dialog1 = 0x7f121897; // 2131892375
+ public static final int microg_dialog2 = 0x7f121898; // 2131892376
+ public static final int microg_dialog3 = 0x7f121899; // 2131892377
+ public static final int serverFeaturesDisable = 0x7f12189a; // 2131892378
+ public static final int serverFeaturesDisable_summ = 0x7f12189b; // 2131892379
+ public static final int sett_autoupdates = 0x7f12189c; // 2131892380
+ public static final int sett_autoupdates_summ = 0x7f12189d; // 2131892381
+ public static final int sett_battery = 0x7f12189e; // 2131892382
+ public static final int sett_battery_summ1 = 0x7f12189f; // 2131892383
+ public static final int sett_battery_summ2 = 0x7f1218a0; // 2131892384
+ public static final int sett_chats = 0x7f1218a1; // 2131892385
+ public static final int sett_chats_summ = 0x7f1218a2; // 2131892386
+ public static final int sett_community = 0x7f1218a3; // 2131892387
+ public static final int sett_community_summ = 0x7f1218a4; // 2131892388
+ public static final int sett_missing_links = 0x7f1218a5; // 2131892389
+ public static final int sett_missing_links_summ = 0x7f1218a6; // 2131892390
+ public static final int sett_nogms_summ = 0x7f1218a7; // 2131892391
+ public static final int sett_notifs = 0x7f1218a8; // 2131892392
+ public static final int sett_notifs_summ = 0x7f1218a9; // 2131892393
+ public static final int sett_recommendations = 0x7f1218aa; // 2131892394
+ public static final int tgs_token_missing = 0x7f1218ab; // 2131892395
+ public static final int tgs_token_reset = 0x7f1218ac; // 2131892396
+ public static final int tgs_token_reset_dialog = 0x7f1218ad; // 2131892397
+ public static final int tgs_token_reset_menu = 0x7f1218ae; // 2131892398
+ public static final int update_err = 0x7f1218af; // 2131892399
+ public static final int update_latest = 0x7f1218b0; // 2131892400
}
public static final class style {
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 21222afe7..5edc618cf 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
@@ -5,12 +5,9 @@ import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
-import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.FrameLayout;
-import android.widget.LinearLayout;
import androidx.preference.Preference;
-import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
import com.vk.core.dialogs.alert.VkAlertDialog;
import com.vk.core.network.Network;
import com.vtosters.lite.R;
@@ -21,10 +18,7 @@ import org.json.JSONObject;
import ru.vtosters.hooks.other.Preferences;
import ru.vtosters.hooks.other.ThemesUtils;
import ru.vtosters.lite.concurrent.VTExecutors;
-import ru.vtosters.lite.downloaders.AudioDownloader;
import ru.vtosters.lite.downloaders.VideoDownloader;
-import ru.vtosters.lite.music.LastFMScrobbler;
-import ru.vtosters.lite.music.cache.MusicCacheImpl;
import ru.vtosters.lite.proxy.ProxyUtils;
import ru.vtosters.lite.ui.adapters.ImagineArrayAdapter;
import ru.vtosters.lite.utils.AccountManagerUtils;
@@ -37,8 +31,6 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
- private static final ExecutorService executor = Executors.newCachedThreadPool();
-
public static void download(Context ctx) {
final EditText input = new EditText(ctx);
input.setTextColor(ThemesUtils.getTextAttr());
@@ -93,47 +85,6 @@ public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
deleteVideoHistoryDialog(requireContext());
return true;
});
- findPreference("lastfm_auth").setOnPreferenceClickListener(preference -> {
- if (LastFMScrobbler.isLoggedIn()) {
- logout(getContext());
- } else {
- lastfmAuth(getContext());
- }
- return true;
- });
-
- if (LastFMScrobbler.isLoggedIn()) {
- findPreference("lastfm_auth").setSummary(requireContext().getString(R.string.lastfm_authorized_as) + " " + LastFMScrobbler.getUserName());
- } else {
- findPreference("lastfm_enabled").setEnabled(false);
- }
-
- findPreference("lastfm").setVisible(!Preferences.serverFeaturesDisable());
-
- findPreference("cached_tracks").setSummary(String.format(requireContext().getString(R.string.cached_tracks_counter), MusicCacheImpl.getTracksCount()));
- findPreference("cached_tracks").setOnPreferenceClickListener(preference -> {
- if (MusicCacheImpl.isEmpty()) {
- AndroidUtils.sendToast(requireContext().getString(R.string.no_cache_error));
- } else {
- delcache(requireContext());
- }
- return true;
- });
-
- findPreference("useGenius").setVisible(!Preferences.serverFeaturesDisable());
-
- findPreference("audio_download").setOnPreferenceClickListener(preference -> {
- dlaudio(requireContext());
- return true;
- });
-
- findPreference("invertCachedTracks").setVisible(!MusicCacheImpl.isEmpty());
-
- findPreference("musicdefcatalog").setVisible(!Preferences.getBoolValue("useOldAppVer", false));
- findPreference("useOldAppVer").setOnPreferenceClickListener(preference -> {
- LifecycleUtils.restartApplicationWithTimer();
- return true;
- });
findPreference("select_photo_search_engine").setOnPreferenceClickListener(preference -> {
var items = new ImagineArrayAdapter.ImagineArrayAdapterItem[SearchEngine.values().length + 1];
@@ -164,83 +115,6 @@ public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
findPreference("maxquality").setEnabled(Preferences.isEnableExternalOpening());
}
- private void lastfmAuth(Context ctx) {
- LinearLayout linearLayout = new LinearLayout(ctx);
- linearLayout.setOrientation(LinearLayout.VERTICAL);
-
- final EditText fn = new EditText(ctx);
- fn.setHint(R.string.lastfm_login);
- fn.setTextColor(ThemesUtils.getTextAttr());
- fn.setHintTextColor(ThemesUtils.getSTextAttr());
- fn.setBackgroundTintList(ThemesUtils.getAccenedColorStateList());
- linearLayout.addView(fn);
- fn.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
- ViewGroup.MarginLayoutParams margin = ((ViewGroup.MarginLayoutParams) fn.getLayoutParams());
- margin.setMargins(AndroidUtils.dp2px(20f), 0, AndroidUtils.dp2px(20f), 0);
- fn.setLayoutParams(margin);
-
- final EditText ln = new EditText(ctx);
- ln.setHint(R.string.lastfm_password);
- ln.setTextColor(ThemesUtils.getTextAttr());
- ln.setHintTextColor(ThemesUtils.getSTextAttr());
- ln.setBackgroundTintList(ThemesUtils.getAccenedColorStateList());
- linearLayout.addView(ln);
- ln.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
- ln.setLayoutParams(margin);
-
- new VkAlertDialog.Builder(ctx)
- .setTitle(R.string.lastfm_enter_credentials)
- .setPositiveButton(R.string.lastfm_enter,
- (dialog, which) -> {
- String login = fn.getText().toString();
- String pass = ln.getText().toString();
- LastFMScrobbler.authenticate(login, pass);
- }
- )
- .setView(linearLayout)
- .show();
- }
-
- private void logout(Context ctx) {
- new VkAlertDialog.Builder(ctx)
- .setTitle(R.string.lastfm_logout_title)
- .setMessage(R.string.lastfm_logout_confirm)
- .setPositiveButton(R.string.vkim_yes,
- (dialog, which) -> LastFMScrobbler.logout())
- .setNeutralButton(R.string.vkim_no,
- (dialog, which) -> dialog.cancel())
- .show();
- }
-
- private void delcache(Context ctx) {
- new VkAlertDialog.Builder(ctx)
- .setTitle(R.string.warning)
- .setMessage(R.string.cached_tracks_remove_confirm)
- .setPositiveButton(R.string.yes,
- (dialog, which) -> executor.submit(MusicCacheImpl::clear))
- .setNeutralButton(R.string.no,
- (dialog, which) -> dialog.cancel())
- .show();
- }
-
- private void dlaudio(Context ctx) {
- if (LibVKXClient.isIntegrationEnabled()) {
- AndroidUtils.sendToast(AndroidUtils.getString("vkx_integration_enabled_info"));
- return;
- }
-
- new VkAlertDialog.Builder(ctx)
- .setTitle(R.string.download_method)
- .setMessage(R.string.download_method_desc)
- .setPositiveButton(R.string.download_method_cache, (dialog, which) -> {
- executor.submit(AudioDownloader::cacheAllAudios);
- })
- .setNegativeButton(R.string.download_method_mp3, (dialog, which) -> {
- executor.submit(AudioDownloader::downloadAllAudios);
- })
- .show();
- }
-
public void deleteVideoHistory() {
VTExecutors.getIoExecutor().execute(() -> {
var request = new Request.a()
@@ -280,4 +154,4 @@ public class MediaFragment extends TrackedMaterialPreferenceToolbarFragment {
public int T4() {
return R.string.vtlmedia;
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/MusicFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/MusicFragment.java
new file mode 100644
index 000000000..0cdb020fc
--- /dev/null
+++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/MusicFragment.java
@@ -0,0 +1,323 @@
+package ru.vtosters.lite.ui.fragments;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.view.ViewGroup;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import androidx.preference.Preference;
+import bruhcollective.itaysonlab.libvkx.client.LibVKXClient;
+import com.vk.core.dialogs.alert.VkAlertDialog;
+import com.vtosters.lite.ui.SummaryListPreference;
+import ru.vtosters.hooks.other.Preferences;
+import ru.vtosters.hooks.other.ThemesUtils;
+import ru.vtosters.lite.downloaders.AudioDownloader;
+import ru.vtosters.lite.music.LastFMScrobbler;
+import ru.vtosters.lite.music.cache.MusicCacheImpl;
+import ru.vtosters.lite.ui.PreferenceFragmentUtils;
+import ru.vtosters.lite.utils.AndroidUtils;
+import ru.vtosters.lite.utils.LifecycleUtils;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+public class MusicFragment extends TrackedMaterialPreferenceToolbarFragment {
+ private static final ExecutorService executor = Executors.newCachedThreadPool();
+
+ @Override
+ public void onCreate(Bundle bundle) {
+ super.onCreate(bundle);
+ addPreferencesFromResource(com.vtosters.lite.R.xml.empty);
+
+ requireActivity().getWindow().setStatusBarColor(ThemesUtils.getBackgroundContent());
+ requireActivity().getWindow().setNavigationBarColor(ThemesUtils.getBackgroundContent());
+
+ PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Офлайн прослушивание");
+
+ PreferenceFragmentUtils.addPreference(
+ getPreferenceScreen(),
+ "cached_tracks",
+ getString(com.vtosters.lite.R.string.cached_tracks_title),
+ String.format(requireContext().getString(com.vtosters.lite.R.string.cached_tracks_counter), MusicCacheImpl.getTracksCount()),
+ null,
+ preference -> {
+ if (MusicCacheImpl.isEmpty()) {
+ AndroidUtils.sendToast(requireContext().getString(com.vtosters.lite.R.string.no_cache_error));
+ } else {
+ delcache(requireContext());
+ }
+ return true;
+ }
+ );
+
+ PreferenceFragmentUtils.addPreference(
+ getPreferenceScreen(),
+ "audio_download",
+ getString(com.vtosters.lite.R.string.audio_download_title),
+ null,
+ null,
+ preference -> {
+ dlaudio(requireContext());
+ return true;
+ }
+ );
+
+ PreferenceFragmentUtils.addMaterialSwitchPreference(
+ getPreferenceScreen(),
+ "invertCachedTracks",
+ getString(com.vtosters.lite.R.string.invertcached_title),
+ getString(com.vtosters.lite.R.string.invertcached_summ),
+ null,
+ false,
+ (preference, o) -> {
+ Preferences.getPreferences().edit().putBoolean("invertCachedTracks", (boolean) o).apply();
+ return true;
+ }
+ ).setEnabled(!MusicCacheImpl.isEmpty());
+
+ PreferenceFragmentUtils.addMaterialSwitchPreference(
+ getPreferenceScreen(),
+ "autocache",
+ getString(com.vtosters.lite.R.string.autocache_title),
+ getString(com.vtosters.lite.R.string.autocache_summ),
+ null,
+ false,
+ (preference, o) -> {
+ Preferences.getPreferences().edit().putBoolean("autocache", (boolean) o).apply();
+ return true;
+ }
+ );
+
+ PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Скачивание аудио в MP3");
+
+ PreferenceFragmentUtils.addMaterialSwitchPreference(
+ getPreferenceScreen(),
+ "dldir",
+ "Альтернативная папка для скачивания",
+ "Использовать папку Downloads вместо Music для скачивания музыки в MP3",
+ null,
+ false,
+ (preference, o) -> {
+ Preferences.getPreferences().edit().putBoolean("dldir", (boolean) o).apply();
+ return true;
+ }
+ );
+
+ PreferenceFragmentUtils.addMaterialSwitchPreference(
+ getPreferenceScreen(),
+ "setMetaData",
+ "Сохранять метадату песен",
+ "Сохранять id3v2 теги для песен для MP3",
+ null,
+ true,
+ (preference, o) -> {
+ Preferences.getPreferences().edit().putBoolean("setMetaData", (boolean) o).apply();
+ return true;
+ }
+ );
+
+ if (!Preferences.serverFeaturesDisable()) {
+ PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Интеграция Genius");
+ PreferenceFragmentUtils.addMaterialSwitchPreference(
+ getPreferenceScreen(),
+ "useGenius",
+ getString(com.vtosters.lite.R.string.useGenius_title),
+ getString(com.vtosters.lite.R.string.useGenius_summ),
+ null,
+ false,
+ (preference, o) -> {
+ Preferences.getPreferences().edit().putBoolean("useGenius", (boolean) o).apply();
+ return true;
+ }
+ );
+
+ PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Интеграция Last.fm");
+
+ PreferenceFragmentUtils.addPreference(
+ getPreferenceScreen(),
+ "lastfm_auth",
+ getString(com.vtosters.lite.R.string.lastfm_auth_title),
+ getString(com.vtosters.lite.R.string.lastfm_auth_summ),
+ null,
+ preference -> {
+ if (LastFMScrobbler.isLoggedIn()) {
+ logout(getContext());
+ } else {
+ lastfmAuth(getContext());
+ }
+ return true;
+ }
+ );
+
+ PreferenceFragmentUtils.addMaterialSwitchPreference(
+ getPreferenceScreen(),
+ "lastfm_enabled",
+ AndroidUtils.getString("lastfm_enabled_title"),
+ AndroidUtils.getString("lastfm_enabled_summ"),
+ null,
+ false,
+ (preference, o) -> {
+ Preferences.getPreferences().edit().putBoolean("lastfm_enabled", (boolean) o).apply();
+ return true;
+ }
+ ).setEnabled(LastFMScrobbler.isLoggedIn());
+
+ if (LastFMScrobbler.isLoggedIn()) {
+ findPreference("lastfm_auth").setSummary(getString(com.vtosters.lite.R.string.lastfm_authorized_as) + " " + LastFMScrobbler.getUserName());
+ }
+
+ PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Интеграция VK X");
+
+ PreferenceFragmentUtils.addPreference(
+ getPreferenceScreen(),
+ "",
+ getString(com.vtosters.lite.R.string.vkx_why),
+ getString(com.vtosters.lite.R.string.vkx_why_summary),
+ null,
+ null
+ );
+
+ PreferenceFragmentUtils.addMaterialSwitchPreference(
+ getPreferenceScreen(),
+ "libvkx_integration",
+ getString(com.vtosters.lite.R.string.vkx_integration),
+ null,
+ null,
+ false,
+ (preference, o) -> {
+ Preferences.getPreferences().edit().putBoolean("libvkx_integration", (boolean) o).apply();
+ return true;
+ }
+ );
+
+ if (!LibVKXClient.isVkxInstalled()) {
+ findPreference("libvkx_integration").setSummary("У вас не установлен VKX. Интеграция работать не будет");
+ findPreference("libvkx_integration").setEnabled(false);
+ }
+ }
+
+ PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), "Прочее");
+
+ PreferenceFragmentUtils.addMaterialSwitchPreference(
+ getPreferenceScreen(),
+ "useOldAppVer",
+ getString(com.vtosters.lite.R.string.useOldAppVer_title),
+ "Включите если вас не устраивают новые рекомендации и вас интересует только свое аудио",
+ null,
+ false,
+ (preference, o) -> {
+ Preferences.getPreferences().edit().putBoolean("useOldAppVer", (boolean) o).apply();
+ LifecycleUtils.restartApplicationWithTimer();
+ return true;
+ }
+ );
+
+ SummaryListPreference list = new SummaryListPreference(getPreferenceScreen().getContext());
+ list.setTitle(com.vtosters.lite.R.string.musicdefcatalog_title);
+ list.setKey("musicdefcatalog");
+ list.setEntryValues(com.vtosters.lite.R.array.musicdefcatalog);
+ list.setEntries(com.vtosters.lite.R.array.musicdefcatalog_value);
+ list.setDialogTitle(com.vtosters.lite.R.string.musicdefcatalog_dialogTitle);
+ list.setDefaultValue("default");
+ list.setVisible(!Preferences.getBoolValue("useOldAppVer", false));
+
+ getPreferenceScreen().addPreference(list);
+ }
+
+ @Override
+ public boolean onPreferenceTreeClick(Preference preference) {
+ return super.onPreferenceTreeClick(preference);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ if (LastFMScrobbler.isLoggedIn() && !Preferences.serverFeaturesDisable()) {
+ findPreference("lastfm_auth").setSummary(getString(com.vtosters.lite.R.string.lastfm_authorized_as) + " " + LastFMScrobbler.getUserName());
+ findPreference("lastfm_enabled").setEnabled(true);
+ }
+ }
+
+
+ private void lastfmAuth(Context ctx) {
+ LinearLayout linearLayout = new LinearLayout(ctx);
+ linearLayout.setOrientation(LinearLayout.VERTICAL);
+
+ EditText fn = new EditText(ctx);
+ fn.setHint(com.vtosters.lite.R.string.lastfm_login);
+ fn.setTextColor(ThemesUtils.getTextAttr());
+ fn.setHintTextColor(ThemesUtils.getSTextAttr());
+ fn.setBackgroundTintList(ThemesUtils.getAccenedColorStateList());
+ linearLayout.addView(fn);
+ fn.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
+ ViewGroup.MarginLayoutParams margin = ((ViewGroup.MarginLayoutParams) fn.getLayoutParams());
+ margin.setMargins(AndroidUtils.dp2px(20f), 0, AndroidUtils.dp2px(20f), 0);
+ fn.setLayoutParams(margin);
+
+ EditText ln = new EditText(ctx);
+ ln.setHint(com.vtosters.lite.R.string.lastfm_password);
+ ln.setTextColor(ThemesUtils.getTextAttr());
+ ln.setHintTextColor(ThemesUtils.getSTextAttr());
+ ln.setBackgroundTintList(ThemesUtils.getAccenedColorStateList());
+ linearLayout.addView(ln);
+ ln.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
+ ln.setLayoutParams(margin);
+
+ new VkAlertDialog.Builder(ctx)
+ .setTitle(com.vtosters.lite.R.string.lastfm_enter_credentials)
+ .setPositiveButton(com.vtosters.lite.R.string.lastfm_enter,
+ (dialog, which) -> {
+ String login = fn.getText().toString();
+ String pass = ln.getText().toString();
+ LastFMScrobbler.authenticate(login, pass);
+ }
+ )
+ .setView(linearLayout)
+ .show();
+ }
+
+ private void logout(Context ctx) {
+ new VkAlertDialog.Builder(ctx)
+ .setTitle(com.vtosters.lite.R.string.lastfm_logout_title)
+ .setMessage(com.vtosters.lite.R.string.lastfm_logout_confirm)
+ .setPositiveButton(com.vtosters.lite.R.string.vkim_yes,
+ (dialog, which) -> LastFMScrobbler.logout())
+ .setNeutralButton(com.vtosters.lite.R.string.vkim_no,
+ (dialog, which) -> dialog.cancel())
+ .show();
+ }
+
+ private void delcache(Context ctx) {
+ new VkAlertDialog.Builder(ctx)
+ .setTitle(com.vtosters.lite.R.string.warning)
+ .setMessage(com.vtosters.lite.R.string.cached_tracks_remove_confirm)
+ .setPositiveButton(com.vtosters.lite.R.string.yes,
+ (dialog, which) -> executor.submit(MusicCacheImpl::clear))
+ .setNeutralButton(com.vtosters.lite.R.string.no,
+ (dialog, which) -> dialog.cancel())
+ .show();
+ }
+
+ private void dlaudio(Context ctx) {
+ if (LibVKXClient.isIntegrationEnabled()) {
+ AndroidUtils.sendToast(AndroidUtils.getString("vkx_integration_enabled_info"));
+ return;
+ }
+
+ new VkAlertDialog.Builder(ctx)
+ .setTitle(com.vtosters.lite.R.string.download_method)
+ .setMessage(com.vtosters.lite.R.string.download_method_desc)
+ .setPositiveButton(com.vtosters.lite.R.string.download_method_cache, (dialog, which) -> {
+ executor.submit(AudioDownloader::cacheAllAudios);
+ })
+ .setNegativeButton(com.vtosters.lite.R.string.download_method_mp3, (dialog, which) -> {
+ executor.submit(AudioDownloader::downloadAllAudios);
+ })
+ .show();
+ }
+
+ @Override
+ public int T4() {
+ return com.vtosters.lite.R.string.vtl_music_settings;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java
index 58a4fdd93..28008a3f1 100644
--- a/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java
+++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java
@@ -466,6 +466,18 @@ public class VTSettings extends TrackedMaterialPreferenceToolbarFragment {
}
);
+ PreferenceFragmentUtils.addPreference(
+ getPreferenceScreen(),
+ "",
+ requireContext().getString(R.string.music),
+ getValAsString(R.string.useGenius_title, Preferences.getBoolValue("useGenius", false)),
+ R.drawable.ic_music_outline_28,
+ preference -> {
+ NavigatorUtils.switchFragment(requireContext(), MusicFragment.class);
+ return false;
+ }
+ );
+
PreferenceFragmentUtils.addPreference(
getPreferenceScreen(),
"",
diff --git a/smali/res/xml/preferences_media.xml b/smali/res/xml/preferences_media.xml
index 738dcd4a3..9be0c62b0 100644
--- a/smali/res/xml/preferences_media.xml
+++ b/smali/res/xml/preferences_media.xml
@@ -14,62 +14,6 @@
android:key="compression"
android:title="@string/compression_types"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file