From 4077621891ea2d553dc1092f6caa11d6998bfcbe Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Mon, 13 Jun 2022 21:04:16 +0300 Subject: [PATCH] vkme mode updated --- .../ru/vtosters/lite/ui/PreferencesUtil.java | 13 +++ .../lite/ui/fragments/VKMeSettings.java | 95 +++++++++++++++++++ .../ui/fragments/dockbar/DockBarManager.java | 4 +- .../multiaccount/MultiAccountManager.java | 2 +- .../java/ru/vtosters/lite/utils/Globals.java | 46 +++++++++ .../adapter/items/UserHeaderItem$b.smali | 2 +- 6 files changed, 159 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/ru/vtosters/lite/ui/fragments/VKMeSettings.java diff --git a/app/src/main/java/ru/vtosters/lite/ui/PreferencesUtil.java b/app/src/main/java/ru/vtosters/lite/ui/PreferencesUtil.java index 130ae14c9..5c12297e7 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/PreferencesUtil.java +++ b/app/src/main/java/ru/vtosters/lite/ui/PreferencesUtil.java @@ -118,6 +118,19 @@ public class PreferencesUtil { fragment.ay().d(preference); // fragment.getPreferenceScreen().addPreference(preference) } + public static void addPreferenceDrawable(MaterialPreferenceToolbarFragment fragment, String key, CharSequence title, CharSequence summary, @Nullable Drawable icon, Preference.c listener) { + Preference preference = new Preference(getContext()); + preference.b(summary); // setSummary + preference.c(title); // setTitle + preference.d(key); // setKey + + if (icon != null) + preference.a(icon); // preference.setIcon + preference.a(listener); // preference.setOnPreferenceClickListener(listener) + + fragment.ay().d(preference); // fragment.getPreferenceScreen().addPreference(preference) + } + public static void addPreferenceCategory(MaterialPreferenceToolbarFragment fragment, CharSequence title) { PreferenceCategory preference = new PreferenceCategory(getContext(), null); preference.c(title); // setTitle diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/VKMeSettings.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/VKMeSettings.java new file mode 100644 index 000000000..ddc1e96ca --- /dev/null +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/VKMeSettings.java @@ -0,0 +1,95 @@ +package ru.vtosters.lite.ui.fragments; + +import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.getCurrentAccount; +import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.withRegex; +import static ru.vtosters.lite.utils.Globals.drawableFromUrl; +import static ru.vtosters.lite.utils.Globals.getContext; +import static ru.vtosters.lite.utils.Globals.getIdentifier; +import static ru.vtosters.lite.utils.Globals.getString; +import static ru.vtosters.lite.utils.Globals.getUserId; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import com.vk.about.AboutAppFragment; +import com.vk.navigation.Navigator; +import com.vtosters.lite.fragments.MaterialPreferenceToolbarFragment; + +import ru.vtosters.lite.ui.PreferencesUtil; +import ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountFragment; +import ru.vtosters.lite.ui.fragments.tgstickers.StickersFragment; + +public class VKMeSettings extends MaterialPreferenceToolbarFragment { + + @Override + public void b(Bundle bundle) { + super.b(bundle); + + String keyVKAccount = getCurrentAccount().getString("key_vk_account", ""); + String avatarUrl = withRegex(keyVKAccount, ".*\"photo\":\\{.*?:\"(.*?)\"\\}.*", "https://vk.com/images/camera_200.png").replace("\\/", "/"); + String name = withRegex(keyVKAccount, ".*\"name\":\\{.*?:\"(.*?)\"\\}.*", ""); + String id = "id" + Integer.toString(getUserId()); + int vtosterXml = getIdentifier("empty", "xml"); + this.a(vtosterXml); + + PreferencesUtil.addPreferenceDrawable(this, "", name, id, drawableFromUrl(avatarUrl), preference -> { + Context context = getContext(); + Intent a2 = new Navigator(MultiAccountFragment.class).a(context); + context.startActivity(a2); + return false; + }); + + PreferencesUtil.addPreferenceCategory(this, "Настройки"); + + PreferencesUtil.addPreference(this, "", getString("vtlactivity"), "", "ic_write_28", preference -> { + Context context = getContext(); + Intent a2 = new Navigator(ActivityFragment.class).a(context); + context.startActivity(a2); + return false; + }); + + PreferencesUtil.addPreference(this, "", getString("vtltgs"), "", "ic_telegram", preference -> { + Context context = getContext(); + Intent a2 = new Navigator(StickersFragment.class).a(context); + context.startActivity(a2); + return false; + }); + + PreferencesUtil.addPreference(this, "", getString("vtlinterface"), "", "ic_interface", preference -> { + Context context = getContext(); + Intent a2 = new Navigator(InterfaceFragment.class).a(context); + context.startActivity(a2); + return false; + }); + + PreferencesUtil.addPreference(this, "", getString("vtlproxy"), "", "ic_globe_24", preference -> { + Context context = getContext(); + Intent a2 = new Navigator(ProxySettingsFragment.class).a(context); + context.startActivity(a2); + return false; + }); + + PreferencesUtil.addPreference(this, "", getString("vtlother"), "", "ic_more_24", preference -> { + Context context = getContext(); + Intent a2 = new Navigator(OtherFragment.class).a(context); + context.startActivity(a2); + return false; + }); + + PreferencesUtil.addPreferenceCategory(this, "Прочее"); + + PreferencesUtil.addPreference(this, "", getString("menu_about"), "", "ic_about_24", preference -> { + Context context = getContext(); + Intent a2 = new Navigator(AboutAppFragment.class).a(context); + context.startActivity(a2); + return false; + }); + + } + + @Override + public int aq() { + return getIdentifier("notification_settings", "string"); + } +} diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/dockbar/DockBarManager.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/dockbar/DockBarManager.java index f330881e8..37477507b 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/dockbar/DockBarManager.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/dockbar/DockBarManager.java @@ -46,6 +46,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import ru.vtosters.lite.ui.fragments.VKMeSettings; + public class DockBarManager { public static final int MIN_SELECTED_TABS_LIMIT = 3; public static final int MAX_SELECTED_TABS_LIMIT = 9; @@ -82,7 +84,7 @@ public class DockBarManager { if (!dockbar.exists()) { if(vkme()) { - mSelectedTabs.add(new DockBarTab("tab_settings", R.drawable.ic_settings_24, R.string.menu_settings, R.id.menu_settings, SettingsListFragment.class)); + mSelectedTabs.add(new DockBarTab("tab_settings", R.drawable.ic_settings_24, R.string.menu_settings, R.id.menu_settings, VKMeSettings.class)); if(vkme_notifs()) mSelectedTabs.add(new DockBarTab("tab_feedback", oldicons() ? R.drawable.ic_menu_notifications_28 : R.drawable.ic_menu_notification_outline_28, R.string.feedback, R.id.tab_feedback, NotificationsContainerFragment.class)); mSelectedTabs.add(new DockBarTab("tab_messages", oldicons() ? R.drawable.ic_menu_messages_28 : R.drawable.ic_message_28_outline, R.string.messages, R.id.tab_messages, DialogsFragment.class)); mSelectedTabs.add(new DockBarTab("tab_profile", R.drawable.libverify_ic_account_circle_white, R.string.profile, R.id.profile, ProfileFragment.class)); diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/multiaccount/MultiAccountManager.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/multiaccount/MultiAccountManager.java index 784e77510..d14d3de0c 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/multiaccount/MultiAccountManager.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/multiaccount/MultiAccountManager.java @@ -46,7 +46,7 @@ public class MultiAccountManager { return prefs != null ? prefs.length : 0; } - private static String withRegex(String base, String regex, String def) { + public static String withRegex(String base, String regex, String def) { Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(base); if (matcher.find()) { diff --git a/app/src/main/java/ru/vtosters/lite/utils/Globals.java b/app/src/main/java/ru/vtosters/lite/utils/Globals.java index 7fcd8ea39..6bb3099ce 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/Globals.java +++ b/app/src/main/java/ru/vtosters/lite/utils/Globals.java @@ -1,5 +1,6 @@ package ru.vtosters.lite.utils; +import static androidx.core.content.ContextCompat.getDrawable; import static ru.vtosters.lite.utils.Preferences.getLocale; import static ru.vtosters.lite.utils.Preferences.preferences; @@ -13,10 +14,17 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Path; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Build; import android.os.Bundle; +import android.os.StrictMode; import android.preference.PreferenceManager; import android.util.Log; import android.widget.Toast; @@ -30,7 +38,10 @@ import com.vtosters.lite.api.ExtendedUserProfile; import com.vtosters.lite.auth.VKAccountManager; import com.vtosters.lite.im.ImEngineProvider; +import java.io.InputStream; import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -92,6 +103,41 @@ public class Globals { return extendedUserProfile.a; } + @SuppressWarnings("deprecation") + public static Drawable drawableFromUrl(String url) { + try { + URL aryURI = new URL(url); + StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); + StrictMode.setThreadPolicy(policy); + + URLConnection conn = aryURI.openConnection(); + InputStream is = conn.getInputStream(); + Bitmap bmp = BitmapFactory.decodeStream(is); + + return new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(getBitmapClippedCircle(bmp), convertDpToPixel(48), convertDpToPixel(48), true)); + } catch (Exception e) { + return getDrawable(getContext(), com.vtosters.lite.R.drawable.libverify_ic_account_circle_white); + } + } + + public static Bitmap getBitmapClippedCircle(Bitmap bitmap) { + final int width = bitmap.getWidth(); + final int height = bitmap.getHeight(); + final Bitmap outputBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + + final Path path = new Path(); + path.addCircle( + (float)(width / 2) + , (float)(height / 2) + , (float) Math.min(width, (height / 2)) + , Path.Direction.CCW); + + final Canvas canvas = new Canvas(outputBitmap); + canvas.clipPath(path); + canvas.drawBitmap(bitmap, 0, 0, null); + return outputBitmap; + } + public static void restartApplication() { Context ctx = getContext(); PackageManager pm = ctx.getPackageManager(); diff --git a/smali/smali_classes2/com/vk/profile/adapter/items/UserHeaderItem$b.smali b/smali/smali_classes2/com/vk/profile/adapter/items/UserHeaderItem$b.smali index e7608b935..3b1dcdb36 100644 --- a/smali/smali_classes2/com/vk/profile/adapter/items/UserHeaderItem$b.smali +++ b/smali/smali_classes2/com/vk/profile/adapter/items/UserHeaderItem$b.smali @@ -129,7 +129,7 @@ move-result-object v0 - const/4 v1, 0x0 + const/4 v1, 0x1 invoke-virtual {v0, v1}, Lcom/vk/imageloader/view/VKImageView;->setClickable(Z)V