diff --git a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java index c648f3638..e50aba803 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/MessagesHook.java @@ -1,19 +1,184 @@ package ru.vtosters.lite.hooks; +import static ru.vtosters.lite.utils.AndroidUtils.dp2px; +import static ru.vtosters.lite.utils.AndroidUtils.getDefaultPrefs; +import static ru.vtosters.lite.utils.AndroidUtils.sendToast; import static ru.vtosters.lite.utils.Preferences.getBoolValue; +import static ru.vtosters.lite.utils.ThemesUtils.getTextAttr; +import android.annotation.SuppressLint; +import android.content.Context; import android.text.TextUtils; +import android.util.TypedValue; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.RadioButton; +import android.widget.RadioGroup; + +import androidx.appcompat.view.ContextThemeWrapper; + +import com.vk.api.internal.MethodCall; +import com.vk.core.dialogs.alert.VkAlertDialog; import org.json.JSONObject; import ru.vtosters.lite.translators.BaseTranslator; +import ru.vtosters.lite.utils.AndroidUtils; -public class MessagesHook { - public static String injectOwnText(String oldText) { +public class MessagesHook{ + public static Boolean isSilentEnabled = false; + public static String bombCount = "0"; + + + public static String injectOwnText(String oldText){ var translator = BaseTranslator.getInstance(); if (!TextUtils.isEmpty(oldText) && getBoolValue("autotranslate", false)) { return translator.translate(oldText); } return oldText; } + + public static void test(){ + sendToast("LongClick"); + } + + public static void onLongClick(View view){ + view.setOnLongClickListener(v -> { + argDialog(v.getContext()); + return true; + }); + } + + private static void argDialog(Context context){ + LinearLayout mContainer = new LinearLayout(context); + + RadioGroup rg = new RadioGroup(context); + + rg.setPadding(dp2px(18f), dp2px(12f), dp2px(18f), 0); + + RadioButton zero = new RadioButton(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton)); + RadioButton one = new RadioButton(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton)); + RadioButton two = new RadioButton(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton)); + RadioButton three = new RadioButton(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton)); + RadioButton four = new RadioButton(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton)); + RadioButton five = new RadioButton(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_RadioButton)); + + rg.addView(zero); + rg.addView(one); + rg.addView(two); + rg.addView(three); + rg.addView(four); + rg.addView(five); + + zero.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f)); + one.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f)); + two.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f)); + three.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f)); + four.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f)); + five.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f)); + + zero.setText("Отключить"); + one.setText("15 секунд"); + two.setText("1 минута"); + three.setText("5 минут"); + four.setText("1 час"); + five.setText("24 часа"); + + zero.setTextColor(getTextAttr()); + one.setTextColor(getTextAttr()); + two.setTextColor(getTextAttr()); + three.setTextColor(getTextAttr()); + four.setTextColor(getTextAttr()); + five.setTextColor(getTextAttr()); + + switch(bombCount) { + case "15s": + one.setChecked(true); + break; + case "1m": + two.setChecked(true); + break; + case "5m": + three.setChecked(true); + break; + case "1h": + four.setChecked(true); + break; + case "24h": + five.setChecked(true); + break; + default: + zero.setChecked(true); + break; + } + + @SuppressLint("UseSwitchCompatOrMaterialCode") + var silentSwitch = new android.widget.Switch(context); + silentSwitch.setText("Бесшумные сообщения"); + silentSwitch.setTextColor(getTextAttr()); + silentSwitch.setChecked(isSilentEnabled); + silentSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { + isSilentEnabled = isChecked; + }); + silentSwitch.setPadding(dp2px(18f), dp2px(12f), dp2px(18f), 0); + + mContainer.addView(silentSwitch); + mContainer.addView(rg); + + VkAlertDialog.Builder builder = new VkAlertDialog.Builder(context); + builder.setTitle("Отправка сообщений"); + builder.setMessage("Выберите аргументы"); + builder.setCancelable(true); + builder.setNegativeButton("Отмена", null); + builder.setView(mContainer); + builder.setPositiveButton("Применить", (dialog, which) -> { + var checked = rg.getCheckedRadioButtonId(); + + if (checked == zero.getId()) { + bombCount = "0"; + } else if (checked == one.getId()) { + bombCount = "15s"; + } else if (checked == two.getId()) { + bombCount = "1m"; + } else if (checked == three.getId()) { + bombCount = "5m"; + } else if (checked == four.getId()) { + bombCount = "1h"; + } else if (checked == five.getId()) { + bombCount = "24h"; + } + }); + + builder.show(); + } + + public static void injRequest(MethodCall.a req) { + var time = expireTime(); + + if (time > 0) { + req.a("expire_ttl", time); + } + + if (isSilentEnabled) { + req.a("silent", 1); + } + + } + + public static int expireTime() { + switch (bombCount) { + case "15s": + return 15; + case "1m": + return 60; + case "5m": + return 300; + case "1h": + return 3600; + case "24h": + return 86400; + default: + return 0; + } + } } diff --git a/smali/smali_classes3/com/vk/im/engine/internal/api_commands/messages/MessagesSendApiCmd.smali b/smali/smali_classes3/com/vk/im/engine/internal/api_commands/messages/MessagesSendApiCmd.smali index 3dc058457..1817b7626 100644 --- a/smali/smali_classes3/com/vk/im/engine/internal/api_commands/messages/MessagesSendApiCmd.smali +++ b/smali/smali_classes3/com/vk/im/engine/internal/api_commands/messages/MessagesSendApiCmd.smali @@ -762,6 +762,8 @@ invoke-virtual {v0, v4, v3}, Lcom/vk/api/internal/MethodCall$a;->a(Ljava/lang/String;Ljava/lang/String;)Lcom/vk/api/internal/MethodCall$a; + invoke-static {v0}, Lru/vtosters/lite/hooks/MessagesHook;->injRequest(Lcom/vk/api/internal/MethodCall$a;)V + .line 16 iget-object v3, p0, Lcom/vk/im/engine/internal/api_commands/messages/MessagesSendApiCmd;->a:Lcom/vk/im/engine/models/messages/MsgFromUser; diff --git a/smali/smali_classes3/com/vk/im/engine/internal/jobs/msg/MsgSendMultipleJob.smali b/smali/smali_classes3/com/vk/im/engine/internal/jobs/msg/MsgSendMultipleJob.smali index 370ddc25f..1070a2641 100644 --- a/smali/smali_classes3/com/vk/im/engine/internal/jobs/msg/MsgSendMultipleJob.smali +++ b/smali/smali_classes3/com/vk/im/engine/internal/jobs/msg/MsgSendMultipleJob.smali @@ -249,6 +249,8 @@ invoke-virtual {p2, v1, v0}, Lcom/vk/api/internal/MethodCall$a;->a(Ljava/lang/String;Ljava/lang/String;)Lcom/vk/api/internal/MethodCall$a; + invoke-static {p2}, Lru/vtosters/lite/hooks/MessagesHook;->injRequest(Lcom/vk/api/internal/MethodCall$a;)V + .line 6 invoke-interface {p1}, Lcom/vk/im/engine/ImEnvironment;->m0()I diff --git a/smali/smali_classes3/com/vk/im/engine/internal/jobs/msg/MsgSendUncheckedJob.smali b/smali/smali_classes3/com/vk/im/engine/internal/jobs/msg/MsgSendUncheckedJob.smali index 04e197c33..fab14c633 100644 --- a/smali/smali_classes3/com/vk/im/engine/internal/jobs/msg/MsgSendUncheckedJob.smali +++ b/smali/smali_classes3/com/vk/im/engine/internal/jobs/msg/MsgSendUncheckedJob.smali @@ -126,6 +126,8 @@ invoke-virtual {p2, v1, v0}, Lcom/vk/api/internal/MethodCall$a;->a(Ljava/lang/String;Ljava/lang/String;)Lcom/vk/api/internal/MethodCall$a; + invoke-static {p2}, Lru/vtosters/lite/hooks/MessagesHook;->injRequest(Lcom/vk/api/internal/MethodCall$a;)V + .line 6 iget-object v0, p0, Lcom/vk/im/engine/internal/jobs/msg/MsgSendUncheckedJob;->d:Ljava/lang/String; diff --git a/smali/smali_classes5/com/vtosters/lite/ui/WriteBar.smali b/smali/smali_classes5/com/vtosters/lite/ui/WriteBar.smali index afa814966..08079f8e0 100644 --- a/smali/smali_classes5/com/vtosters/lite/ui/WriteBar.smali +++ b/smali/smali_classes5/com/vtosters/lite/ui/WriteBar.smali @@ -1697,6 +1697,8 @@ invoke-static {v0, v2}, Lcom/vk/extensions/ViewExtKt;->b(Landroid/view/View;Landroid/view/View$OnClickListener;)V + invoke-static {v0}, Lru/vtosters/lite/hooks/MessagesHook;->onLongClick(Landroid/view/View;)V + .line 62 iget-object v0, p0, Lcom/vtosters/lite/ui/WriteBar;->a0:Landroid/view/View;