diff --git a/app/src/main/java/ru/vtosters/hooks/other/Preferences.java b/app/src/main/java/ru/vtosters/hooks/other/Preferences.java index 3b04c0556..3db2b420c 100644 --- a/app/src/main/java/ru/vtosters/hooks/other/Preferences.java +++ b/app/src/main/java/ru/vtosters/hooks/other/Preferences.java @@ -330,7 +330,7 @@ public class Preferences { } public static long getSizeForDelete() { - return switch (Preferences.getPreferences().getString("clearcache", "")) { + return switch (Preferences.getPreferences().getString("autoclearcache", "")) { case "100mb" -> 104857600L; case "500mb" -> 524288000L; case "1gb" -> 1073741824L; diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/DataSettingsFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/DataSettingsFragment.java index cd72eb5ac..78306f9bd 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/DataSettingsFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/DataSettingsFragment.java @@ -1,21 +1,37 @@ package ru.vtosters.lite.ui.fragments; +import android.annotation.SuppressLint; import android.app.Activity; +import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; +import android.util.TypedValue; import android.view.View; import android.view.WindowInsetsController; +import android.webkit.WebView; +import android.widget.RadioButton; +import android.widget.RadioGroup; import android.widget.Toast; +import androidx.appcompat.view.ContextThemeWrapper; +import b.h.g.m.FileUtils; import com.vk.core.dialogs.alert.VkAlertDialog; +import com.vk.im.engine.ImEngine1; +import com.vk.im.engine.ImEngineExt; +import com.vk.im.ui.providers.audiomsg.ImAudioMsgPlayerProvider; +import com.vk.im.ui.providers.audiomsg.PlayerActionSources; +import com.vk.imageloader.VKImageLoader; +import com.vk.media.player.cache.AutoPlayCacheHolder; +import com.vk.mediastore.MediaStorage; +import com.vk.stickers.Stickers; +import com.vtosters.lite.im.ImEngineProvider; +import ru.vtosters.hooks.SwitchHook; import ru.vtosters.hooks.other.Preferences; import ru.vtosters.hooks.other.ThemesUtils; import ru.vtosters.lite.ui.PreferenceFragmentUtils; import ru.vtosters.lite.ui.components.BackupManager; -import ru.vtosters.lite.utils.AccountManagerUtils; -import ru.vtosters.lite.utils.AndroidUtils; -import ru.vtosters.lite.utils.LifecycleUtils; -import ru.vtosters.lite.utils.VKAccountDB; +import ru.vtosters.lite.utils.*; import java.io.IOException; @@ -58,6 +74,108 @@ public class DataSettingsFragment extends TrackedMaterialPreferenceToolbarFragme } } + PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), AndroidUtils.getString("data")); + + PreferenceFragmentUtils.addPreference( + getPreferenceScreen(), + "currcache", + "Размер приложения", + "Вес кеша приложения: " + CacheUtils.humanReadableByteCountBin(IOUtils.getDirSize(AndroidUtils.getGlobalContext().getCacheDir())), + null, + preference -> { + new VkAlertDialog.Builder(requireContext()) + .setTitle("Очистить весь кеш?") + .setPositiveButton(requireContext().getString(com.vtosters.lite.R.string.yes), (dialogInterface, i) -> { + new WebView(requireContext()).clearCache(true); + VKImageLoader.e(); + ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a); + ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a); + FileUtils.l(); + AutoPlayCacheHolder.d.a(); + MediaStorage.a(); + updateCacheSize(); + }) + .setNegativeButton(requireContext().getString(com.vtosters.lite.R.string.cancel), (dialogInterface, i) -> dialogInterface.dismiss()) + .show(); + return false; + } + ); + + PreferenceFragmentUtils.addPreference( + getPreferenceScreen(), + "", + AndroidUtils.getString("clearcache_other_title"), + "", + null, + preference -> { + new VkAlertDialog.Builder(getContext()) + .setTitle(requireContext().getString(com.vtosters.lite.R.string.select_which_clean)) + .setItems(AndroidUtils.getArray(com.vtosters.lite.R.array.cache_cleaner), (dialog, which) -> { + switch (which) { + case 0 -> { + SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE); + prefs2.edit().clear().commit(); + new WebView(requireContext()).clearCache(true); + VKImageLoader.e(); + ImEngineProvider.b().a(); + ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a); + ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a); + FileUtils.l(); + Stickers.l.c(); + ImEngineExt.a(ImEngine1.a()); + AutoPlayCacheHolder.d.a(); + MediaStorage.a(); + } + case 1 -> { + SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE); + prefs2.edit().clear().commit(); + Stickers.l.c(); + } + case 2 -> { + VKImageLoader.e(); + ImEngineExt.a(ImEngine1.a()); + } + case 3 -> { + AutoPlayCacheHolder.d.a(); + MediaStorage.a(); + } + case 4 -> { + ImEngineProvider.b().a(); + ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a); + ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a); + } + case 5 -> new WebView(requireContext()).clearCache(true); + } + Toast.makeText(getContext(), requireContext().getString(com.vtosters.lite.R.string.cache_cleaned), Toast.LENGTH_SHORT).show(); + updateCacheSize(); + }) + .show(); + return false; + } + ); + + PreferenceFragmentUtils.addPreference( + getPreferenceScreen(), + "autoclearcache_btn", + AndroidUtils.getString("autoclearcache"), + "", + null, + preference -> { + cacheAutoCleanDialog(); + return false; + } + ); + + var pref = Preferences.getPreferences().getString("autoclearcache", "Default"); + switch (pref) { + case "Default" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_disabled)); + case "100mb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_100mb)); + case "500mb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_500mb)); + case "1gb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_1gb)); + case "2gb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_2gb)); + case "5gb" -> findPreference("autoclearcache_btn").setSummary(requireContext().getString(com.vtosters.lite.R.string.cache_5gb)); + } + PreferenceFragmentUtils.addPreferenceCategory(getPreferenceScreen(), AndroidUtils.getString("accounts")); PreferenceFragmentUtils.addPreference( @@ -177,4 +295,54 @@ public class DataSettingsFragment extends TrackedMaterialPreferenceToolbarFragme findPreference("analyticsDisabled").setVisible(Preferences.isValidSignature()); } + + private void updateCacheSize() { + findPreference("currcache").setSummary("Вес кеша приложения: " + CacheUtils.humanReadableByteCountBin(IOUtils.getDirSize(AndroidUtils.getGlobalContext().getCacheDir()))); + } + + @SuppressLint({"CommitPrefEdits", "SetTextI18n"}) + private void cacheAutoCleanDialog() { + String[] cacheText = {null, "100 MB", "500 MB", "1 GB", "2 GB", "5 GB"}; + + var val = Preferences.getPreferences().getInt("autoclearcache_size", 0); + RadioGroup rg = new RadioGroup(getContext()); + + rg.setPadding(AndroidUtils.dp2px(18f), AndroidUtils.dp2px(12f), AndroidUtils.dp2px(18f), 0); + + for (int item = 0; item <= 5; item++) { + RadioButton rb = new RadioButton(new ContextThemeWrapper(getContext(), com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton)); + SwitchHook.setCompoundButton(rb); + rg.addView(rb); + rb.setId(item); + rb.setTextSize(TypedValue.COMPLEX_UNIT_PX, AndroidUtils.dp2px(14f)); + + var text = cacheText[item]; + rb.setText(text != null ? text : AndroidUtils.getString("autoclearcachedisabled")); + + rb.setTextColor(ThemesUtils.getTextAttr()); + rb.setChecked(val == item); + } + + new VkAlertDialog.Builder(getContext()) + .setTitle(requireContext().getString(com.vtosters.lite.R.string.cache_clean_title)) + .setMessage(requireContext().getString(com.vtosters.lite.R.string.cache_select_size)) + .setCancelable(true) + .setNegativeButton(requireContext().getString(com.vtosters.lite.R.string.cancel), null) + .setView(rg) + .setPositiveButton(requireContext().getString(com.vtosters.lite.R.string.save), (dialog, which) -> { + var sizes = new String[]{"Default", "100mb", "500mb", "1gb", "2gb", "5gb"}; + var id = rg.getCheckedRadioButtonId(); + Preferences.getPreferences().edit() + .putInt("autoclearcache_size", id) + .putString("autoclearcache", sizes[id]) + .apply(); + }) + .show(); + } + + @Override + public void onResume() { + super.onResume(); + updateCacheSize(); + } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java index 921d8c7a8..327c8242f 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java @@ -111,11 +111,6 @@ public class OtherFragment extends TrackedMaterialPreferenceToolbarFragment { return true; }); - findPreference("clearcache").setOnPreferenceClickListener(preference -> { - cacheCleanDialog(); - return true; - }); - findPreference("copyownlink").setOnPreferenceClickListener(preference -> { copyText("https://vk.com/id" + AccountManagerUtils.getUserId()); ToastUtils.a(requireContext().getString(R.string.link_copied)); @@ -127,11 +122,6 @@ public class OtherFragment extends TrackedMaterialPreferenceToolbarFragment { return true; }); - findPreference("autoclearcache").setOnPreferenceClickListener(preference -> { - cacheAutoCleanDialog(); - return true; - }); - findPreference("datasettings").setOnPreferenceClickListener(preference -> { NavigatorUtils.switchFragment(requireContext(), DataSettingsFragment.class); return true; @@ -146,19 +136,6 @@ public class OtherFragment extends TrackedMaterialPreferenceToolbarFragment { return true; }); - var pref = Preferences.getPreferences().getString("autoclearcache", "Default"); - switch (pref) { - case "Default" -> - findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_disabled)); - case "100mb" -> - findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_100mb)); - case "500mb" -> - findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_500mb)); - case "1gb" -> findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_1gb)); - case "2gb" -> findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_2gb)); - case "5gb" -> findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_5gb)); - } - var vkAdminTokenPref = findPreference("vk_admin_token"); vkAdminTokenPref.setVisible(Preferences.getPreferences().getBoolean("new_music_downloading_way", false)); if (vkAdminTokenPref.isVisible()) { @@ -170,93 +147,7 @@ public class OtherFragment extends TrackedMaterialPreferenceToolbarFragment { } } - @SuppressLint({"CommitPrefEdits", "SetTextI18n"}) - private void cacheAutoCleanDialog() { - String[] cacheText = {null, "100 MB", "500 MB", "1 GB", "2 GB", "5 GB"}; - var val = Preferences.getPreferences().getInt("autoclearcache_size", 0); - RadioGroup rg = new RadioGroup(getContext()); - - rg.setPadding(AndroidUtils.dp2px(18f), AndroidUtils.dp2px(12f), AndroidUtils.dp2px(18f), 0); - - for (int item = 0; item <= 5; item++) { - RadioButton rb = new RadioButton(new ContextThemeWrapper(getContext(), com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton)); - SwitchHook.setCompoundButton(rb); - rg.addView(rb); - rb.setId(item); - rb.setTextSize(TypedValue.COMPLEX_UNIT_PX, AndroidUtils.dp2px(14f)); - - var text = cacheText[item]; - rb.setText(text != null ? text : AndroidUtils.getString("autoclearcachedisabled")); - - rb.setTextColor(ThemesUtils.getTextAttr()); - rb.setChecked(val == item); - } - - new VkAlertDialog.Builder(getContext()) - .setTitle(requireContext().getString(R.string.cache_clean_title)) - .setMessage(requireContext().getString(R.string.cache_select_size)) - .setCancelable(true) - .setNegativeButton(requireContext().getString(R.string.cancel), null) - .setView(rg) - .setPositiveButton(requireContext().getString(R.string.save), (dialog, which) -> { - var sizes = new String[]{"Default", "100mb", "500mb", "1gb", "2gb", "5gb"}; - var id = rg.getCheckedRadioButtonId(); - Preferences.getPreferences().edit() - .putInt("autoclearcache_size", id) - .putString("autoclearcache", sizes[id]) - .apply(); - }) - .show(); - } - - private void cacheCleanDialog() { - new VkAlertDialog.Builder(getContext()) - .setTitle(requireContext().getString(R.string.select_which_clean)) - .setItems(AndroidUtils.getArray(R.array.cache_cleaner), (dialog, which) -> { - switch (which) { - case 0 -> { - SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE); - prefs2.edit().clear().commit(); - clearWebViewCache(); - VKImageLoader.e(); - ImEngineProvider.b().a(); - ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a); - ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a); - FileUtils.l(); - Stickers.l.c(); - ImEngineExt.a(ImEngine1.a()); - AutoPlayCacheHolder.d.a(); - MediaStorage.a(); - } - case 1 -> { - SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE); - prefs2.edit().clear().commit(); - Stickers.l.c(); - } - case 2 -> { - VKImageLoader.e(); - ImEngineExt.a(ImEngine1.a()); - } - case 3 -> { - AutoPlayCacheHolder.d.a(); - MediaStorage.a(); - } - case 4 -> { - ImEngineProvider.b().a(); - ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a); - ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a); - } - case 5 -> clearWebViewCache(); - } - Toast.makeText(getContext(), requireContext().getString(R.string.cache_cleaned), Toast.LENGTH_SHORT).show(); - }) - .show(); - } - - private void clearWebViewCache() { - new WebView(requireContext()).clearCache(true); - } private void copyText(String src) { var manager = (ClipboardManager) requireContext().getSystemService(Context.CLIPBOARD_SERVICE); diff --git a/smali/res/xml/preferences_other.xml b/smali/res/xml/preferences_other.xml index a8a1b8d0c..e844dc223 100644 --- a/smali/res/xml/preferences_other.xml +++ b/smali/res/xml/preferences_other.xml @@ -4,12 +4,6 @@ - -