From dd9b2a8a58687ef05741303628f609eb1f56745e Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Sun, 10 Jul 2022 17:30:53 +0300 Subject: [PATCH] menu inj test --- .../ru/vtosters/lite/ui/vkui/MenuBuilder.java | 108 ++++++++++++++++++ .../CommunityFragmentActionsMenuBuilder.smali | 2 + .../ProfileFragmentActionsMenuBuilder.smali | 2 + 3 files changed, 112 insertions(+) create mode 100644 app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java diff --git a/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java b/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java new file mode 100644 index 000000000..a79927db4 --- /dev/null +++ b/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java @@ -0,0 +1,108 @@ +package ru.vtosters.lite.ui.vkui; + +import static ru.vtosters.lite.foaf.FoafBase.*; +import static ru.vtosters.lite.utils.Globals.getUserID; + +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.util.Log; +import android.view.View; +import android.widget.Toast; + +import com.vk.core.dialogs.actionspopup.ActionsPopup; +import com.vk.profile.ui.components.CommunityFragmentActionsMenuBuilder; +import com.vk.profile.ui.components.ProfileFragmentActionsMenuBuilder; +import com.vtosters.lite.api.ExtendedCommunityProfile; +import com.vtosters.lite.api.ExtendedUserProfile; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Objects; + +import kotlin.Unit; +import kotlin.jvm.b.Functions; + +public class MenuBuilder{ + private static Field apView; + private static Field pfambObject; + private static Field cfambObject; + private static Method apMethod; + + static{ + try { + apView = ActionsPopup.b.class.getDeclaredField("g"); + apView.setAccessible(true); + + apMethod = ActionsPopup.b.class.getDeclaredMethod("a", String.class, Drawable.class, kotlin.jvm.b.Functions.class); + + pfambObject = ProfileFragmentActionsMenuBuilder.class.getDeclaredField("b"); + pfambObject.setAccessible(true); + + cfambObject = CommunityFragmentActionsMenuBuilder.class.getDeclaredField("b"); + cfambObject.setAccessible(true); + } catch (NoSuchFieldException | NoSuchMethodException e) { + Log.e("VTLite", "Reflection failed");"); + e.printStackTrace(); + } + } + + public static void injectAP(final ProfileFragmentActionsMenuBuilder mb, final ActionsPopup.b builder){ + try { + final ExtendedUserProfile eup = (ExtendedUserProfile) pfambObject.get(mb); + final Context ctx = ((View) Objects.requireNonNull(apView.get(builder))).getContext(); + +// addItem(builder, "Изменить имя", () -> { +// RenameTool.createDialog(eup, ctx); +// return Unit.a; +// }); + + addItem(builder, "Скопировать ID", () -> { + copy(ctx, String.valueOf(getUserID(eup))); + return Unit.a; + }); + + addItem(builder, "Дополнительная информация", () -> { + loadAndShow(ctx, getUserID(eup)); + return Unit.a; + }); + + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + } + + public static void injectAP(final CommunityFragmentActionsMenuBuilder mb, final ActionsPopup.b builder){ + try { + final ExtendedCommunityProfile ecp = (ExtendedCommunityProfile) cfambObject.get(mb); + final Context ctx = ((View) apView.get(builder)).getContext(); + +// addItem(builder, "Изменить имя", () -> { +// RenameTool.createDialogGroup(ecp, ctx); +// return Unit.a; +// }); + + addItem(builder, "Скопировать ID", () -> { + copy(ctx, String.valueOf(getUserID(ecp))); + return Unit.a; + }); + + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + } + + public static void copy(Context ctx, String txt){ + ClipboardManager clipboard = (ClipboardManager) ctx.getSystemService(Context.CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText("MBH-ST", txt); + clipboard.setPrimaryClip(clip); + + Toast.makeText(ctx, "Скопировано!", Toast.LENGTH_SHORT).show(); + } + + public static void addItem(final ActionsPopup.b builder, final String title, final Functions onClick) throws InvocationTargetException, IllegalAccessException{ + apMethod.invoke(builder, title, null, onClick); + } +} \ No newline at end of file diff --git a/smali/smali_classes4/com/vk/profile/ui/components/CommunityFragmentActionsMenuBuilder.smali b/smali/smali_classes4/com/vk/profile/ui/components/CommunityFragmentActionsMenuBuilder.smali index 3818e1e96..036106101 100644 --- a/smali/smali_classes4/com/vk/profile/ui/components/CommunityFragmentActionsMenuBuilder.smali +++ b/smali/smali_classes4/com/vk/profile/ui/components/CommunityFragmentActionsMenuBuilder.smali @@ -38,6 +38,8 @@ move-result-object v7 + invoke-static {p0, v7}, Lru/vtosters/lite/ui/vkui/MenuBuilder;->injectAP(Lcom/vk/profile/ui/components/CommunityFragmentActionsMenuBuilder;Lcom/vk/core/dialogs/actionspopup/ActionsPopup$b;)V + .line 2 iget-object v0, p0, Lcom/vk/profile/ui/components/CommunityFragmentActionsMenuBuilder;->b:Lcom/vtosters/lite/api/ExtendedCommunityProfile; diff --git a/smali/smali_classes4/com/vk/profile/ui/components/ProfileFragmentActionsMenuBuilder.smali b/smali/smali_classes4/com/vk/profile/ui/components/ProfileFragmentActionsMenuBuilder.smali index 6e475055d..3e9180faa 100644 --- a/smali/smali_classes4/com/vk/profile/ui/components/ProfileFragmentActionsMenuBuilder.smali +++ b/smali/smali_classes4/com/vk/profile/ui/components/ProfileFragmentActionsMenuBuilder.smali @@ -51,6 +51,8 @@ move-result-object v7 + invoke-static {p0, v7}, Lru/vtosters/lite/ui/vkui/MenuBuilder;->injectAP(Lcom/vk/profile/ui/components/ProfileFragmentActionsMenuBuilder;Lcom/vk/core/dialogs/actionspopup/ActionsPopup$b;)V + .line 2 invoke-direct {p0}, Lcom/vk/profile/ui/components/ProfileFragmentActionsMenuBuilder;->q()Z