diff --git a/app/src/main/java/com/vk/sharing/view/TargetImageView.java b/app/src/main/java/com/vk/sharing/view/TargetImageView.java index 9daf7139f..7358ce917 100644 --- a/app/src/main/java/com/vk/sharing/view/TargetImageView.java +++ b/app/src/main/java/com/vk/sharing/view/TargetImageView.java @@ -1,7 +1,6 @@ package com.vk.sharing.view; import static b.h.z.f.roboto_medium; -import static ru.vtosters.lite.utils.Preferences.preferences; import static ru.vtosters.lite.utils.ThemesUtils.getAccentColor; import android.content.Context; @@ -32,6 +31,7 @@ import com.vk.imageloader.view.VKMultiImageView; import com.vk.navigation.NavigatorKeys; import com.vtosters.lite.R; import com.vtosters.lite.a0; +import ru.vtosters.lite.utils.Preferences; import java.util.Arrays; @@ -208,7 +208,7 @@ public class TargetImageView extends VKMultiImageView { @Override // android.view.View protected void onDraw(Canvas canvas) { Canvas canvas2 = this.f21631f; - int pref = preferences.getInt("pic_rounding", 0); + int pref = Preferences.getPreferences().getInt("pic_rounding", 0); if (canvas2 != null) { canvas2.drawColor(0, PorterDuff.Mode.CLEAR); diff --git a/app/src/main/java/ru/vtosters/lite/encryption/base/IMProcessor.java b/app/src/main/java/ru/vtosters/lite/encryption/base/IMProcessor.java index 2d96779c4..55f68d0b9 100644 --- a/app/src/main/java/ru/vtosters/lite/encryption/base/IMProcessor.java +++ b/app/src/main/java/ru/vtosters/lite/encryption/base/IMProcessor.java @@ -6,6 +6,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public abstract class IMProcessor { // By default it checks start and end tag. @@ -67,20 +68,20 @@ public abstract class IMProcessor { } public void enableEncryptFor(int id) { - AndroidUtils.getDefaultPrefs().edit().putBoolean("VT_IMEncode_" + getPrefKey() + "_" + id, true).apply(); + Preferences.getPreferences().edit().putBoolean("VT_IMEncode_" + getPrefKey() + "_" + id, true).apply(); } public void disableEncryptFor(int id) { - AndroidUtils.getDefaultPrefs().edit().putBoolean("VT_IMEncode_" + getPrefKey() + "_" + id, false).apply(); + Preferences.getPreferences().edit().putBoolean("VT_IMEncode_" + getPrefKey() + "_" + id, false).apply(); } public void setEncryptionKeyFor(int id, @Nullable String key) { if (key == null || key.isEmpty()) key = "VTAesDefault"; - AndroidUtils.getDefaultPrefs().edit().putString("VT_IMEncodeKey_" + getPrefKey() + "_" + id, key).apply(); + Preferences.getPreferences().edit().putString("VT_IMEncodeKey_" + getPrefKey() + "_" + id, key).apply(); } @Nullable public String getEncryptionKeyFor(int id) { - return AndroidUtils.getDefaultPrefs().getString("VT_IMEncodeKey_" + getPrefKey() + "_" + id, null); + return Preferences.getPreferences().getString("VT_IMEncodeKey_" + getPrefKey() + "_" + id, null); } } diff --git a/app/src/main/java/ru/vtosters/lite/encryption/processors/VTostersAESProcessor.java b/app/src/main/java/ru/vtosters/lite/encryption/processors/VTostersAESProcessor.java index 7f72be876..2d47494c1 100644 --- a/app/src/main/java/ru/vtosters/lite/encryption/processors/VTostersAESProcessor.java +++ b/app/src/main/java/ru/vtosters/lite/encryption/processors/VTostersAESProcessor.java @@ -18,6 +18,7 @@ import javax.crypto.spec.SecretKeySpec; import ru.vtosters.lite.encryption.base.IMProcessor; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public class VTostersAESProcessor extends IMProcessor { private final static String CIPHER_INSTANCE = "AES/CBC/PKCS7Padding"; @@ -114,7 +115,7 @@ public class VTostersAESProcessor extends IMProcessor { @Nullable @Override public String getEncryptionKeyFor(int id) { - return AndroidUtils.getDefaultPrefs().getString("VT_IMEncodeKey_" + getPrefKey() + "_" + id, "VTAesDefault"); + return Preferences.getPreferences().getString("VT_IMEncodeKey_" + getPrefKey() + "_" + id, "VTAesDefault"); } public static class Triple { diff --git a/app/src/main/java/ru/vtosters/lite/hooks/AdBlockHook.java b/app/src/main/java/ru/vtosters/lite/hooks/AdBlockHook.java index 00096abd7..f7f343c91 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/AdBlockHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/AdBlockHook.java @@ -22,6 +22,7 @@ import java.util.Collections; import ru.vtosters.lite.utils.AndroidUtils; import ru.vtosters.lite.utils.NewsFeedFiltersUtils; +import ru.vtosters.lite.utils.Preferences; public class AdBlockHook { public static Boolean discoverAdBlock(JSONObject jsonObject) { @@ -351,7 +352,7 @@ public class AdBlockHook { return true; } - var whitelist = AndroidUtils.getDefaultPrefs().getStringSet( + var whitelist = Preferences.getPreferences().getStringSet( "whitelisted_filters_groups", Collections.emptySet() ); @@ -366,7 +367,7 @@ public class AdBlockHook { id = String.valueOf(list.optInt("source_id")); } - var whitelist = AndroidUtils.getDefaultPrefs().getStringSet( + var whitelist = Preferences.getPreferences().getStringSet( "whitelisted_ad_groups", Collections.emptySet() ); @@ -377,7 +378,7 @@ public class AdBlockHook { public static Boolean isWhitelistedAdStories(JSONObject list) { var id = String.valueOf(list.optInt("owner_id")); - var whitelist = AndroidUtils.getDefaultPrefs().getStringSet( + var whitelist = Preferences.getPreferences().getStringSet( "whitelisted_stories_ad", Collections.emptySet() ); diff --git a/app/src/main/java/ru/vtosters/lite/hooks/DateHook.java b/app/src/main/java/ru/vtosters/lite/hooks/DateHook.java index edf3c405d..beff9cf6b 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/DateHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/DateHook.java @@ -1,6 +1,6 @@ package ru.vtosters.lite.hooks; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; +import static ru.vtosters.lite.utils.Preferences.getString; import static ru.vtosters.lite.utils.AndroidUtils.getStringDate; import android.annotation.SuppressLint; @@ -15,11 +15,11 @@ import ru.vtosters.lite.utils.AndroidUtils; public class DateHook { public static boolean fulltime() { - return getPrefsValue("dateformat").equals("noyear") || getPrefsValue("dateformat").equals("full") || getPrefsValue("dateformat").equals("noseconds"); + return getString("dateformat").equals("noyear") || getString("dateformat").equals("full") || getString("dateformat").equals("noseconds"); } public static String getDateFormat() { - return switch (getPrefsValue("dateformat")) { + return switch (getString("dateformat")) { case "noyear" -> AndroidUtils.getString(R.string.fulltime2); case "full" -> AndroidUtils.getString(R.string.fulltime); default -> AndroidUtils.getString(R.string.fulltime3); @@ -45,7 +45,7 @@ public class DateHook { } public static String getLocale() { - String string = getPrefsValue("lang_value"); + String string = getString("lang_value"); if (string.equals("system")) { return Locale.getDefault().getLanguage(); diff --git a/app/src/main/java/ru/vtosters/lite/hooks/FragAnimationHook.java b/app/src/main/java/ru/vtosters/lite/hooks/FragAnimationHook.java index 67e6dd8f4..c9b2f5f64 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/FragAnimationHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/FragAnimationHook.java @@ -1,7 +1,7 @@ package ru.vtosters.lite.hooks; import static ru.vtosters.lite.ui.components.FragAnimationKit.setAnimations; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; +import static ru.vtosters.lite.utils.Preferences.getString; import androidx.fragment.app.FragmentTransaction; @@ -9,7 +9,7 @@ public class FragAnimationHook { public static boolean animateOpen(FragmentTransaction transaction) { setAnimations(transaction); - return getPrefsValue("anim_rtrn_type").equals("noanim") || getPrefsValue("anim_rtrn_type").isEmpty(); + return getString("anim_rtrn_type").equals("noanim") || getString("anim_rtrn_type").isEmpty(); } public static void animateClose(FragmentTransaction transaction) { diff --git a/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java b/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java index 22a2b28f6..292a7f227 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java @@ -1,37 +1,22 @@ package ru.vtosters.lite.hooks; -import static ru.vtosters.lite.foaf.FoafBase.getBypassedOnlineInfo; -import static ru.vtosters.lite.hooks.OnlineFormatterHook.onlineHookProfiles; -import static ru.vtosters.lite.proxy.ProxyUtils.getStatic; -import static ru.vtosters.lite.utils.AndroidUtils.getDefaultPrefs; -import static ru.vtosters.lite.utils.Preferences.dev; -import static ru.vtosters.lite.utils.Preferences.friendsblock; -import static ru.vtosters.lite.utils.Preferences.getBoolValue; -import static ru.vtosters.lite.utils.Preferences.hasVerification; -import static ru.vtosters.lite.utils.VTVerifications.isDeveloper; -import static ru.vtosters.lite.utils.VTVerifications.isPrometheus; -import static ru.vtosters.lite.utils.VTVerifications.isVerified; - import android.text.TextUtils; import android.util.Log; - -import com.vk.core.util.LangUtils; -import com.vtosters.lite.R; - import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import ru.vtosters.lite.utils.AccountManagerUtils; +import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; import java.io.IOException; import java.text.ParseException; import java.util.LinkedHashSet; -import java.util.Objects; -import java.util.Random; -import okhttp3.OkHttpClient; -import ru.vtosters.lite.di.singleton.VtOkHttpClient; -import ru.vtosters.lite.utils.AccountManagerUtils; -import ru.vtosters.lite.utils.AndroidUtils; +import static ru.vtosters.lite.foaf.FoafBase.getBypassedOnlineInfo; +import static ru.vtosters.lite.hooks.OnlineFormatterHook.onlineHookProfiles; +import static ru.vtosters.lite.utils.Preferences.dev; +import static ru.vtosters.lite.utils.Preferences.friendsblock; public class JsonInjectors { public static JSONObject menu(JSONObject orig) throws JSONException { @@ -47,7 +32,7 @@ public class JsonInjectors { } public static JSONObject superapp(JSONObject json) throws JSONException { - var superApps = AndroidUtils.getPreferences().getString("superapp_items", + var superApps = Preferences.getPreferences().getString("superapp_items", "menu,miniapps,vkpay_slim,greeting,promo,holiday,weather,sport,games,informer,food,event,music,vk_run").split(","); if (superApps.length == 0) return json; @@ -154,8 +139,8 @@ public class JsonInjectors { } public static JSONArray newsfeedlist(JSONArray items) throws JSONException { - var selectedItems = getDefaultPrefs().getString("news_feed_selected_items", ""); - var filtersSet = getDefaultPrefs().getStringSet("news_feed_items_set", null); + var selectedItems = Preferences.getPreferences().getString("news_feed_selected_items", ""); + var filtersSet = Preferences.getPreferences().getStringSet("news_feed_items_set", null); var mutableFiltersSet = new LinkedHashSet(); if (filtersSet != null) mutableFiltersSet.addAll(filtersSet); @@ -182,7 +167,7 @@ public class JsonInjectors { .put("is_unavailable", hide); if (dev()) Log.d("NewsfeedListInj", "Unlocked " + id + " in newsfeed list"); } - getDefaultPrefs().edit().putStringSet("news_feed_items_set", mutableFiltersSet) + Preferences.getPreferences().edit().putStringSet("news_feed_items_set", mutableFiltersSet) .apply(); return items; diff --git a/app/src/main/java/ru/vtosters/lite/hooks/MainActivityInjector.java b/app/src/main/java/ru/vtosters/lite/hooks/MainActivityInjector.java index cfac353b6..76d3d1fe8 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/MainActivityInjector.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/MainActivityInjector.java @@ -18,8 +18,6 @@ import ru.vtosters.lite.utils.LifecycleUtils; import ru.vtosters.lite.utils.Preferences; import ru.vtosters.lite.utils.ThemesUtils; -import java.io.IOException; - import static ru.vtosters.lite.ui.dialogs.ServerDialog.sendRequest; import static ru.vtosters.lite.utils.CacheUtils.getInstance; import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.setupFilters; @@ -49,63 +47,33 @@ public class MainActivityInjector { // VKIDProtection.alert(activity); - if(Preferences.isNewBuild() && !ThemesUtils.isMonetTheme() && ThemesManager.hasTmpArchive()) { + if(Preferences.isNewBuild() && !ThemesUtils.isMonetTheme() && ThemesManager.canApplyCustomAccent()) { Preferences.updateBuildNumber(); - updateBinsAndTmpArchive(activity, false); + updateBinsAndTmpArchive(activity); } } - private static void updateBinsAndTmpArchive(Activity activity, boolean applyAccent) { + private static void updateBinsAndTmpArchive(Activity activity) { final VKProgressDialog dialog = new VKProgressDialog(activity); - String msg; - Runnable task; - if(ThemesManager.hasBins() && !applyAccent) { - msg = "Инвалидация кэша"; - task = () -> { - try { - ThemesManager.deleteBins(); - ThemesManager.generateBins(); - activity.runOnUiThread(() -> { - dialog.cancel(); - updateBinsAndTmpArchive(activity, true); - }); - } catch(IOException e) { - e.printStackTrace(); - activity.runOnUiThread(() -> { - dialog.cancel(); - showErrorDialog(activity, "Ошибка при инвалидации кэша"); - }); - } - }; - } else { - msg = "Применение акцента"; - task = () -> { - try { - if(ThemesManager.hasTmpArchive()) ThemesManager.deleteTmpArchive(); - ThemesManager.generateTempResArchive(ThemesUtils.getReservedAccent()); - activity.runOnUiThread(LifecycleUtils::restartApplication); - } catch(IOException e) { - e.printStackTrace(); - activity.runOnUiThread(() -> { - dialog.cancel(); - showErrorDialog(activity, "Ошибка при применении акцента"); - }); - } - }; - } - - dialog.setMessage(msg); + dialog.setMessage("Применение акцента"); dialog.show(); - VTExecutors.getIoExecutor().execute(task); - } - - static void showErrorDialog(Activity activity, String msg) { - new VkAlertDialog.Builder(activity) - .setTitle("Ошикба") - .setMessage(msg) - .setPositiveButton(R.string.ok, null) - .show(); + VTExecutors.getIoExecutor().execute(() -> { + try { + ThemesManager.generateModApk(ThemesUtils.getReservedAccent()); + activity.runOnUiThread(LifecycleUtils::restartApplication); + } catch(Throwable e) { + e.printStackTrace(); + activity.runOnUiThread(() -> { + dialog.cancel(); + new VkAlertDialog.Builder(activity) + .setTitle("Ошикба") + .setMessage("Ошибка при применении акцента:\n" + e) + .setPositiveButton(R.string.ok, null) + .show(); + }); + } + }); } } diff --git a/app/src/main/java/ru/vtosters/lite/hooks/NewsfeedHook.java b/app/src/main/java/ru/vtosters/lite/hooks/NewsfeedHook.java index d0fac6988..3dbbaefbc 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/NewsfeedHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/NewsfeedHook.java @@ -1,9 +1,8 @@ package ru.vtosters.lite.hooks; import static java.lang.Long.MAX_VALUE; -import static ru.vtosters.lite.utils.AndroidUtils.getDefaultPrefs; import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; +import static ru.vtosters.lite.utils.Preferences.getString; import static ru.vtosters.lite.utils.Preferences.ads; import static ru.vtosters.lite.utils.Preferences.authorsrecomm; import static ru.vtosters.lite.utils.Preferences.friendsrecomm; @@ -23,13 +22,14 @@ import java.util.LinkedHashSet; import java.util.List; import ru.vtosters.lite.utils.AccountManagerUtils; +import ru.vtosters.lite.utils.Preferences; public class NewsfeedHook { public static long getUpdateNewsfeed(boolean refresh_timeout) { if (vkme()) { return MAX_VALUE; } - return switch (getPrefsValue("newsupdate")) { + return switch (getString("newsupdate")) { case "no_update" -> MAX_VALUE; case "imd_update" -> 10000L; default -> @@ -67,20 +67,20 @@ public class NewsfeedHook { } public static boolean isWhitelistedFilter(ExtendedCommunityProfile eup) { - return getDefaultPrefs().getStringSet( + return Preferences.getPreferences().getStringSet( "whitelisted_filters_groups", Collections.emptySet() ).contains(String.valueOf(AccountManagerUtils.getUserID(eup))); } public static boolean isWhitelistedAd(ExtendedCommunityProfile eup) { - return getDefaultPrefs().getStringSet( + return Preferences.getPreferences().getStringSet( "whitelisted_ad_groups", Collections.emptySet() ).contains(String.valueOf(AccountManagerUtils.getUserID(eup))); } public static boolean isWhitelistedAdStories(ExtendedCommunityProfile eup) { - return getDefaultPrefs().getStringSet( + return Preferences.getPreferences().getStringSet( "whitelisted_stories_ad", Collections.emptySet() ).contains(String.valueOf(AccountManagerUtils.getUserID(eup))); @@ -89,7 +89,7 @@ public class NewsfeedHook { public static void setWhitelistedFilter(ExtendedCommunityProfile eup, boolean needWhitelist) { var id = String.valueOf(AccountManagerUtils.getUserID(eup)); - var mutableAdsSet = new LinkedHashSet<>(getDefaultPrefs().getStringSet( + var mutableAdsSet = new LinkedHashSet<>(Preferences.getPreferences().getStringSet( "whitelisted_filters_groups", Collections.emptySet()) ); @@ -99,13 +99,13 @@ public class NewsfeedHook { mutableAdsSet.remove(id); } - getDefaultPrefs().edit().putStringSet("whitelisted_filters_groups", mutableAdsSet).apply(); + Preferences.getPreferences().edit().putStringSet("whitelisted_filters_groups", mutableAdsSet).apply(); } public static void setWhitelistedAd(ExtendedCommunityProfile eup, boolean needWhitelist) { var id = String.valueOf(AccountManagerUtils.getUserID(eup)); - var mutableAdsSet = new LinkedHashSet<>(getDefaultPrefs().getStringSet( + var mutableAdsSet = new LinkedHashSet<>(Preferences.getPreferences().getStringSet( "whitelisted_ad_groups", Collections.emptySet())); @@ -115,13 +115,13 @@ public class NewsfeedHook { mutableAdsSet.remove(id); } - getDefaultPrefs().edit().putStringSet("whitelisted_ad_groups", mutableAdsSet).apply(); + Preferences.getPreferences().edit().putStringSet("whitelisted_ad_groups", mutableAdsSet).apply(); } public static void setWhitelistedAdStories(ExtendedCommunityProfile eup, boolean needWhitelist) { var id = String.valueOf(AccountManagerUtils.getUserID(eup)); - var mutableAdsSet = new LinkedHashSet<>(getDefaultPrefs().getStringSet( + var mutableAdsSet = new LinkedHashSet<>(Preferences.getPreferences().getStringSet( "whitelisted_stories_ad", Collections.emptySet())); @@ -131,7 +131,7 @@ public class NewsfeedHook { mutableAdsSet.remove(id); } - getDefaultPrefs().edit().putStringSet("whitelisted_stories_ad", mutableAdsSet).apply(); + Preferences.getPreferences().edit().putStringSet("whitelisted_stories_ad", mutableAdsSet).apply(); } public static void adsParams(HashSet hashSet) { diff --git a/app/src/main/java/ru/vtosters/lite/hooks/PhotoViewer.java b/app/src/main/java/ru/vtosters/lite/hooks/PhotoViewer.java index 653f9b112..fd1614fa8 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/PhotoViewer.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/PhotoViewer.java @@ -1,6 +1,5 @@ package ru.vtosters.lite.hooks; -import static ru.vtosters.lite.utils.AndroidUtils.getPreferences; import android.annotation.SuppressLint; import android.content.ClipData; @@ -12,9 +11,7 @@ import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.Toast; - import androidx.annotation.Nullable; - import com.vk.core.dialogs.actionspopup.ActionsPopup; import com.vk.core.dialogs.alert.VkAlertDialog; import com.vk.core.ui.themes.VKThemeHelper; @@ -25,23 +22,18 @@ import com.vk.dto.common.ImageSize; import com.vtosters.lite.R; import com.vtosters.lite.attachments.DocumentAttachment; import com.vtosters.lite.attachments.PhotoAttachment; - +import okhttp3.*; import org.json.JSONException; import org.json.JSONObject; +import ru.vtosters.lite.di.singleton.VtOkHttpClient; +import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.LifecycleUtils; +import ru.vtosters.lite.utils.Preferences; import java.io.IOException; import java.net.URLEncoder; import java.util.List; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import ru.vtosters.lite.di.singleton.VtOkHttpClient; -import ru.vtosters.lite.utils.AndroidUtils; -import ru.vtosters.lite.utils.LifecycleUtils; - public class PhotoViewer { static OkHttpClient client = VtOkHttpClient.getInstance(); @@ -203,7 +195,7 @@ public class PhotoViewer { } private static int selectedEngine() { - return getPreferences().getInt("search_engine", 0); + return Preferences.getPreferences().getInt("search_engine", 0); } private static void searchPhoto(int i, String url) { diff --git a/app/src/main/java/ru/vtosters/lite/hooks/PicRoundingHook.java b/app/src/main/java/ru/vtosters/lite/hooks/PicRoundingHook.java index f4b3874ed..e1a36c8b0 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/PicRoundingHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/PicRoundingHook.java @@ -1,20 +1,12 @@ package ru.vtosters.lite.hooks; -import static ru.vtosters.lite.utils.Preferences.preferences; - -import android.graphics.Bitmap; -import android.graphics.BitmapShader; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.RectF; -import android.graphics.Shader; - +import android.graphics.*; import com.facebook.drawee.generic.RoundingParams; - import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public class PicRoundingHook { - private static final int pref = preferences.getInt("pic_rounding", 0); + private static final int pref = Preferences.getPreferences().getInt("pic_rounding", 0); public static RoundingParams inject() { if (pref > 0) { diff --git a/app/src/main/java/ru/vtosters/lite/hooks/ProxyHook.java b/app/src/main/java/ru/vtosters/lite/hooks/ProxyHook.java index 40aff781a..7584c10a6 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/ProxyHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/ProxyHook.java @@ -1,30 +1,23 @@ package ru.vtosters.lite.hooks; -import static ru.vtosters.lite.proxy.ProxyUtils.isRandomProxyEnabled; -import static ru.vtosters.lite.proxy.ProxyUtils.isVikaProxyEnabled; -import static ru.vtosters.lite.proxy.ProxyUtils.isZaboronaEnabled; -import static ru.vtosters.lite.utils.AndroidUtils.dp2px; -import static ru.vtosters.lite.utils.AndroidUtils.edit; -import static ru.vtosters.lite.utils.LifecycleUtils.restartApplication; -import static ru.vtosters.lite.utils.ThemesUtils.getTextAttr; - import android.annotation.SuppressLint; import android.content.Context; -import android.content.Intent; import android.util.TypedValue; import android.view.View; import android.widget.RadioButton; import android.widget.RadioGroup; - import androidx.appcompat.view.ContextThemeWrapper; - import com.vk.auth.ui.VkAuthTextView; import com.vk.core.dialogs.alert.VkAlertDialog; -import com.vk.navigation.Navigator; import com.vtosters.lite.R; - import ru.vtosters.lite.ui.fragments.ProxySettingsFragment; import ru.vtosters.lite.utils.NavigatorUtils; +import ru.vtosters.lite.utils.Preferences; + +import static ru.vtosters.lite.proxy.ProxyUtils.*; +import static ru.vtosters.lite.utils.AndroidUtils.dp2px; +import static ru.vtosters.lite.utils.LifecycleUtils.restartApplication; +import static ru.vtosters.lite.utils.ThemesUtils.getTextAttr; public class ProxyHook { public static void hookAuth(View v) { @@ -77,16 +70,16 @@ public class ProxyHook { .setView(rg) .setPositiveButton(ctx.getString(R.string.vtl_confirm), ((dialog, which) -> { // Применить if (rgZaborona.isChecked()) { - edit().putString("proxy", "zaborona").commit(); + Preferences.getPreferences().edit().putString("proxy", "zaborona").commit(); restartApplication(); } else if (rgRandomProxy.isChecked()) { - edit().putString("proxy", "randomproxy").commit(); + Preferences.getPreferences().edit().putString("proxy", "randomproxy").commit(); restartApplication(); } else if (rgVika.isChecked()) { - edit().putString("proxy", "vika").commit(); + Preferences.getPreferences().edit().putString("proxy", "vika").commit(); restartApplication(); } else { - edit().putString("proxy", "noproxy").commit(); + Preferences.getPreferences().edit().putString("proxy", "noproxy").commit(); restartApplication(); } })) diff --git a/app/src/main/java/ru/vtosters/lite/hooks/StartFragmentHook.java b/app/src/main/java/ru/vtosters/lite/hooks/StartFragmentHook.java index 19aed89c9..d6b8cf7db 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/StartFragmentHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/StartFragmentHook.java @@ -1,7 +1,7 @@ package ru.vtosters.lite.hooks; import static ru.vtosters.lite.ui.components.DockBarEditorManager.getInstance; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; +import static ru.vtosters.lite.utils.Preferences.getString; import static ru.vtosters.lite.utils.Preferences.milkshake; import static ru.vtosters.lite.utils.Preferences.superapp; import static ru.vtosters.lite.utils.Preferences.useNewSettings; @@ -35,7 +35,7 @@ public class StartFragmentHook { if (vkme()) { return DialogsFragment.class; } - return switch (getPrefsValue("start_values")) { + return switch (getString("start_values")) { case "newsfeed" -> milkshake() ? HomeFragment.class : NewsfeedFragment.class; case "messenger" -> DialogsFragment.class; case "groups" -> milkshake() ? CommunitiesCatalogFragment.class : GroupsFragment1.class; diff --git a/app/src/main/java/ru/vtosters/lite/hooks/VKUIHook.java b/app/src/main/java/ru/vtosters/lite/hooks/VKUIHook.java index 7c1c3b6b4..348fad1b3 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/VKUIHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/VKUIHook.java @@ -1,20 +1,6 @@ package ru.vtosters.lite.hooks; -import static android.util.Base64.encodeToString; -import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; -import static ru.vtosters.lite.utils.Preferences.getBoolValue; -import static ru.vtosters.lite.utils.ThemesUtils.getAccentColor; -import static ru.vtosters.lite.utils.ThemesUtils.getBackgroundContent; -import static ru.vtosters.lite.utils.ThemesUtils.getBackgroundPage; -import static ru.vtosters.lite.utils.ThemesUtils.getColorFromAttr; -import static ru.vtosters.lite.utils.ThemesUtils.getHeaderBackground; -import static ru.vtosters.lite.utils.ThemesUtils.getHeaderText; -import static ru.vtosters.lite.utils.ThemesUtils.getTextAttr; -import static ru.vtosters.lite.utils.ThemesUtils.hex; - import android.webkit.WebView; - import com.vk.articles.preload.WebCachePreloader; import com.vtosters.lite.R; import com.vtosters.lite.data.ThemeTracker; @@ -27,6 +13,11 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; +import static android.util.Base64.encodeToString; +import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; +import static ru.vtosters.lite.utils.Preferences.getBoolValue; +import static ru.vtosters.lite.utils.ThemesUtils.*; + public class VKUIHook { public static boolean isLoaded = false; private static String loadedCSS = ""; diff --git a/app/src/main/java/ru/vtosters/lite/music/LastFMScrobbler.java b/app/src/main/java/ru/vtosters/lite/music/LastFMScrobbler.java index 70fe7e201..bf5313fe2 100644 --- a/app/src/main/java/ru/vtosters/lite/music/LastFMScrobbler.java +++ b/app/src/main/java/ru/vtosters/lite/music/LastFMScrobbler.java @@ -180,7 +180,7 @@ public class LastFMScrobbler { var name = session.getString("name"); var key = session.getString("key"); - AndroidUtils.edit() + Preferences.getPreferences().edit() .putString("username", name) .putString("sessionKey", key) .putBoolean("lastfm_enabled", true) @@ -190,7 +190,7 @@ public class LastFMScrobbler { } public static void logout() { - AndroidUtils.edit() + Preferences.getPreferences().edit() .remove("username") .remove("sessionKey") .putBoolean("lastfm_enabled", false) @@ -208,14 +208,14 @@ public class LastFMScrobbler { } public static boolean isScrobblingEnabled() { - return AndroidUtils.getPreferences().getBoolean("lastfm_enabled", false); + return Preferences.getPreferences().getBoolean("lastfm_enabled", false); } public static String getUserName() { - return AndroidUtils.getDefaultPrefs().getString("username", null); + return Preferences.getPreferences().getString("username", null); } private static String getSessionKey() { - return AndroidUtils.getDefaultPrefs().getString("sessionKey", null); + return Preferences.getPreferences().getString("sessionKey", null); } } diff --git a/app/src/main/java/ru/vtosters/lite/music/catalog/inject/CatalogJsonInjector.java b/app/src/main/java/ru/vtosters/lite/music/catalog/inject/CatalogJsonInjector.java index d769cc972..7b8365bff 100644 --- a/app/src/main/java/ru/vtosters/lite/music/catalog/inject/CatalogJsonInjector.java +++ b/app/src/main/java/ru/vtosters/lite/music/catalog/inject/CatalogJsonInjector.java @@ -14,6 +14,7 @@ import ru.vtosters.lite.di.singleton.VtOkHttpClient; import ru.vtosters.lite.music.cache.CacheDatabaseDelegate; import ru.vtosters.lite.utils.AccountManagerUtils; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; import java.io.IOException; @@ -93,7 +94,7 @@ public class CatalogJsonInjector { var title = item.optString("title"); var id = item.optString("id"); var url = item.optString("url"); - var value = AndroidUtils.getPrefsValue("musicdefcatalog"); + var value = Preferences.getString("musicdefcatalog"); Log.d("VKMusic", "title: " + title + " id: " + id + " url: " + url + " value: " + value); diff --git a/app/src/main/java/ru/vtosters/lite/proxy/ProxyUtils.java b/app/src/main/java/ru/vtosters/lite/proxy/ProxyUtils.java index 9e178d784..e0333d31f 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/ProxyUtils.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/ProxyUtils.java @@ -5,7 +5,7 @@ import static ru.vtosters.lite.proxy.api.VikaMobile.getApiHost; import static ru.vtosters.lite.proxy.api.VikaMobile.getOauthHost; import static ru.vtosters.lite.proxy.api.VikaMobile.getStaticHost; import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; + import android.annotation.SuppressLint; import android.content.Context; @@ -21,10 +21,11 @@ import ru.vtosters.lite.proxy.http.CustomHttp; import ru.vtosters.lite.proxy.https.CustomHttps; import ru.vtosters.lite.proxy.socks.CustomSocks; import ru.vtosters.lite.proxy.socks.Zaborona; +import ru.vtosters.lite.utils.Preferences; public class ProxyUtils { public static String getApi() { - var proxyapi = getPrefsValue("proxyapi"); + var proxyapi = Preferences.getString("proxyapi"); if (isVikaProxyEnabled()) { proxyapi = getApiHost(); @@ -38,7 +39,7 @@ public class ProxyUtils { } public static String getOauth() { - var oauth = getPrefsValue("proxyoauth"); + var oauth = Preferences.getString("proxyoauth"); if (isVikaProxyEnabled()) { oauth = getOauthHost(); @@ -52,7 +53,7 @@ public class ProxyUtils { } public static String getStatic() { - var staticapi = getPrefsValue("proxystatic"); + var staticapi = Preferences.getString("proxystatic"); if (isVikaProxyEnabled()) { staticapi = getStaticHost(); @@ -70,19 +71,19 @@ public class ProxyUtils { } public static Boolean isZaboronaEnabled() { - return getPrefsValue("proxy").equals("zaborona"); + return Preferences.getString("proxy").equals("zaborona"); } public static Boolean isRandomProxyEnabled() { - return getPrefsValue("proxy").equals("randomproxy"); + return Preferences.getString("proxy").equals("randomproxy"); } public static Boolean isApiProxyEnabled() { - return getPrefsValue("proxy").equals("apiproxy"); + return Preferences.getString("proxy").equals("apiproxy"); } public static Boolean isVikaProxyEnabled() { - return getPrefsValue("proxy").equals("vika"); + return Preferences.getString("proxy").equals("vika"); } public static void forceProxyApplying() { @@ -134,7 +135,7 @@ public class ProxyUtils { public static void setProxy() throws IOException { if (!isAnyProxyEnabled()) return; - switch (getPrefsValue("proxy")) { + switch (Preferences.getString("proxy")) { case "zaborona" -> Zaborona.loadProxy(); case "randomproxy" -> RandomProxy.loadProxy(); case "socks" -> CustomSocks.loadProxy(); diff --git a/app/src/main/java/ru/vtosters/lite/proxy/RandomProxy.java b/app/src/main/java/ru/vtosters/lite/proxy/RandomProxy.java index 1ae0c613f..6e85036bf 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/RandomProxy.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/RandomProxy.java @@ -1,20 +1,18 @@ package ru.vtosters.lite.proxy; -import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying; -import static ru.vtosters.lite.proxy.ProxyUtils.resetProxy; -import static ru.vtosters.lite.utils.AndroidUtils.edit; -import static ru.vtosters.lite.utils.Preferences.preferences; - -import java.io.IOException; - import ru.vtosters.lite.proxy.socks.Hookzof; import ru.vtosters.lite.proxy.socks.Jetkai; import ru.vtosters.lite.proxy.socks.Roosterkid; import ru.vtosters.lite.proxy.socks.TheSpeedX; +import ru.vtosters.lite.utils.Preferences; + +import java.io.IOException; + +import static ru.vtosters.lite.proxy.ProxyUtils.resetProxy; public class RandomProxy { - public static String type = preferences.getString("random_type", "none"); - public static String host = preferences.getString("random_host", ""); + public static String type = Preferences.getPreferences().getString("random_type", "none"); + public static String host = Preferences.getPreferences().getString("random_host", ""); public static boolean showProxyResult = false; public static void loadProxy() throws IOException { @@ -40,13 +38,13 @@ public class RandomProxy { } public static void setupNewProxy() throws IOException { - edit().putString("random_type", "none").putString("random_host", "").commit(); + Preferences.getPreferences().edit().putString("random_type", "none").putString("random_host", "").commit(); resetProxy(); showProxyResult = true; getProxy(); - edit().putString("proxy", "randomproxy").commit(); + Preferences.getPreferences().edit().putString("proxy", "randomproxy").commit(); } public static boolean getProxy() throws IOException { diff --git a/app/src/main/java/ru/vtosters/lite/proxy/api/ApiProxy.java b/app/src/main/java/ru/vtosters/lite/proxy/api/ApiProxy.java index 60b8da1e9..425acd715 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/api/ApiProxy.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/api/ApiProxy.java @@ -2,7 +2,7 @@ package ru.vtosters.lite.proxy.api; import static ru.vtosters.lite.proxy.ProxyUtils.isAnyProxyEnabled; import static ru.vtosters.lite.proxy.ProxyUtils.isVikaProxyEnabled; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; +import static ru.vtosters.lite.utils.Preferences.getString; import android.util.Log; @@ -12,9 +12,9 @@ public class ApiProxy { var oauth = "oauth.vk.com"; var vkstatic = "static.vk.com"; - var proxyapi = getPrefsValue("proxyapi"); - var proxyoauth = getPrefsValue("proxyoauth"); - var proxystatic = getPrefsValue("proxystatic"); + var proxyapi = getString("proxyapi"); + var proxyoauth = getString("proxyoauth"); + var proxystatic = getString("proxystatic"); if (isVikaProxyEnabled()) { proxyapi = VikaMobile.getApiHost(); @@ -47,7 +47,7 @@ public class ApiProxy { } public static String staticFix(String str) { - var string = getPrefsValue("proxystatic"); + var string = getString("proxystatic"); if (isVikaProxyEnabled()) { string = VikaMobile.getStaticHost(); @@ -61,7 +61,7 @@ public class ApiProxy { } public static String getAwayPhpCom() { - var proxyapi = getPrefsValue("proxyapi"); + var proxyapi = getString("proxyapi"); if (isVikaProxyEnabled()) { proxyapi = VikaMobile.getApiHost(); diff --git a/app/src/main/java/ru/vtosters/lite/proxy/http/CustomHttp.java b/app/src/main/java/ru/vtosters/lite/proxy/http/CustomHttp.java index bc4dc265f..33dfe6b29 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/http/CustomHttp.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/http/CustomHttp.java @@ -1,7 +1,7 @@ package ru.vtosters.lite.proxy.http; import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; +import static ru.vtosters.lite.utils.Preferences.getString; public class CustomHttp { public static void loadProxy() { @@ -13,22 +13,22 @@ public class CustomHttp { } private static String proxyHostHTTP() { - var string = getPrefsValue("proxyHostHTTP"); + var string = getString("proxyHostHTTP"); return string.isEmpty() ? "192.168.0.1" : string; } private static String proxyPortHTTP() { - var string = getPrefsValue("proxyPortHTTP"); + var string = getString("proxyPortHTTP"); return string.isEmpty() ? "8888" : string; } private static String proxyUserHTTP() { - var string = getPrefsValue("proxyUserHTTP"); + var string = getString("proxyUserHTTP"); return string.isEmpty() ? "" : string; } private static String proxyPassHTTP() { - var string = getPrefsValue("proxyPassHTTP"); + var string = getString("proxyPassHTTP"); return string.isEmpty() ? "" : string; } } diff --git a/app/src/main/java/ru/vtosters/lite/proxy/http/Jetkai.java b/app/src/main/java/ru/vtosters/lite/proxy/http/Jetkai.java index 6ff0a39b3..73b088758 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/http/Jetkai.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/http/Jetkai.java @@ -3,7 +3,6 @@ package ru.vtosters.lite.proxy.http; import static ru.vtosters.lite.proxy.GithubList.getProxy; import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying; import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy; -import static ru.vtosters.lite.utils.AndroidUtils.edit; import android.util.Log; @@ -14,6 +13,7 @@ import java.util.ArrayList; import ru.vtosters.lite.proxy.RandomProxy; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public class Jetkai { private static final String TAG = "Jetkai_Http"; @@ -41,7 +41,7 @@ public class Jetkai { RandomProxy.showProxyResult = false; } - edit().putString("random_type", "http").putString("random_host", proxy).commit(); + Preferences.getPreferences().edit().putString("random_type", "http").putString("random_host", proxy).commit(); System.setProperty("http.proxyHost", proxy.split(":")[0]); System.setProperty("http.proxyPort", proxy.split(":")[1]); diff --git a/app/src/main/java/ru/vtosters/lite/proxy/http/TheSpeedX.java b/app/src/main/java/ru/vtosters/lite/proxy/http/TheSpeedX.java index 29f2e6657..4c662602f 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/http/TheSpeedX.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/http/TheSpeedX.java @@ -3,7 +3,6 @@ package ru.vtosters.lite.proxy.http; import static ru.vtosters.lite.proxy.GithubList.getProxy; import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying; import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy; -import static ru.vtosters.lite.utils.AndroidUtils.edit; import android.util.Log; @@ -14,6 +13,7 @@ import java.util.ArrayList; import ru.vtosters.lite.proxy.RandomProxy; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public class TheSpeedX { private static final String TAG = "TheSpeedX_Http"; @@ -40,7 +40,7 @@ public class TheSpeedX { RandomProxy.showProxyResult = false; } - edit().putString("random_type", "http").putString("random_host", proxy).commit(); + Preferences.getPreferences().edit().putString("random_type", "http").putString("random_host", proxy).commit(); System.setProperty("http.proxyHost", proxy.split(":")[0]); System.setProperty("http.proxyPort", proxy.split(":")[1]); diff --git a/app/src/main/java/ru/vtosters/lite/proxy/https/CustomHttps.java b/app/src/main/java/ru/vtosters/lite/proxy/https/CustomHttps.java index bcb1cb96d..5a6af8c21 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/https/CustomHttps.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/https/CustomHttps.java @@ -1,7 +1,7 @@ package ru.vtosters.lite.proxy.https; import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; +import static ru.vtosters.lite.utils.Preferences.getString; public class CustomHttps { public static void loadProxy() { @@ -13,22 +13,22 @@ public class CustomHttps { } private static String proxyHostHTTPS() { - var string = getPrefsValue("proxyHostHTTPS"); + var string = getString("proxyHostHTTPS"); return string.isEmpty() ? "192.168.0.1" : string; } private static String proxyPortHTTPS() { - var string = getPrefsValue("proxyPortHTTPS"); + var string = getString("proxyPortHTTPS"); return string.isEmpty() ? "8888" : string; } private static String proxyUserHTTPS() { - var string = getPrefsValue("proxyUserHTTPS"); + var string = getString("proxyUserHTTPS"); return string.isEmpty() ? "" : string; } private static String proxyPassHTTPS() { - String string = getPrefsValue("proxyPassHTTPS"); + String string = getString("proxyPassHTTPS"); return string.isEmpty() ? "" : string; } } diff --git a/app/src/main/java/ru/vtosters/lite/proxy/https/Jetkai.java b/app/src/main/java/ru/vtosters/lite/proxy/https/Jetkai.java index 79e2c737a..a9260d8f4 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/https/Jetkai.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/https/Jetkai.java @@ -3,7 +3,6 @@ package ru.vtosters.lite.proxy.https; import static ru.vtosters.lite.proxy.GithubList.getProxy; import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying; import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy; -import static ru.vtosters.lite.utils.AndroidUtils.edit; import android.util.Log; @@ -14,6 +13,7 @@ import java.util.ArrayList; import ru.vtosters.lite.proxy.RandomProxy; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public class Jetkai { private static final String TAG = "Jetkai_Https"; @@ -40,7 +40,7 @@ public class Jetkai { RandomProxy.showProxyResult = false; } - edit().putString("random_type", "https").putString("random_host", proxy).commit(); + Preferences.getPreferences().edit().putString("random_type", "https").putString("random_host", proxy).commit(); System.setProperty("https.proxyHost", proxy.split(":")[0]); System.setProperty("https.proxyPort", proxy.split(":")[1]); diff --git a/app/src/main/java/ru/vtosters/lite/proxy/https/Roosterkid.java b/app/src/main/java/ru/vtosters/lite/proxy/https/Roosterkid.java index 442a02cbe..d1a4be5ae 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/https/Roosterkid.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/https/Roosterkid.java @@ -3,7 +3,6 @@ package ru.vtosters.lite.proxy.https; import static ru.vtosters.lite.proxy.GithubList.getProxy; import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying; import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy; -import static ru.vtosters.lite.utils.AndroidUtils.edit; import android.util.Log; @@ -14,6 +13,7 @@ import java.util.ArrayList; import ru.vtosters.lite.proxy.RandomProxy; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public class Roosterkid { private static final String TAG = "Roosterkid_Https"; @@ -40,7 +40,7 @@ public class Roosterkid { RandomProxy.showProxyResult = false; } - edit().putString("random_type", "https").putString("random_host", proxy).commit(); + Preferences.getPreferences().edit().putString("random_type", "https").putString("random_host", proxy).commit(); System.setProperty("https.proxyHost", proxy.split(":")[0]); System.setProperty("https.proxyPort", proxy.split(":")[1]); diff --git a/app/src/main/java/ru/vtosters/lite/proxy/socks/CustomSocks.java b/app/src/main/java/ru/vtosters/lite/proxy/socks/CustomSocks.java index 87429899d..711b68328 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/socks/CustomSocks.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/socks/CustomSocks.java @@ -1,7 +1,7 @@ package ru.vtosters.lite.proxy.socks; import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; +import static ru.vtosters.lite.utils.Preferences.getString; public class CustomSocks { public static void loadProxy() { @@ -11,12 +11,12 @@ public class CustomSocks { } private static String proxyHostSocks() { - var string = getPrefsValue("proxyHostSocks"); + var string = getString("proxyHostSocks"); return string.isEmpty() ? "192.168.0.1" : string; } private static String proxyPortSocks() { - var string = getPrefsValue("proxyPortSocks"); + var string = getString("proxyPortSocks"); return string.isEmpty() ? "8888" : string; } } diff --git a/app/src/main/java/ru/vtosters/lite/proxy/socks/Hookzof.java b/app/src/main/java/ru/vtosters/lite/proxy/socks/Hookzof.java index ffe8d681e..22a44c01f 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/socks/Hookzof.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/socks/Hookzof.java @@ -3,7 +3,6 @@ package ru.vtosters.lite.proxy.socks; import static ru.vtosters.lite.proxy.GithubList.getProxy; import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying; import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy; -import static ru.vtosters.lite.utils.AndroidUtils.edit; import android.util.Log; @@ -14,6 +13,7 @@ import java.util.ArrayList; import ru.vtosters.lite.proxy.RandomProxy; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public class Hookzof { private static final String TAG = "Hookzof_Socks"; @@ -40,7 +40,7 @@ public class Hookzof { RandomProxy.showProxyResult = false; } - edit().putString("random_type", "socks").putString("random_host", proxy).commit(); + Preferences.getPreferences().edit().putString("random_type", "socks").putString("random_host", proxy).commit(); System.setProperty("socksProxyHost", proxy.split(":")[0]); System.setProperty("socksProxyPort", proxy.split(":")[1]); diff --git a/app/src/main/java/ru/vtosters/lite/proxy/socks/Jetkai.java b/app/src/main/java/ru/vtosters/lite/proxy/socks/Jetkai.java index 0ab9ae73e..c42595f9b 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/socks/Jetkai.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/socks/Jetkai.java @@ -3,7 +3,6 @@ package ru.vtosters.lite.proxy.socks; import static ru.vtosters.lite.proxy.GithubList.getProxy; import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying; import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy; -import static ru.vtosters.lite.utils.AndroidUtils.edit; import android.util.Log; @@ -14,6 +13,7 @@ import java.util.ArrayList; import ru.vtosters.lite.proxy.RandomProxy; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public class Jetkai { private static final String TAG = "Jetkai_Socks"; @@ -40,7 +40,7 @@ public class Jetkai { RandomProxy.showProxyResult = false; } - edit().putString("random_type", "socks").putString("random_host", proxy).commit(); + Preferences.getPreferences().edit().putString("random_type", "socks").putString("random_host", proxy).commit(); System.setProperty("socksProxyHost", proxy.split(":")[0]); System.setProperty("socksProxyPort", proxy.split(":")[1]); diff --git a/app/src/main/java/ru/vtosters/lite/proxy/socks/Roosterkid.java b/app/src/main/java/ru/vtosters/lite/proxy/socks/Roosterkid.java index 1ad4ae45f..03b4a15f8 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/socks/Roosterkid.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/socks/Roosterkid.java @@ -3,7 +3,6 @@ package ru.vtosters.lite.proxy.socks; import static ru.vtosters.lite.proxy.GithubList.getProxy; import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying; import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy; -import static ru.vtosters.lite.utils.AndroidUtils.edit; import android.util.Log; @@ -14,6 +13,7 @@ import java.util.ArrayList; import ru.vtosters.lite.proxy.RandomProxy; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public class Roosterkid { private static final String TAG = "Roosterkid_Socks"; @@ -40,7 +40,7 @@ public class Roosterkid { RandomProxy.showProxyResult = false; } - edit().putString("random_type", "socks").putString("random_host", proxy).commit(); + Preferences.getPreferences().edit().putString("random_type", "socks").putString("random_host", proxy).commit(); System.setProperty("socksProxyHost", proxy.split(":")[0]); System.setProperty("socksProxyPort", proxy.split(":")[1]); diff --git a/app/src/main/java/ru/vtosters/lite/proxy/socks/TheSpeedX.java b/app/src/main/java/ru/vtosters/lite/proxy/socks/TheSpeedX.java index 64ab42813..29c3d63be 100644 --- a/app/src/main/java/ru/vtosters/lite/proxy/socks/TheSpeedX.java +++ b/app/src/main/java/ru/vtosters/lite/proxy/socks/TheSpeedX.java @@ -3,7 +3,6 @@ package ru.vtosters.lite.proxy.socks; import static ru.vtosters.lite.proxy.GithubList.getProxy; import static ru.vtosters.lite.proxy.ProxyUtils.forceProxyApplying; import static ru.vtosters.lite.proxy.ProxyUtils.hasProxy; -import static ru.vtosters.lite.utils.AndroidUtils.edit; import android.util.Log; @@ -14,6 +13,7 @@ import java.util.ArrayList; import ru.vtosters.lite.proxy.RandomProxy; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public class TheSpeedX { private static final String TAG = "TheSpeedX_Socks"; @@ -40,7 +40,7 @@ public class TheSpeedX { RandomProxy.showProxyResult = false; } - edit().putString("random_type", "socks").putString("random_host", proxy).commit(); + Preferences.getPreferences().edit().putString("random_type", "socks").putString("random_host", proxy).commit(); System.setProperty("socksProxyHost", proxy.split(":")[0]); System.setProperty("socksProxyPort", proxy.split(":")[1]); diff --git a/app/src/main/java/ru/vtosters/lite/ssfs/ImBanner.java b/app/src/main/java/ru/vtosters/lite/ssfs/ImBanner.java index e15c7333f..11029fd8e 100644 --- a/app/src/main/java/ru/vtosters/lite/ssfs/ImBanner.java +++ b/app/src/main/java/ru/vtosters/lite/ssfs/ImBanner.java @@ -75,7 +75,7 @@ public class ImBanner { .setMessage(AndroidUtils.getString("custom_links_warning")) .setCancelable(false) .setPositiveButton(R.string.continue_, (dialogInterface, i) -> { - Preferences.preferences.edit().putBoolean("linkalert", true).commit(); + Preferences.getPreferences().edit().putBoolean("linkalert", true).commit(); }) .setNeutralButton(R.string.cancel, (dialogInterface, i) -> { dialogInterface.cancel(); diff --git a/app/src/main/java/ru/vtosters/lite/ssfs/Utils.java b/app/src/main/java/ru/vtosters/lite/ssfs/Utils.java index 854a1a2a1..6a9ccc8d2 100644 --- a/app/src/main/java/ru/vtosters/lite/ssfs/Utils.java +++ b/app/src/main/java/ru/vtosters/lite/ssfs/Utils.java @@ -3,7 +3,10 @@ package ru.vtosters.lite.ssfs; import com.vk.core.network.Network; import ru.vtosters.lite.hooks.DateHook; import ru.vtosters.lite.proxy.ProxyUtils; -import ru.vtosters.lite.utils.*; +import ru.vtosters.lite.utils.AccountManagerUtils; +import ru.vtosters.lite.utils.Base64Utils; +import ru.vtosters.lite.utils.Preferences; +import ru.vtosters.lite.utils.ThemesUtils; public class Utils { public static String getVKUILink() { @@ -20,7 +23,7 @@ public class Utils { } public static String getDomain() { - String string = AndroidUtils.getPrefsValue("ssfscustom"); + String string = Preferences.getString("ssfscustom"); if (!string.isEmpty()) return string; diff --git a/app/src/main/java/ru/vtosters/lite/themes/ThemesManager.java b/app/src/main/java/ru/vtosters/lite/themes/ThemesManager.java index 0cf869fa4..07b979a79 100644 --- a/app/src/main/java/ru/vtosters/lite/themes/ThemesManager.java +++ b/app/src/main/java/ru/vtosters/lite/themes/ThemesManager.java @@ -2,6 +2,7 @@ package ru.vtosters.lite.themes; import android.app.Application; import android.content.Context; +import android.graphics.Color; import android.util.Log; import com.google.devrel.gmscore.tools.apk.arsc.BinaryResourceFile; import com.vtosters.lite.R; @@ -12,6 +13,7 @@ import ru.vtosters.lite.utils.Preferences; import ru.vtosters.lite.utils.ThemesUtils; import java.io.*; +import java.util.zip.CRC32; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; @@ -93,121 +95,126 @@ public class ThemesManager { R.color.darker_blue, R.color.header_blue_opacity40 }; + // modify it if "doNotCompress" in apktool.yml has been edited + private final static String[] DO_NOT_COMPRESS = { + ".png", + ".jpg", + ".mp3", + "res/raw/keep_cronet_api.xml" + }; private static String baseApkPath; + private static boolean validated = false; + // Directories private static File mainDir; - private static File binDir; - private static File palettesDir; + private static File colorSchemesDir; - // Files - - // Temp archive with resources.arsc and res.zip content for loading resources - private static File resTmpZipFile = null; - - // Archive with res and assets folders content - private static File resZipFile = null; - - // Resources table file - private static File resourcesArscFile = null; + // Modified archive with resources.arsc, other resources and assets + private static File modApk; public static void init(Application app) { try { - Log.d("ThemesManager", "init paths"); initPaths(app); + validateModApk(); - if (!Preferences.isNewBuild() && !ThemesUtils.isMonetTheme() && hasBins() && hasTmpArchive()) { + if (!Preferences.isNewBuild() && !ThemesUtils.isMonetTheme() && canApplyCustomAccent()) { ResourcesLoader.init(app); - ResourcesLoader.load(app, resTmpZipFile.getAbsolutePath(), false); + ResourcesLoader.load(app, modApk.getAbsolutePath(), false); } } catch (Exception e) { - Log.e("ThemesManager", String.valueOf(e)); + Log.e("ThemesManager", e+""); } } + // validate modded apk before loading + private static void validateModApk() + throws IOException { + final var apk = new ZipFile(modApk); + apk.close(); + + validated = true; + } + private static void initPaths(Context context) { - baseApkPath = context.getApplicationInfo().sourceDir; + baseApkPath = context.getApplicationInfo().publicSourceDir; mainDir = new File(context.getFilesDir(), "VTLThemes"); if (!mainDir.exists()) mainDir.mkdir(); - binDir = new File(mainDir, "bin"); - if (!binDir.exists()) binDir.mkdir(); + colorSchemesDir = new File(mainDir, "color_schemes"); + if (!colorSchemesDir.exists()) colorSchemesDir.mkdir(); - palettesDir = new File(mainDir, "palettes"); - if (!palettesDir.exists()) palettesDir.mkdir(); - - resZipFile = new File(binDir, "res.zip"); - - resourcesArscFile = new File(binDir, "resources.arsc"); - resTmpZipFile = new File(binDir, "res.tmp.zip"); + modApk = new File(mainDir, "mod.apk"); } - public static void generateBins() - throws IOException { - final var apk = new ZipFile(baseApkPath); - final var zos = new ZipOutputStream(new FileOutputStream(resZipFile)); - try(apk;zos) { - final var entries = apk.entries(); - while(entries.hasMoreElements()) { - final var entry = entries.nextElement(); - final var name = entry.getName(); - if(name.equals("resources.arsc")) { - if (!resourcesArscFile.exists()) resourcesArscFile.getParentFile().mkdirs(); - IOUtils.copy(apk.getInputStream(entry), resourcesArscFile); - } else if(name.startsWith("assets/") || name.startsWith("res/")) { - zos.putNextEntry(new ZipEntry(name)); - IOUtils.copy(apk.getInputStream(entry), zos); + public static boolean canApplyCustomAccent() { + return validated && modApk.exists() && ThemesUtils.getReservedAccent() != Color.TRANSPARENT; + } + + public static void generateModApk(int accentColor) + throws Throwable { + try( + final var apk = new ZipFile(baseApkPath) + ) { + final var arscEntry = apk.getEntry("resources.arsc"); + final var arscBis = new BufferedInputStream(apk.getInputStream(arscEntry)); + final var arsc = BinaryResourceFile.fromInputStream(arscBis); + if(!ArscEditor.changeColors(arsc, ACCENT_COLORS, accentColor)) + throw new IllegalStateException("Not all colors have been changed"); + + try( + final var zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(modApk))) + ) { + final var arscBuff = arsc.toByteArray(); + final var newArscEntry = new ZipEntry("resources.arsc"); + + final var crc = new CRC32(); + crc.update(arscBuff); + + newArscEntry.setSize(arscBuff.length); + newArscEntry.setMethod(ZipEntry.STORED); + newArscEntry.setCrc(crc.getValue()); + + zos.putNextEntry(newArscEntry); + zos.write(arscBuff); + zos.closeEntry(); + + final var entries = apk.entries(); + while(entries.hasMoreElements()) { + final var entry = entries.nextElement(); + final var name = entry.getName(); + + if(!name.startsWith("res/") && !name.startsWith("assets/") || name.equals("resources.arsc")) continue; + + var doNotCompress = false; + for(var suffix : DO_NOT_COMPRESS) { + if(name.endsWith(suffix)) { + doNotCompress = true; + break; + } + } + + final var entryBis = new BufferedInputStream(apk.getInputStream(entry)); + final var newEntry = new ZipEntry(name); + + if(doNotCompress) { + newEntry.setMethod(ZipEntry.STORED); + newEntry.setSize(entry.getSize()); + newEntry.setCrc(entry.getCrc()); + } else newEntry.setMethod(ZipEntry.DEFLATED); + + zos.putNextEntry(newEntry); + IOUtils.copy(entryBis, zos); + entryBis.close(); zos.closeEntry(); } } } } - public static boolean hasBins() { - return resZipFile.exists() && resourcesArscFile.exists(); - } - - public static boolean hasTmpArchive() { - return resTmpZipFile.exists(); - } - - public static void generateTempResArchive(int accentColor) - throws IOException { - final var resZip = new ZipFile(resZipFile); - final var zos = new ZipOutputStream(new FileOutputStream(resTmpZipFile)); - try (zos) { - final var entries = resZip.entries(); - while (entries.hasMoreElements()) { - final var entry = entries.nextElement(); - final var is = resZip.getInputStream(entry); - - zos.putNextEntry(new ZipEntry(entry.getName())); - IOUtils.copy(is, zos); - - is.close(); - zos.closeEntry(); - } - - final var arsc = new BinaryResourceFile(IOUtils.readFully(resourcesArscFile)); - if (!ArscEditor.changeColors(arsc, ACCENT_COLORS, accentColor)) { - resZip.close(); - resTmpZipFile.delete(); - throw new IOException("Error while generating res.tmp.res"); - } - - zos.putNextEntry(new ZipEntry("resources.arsc")); - IOUtils.copy(new ByteArrayInputStream(arsc.toByteArray()), zos); - } - } - - public static void deleteBins() { - resZipFile.delete(); - resourcesArscFile.delete(); - } - - public static void deleteTmpArchive() { - resTmpZipFile.delete(); + public static void deleteModification() { + modApk.delete(); } } diff --git a/app/src/main/java/ru/vtosters/lite/translators/BaseTranslator.java b/app/src/main/java/ru/vtosters/lite/translators/BaseTranslator.java index b220c526b..07a994b18 100644 --- a/app/src/main/java/ru/vtosters/lite/translators/BaseTranslator.java +++ b/app/src/main/java/ru/vtosters/lite/translators/BaseTranslator.java @@ -1,6 +1,6 @@ package ru.vtosters.lite.translators; -import static ru.vtosters.lite.utils.Preferences.preferences; +import static ru.vtosters.lite.utils.Preferences.getPreferences; import androidx.annotation.NonNull; import androidx.collection.LruCache; @@ -8,6 +8,7 @@ import androidx.collection.LruCache; import java.util.Locale; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public abstract class BaseTranslator { @@ -22,7 +23,7 @@ public abstract class BaseTranslator { }; public static String getToLanguage() { - var lang = preferences.getString("lang_target", "system"); + var lang = getPreferences().getString("lang_target", "system"); var systemLang = Locale.getDefault().getLanguage(); if (lang.isEmpty() || lang.equals(systemLang) || lang.equals("system")) @@ -32,7 +33,7 @@ public abstract class BaseTranslator { } public static BaseTranslator getInstance() { - return switch (AndroidUtils.getPreferences().getInt("translator", 0)) { + return switch (Preferences.getPreferences().getInt("translator", 0)) { case YANDEX -> YandexTranslator.getInstance(); case GOOGLE -> GoogleTranslator.getInstance(); case DEEPL -> DeepLTranslator.getInstance(); diff --git a/app/src/main/java/ru/vtosters/lite/ui/components/DockBarEditorManager.java b/app/src/main/java/ru/vtosters/lite/ui/components/DockBarEditorManager.java index 83e788a9f..9ccb9cff1 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/components/DockBarEditorManager.java +++ b/app/src/main/java/ru/vtosters/lite/ui/components/DockBarEditorManager.java @@ -26,6 +26,7 @@ import com.vtosters.lite.general.fragments.GamesFragment; import com.vtosters.lite.general.fragments.PhotosFragment; import ru.vtosters.lite.ui.items.DockBarTab; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; import java.io.File; import java.util.ArrayList; @@ -33,7 +34,6 @@ import java.util.Arrays; import java.util.List; import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; -import static ru.vtosters.lite.utils.AndroidUtils.getPreferences; import static ru.vtosters.lite.utils.Preferences.*; public class DockBarEditorManager { @@ -110,7 +110,7 @@ public class DockBarEditorManager { } public void reset() { - AndroidUtils.getPreferences() + Preferences.getPreferences() .edit() .putString("dockbar_tabs", "tab_news,tab_superapps,tab_messages,tab_friends,tab_profile") .commit(); diff --git a/app/src/main/java/ru/vtosters/lite/ui/components/FragAnimationKit.java b/app/src/main/java/ru/vtosters/lite/ui/components/FragAnimationKit.java index 101b8ce0c..0cfab19aa 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/components/FragAnimationKit.java +++ b/app/src/main/java/ru/vtosters/lite/ui/components/FragAnimationKit.java @@ -1,13 +1,11 @@ package ru.vtosters.lite.ui.components; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; - import android.content.res.Resources; - import androidx.fragment.app.FragmentTransaction; - import com.vtosters.lite.R; +import static ru.vtosters.lite.utils.Preferences.getString; + public class FragAnimationKit { // Q @@ -33,8 +31,8 @@ public class FragAnimationKit { private static final int SSTactCloseExit = resources.getIdentifier("task_close_exit", "anim", "android"); public static void setAnimations(FragmentTransaction transaction) { - if (transaction != null && !getPrefsValue("anim_rtrn_type").equals("noanim")) { - switch (getPrefsValue("anim_rtrn_type")) { + if (transaction != null && !getString("anim_rtrn_type").equals("noanim")) { + switch (getString("anim_rtrn_type")) { case "q" -> transaction.setCustomAnimations( actOpenEnter, actOpenExit, diff --git a/app/src/main/java/ru/vtosters/lite/ui/components/NewsfeedListManager.java b/app/src/main/java/ru/vtosters/lite/ui/components/NewsfeedListManager.java index 5901db7c7..f12d297d3 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/components/NewsfeedListManager.java +++ b/app/src/main/java/ru/vtosters/lite/ui/components/NewsfeedListManager.java @@ -2,11 +2,11 @@ package ru.vtosters.lite.ui.components; import static ru.vtosters.lite.ui.vkui.VBListBuilder.VBListItem; import static ru.vtosters.lite.ui.vkui.VBListBuilder.buildListOf; -import static ru.vtosters.lite.utils.AndroidUtils.getDefaultPrefs; import static ru.vtosters.lite.utils.AndroidUtils.sendToast; import android.app.Activity; +import com.vk.core.preference.Preference; import com.vtosters.lite.R; import java.util.ArrayList; @@ -14,12 +14,13 @@ import java.util.Collections; import ru.vtosters.lite.ui.vkui.VBottomSheetBuilder; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; public class NewsfeedListManager { public static void callEditorPopup(Activity activity) { - var selectedItems = getDefaultPrefs().getString("news_feed_selected_items", ""); - var filtersSet = getDefaultPrefs().getStringSet("news_feed_items_set", Collections.emptySet()); + var selectedItems = Preferences.getString("news_feed_selected_items"); + var filtersSet = Preferences.getPreferences().getStringSet("news_feed_items_set", Collections.emptySet()); var list = new ArrayList(filtersSet.size()); if (filtersSet.isEmpty()) { @@ -44,7 +45,8 @@ public class NewsfeedListManager { for (VBListItem item : list) if (item.checked) newSelectedItems += item.id + ","; - getDefaultPrefs().edit() + Preferences.getPreferences() + .edit() .putString("news_feed_selected_items", newSelectedItems) .apply(); sendToast(activity.getString(R.string.newsfeed_list_update_feed_to_work)); @@ -54,7 +56,8 @@ public class NewsfeedListManager { } public static void resetHideItems() { - getDefaultPrefs().edit() + Preferences.getPreferences() + .edit() .remove("news_feed_selected_items") .remove("news_feed_items_set") .apply(); diff --git a/app/src/main/java/ru/vtosters/lite/ui/components/SuperAppEditorManager.java b/app/src/main/java/ru/vtosters/lite/ui/components/SuperAppEditorManager.java index a20e57427..58dde7cce 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/components/SuperAppEditorManager.java +++ b/app/src/main/java/ru/vtosters/lite/ui/components/SuperAppEditorManager.java @@ -4,14 +4,13 @@ import android.os.Build; import com.vtosters.lite.R; import ru.vtosters.lite.ui.items.SuperAppItem; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; -import static ru.vtosters.lite.utils.AndroidUtils.getPreferences; - public class SuperAppEditorManager { private static SuperAppEditorManager sInstance; @@ -29,7 +28,7 @@ public class SuperAppEditorManager { } private void init() { - var tmp = getPreferences().getString("superapp_items", "menu,miniapps,vkpay_slim,greeting,promo,holiday,weather,sport,games,informer,food,event,music,vk_run"); + var tmp = Preferences.getPreferences().getString("superapp_items", "menu,miniapps,vkpay_slim,greeting,promo,holiday,weather,sport,games,informer,food,event,music,vk_run"); var selectedTags = !tmp.isEmpty() ? tmp.split(",") : new String[0]; parseSelectedItems(selectedTags); } @@ -49,7 +48,7 @@ public class SuperAppEditorManager { public void save() { if (mSelectedItems.size() > 0) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - getPreferences().edit().putString("superapp_items", mSelectedItems.stream() + Preferences.getPreferences().edit().putString("superapp_items", mSelectedItems.stream() .map(item -> item.type) .collect(Collectors.joining(","))) .commit(); @@ -59,14 +58,14 @@ public class SuperAppEditorManager { sb.append(item.type); sb.append(","); } - getPreferences().edit().putString("superapp_items", sb.toString()).commit(); + Preferences.getPreferences().edit().putString("superapp_items", sb.toString()).commit(); } else reset(); } public void reset() { - AndroidUtils.getPreferences() + Preferences.getPreferences() .edit() .putString("superapp_items", "menu,miniapps,vkpay_slim,greeting,promo,holiday,informer,event,weather,sport,games,food,music,vk_run") .commit(); diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/DisableBattery.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/DisableBattery.java index 24ba7f18b..f79aa9583 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/DisableBattery.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/DisableBattery.java @@ -7,12 +7,9 @@ import android.net.Uri; import android.os.Build; import android.os.PowerManager; import android.provider.Settings; - import com.vk.core.dialogs.alert.VkAlertDialog; import com.vtosters.lite.R; - import ru.vtosters.lite.deviceinfo.OEMDetector; -import ru.vtosters.lite.utils.AndroidUtils; import ru.vtosters.lite.utils.Preferences; public class DisableBattery { @@ -33,7 +30,7 @@ public class DisableBattery { activity.startActivity(intent); }) .setNeutralButton(R.string.batteryissuebtn2, - (dialogInterface, i) -> AndroidUtils.edit().putBoolean("showDoze", false).apply() + (dialogInterface, i) -> Preferences.getPreferences().edit().putBoolean("showDoze", false).apply() ) .show(); } diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/InstallGMS.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/InstallGMS.java index 7e31cb3f2..18320d919 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/InstallGMS.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/InstallGMS.java @@ -1,18 +1,14 @@ package ru.vtosters.lite.ui.dialogs; -import static ru.vtosters.lite.utils.AndroidUtils.edit; -import static ru.vtosters.lite.utils.GmsUtils.isGmsInstalled; -import static ru.vtosters.lite.utils.Preferences.getBoolValue; - import android.app.Activity; -import android.content.Intent; - import com.vk.core.dialogs.alert.VkAlertDialog; -import com.vk.navigation.Navigator; import com.vtosters.lite.R; - import ru.vtosters.lite.ui.fragments.InstallGMSFragment; import ru.vtosters.lite.utils.NavigatorUtils; +import ru.vtosters.lite.utils.Preferences; + +import static ru.vtosters.lite.utils.GmsUtils.isGmsInstalled; +import static ru.vtosters.lite.utils.Preferences.getBoolValue; public class InstallGMS { public static void alert(final Activity activity) { @@ -22,10 +18,10 @@ public class InstallGMS { .setMessage(activity.getString(R.string.gmsissuesumm)) .setCancelable(false) .setPositiveButton(activity.getString(R.string.gmsissuebtn1), ( - dialogInterface, i) -> edit().putBoolean("showAlertGms", false).apply() + dialogInterface, i) -> Preferences.getPreferences().edit().putBoolean("showAlertGms", false).apply() ) .setNeutralButton(activity.getString(R.string.gmsissuebtn2), (dialogInterface, i) -> { - edit().putBoolean("showAlertGms", false).apply(); + Preferences.getPreferences().edit().putBoolean("showAlertGms", false).apply(); NavigatorUtils.switchFragment(activity, InstallGMSFragment.class); }) .show(); diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/RoundingSeekbarDialog.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/RoundingSeekbarDialog.java index 35858712a..45fe13a0a 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/RoundingSeekbarDialog.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/RoundingSeekbarDialog.java @@ -1,18 +1,15 @@ package ru.vtosters.lite.ui.dialogs; -import static ru.vtosters.lite.utils.AndroidUtils.dp2px; -import static ru.vtosters.lite.utils.AndroidUtils.edit; -import static ru.vtosters.lite.utils.AndroidUtils.getPreferences; -import static ru.vtosters.lite.utils.LifecycleUtils.restartApplicationWithTimer; - import android.content.Context; import android.widget.LinearLayout; import android.widget.SeekBar; - import com.vk.core.dialogs.alert.VkAlertDialog; import com.vtosters.lite.R; - import ru.vtosters.lite.utils.LayoutUtils; +import ru.vtosters.lite.utils.Preferences; + +import static ru.vtosters.lite.utils.AndroidUtils.*; +import static ru.vtosters.lite.utils.LifecycleUtils.restartApplicationWithTimer; public class RoundingSeekbarDialog { public static void dialog(Context context) { @@ -20,7 +17,7 @@ public class RoundingSeekbarDialog { SeekBar seek = new SeekBar(context); seek.setMax(10); seek.setKeyProgressIncrement(0); - seek.setProgress(getPreferences().getInt("pic_rounding", 0)); + seek.setProgress(Preferences.getPreferences().getInt("pic_rounding", 0)); seek.setPadding(dp2px(16f), dp2px(16f), dp2px(16f), dp2px(16f)); mContainer.addView(seek, LayoutUtils.createLinear(-1, -2)); @@ -32,7 +29,7 @@ public class RoundingSeekbarDialog { .setNegativeButton(context.getString(R.string.cancel), null) .setView(mContainer) .setPositiveButton(context.getString(R.string.vtl_confirm), (dialog, which) -> { - edit().putInt("pic_rounding", seek.getProgress()).commit(); + Preferences.getPreferences().edit().putInt("pic_rounding", seek.getProgress()).commit(); restartApplicationWithTimer(); }) .show(); diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/ServerDialog.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/ServerDialog.java index 2fcff6121..4839a24a5 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/ServerDialog.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/ServerDialog.java @@ -1,7 +1,6 @@ package ru.vtosters.lite.ui.dialogs; import static android.content.ContentValues.TAG; -import static ru.vtosters.lite.utils.AndroidUtils.edit; import static ru.vtosters.lite.utils.NetworkUtils.isNetworkIsSlow; import static ru.vtosters.lite.utils.Preferences.getBoolValue; import static ru.vtosters.lite.utils.Preferences.hasVerification; @@ -24,6 +23,7 @@ import okhttp3.Request; import okhttp3.Response; import ru.vtosters.lite.di.singleton.VtOkHttpClient; import ru.vtosters.lite.utils.LifecycleUtils; +import ru.vtosters.lite.utils.Preferences; public class ServerDialog { private static final OkHttpClient client = VtOkHttpClient.getInstance(); @@ -101,9 +101,9 @@ public class ServerDialog { .setMessage(message) .setCancelable(cancelable) .setPositiveButton(positiveButton, - (dialogInterface, i) -> edit().putBoolean(key, false).apply()) + (dialogInterface, i) -> Preferences.getPreferences().edit().putBoolean(key, false).apply()) .setNeutralButton(neutralButton, (dialogInterface, i) -> { - edit().putBoolean(key, false).apply(); + Preferences.getPreferences().edit().putBoolean(key, false).apply(); var intent = new Intent(Intent.ACTION_VIEW) .setData(Uri.parse(link)); activity.startActivity(intent); diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/Start.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/Start.java index 940d2c2af..b60848dc0 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/Start.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/Start.java @@ -8,8 +8,8 @@ import com.vk.core.dialogs.alert.VkAlertDialog; import com.vtosters.lite.R; import ru.vtosters.lite.deviceinfo.OEMDetector; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; -import static ru.vtosters.lite.utils.AndroidUtils.edit; import static ru.vtosters.lite.utils.Preferences.getBoolValue; public class Start { @@ -23,11 +23,11 @@ public class Start { .setMessage(getWelcome()) .setCancelable(false) .setPositiveButton(R.string.startbtn2, - (dialogInterface, i) -> edit().putBoolean("showAlert", false).apply() + (dialogInterface, i) -> Preferences.getPreferences().edit().putBoolean("showAlert", false).apply() ) .setNeutralButton(R.string.startbtn1, (dialogInterface, i) -> { - edit().putBoolean("showAlert", false).apply(); + Preferences.getPreferences().edit().putBoolean("showAlert", false).apply(); activity.startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse("https://t.me/vtosters"))); } ) diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/ThemeChanging.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/ThemeChanging.java index 36f33fc3d..882fed54b 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/ThemeChanging.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/ThemeChanging.java @@ -1,17 +1,14 @@ package ru.vtosters.lite.ui.dialogs; -import static ru.vtosters.lite.utils.AndroidUtils.edit; -import static ru.vtosters.lite.utils.ThemesUtils.isDarkTheme; - import android.app.Activity; - import com.vk.core.dialogs.alert.VkAlertDialog; import com.vk.core.ui.themes.VKThemeHelper; import com.vtosters.lite.R; - import ru.vtosters.lite.hooks.VKUIHook; import ru.vtosters.lite.utils.Preferences; +import static ru.vtosters.lite.utils.ThemesUtils.isDarkTheme; + public class ThemeChanging { public static void changeTheme(Activity activity, float[] f) { if (Preferences.systemtheme()) { @@ -20,7 +17,7 @@ public class ThemeChanging { .setMessage(R.string.system_theme_warning) .setCancelable(false) .setPositiveButton(R.string.proxy_disable, (dialogInterface, i) -> { // Отключить - edit().putString("currsystemtheme", !isDarkTheme() ? "dark" : "light").commit(); + Preferences.getPreferences().edit().putString("currsystemtheme", !isDarkTheme() ? "dark" : "light").commit(); VKThemeHelper.b(activity, f); VKUIHook.clearWebCache(); }) @@ -28,7 +25,7 @@ public class ThemeChanging { .show(); } else { VKThemeHelper.b(activity, f); - edit().putString("currsystemtheme", isDarkTheme() ? "dark" : "light").commit(); + Preferences.getPreferences().edit().putString("currsystemtheme", isDarkTheme() ? "dark" : "light").commit(); VKUIHook.clearWebCache(); } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/VKIDProtection.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/VKIDProtection.java index 208f9b7b4..2a85465e4 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/VKIDProtection.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/VKIDProtection.java @@ -1,20 +1,16 @@ package ru.vtosters.lite.ui.dialogs; +import android.app.Activity; +import com.vk.core.dialogs.alert.VkAlertDialog; +import com.vtosters.lite.R; +import ru.vtosters.lite.ui.fragments.VKUIwrapper; +import ru.vtosters.lite.utils.NavigatorUtils; +import ru.vtosters.lite.utils.Preferences; + import static ru.vtosters.lite.proxy.ProxyUtils.getApi; import static ru.vtosters.lite.proxy.ProxyUtils.isAnyProxyEnabled; -import static ru.vtosters.lite.utils.AndroidUtils.edit; import static ru.vtosters.lite.utils.Preferences.getBoolValue; -import android.app.Activity; -import android.content.Intent; - -import com.vk.core.dialogs.alert.VkAlertDialog; -import com.vk.navigation.Navigator; -import com.vtosters.lite.R; - -import ru.vtosters.lite.ui.fragments.VKUIwrapper; -import ru.vtosters.lite.utils.NavigatorUtils; - public class VKIDProtection { public static void alert(final Activity activity) { if (!getBoolValue("showAlertVkId", true)) return; @@ -23,9 +19,9 @@ public class VKIDProtection { .setMessage(R.string.vkidsumm) .setCancelable(false) .setPositiveButton(R.string.startbtn2, - (dialogInterface, i) -> edit().putBoolean("showAlertVkId", false).apply()) + (dialogInterface, i) -> Preferences.getPreferences().edit().putBoolean("showAlertVkId", false).apply()) .setNeutralButton(R.string.vkiddisable, (dialogInterface, i) -> { - edit().putBoolean("showAlertVkId", false).apply(); + Preferences.getPreferences().edit().putBoolean("showAlertVkId", false).apply(); VKUIwrapper.setLink( isAnyProxyEnabled() ? "https://id.vk.com/account" diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/FeedFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/FeedFragment.java index 97d7dd6d4..ade068b0f 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/FeedFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/FeedFragment.java @@ -43,9 +43,9 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment { return true; }); - findPreference("spamfilters").setSummary(count(getPrefsValue("spamfilters"))); - findPreference("sourcenamefilter").setSummary(count(getPrefsValue("sourcenamefilter"))); - findPreference("linkfilter").setSummary(count(getPrefsValue("linkfilter"))); + findPreference("spamfilters").setSummary(count(Preferences.getString("spamfilters"))); + findPreference("sourcenamefilter").setSummary(count(Preferences.getString("sourcenamefilter"))); + findPreference("linkfilter").setSummary(count(Preferences.getString("linkfilter"))); findPreference("spamfilters").setOnPreferenceClickListener(preference -> { NewsFeedFiltersUtils.setupFilters(); @@ -86,7 +86,7 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment { return true; }); - var str = getDefaultPrefs().getString("news_feed_selected_items", ""); + var str = Preferences.getPreferences().getString("news_feed_selected_items", ""); findPreference("newsfeedlistmanager").setSummary( String.format(requireContext().getString(R.string.feed_hidden), (!TextUtils.isEmpty(str) ? str.split(",").length : 0)) ); @@ -96,7 +96,7 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment { return true; }); - findPreference("feedcache").setVisible(!getPrefsValue("newsupdate").equals("no_update")); + findPreference("feedcache").setVisible(!Preferences.getString("newsupdate").equals("no_update")); } private String count(String text) { @@ -116,7 +116,7 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment { .setMessage(requireContext().getString(R.string.delete_elements_confirm)) .setCancelable(false) .setPositiveButton(requireContext().getString(R.string.yes), (dialogInterface, i) -> { - edit().remove(key).apply(); + Preferences.getPreferences().edit().remove(key).apply(); sendToast(requireContext().getString(R.string.elements_deleted_success)); NewsFeedFiltersUtils.setupFilters(); }) @@ -126,7 +126,7 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment { } private String countSet(String key) { - var set = getDefaultPrefs().getStringSet(key, null); + var set = Preferences.getPreferences().getStringSet(key, null); StringBuilder str = new StringBuilder(); if (set != null) { for (var s : set) { diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/IconsFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/IconsFragment.java index c08b78921..d655ef43c 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/IconsFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/IconsFragment.java @@ -23,8 +23,8 @@ import ru.vtosters.lite.utils.ThemesUtils; public class IconsFragment extends MaterialPreferenceToolbarFragment { @SuppressLint("SetTextI18n") public static void callSelectDialog(Context ctx, String appicon) { - var defname = Preferences.preferences.getString("appname", "vt"); - var deficon = Preferences.preferences.getString("selectedicon", "vt"); + var defname = Preferences.getPreferences().getString("appname", "vt"); + var deficon = Preferences.getPreferences().getString("selectedicon", "vt"); RadioGroup rg = new RadioGroup(ctx); @@ -60,18 +60,18 @@ public class IconsFragment extends MaterialPreferenceToolbarFragment { .setView(rg) .setPositiveButton(R.string.vtl_confirm, ((dialog, which) -> { if (rgDefault.isChecked()) { - AndroidUtils.edit().putString("appname", "vt").commit(); - AndroidUtils.edit().putString("selectedicon", appicon).commit(); + Preferences.getPreferences().edit().putString("appname", "vt").commit(); + Preferences.getPreferences().edit().putString("selectedicon", appicon).commit(); IconManager.switchComponent(appicon, "vt"); } else if (rgVK.isChecked()) { - AndroidUtils.edit().putString("appname", "standard").commit(); - AndroidUtils.edit().putString("selectedicon", appicon).commit(); + Preferences.getPreferences().edit().putString("appname", "standard").commit(); + Preferences.getPreferences().edit().putString("selectedicon", appicon).commit(); IconManager.switchComponent(appicon, "standard"); } else if (rgVKontakte.isChecked()) { - AndroidUtils.edit().putString("appname", "vkontakte").commit(); - AndroidUtils.edit().putString("selectedicon", appicon).commit(); + Preferences.getPreferences().edit().putString("appname", "vkontakte").commit(); + Preferences.getPreferences().edit().putString("selectedicon", appicon).commit(); IconManager.switchComponent(appicon, "vkontakte"); } diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java index f32be4dbb..a5623c565 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java @@ -11,7 +11,7 @@ import ru.vtosters.lite.utils.NavigatorUtils; import ru.vtosters.lite.utils.Preferences; import ru.vtosters.lite.utils.ThemesUtils; -import static ru.vtosters.lite.utils.AndroidUtils.*; +import static ru.vtosters.lite.utils.AndroidUtils.isTablet; import static ru.vtosters.lite.utils.LifecycleUtils.restartApplicationWithTimer; public class InterfaceFragment extends MaterialPreferenceToolbarFragment { @@ -45,7 +45,7 @@ public class InterfaceFragment extends MaterialPreferenceToolbarFragment { }); findPreference("dateformat").setOnPreferenceChangeListener((preference, o) -> { - edit().putString("dateformat", o.toString()).commit(); + Preferences.getPreferences().edit().putString("dateformat", o.toString()).commit(); restartApplicationWithTimer(); return true; }); @@ -78,10 +78,10 @@ public class InterfaceFragment extends MaterialPreferenceToolbarFragment { findPreference("anim_rtrn_type").setVisible(false); } - if (getPreferences().getInt("pic_rounding", 0) == 0) { + if (Preferences.getPreferences().getInt("pic_rounding", 0) == 0) { findPreference("customrounding").setSummary(requireContext().getString(R.string.disabled)); } else { - findPreference("customrounding").setSummary(String.format(requireContext().getString(R.string.rounding_size), getPreferences().getInt("pic_rounding", 0))); + findPreference("customrounding").setSummary(String.format(requireContext().getString(R.string.rounding_size), Preferences.getPreferences().getInt("pic_rounding", 0))); } } 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 0665eb56c..1c2842786 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 @@ -25,6 +25,7 @@ import ru.vtosters.lite.music.LastFMScrobbler; import ru.vtosters.lite.music.cache.CacheDatabaseDelegate; import ru.vtosters.lite.ui.adapters.ImagineArrayAdapter; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; import ru.vtosters.lite.utils.ThemesUtils; import java.io.IOException; @@ -152,11 +153,11 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment { ); var adapter = new ImagineArrayAdapter(requireContext(), items); - adapter.setSelected(getPreferences().getInt("search_engine", 0)); + adapter.setSelected(Preferences.getPreferences().getInt("search_engine", 0)); new VkAlertDialog.Builder(getActivity()) .setAdapter(adapter, (dialog, which) -> { - getPreferences().edit().putInt("search_engine", which).apply(); + Preferences.getPreferences().edit().putInt("search_engine", which).apply(); dialog.cancel(); }) .show(); diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/MessagesFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/MessagesFragment.java index 28e27dd35..8b690aec2 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/MessagesFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/MessagesFragment.java @@ -7,10 +7,10 @@ import com.vk.core.dialogs.alert.VkAlertDialog; import com.vtosters.lite.R; import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment; import ru.vtosters.lite.ui.adapters.ImagineArrayAdapter; +import ru.vtosters.lite.utils.Preferences; import java.util.Arrays; -import static ru.vtosters.lite.utils.AndroidUtils.getPreferences; import static ru.vtosters.lite.utils.AndroidUtils.isTablet; import static ru.vtosters.lite.utils.LifecycleUtils.restartApplicationWithTimer; import static ru.vtosters.lite.utils.Preferences.autoalltranslate; @@ -47,11 +47,11 @@ public class MessagesFragment extends MaterialPreferenceToolbarFragment { ); var adapter = new ImagineArrayAdapter(requireContext(), items); - adapter.setSelected(getPreferences().getInt("translator", 0)); + adapter.setSelected(Preferences.getPreferences().getInt("translator", 0)); new VkAlertDialog.Builder(getActivity()) .setAdapter(adapter, (dialog, which) -> { - getPreferences().edit().putInt("translator", which).apply(); + Preferences.getPreferences().edit().putInt("translator", which).apply(); dialog.cancel(); }) .show(); 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 5d235bf23..9674acbb1 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 @@ -62,7 +62,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { if (requestCode == VK_ADMIN_TOKEN_REQUEST_CODE) { if (resultCode == Activity.RESULT_OK) { String token = data.getStringExtra("token"); - AndroidUtils.getPreferences().edit().putString("vk_admin_token", token).apply(); + Preferences.getPreferences().edit().putString("vk_admin_token", token).apply(); Toast.makeText(getContext(), requireContext().getString(R.string.token_saved), LENGTH_SHORT).show(); } } @@ -137,7 +137,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { return true; }); - var pref = getDefaultPrefs().getString("autoclearcache", "Default"); + var pref = Preferences.getPreferences().getString("autoclearcache", "Default"); switch (pref) { case "Default" -> findPreference("autoclearcache").setSummary(requireContext().getString(R.string.cache_disabled)); @@ -198,7 +198,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { }); var vkAdminTokenPref = findPreference("vk_admin_token"); - vkAdminTokenPref.setVisible(AndroidUtils.getDefaultPrefs().getBoolean("new_music_downloading_way", false)); + vkAdminTokenPref.setVisible(Preferences.getPreferences().getBoolean("new_music_downloading_way", false)); if (vkAdminTokenPref.isVisible()) { vkAdminTokenPref.setOnPreferenceClickListener(preference -> { startActivityForResult(new Intent(getContext(), VKAdminTokenActivity.class), VK_ADMIN_TOKEN_REQUEST_CODE); @@ -212,7 +212,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { private void cacheAutoCleanDialog() { String[] cacheText = {null, "100 MB", "500 MB", "1 GB", "2 GB", "5 GB"}; - var val = getDefaultPrefs().getInt("autoclearcache_size", 0); + var val = Preferences.getPreferences().getInt("autoclearcache_size", 0); RadioGroup rg = new RadioGroup(getContext()); rg.setPadding(dp2px(18f), dp2px(12f), dp2px(18f), 0); @@ -239,7 +239,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { .setPositiveButton(requireContext().getString(R.string.save), (dialog, which) -> { var sizes = new String[]{"Default", "100mb", "500mb", "1gb", "2gb", "5gb"}; var id = rg.getCheckedRadioButtonId(); - getDefaultPrefs().edit() + Preferences.getPreferences().edit() .putInt("autoclearcache_size", id) .putString("autoclearcache", sizes[id]) .apply(); diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/ThemesFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/ThemesFragment.java index 7b3e8ae10..4099fd57f 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/ThemesFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/ThemesFragment.java @@ -1,6 +1,7 @@ package ru.vtosters.lite.ui.fragments; import android.content.DialogInterface; +import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.util.Log; @@ -19,22 +20,15 @@ import ru.vtosters.lite.ui.views.rarepebble.ColorPickerView; import ru.vtosters.lite.ui.wallpapers.WallpaperMenuFragment; import ru.vtosters.lite.utils.*; -import java.io.IOException; - import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; import static ru.vtosters.lite.utils.ThemesUtils.recolorDrawable; public class ThemesFragment extends MaterialPreferenceToolbarFragment { - private VKProgressDialog mProgressDialog; - @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); - mProgressDialog = new VKProgressDialog(requireContext()); - mProgressDialog.setCancelable(false); - addPreferencesFromResource(R.xml.preferences_themes); initPreferences(); } @@ -57,11 +51,12 @@ public class ThemesFragment extends MaterialPreferenceToolbarFragment { }); var invalidateThemeCache = findPreference("invalidate_theme_cache"); - invalidateThemeCache.setOnPreferenceClickListener(preference -> { - ThemesManager.deleteBins(); - setAccentColor(ThemesUtils.getReservedAccent(), true); - return true; - }); + if(ThemesUtils.getReservedAccent() != Color.TRANSPARENT) + invalidateThemeCache.setOnPreferenceClickListener(preference -> { + setAccentColor(ThemesUtils.getReservedAccent()); + return true; + }); + else invalidateThemeCache.setVisible(false); var navBarPreference = findPreference("navbar"); navBarPreference.setOnPreferenceClickListener(preference -> { @@ -163,8 +158,9 @@ public class ThemesFragment extends MaterialPreferenceToolbarFragment { } }) .setNegativeButton(R.string.reset, (dialog, which) -> { - ThemesManager.deleteTmpArchive(); - LifecycleUtils.restartApplicationWithTimer(); + ThemesManager.deleteModification(); + ThemesUtils.reserveAccentColor(Color.TRANSPARENT, false); + restart(); }) .setPositiveButton(R.string.cancel, null) .show(); @@ -184,7 +180,7 @@ public class ThemesFragment extends MaterialPreferenceToolbarFragment { alertDialog.setButton( DialogInterface.BUTTON_POSITIVE, requireContext().getString(R.string.select), - (dialog, which) -> setAccentColor(colorPickerView.getColor(), false) + (dialog, which) -> setAccentColor(colorPickerView.getColor()) ); alertDialog.setView(colorPickerView); alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING); @@ -201,56 +197,37 @@ public class ThemesFragment extends MaterialPreferenceToolbarFragment { .setTitle(AndroidUtils.getString("select_palette")) .setItems(titles, (dialog, which) -> PalettesBottomSheetDialog.create(requireActivity(), manager.getPalette(which), - (adapter, vtlcolor) -> setAccentColor(vtlcolor.color, false)) + (adapter, vtlcolor) -> setAccentColor(vtlcolor.color)) ) .setPositiveButton(R.string.cancel, null) .show(); } } - void setAccentColor(int color, boolean invalidate) { - String message; - Runnable task; - if(!ThemesManager.hasBins()) { - message = invalidate ? "Инвалидация кэша" : "Генерация файлов..."; - task = () -> { - try { - ThemesManager.generateBins(); - requireActivity().runOnUiThread(() -> setAccentColor(color, invalidate)); - } catch(IOException e) { - Log.e("ThemesFragment", e+""); - ThemesManager.deleteBins(); - requireActivity().runOnUiThread(() -> showErrorDialog("Ошибка при " + (invalidate ? "инвалидации кэша" : "генерации файлов"))); - } - }; - } else { - message = invalidate ? "Инвалидация кэша" : "Применение акцента..."; - task = () -> { - try { - if(!invalidate) ThemesUtils.reserveAccentColor(color); - ThemesManager.generateTempResArchive(color); - requireActivity().runOnUiThread(this::restart); - } catch(IOException e) { - Log.e("ThemesFragment", e+""); - ThemesManager.deleteTmpArchive(); - requireActivity().runOnUiThread(() -> showErrorDialog("Ошибка при " + (invalidate ? "инвалидации кэша" : "применении акцента"))); - } - }; - } + void setAccentColor(int color) { + final VKProgressDialog dialog = new VKProgressDialog(requireContext()); + dialog.setCancelable(false); + dialog.setMessage("Применение акцента..."); + dialog.show(); - mProgressDialog.setMessage(message); - mProgressDialog.show(); - - VTExecutors.getIoExecutor().execute(task); - } - - void showErrorDialog(String msg) { - mProgressDialog.dismiss(); - new VkAlertDialog.Builder(requireContext()) - .setTitle("Ошибка") - .setMessage(msg) - .setPositiveButton("OK", null) - .show(); + VTExecutors.getIoExecutor().execute(() -> { + try { + ThemesUtils.reserveAccentColor(color, true); + ThemesManager.generateModApk(color); + requireActivity().runOnUiThread(this::restart); + } catch(Throwable e) { + Log.e("ThemesFragment", e+""); + ThemesManager.deleteModification(); + requireActivity().runOnUiThread(() -> { + dialog.dismiss(); + new VkAlertDialog.Builder(requireContext()) + .setTitle("Ошибка") + .setMessage("Ошибка при применении акцента:\n" + e) + .setPositiveButton("OK", null) + .show(); + }); + } + }); } void restart() { 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 b107a043d..4560d459e 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 @@ -52,7 +52,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment implements Tel } public static String getProxysumm() { - var type = AndroidUtils.getPrefsValue("proxy"); + var type = Preferences.getString("proxy"); if(type.equals("noproxy") || type.isEmpty()) type = AndroidUtils.getString(R.string.vtlsettdisabled); @@ -63,7 +63,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment implements Tel public static String getThemesumm() { String[] themeTypeName = AndroidUtils.getArray("theme_type_name"); - return AndroidUtils.getString("current_theme") + ": " + switch (AndroidUtils.getPrefsValue("currsystemtheme")) { + return AndroidUtils.getString("current_theme") + ": " + switch (Preferences.getString("currsystemtheme")) { case "system" -> themeTypeName[0]; case "dark" -> themeTypeName[1]; case "light" -> themeTypeName[2]; @@ -175,7 +175,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment implements Tel var theme = value.equals("dark") ? ThemesUtils.getDarkTheme() : ThemesUtils.getLightTheme(); ThemesUtils.applyTheme(theme); } - AndroidUtils.edit().putString("currsystemtheme", value).commit(); + Preferences.getPreferences().edit().putString("currsystemtheme", value).commit(); SystemThemeChangerHook.onThemeChanged(getResources().getConfiguration()); return true; }); @@ -235,7 +235,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment implements Tel R.drawable.ic_globe_outline_28, true, (preference, o) -> { - AndroidUtils.edit().putBoolean("ssl", (boolean) o).commit(); + Preferences.getPreferences().edit().putBoolean("ssl", (boolean) o).commit(); return true; } ); @@ -250,7 +250,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment implements Tel true, (preference, o) -> { boolean value = (boolean) o; - AndroidUtils.edit().putBoolean("autoupdates", value).commit(); + Preferences.getPreferences().edit().putBoolean("autoupdates", value).commit(); return true; } ); diff --git a/app/src/main/java/ru/vtosters/lite/ui/wallpapers/ImageEffect.java b/app/src/main/java/ru/vtosters/lite/ui/wallpapers/ImageEffect.java index ac8cb3656..0ff8f2576 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/wallpapers/ImageEffect.java +++ b/app/src/main/java/ru/vtosters/lite/ui/wallpapers/ImageEffect.java @@ -4,11 +4,11 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.vtosters.lite.R; import ru.vtosters.lite.utils.AndroidUtils; +import ru.vtosters.lite.utils.Preferences; import java.nio.ByteBuffer; import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; -import static ru.vtosters.lite.utils.AndroidUtils.getPreferences; enum ImageEffects { Blur(true, @@ -19,7 +19,7 @@ enum ImageEffects { @Override public void applyEffect(ByteBuffer bitmap, int height, int width) { int radius; - switch (getPreferences().getString(ImageEffects.Blur.toString(), "disabled")) { + switch (Preferences.getPreferences().getString(ImageEffects.Blur.toString(), "disabled")) { case "low": radius = 8; break; @@ -37,7 +37,7 @@ enum ImageEffects { @Override public String getSummary() { - switch (getPreferences().getString(ImageEffects.Blur.toString(), "disabled")) { + switch (Preferences.getPreferences().getString(ImageEffects.Blur.toString(), "disabled")) { case "low": return AndroidUtils.getString(R.string.wallpapers_low); case "med": @@ -56,7 +56,7 @@ enum ImageEffects { @Override public void applyEffect(ByteBuffer bitmap, int height, int width) { var delta = 0; - switch (getPreferences().getString(ImageEffects.Dim.toString(), "disabled")) { + switch (Preferences.getPreferences().getString(ImageEffects.Dim.toString(), "disabled")) { case "dim_black": delta = -50; break; case "dim_white": @@ -69,7 +69,7 @@ enum ImageEffects { @Override public String getSummary() { - switch (getPreferences().getString(ImageEffects.Dim.toString(), "disabled")) { + switch (Preferences.getPreferences().getString(ImageEffects.Dim.toString(), "disabled")) { case "dim_black": return AndroidUtils.getString(R.string.wallpapers_dim_black); case "dim_white": @@ -86,7 +86,7 @@ enum ImageEffects { @Override public void applyEffect(ByteBuffer bitmap, int height, int width) { var scale = 0; - switch (getPreferences().getString(ImageEffects.Mosaic.toString(), "disabled")) { + switch (Preferences.getPreferences().getString(ImageEffects.Mosaic.toString(), "disabled")) { case "high": scale = 50; break; case "med": @@ -101,7 +101,7 @@ enum ImageEffects { @Override public String getSummary() { - switch (getPreferences().getString(ImageEffects.Mosaic.toString(), "disabled")) { + switch (Preferences.getPreferences().getString(ImageEffects.Mosaic.toString(), "disabled")) { case "low": return AndroidUtils.getString(R.string.wallpapers_low); case "med": @@ -234,7 +234,7 @@ enum ImageEffects { public abstract void applyEffect(ByteBuffer bitmap, int height, int width); protected boolean isApplied() { - return getPreferences().getBoolean(this.toString(), false); + return Preferences.getPreferences().getBoolean(this.toString(), false); } @NonNull diff --git a/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpaperMenuFragment.java b/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpaperMenuFragment.java index 022553d55..19119165b 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpaperMenuFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpaperMenuFragment.java @@ -11,6 +11,7 @@ import com.vtosters.lite.R; import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment; import com.vtosters.lite.im.ImEngineProvider; import ru.vtosters.lite.ui.PreferenceFragmentUtils; +import ru.vtosters.lite.utils.Preferences; import java.io.FileOutputStream; import java.io.IOException; @@ -19,7 +20,6 @@ import java.io.OutputStream; import java.util.Arrays; import static ru.vtosters.lite.ui.wallpapers.WallpapersHooks.*; -import static ru.vtosters.lite.utils.AndroidUtils.edit; import static ru.vtosters.lite.utils.Preferences.getBoolValue; import static ru.vtosters.lite.utils.Preferences.hasVerification; @@ -119,7 +119,7 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment { ); pref.setSummary(it.getSummary()); pref.setOnPreferenceChangeListener((preference, o) -> { - edit().putString(it.toString(), (String) o).apply(); + Preferences.getPreferences().edit().putString(it.toString(), (String) o).apply(); preference.setSummary(it.getSummary()); requestUpdateWallpaper(); mWPPreviewPref.redraw(); @@ -134,7 +134,7 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment { 0, false, (preference, o) -> { - edit().putBoolean(it.toString(), (Boolean) o).apply(); + Preferences.getPreferences().edit().putBoolean(it.toString(), (Boolean) o).apply(); requestUpdateWallpaper(); mWPPreviewPref.redraw(); return true; @@ -151,7 +151,7 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment { true, (preference, o) -> { boolean value = (boolean) o; - edit().putBoolean("compresswp", value).commit(); + Preferences.getPreferences().edit().putBoolean("compresswp", value).commit(); requestUpdateWallpaper(); mWPPreviewPref.redraw(); return true; diff --git a/app/src/main/java/ru/vtosters/lite/utils/About.java b/app/src/main/java/ru/vtosters/lite/utils/About.java index 87b816a0b..1e45e2c93 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/About.java +++ b/app/src/main/java/ru/vtosters/lite/utils/About.java @@ -1,21 +1,17 @@ package ru.vtosters.lite.utils; -import static ru.vtosters.lite.utils.AndroidUtils.edit; -import static ru.vtosters.lite.utils.AndroidUtils.getApplicationName; -import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; -import static ru.vtosters.lite.utils.AndroidUtils.sendToast; -import static ru.vtosters.lite.utils.Preferences.VERSIONNAME; -import static ru.vtosters.lite.utils.Preferences.devmenu; -import static ru.vtosters.lite.utils.Preferences.isValidSignature; - import android.content.Context; +import android.content.res.AssetManager; +import android.text.TextUtils; import android.view.View; - import com.vtosters.lite.R; import java.io.IOException; import java.util.Scanner; +import static ru.vtosters.lite.utils.AndroidUtils.*; +import static ru.vtosters.lite.utils.Preferences.*; + public class About { public static String getBuildNumber() { return getBuild(getGlobalContext(), "version.properties"); @@ -26,7 +22,7 @@ public class About { if (devmenu()) { sendToast(AndroidUtils.getString(R.string.debug_menu_already_activated)); } else { - edit().putBoolean("devmenu", true).apply(); + Preferences.getPreferences().edit().putBoolean("devmenu", true).apply(); sendToast(AndroidUtils.getString(R.string.debug_menu_activated)); } return true; @@ -38,16 +34,14 @@ public class About { } public static String getBuild(Context context, String name) { - try ( - Scanner scanner = new Scanner(context.getAssets().open(name)) - ) { - while (scanner.hasNextLine()) { - String line = scanner.findInLine("VERSION_BUILD=.+"); - if (line != null) - return line.replace("VERSION_BUILD=", ""); - return "0000000"; + try { + final var scanner = new Scanner(context.getAssets().open(name, AssetManager.ACCESS_BUFFER)); + while(scanner.hasNextLine()) { + final var line = scanner.findInLine("VERSION_BUILD=.+"); + if(!TextUtils.isEmpty(line)) + return line.substring(14); } - } catch (IOException e) { + } catch(IOException e) { e.printStackTrace(); } return "0000000"; diff --git a/app/src/main/java/ru/vtosters/lite/utils/AndroidUtils.java b/app/src/main/java/ru/vtosters/lite/utils/AndroidUtils.java index 2bf8985d6..b7de9826a 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/AndroidUtils.java +++ b/app/src/main/java/ru/vtosters/lite/utils/AndroidUtils.java @@ -32,28 +32,10 @@ import static ru.vtosters.lite.utils.Preferences.getBoolValue; public class AndroidUtils { - public static SharedPreferences getDefaultPrefs() { - if (Preferences.preferences == null) - Preferences.preferences = PreferenceManager.getDefaultSharedPreferences(getGlobalContext()); - return Preferences.preferences; - } - - public static SharedPreferences getPreferences() { - return PreferenceManager.getDefaultSharedPreferences(getGlobalContext()); - } - public static boolean isTablet() { return Screen.l(getGlobalContext()); } - public static String getPrefsValue(String pref) { - return getPreferences().getString(pref, ""); - } // Get pref value as string - - public static SharedPreferences.Editor edit() { - return PreferenceManager.getDefaultSharedPreferences(getGlobalContext()).edit(); - } // Edit SharedPreferences - @NonNull public static Context getGlobalContext() { try { @@ -176,7 +158,7 @@ public class AndroidUtils { .setMessage(AndroidUtils.getString("app_open_by_default_settings")) .setCancelable(false) .setPositiveButton(com.vtosters.lite.R.string.social_graph_skip, - (dialogInterface, i) -> edit().putBoolean("showUnverifDialog", false).apply() + (dialogInterface, i) -> Preferences.getPreferences().edit().putBoolean("showUnverifDialog", false).apply() ) .setNeutralButton(com.vtosters.lite.R.string.open_settings, (dialogInterface, i) -> { diff --git a/app/src/main/java/ru/vtosters/lite/utils/DeletedMessagesHandler.java b/app/src/main/java/ru/vtosters/lite/utils/DeletedMessagesHandler.java index 97bb041b4..0639b2349 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/DeletedMessagesHandler.java +++ b/app/src/main/java/ru/vtosters/lite/utils/DeletedMessagesHandler.java @@ -1,7 +1,7 @@ package ru.vtosters.lite.utils; import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; +import static ru.vtosters.lite.utils.Preferences.getString; import static ru.vtosters.lite.utils.Preferences.getBoolValue; import android.annotation.SuppressLint; @@ -73,7 +73,7 @@ public class DeletedMessagesHandler { } private static String getPrefixUndelete() { - var prefs = getPrefsValue("undeletemsg_prefix_value"); + var prefs = getString("undeletemsg_prefix_value"); if (prefs.isEmpty()) { return "\uD83D\uDDD1 "; diff --git a/app/src/main/java/ru/vtosters/lite/utils/IOUtils.java b/app/src/main/java/ru/vtosters/lite/utils/IOUtils.java index afb0aad51..ab42d5251 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/IOUtils.java +++ b/app/src/main/java/ru/vtosters/lite/utils/IOUtils.java @@ -17,7 +17,7 @@ import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class IOUtils { - public static final int BUFFER_SIZE = 0x800; + public static final int BUFFER_SIZE = 8192; public static byte[] decodeStream(InputStream encIs, String keyURL) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, IOException { diff --git a/app/src/main/java/ru/vtosters/lite/utils/ImageUtils.java b/app/src/main/java/ru/vtosters/lite/utils/ImageUtils.java index 065e9ac8b..66b29c15a 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/ImageUtils.java +++ b/app/src/main/java/ru/vtosters/lite/utils/ImageUtils.java @@ -58,7 +58,7 @@ public class ImageUtils { final int width = bitmap.getWidth(); final int height = bitmap.getHeight(); final Bitmap outputBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - int pref = Preferences.preferences.getInt("pic_rounding", 0); + int pref = Preferences.getPreferences().getInt("pic_rounding", 0); final Canvas canvas = new Canvas(outputBitmap); final Path path = new Path(); diff --git a/app/src/main/java/ru/vtosters/lite/utils/NewsFeedFiltersUtils.java b/app/src/main/java/ru/vtosters/lite/utils/NewsFeedFiltersUtils.java index b9c235f71..555f13b49 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/NewsFeedFiltersUtils.java +++ b/app/src/main/java/ru/vtosters/lite/utils/NewsFeedFiltersUtils.java @@ -1,7 +1,7 @@ package ru.vtosters.lite.utils; import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; +import static ru.vtosters.lite.utils.Preferences.getString; import static ru.vtosters.lite.utils.Preferences.ads; import static ru.vtosters.lite.utils.Preferences.adsgroup; import static ru.vtosters.lite.utils.Preferences.authorsrecomm; @@ -41,17 +41,17 @@ public class NewsFeedFiltersUtils { getFilter("shitposting", "IDontWantToReadIt.txt", mFilters); getFilter("cringecopyright", "CopyrightAds.txt", mFiltersLinks); - var customFilters = getPrefsValue("spamfilters"); + var customFilters = getString("spamfilters"); if (!customFilters.isEmpty()) { mFilters.addAll(Arrays.asList(customFilters.toLowerCase().split(", "))); } - var sourceNameFilter = getPrefsValue("sourcenamefilter"); + var sourceNameFilter = getString("sourcenamefilter"); if (!sourceNameFilter.isEmpty()) { mFiltersNames.addAll(Arrays.asList(sourceNameFilter.toLowerCase().split(", "))); } - var linkFilter = getPrefsValue("linkfilter"); + var linkFilter = getString("linkfilter"); if (!linkFilter.isEmpty()) { mFiltersLinks.addAll(Arrays.asList(linkFilter.toLowerCase().split(", "))); } @@ -156,7 +156,7 @@ public class NewsFeedFiltersUtils { } public static String getAllFilters() { - return getPrefsValue("spamfilters"); + return getString("spamfilters"); } public static boolean isBadNews(String text) { diff --git a/app/src/main/java/ru/vtosters/lite/utils/Preferences.java b/app/src/main/java/ru/vtosters/lite/utils/Preferences.java index 3ed44e997..543372128 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/Preferences.java +++ b/app/src/main/java/ru/vtosters/lite/utils/Preferences.java @@ -1,33 +1,26 @@ package ru.vtosters.lite.utils; -import static java.lang.Long.MAX_VALUE; -import static ru.vtosters.lite.proxy.ProxyUtils.setProxy; -import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; -import static ru.vtosters.lite.utils.AndroidUtils.getPreferences; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; -import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.setupFilters; -import static ru.vtosters.lite.utils.SignatureChecker.validateAppSignature; -import static ru.vtosters.lite.utils.VTVerifications.isPrometheus; -import static ru.vtosters.lite.utils.VTVerifications.isVerified; - import android.app.Application; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.os.Build; import android.os.StrictMode; -import android.preference.PreferenceManager; - -import android.util.Log; import com.vtosters.lite.data.Users; import com.vtosters.lite.fragments.SettingsListFragment; +import ru.vtosters.lite.ui.fragments.VTSettings; import java.security.NoSuchAlgorithmException; -import ru.vtosters.lite.ui.fragments.VTSettings; +import static java.lang.Long.MAX_VALUE; +import static ru.vtosters.lite.proxy.ProxyUtils.setProxy; +import static ru.vtosters.lite.utils.AndroidUtils.getGlobalContext; +import static ru.vtosters.lite.utils.NewsFeedFiltersUtils.setupFilters; +import static ru.vtosters.lite.utils.SignatureChecker.validateAppSignature; +import static ru.vtosters.lite.utils.VTVerifications.isPrometheus; +import static ru.vtosters.lite.utils.VTVerifications.isVerified; public class Preferences { - public static SharedPreferences preferences = getGlobalContext().getSharedPreferences("com.vtosters.lite_preferences", Context.MODE_PRIVATE); public static String VERSIONNAME = "Beta"; public static void init(Application application) throws Exception { @@ -41,6 +34,14 @@ public class Preferences { LifecycleUtils.registerActivities(application); } // VK Init + public static SharedPreferences getPreferences() { + return getGlobalContext().getSharedPreferences("com.vtosters.lite_preferences", Context.MODE_PRIVATE); + } + + public static String getString(String name) { + return getPreferences().getString(name, ""); + } + public static void forceOffline() { setupFilters(); @@ -50,10 +51,7 @@ public class Preferences { } public static boolean getBoolValue(String key, Boolean value) { - if (preferences == null) { - preferences = PreferenceManager.getDefaultSharedPreferences(getGlobalContext()); - } - return preferences.getBoolean(key, value); + return getPreferences().getBoolean(key, value); } // Set bool by default and get value public static SharedPreferences getPrefsFromFile(String filename) { @@ -292,12 +290,12 @@ public class Preferences { } public static boolean isNewBuild() { - return !preferences.getString("build_number", About.getBuildNumber()) + return !getPreferences().getString("build_number", "") .equals(About.getBuildNumber()); } public static void updateBuildNumber() { - preferences.edit().putString("build_number", About.getBuildNumber()).apply(); + getPreferences().edit().putString("build_number", About.getBuildNumber()).commit(); } public static boolean isValidSignature() { @@ -322,7 +320,7 @@ public class Preferences { } public static long getSizeForDelete() { - return switch (getPrefsValue("clearcache")) { + return switch (Preferences.getPreferences().getString("clearcache", "")) { case "100mb" -> 104857600L; case "500mb" -> 524288000L; case "1gb" -> 1073741824L; diff --git a/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java b/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java index 3b6293536..7952b308e 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java +++ b/app/src/main/java/ru/vtosters/lite/utils/ThemesUtils.java @@ -48,7 +48,7 @@ public class ThemesUtils { } // Apply VKTheme and ImTheme (hard applying without dynamic theme changing) public static boolean isCustomAccentEnabled() { - return ThemesUtils.isMonetTheme() || ThemesManager.hasTmpArchive(); + return ThemesUtils.isMonetTheme() || ThemesManager.canApplyCustomAccent(); } public static ColorStateList getAccenedColorStateList() { @@ -104,11 +104,14 @@ public class ThemesUtils { //region Used for migrating accent color to new version public static int getReservedAccent() { - return AndroidUtils.getPreferences().getInt("reserved_accent_color", getAccentColor()); + return Preferences.getPreferences().getInt("reserved_accent_color", Color.TRANSPARENT); } - public static void reserveAccentColor(int accent) { - AndroidUtils.getPreferences().edit().putInt("reserved_accent_color", accent).apply(); + public static void reserveAccentColor(int accent, boolean async) { + final var editor = Preferences.getPreferences().edit(); + editor.putInt("reserved_accent_color", accent); + if(async) editor.apply(); + else editor.commit(); } //endregion @@ -209,7 +212,7 @@ public class ThemesUtils { } public static void setCustomAccentColor(int newColor, boolean async) { - var editor = AndroidUtils.edit().putInt("accent_color", newColor); + var editor = Preferences.getPreferences().edit().putInt("accent_color", newColor); if (async) editor.apply(); else editor.commit(); } diff --git a/app/src/main/java/ru/vtosters/lite/utils/VKMeHandler.java b/app/src/main/java/ru/vtosters/lite/utils/VKMeHandler.java index d176d89e7..91187ebb8 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/VKMeHandler.java +++ b/app/src/main/java/ru/vtosters/lite/utils/VKMeHandler.java @@ -1,19 +1,15 @@ package ru.vtosters.lite.utils; +import android.util.Log; +import com.vtosters.lite.R; +import org.json.JSONException; +import org.json.JSONObject; + import static ru.vtosters.lite.net.Request.makeRequest; import static ru.vtosters.lite.proxy.ProxyUtils.getApi; import static ru.vtosters.lite.proxy.ProxyUtils.getOauth; -import static ru.vtosters.lite.utils.AndroidUtils.edit; -import static ru.vtosters.lite.utils.AndroidUtils.getPrefsValue; import static ru.vtosters.lite.utils.AndroidUtils.sendToast; -import android.util.Log; - -import com.vtosters.lite.R; - -import org.json.JSONException; -import org.json.JSONObject; - public class VKMeHandler { public static void getVkMeToken(String username, String password) { makeRequest("https://" + @@ -45,15 +41,15 @@ public class VKMeHandler { } public static void removeToken() { - edit().remove("vkmetoken").commit(); + Preferences.getPreferences().edit().remove("vkmetoken").commit(); } public static String getToken() { - return getPrefsValue("vkmetoken"); + return Preferences.getString("vkmetoken"); } public static void setToken(String token) { - edit().putString("vkmetoken", token).commit(); + Preferences.getPreferences().edit().putString("vkmetoken", token).commit(); } public static void setPrivacyStatus(String status) {