diff --git a/TMessagesProj/src/main/java/org/spacegram/SpaceGramConfig.java b/TMessagesProj/src/main/java/org/spacegram/SpaceGramConfig.java index a352f66691d..473c782965b 100644 --- a/TMessagesProj/src/main/java/org/spacegram/SpaceGramConfig.java +++ b/TMessagesProj/src/main/java/org/spacegram/SpaceGramConfig.java @@ -17,6 +17,18 @@ public class SpaceGramConfig { public static String translateSkipLang = ""; public static boolean autoTranslate = false; + public static boolean contextShowUserId = true; + public static boolean contextSaveMediaQuick = true; + public static boolean contextCopyMessageLink = true; + public static boolean contextPinShortcuts = true; + public static boolean contextForwardProToggle = true; + + public static boolean forwardProEnabled = true; + public static boolean forwardProMultipleOption = false; + public static boolean forwardProConfirmAlert = false; + public static boolean forwardProDrawingMulti = false; + public static int forwardProRepeatCount = 5; + // 0 = normal, 1 = fast, 2 = extreme public static int networkUploadSpeedMode = 0; public static int networkDownloadSpeedMode = 0; @@ -39,6 +51,17 @@ public static void loadConfig() { translateTargetLang = preferences.getString("translateTargetLang", ""); translateSkipLang = preferences.getString("translateSkipLang", ""); autoTranslate = preferences.getBoolean("autoTranslate", false); + contextShowUserId = preferences.getBoolean("contextShowUserId", true); + contextSaveMediaQuick = preferences.getBoolean("contextSaveMediaQuick", true); + contextCopyMessageLink = preferences.getBoolean("contextCopyMessageLink", true); + contextPinShortcuts = preferences.getBoolean("contextPinShortcuts", true); + contextForwardProToggle = preferences.getBoolean("contextForwardProToggle", true); + + forwardProEnabled = preferences.getBoolean("forwardProEnabled", true); + forwardProMultipleOption = preferences.getBoolean("forwardProMultipleOption", false); + forwardProConfirmAlert = preferences.getBoolean("forwardProConfirmAlert", false); + forwardProDrawingMulti = preferences.getBoolean("forwardProDrawingMulti", false); + forwardProRepeatCount = clampRepeatCount(preferences.getInt("forwardProRepeatCount", 5)); networkUploadSpeedMode = clampSpeedMode(preferences.getInt("networkUploadSpeedMode", -1)); networkDownloadSpeedMode = clampSpeedMode(preferences.getInt("networkDownloadSpeedMode", -1)); @@ -66,6 +89,16 @@ public static void saveConfig() { editor.putString("translateTargetLang", translateTargetLang); editor.putString("translateSkipLang", translateSkipLang); editor.putBoolean("autoTranslate", autoTranslate); + editor.putBoolean("contextShowUserId", contextShowUserId); + editor.putBoolean("contextSaveMediaQuick", contextSaveMediaQuick); + editor.putBoolean("contextCopyMessageLink", contextCopyMessageLink); + editor.putBoolean("contextPinShortcuts", contextPinShortcuts); + editor.putBoolean("contextForwardProToggle", contextForwardProToggle); + editor.putBoolean("forwardProEnabled", forwardProEnabled); + editor.putBoolean("forwardProMultipleOption", forwardProMultipleOption); + editor.putBoolean("forwardProConfirmAlert", forwardProConfirmAlert); + editor.putBoolean("forwardProDrawingMulti", forwardProDrawingMulti); + editor.putInt("forwardProRepeatCount", clampRepeatCount(forwardProRepeatCount)); editor.putInt("networkUploadSpeedMode", networkUploadSpeedMode); editor.putInt("networkDownloadSpeedMode", networkDownloadSpeedMode); @@ -104,4 +137,8 @@ private static int clampSpeedMode(int mode) { } return Math.max(0, Math.min(2, mode)); } + + public static int clampRepeatCount(int count) { + return Math.max(1, Math.min(20, count)); + } } diff --git a/TMessagesProj/src/main/java/org/spacegram/ui/SpaceGramChatSettingsActivity.java b/TMessagesProj/src/main/java/org/spacegram/ui/SpaceGramChatSettingsActivity.java new file mode 100644 index 00000000000..e9a65f83e6b --- /dev/null +++ b/TMessagesProj/src/main/java/org/spacegram/ui/SpaceGramChatSettingsActivity.java @@ -0,0 +1,248 @@ +package org.spacegram.ui; + +import android.content.Context; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ScrollView; + +import org.spacegram.SpaceGramConfig; +import org.telegram.messenger.LocaleController; +import org.telegram.messenger.R; +import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.ActionBar.AlertDialog; +import org.telegram.ui.ActionBar.BaseFragment; +import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.Cells.TextCheckCell; +import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.UItem; +import org.telegram.ui.Components.UniversalAdapter; +import org.telegram.ui.Components.UniversalRecyclerView; + +import java.util.ArrayList; + +public class SpaceGramChatSettingsActivity extends BaseFragment { + + private static final int ITEM_CONTEXT_MENU = 1; + private static final int ITEM_FORWARD_PRO = 2; + private static final int ITEM_FORWARD_PRO_ENABLED = 3; + private static final int ITEM_FORWARD_MULTIPLE = 4; + private static final int ITEM_FORWARD_CONFIRM = 5; + private static final int ITEM_FORWARD_DRAWING_MULTI = 6; + private static final int ITEM_FORWARD_REPEAT_COUNT = 7; + + private UniversalRecyclerView listView; + + @Override + public View createView(Context context) { + actionBar.setBackButtonImage(R.drawable.ic_ab_back); + actionBar.setAllowOverlayTitle(true); + actionBar.setTitle(LocaleController.getString("SettingsSpaceGramChat", R.string.SettingsSpaceGramChat)); + actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { + @Override + public void onItemClick(int id) { + if (id == -1) { + finishFragment(); + } + } + }); + + fragmentView = new FrameLayout(context); + fragmentView.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundGray)); + FrameLayout frameLayout = (FrameLayout) fragmentView; + + listView = new UniversalRecyclerView(this, this::fillItems, this::onClick, null); + frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + return fragmentView; + } + + private void fillItems(ArrayList items, UniversalAdapter adapter) { + items.add(UItem.asHeader(LocaleController.getString("SettingsSpaceGramChatContextualMenu", R.string.SettingsSpaceGramChatContextualMenu))); + items.add(UItem.asButton( + ITEM_CONTEXT_MENU, + R.drawable.settings_chat, + LocaleController.getString("SettingsSpaceGramChatContextualMenu", R.string.SettingsSpaceGramChatContextualMenu), + LocaleController.getString("SettingsSpaceGramChatContextualMenuInfo", R.string.SettingsSpaceGramChatContextualMenuInfo) + )); + items.add(UItem.asShadow(LocaleController.getString("SettingsSpaceGramClientSideNote", R.string.SettingsSpaceGramClientSideNote))); + + items.add(UItem.asHeader(LocaleController.getString("SettingsSpaceGramChatForwardPro", R.string.SettingsSpaceGramChatForwardPro))); + items.add(UItem.asCheck( + ITEM_FORWARD_PRO_ENABLED, + LocaleController.getString("SettingsSpaceGramChatForwardProEnabled", R.string.SettingsSpaceGramChatForwardProEnabled) + ).setChecked(SpaceGramConfig.forwardProEnabled)); + items.add(UItem.asCheck( + ITEM_FORWARD_MULTIPLE, + LocaleController.getString("SettingsSpaceGramChatForwardMultiple", R.string.SettingsSpaceGramChatForwardMultiple) + ).setChecked(SpaceGramConfig.forwardProMultipleOption)); + items.add(UItem.asCheck( + ITEM_FORWARD_CONFIRM, + LocaleController.getString("SettingsSpaceGramChatForwardConfirmAlert", R.string.SettingsSpaceGramChatForwardConfirmAlert) + ).setChecked(SpaceGramConfig.forwardProConfirmAlert)); + items.add(UItem.asCheck( + ITEM_FORWARD_DRAWING_MULTI, + LocaleController.getString("SettingsSpaceGramChatForwardDrawingMulti", R.string.SettingsSpaceGramChatForwardDrawingMulti) + ).setChecked(SpaceGramConfig.forwardProDrawingMulti)); + items.add(UItem.asSettingsCell( + ITEM_FORWARD_REPEAT_COUNT, + 0, + LocaleController.getString("SettingsSpaceGramChatForwardRepeatCount", R.string.SettingsSpaceGramChatForwardRepeatCount), + String.valueOf(SpaceGramConfig.forwardProRepeatCount) + )); + items.add(UItem.asButton( + ITEM_FORWARD_PRO, + R.drawable.msg_customize, + LocaleController.getString("SettingsSpaceGramChatForwardPro", R.string.SettingsSpaceGramChatForwardPro), + LocaleController.getString("SettingsSpaceGramChatForwardProInfo", R.string.SettingsSpaceGramChatForwardProInfo) + )); + items.add(UItem.asShadow(LocaleController.getString("SettingsSpaceGramClientSideNote", R.string.SettingsSpaceGramClientSideNote))); + } + + private void onClick(UItem item, View view, int position, float x, float y) { + if (item.id == ITEM_CONTEXT_MENU) { + showContextualMenuOptions(); + return; + } + if (item.id == ITEM_FORWARD_PRO) { + showForwardProOptions(); + return; + } + if (item.id == ITEM_FORWARD_PRO_ENABLED) { + SpaceGramConfig.forwardProEnabled = !SpaceGramConfig.forwardProEnabled; + } else if (item.id == ITEM_FORWARD_MULTIPLE) { + SpaceGramConfig.forwardProMultipleOption = !SpaceGramConfig.forwardProMultipleOption; + } else if (item.id == ITEM_FORWARD_CONFIRM) { + SpaceGramConfig.forwardProConfirmAlert = !SpaceGramConfig.forwardProConfirmAlert; + } else if (item.id == ITEM_FORWARD_DRAWING_MULTI) { + SpaceGramConfig.forwardProDrawingMulti = !SpaceGramConfig.forwardProDrawingMulti; + } else if (item.id == ITEM_FORWARD_REPEAT_COUNT) { + SpaceGramConfig.forwardProRepeatCount++; + if (SpaceGramConfig.forwardProRepeatCount > 20) { + SpaceGramConfig.forwardProRepeatCount = 1; + } + } + SpaceGramConfig.saveConfig(); + listView.adapter.update(true); + } + + private void showContextualMenuOptions() { + Context context = getParentActivity(); + if (context == null) { + return; + } + + ScrollView scrollView = new ScrollView(context); + LinearLayout container = new LinearLayout(context); + container.setOrientation(LinearLayout.VERTICAL); + scrollView.addView(container, new FrameLayout.LayoutParams(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + + addContextToggle(container, + LocaleController.getString("SettingsSpaceGramContextShowId", R.string.SettingsSpaceGramContextShowId), + SpaceGramConfig.contextShowUserId, + value -> SpaceGramConfig.contextShowUserId = value); + addContextToggle(container, + LocaleController.getString("SettingsSpaceGramContextSaveMedia", R.string.SettingsSpaceGramContextSaveMedia), + SpaceGramConfig.contextSaveMediaQuick, + value -> SpaceGramConfig.contextSaveMediaQuick = value); + addContextToggle(container, + LocaleController.getString("SettingsSpaceGramContextCopyMessageLink", R.string.SettingsSpaceGramContextCopyMessageLink), + SpaceGramConfig.contextCopyMessageLink, + value -> SpaceGramConfig.contextCopyMessageLink = value); + addContextToggle(container, + LocaleController.getString("SettingsSpaceGramContextPinShortcuts", R.string.SettingsSpaceGramContextPinShortcuts), + SpaceGramConfig.contextPinShortcuts, + value -> SpaceGramConfig.contextPinShortcuts = value); + addContextToggle(container, + LocaleController.getString("SettingsSpaceGramContextForwardProToggle", R.string.SettingsSpaceGramContextForwardProToggle), + SpaceGramConfig.contextForwardProToggle, + value -> SpaceGramConfig.contextForwardProToggle = value); + + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(LocaleController.getString("SettingsSpaceGramContextMenuDialogTitle", R.string.SettingsSpaceGramContextMenuDialogTitle)); + builder.setView(scrollView); + builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialog, which) -> { + SpaceGramConfig.saveConfig(); + listView.adapter.update(true); + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + showDialog(builder.create()); + } + + private void showForwardProOptions() { + Context context = getParentActivity(); + if (context == null) { + return; + } + + ScrollView scrollView = new ScrollView(context); + LinearLayout container = new LinearLayout(context); + container.setOrientation(LinearLayout.VERTICAL); + scrollView.addView(container, new FrameLayout.LayoutParams(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + + addContextToggle(container, + LocaleController.getString("SettingsSpaceGramChatForwardProEnabled", R.string.SettingsSpaceGramChatForwardProEnabled), + SpaceGramConfig.forwardProEnabled, + value -> SpaceGramConfig.forwardProEnabled = value); + addContextToggle(container, + LocaleController.getString("SettingsSpaceGramChatForwardMultiple", R.string.SettingsSpaceGramChatForwardMultiple), + SpaceGramConfig.forwardProMultipleOption, + value -> SpaceGramConfig.forwardProMultipleOption = value); + addContextToggle(container, + LocaleController.getString("SettingsSpaceGramChatForwardConfirmAlert", R.string.SettingsSpaceGramChatForwardConfirmAlert), + SpaceGramConfig.forwardProConfirmAlert, + value -> SpaceGramConfig.forwardProConfirmAlert = value); + addContextToggle(container, + LocaleController.getString("SettingsSpaceGramChatForwardDrawingMulti", R.string.SettingsSpaceGramChatForwardDrawingMulti), + SpaceGramConfig.forwardProDrawingMulti, + value -> SpaceGramConfig.forwardProDrawingMulti = value); + + TextCheckCell repeatCell = new TextCheckCell(context); + repeatCell.setBackground(Theme.getSelectorDrawable(false)); + repeatCell.setTextAndCheck( + LocaleController.getString("SettingsSpaceGramChatForwardRepeatCount", R.string.SettingsSpaceGramChatForwardRepeatCount) + ": " + SpaceGramConfig.forwardProRepeatCount, + false, + false + ); + repeatCell.setOnClickListener(v -> { + SpaceGramConfig.forwardProRepeatCount = SpaceGramConfig.clampRepeatCount(SpaceGramConfig.forwardProRepeatCount + 1); + if (SpaceGramConfig.forwardProRepeatCount >= 20) { + SpaceGramConfig.forwardProRepeatCount = 1; + } + repeatCell.setTextAndCheck( + LocaleController.getString("SettingsSpaceGramChatForwardRepeatCount", R.string.SettingsSpaceGramChatForwardRepeatCount) + ": " + SpaceGramConfig.forwardProRepeatCount, + false, + false + ); + }); + container.addView(repeatCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(LocaleController.getString("SettingsSpaceGramChatForwardPro", R.string.SettingsSpaceGramChatForwardPro)); + builder.setView(scrollView); + builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialog, which) -> { + SpaceGramConfig.forwardProRepeatCount = SpaceGramConfig.clampRepeatCount(SpaceGramConfig.forwardProRepeatCount); + SpaceGramConfig.saveConfig(); + listView.adapter.update(true); + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + showDialog(builder.create()); + } + + private interface ToggleListener { + void onChanged(boolean value); + } + + private void addContextToggle(LinearLayout container, String text, boolean initialValue, ToggleListener listener) { + Context context = container.getContext(); + TextCheckCell cell = new TextCheckCell(context); + cell.setBackground(Theme.getSelectorDrawable(false)); + cell.setTextAndCheck(text, initialValue, false); + cell.setOnClickListener(v -> { + boolean newValue = !cell.isChecked(); + cell.setChecked(newValue); + listener.onChanged(newValue); + }); + container.addView(cell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); + } +} diff --git a/TMessagesProj/src/main/java/org/spacegram/ui/SpaceGramSettingsActivity.java b/TMessagesProj/src/main/java/org/spacegram/ui/SpaceGramSettingsActivity.java index 9d57a96a3fe..96888936c03 100644 --- a/TMessagesProj/src/main/java/org/spacegram/ui/SpaceGramSettingsActivity.java +++ b/TMessagesProj/src/main/java/org/spacegram/ui/SpaceGramSettingsActivity.java @@ -81,6 +81,9 @@ private void onClick(UItem item, View view, int position, float x, float y) { case 6: presentFragment(new SpaceGramExperimentalSettingsActivity()); break; + case 3: + presentFragment(new SpaceGramChatSettingsActivity()); + break; case 10: Browser.openUrl(getParentActivity(), "https://t.me/Rocket_Redireccion"); break; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java index f2a788319ca..c79ae169ec9 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java @@ -94,6 +94,8 @@ import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager.widget.ViewPager; +import org.spacegram.SpaceGramConfig; + import org.telegram.messenger.AccountInstance; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.AnimationNotificationsLocker; @@ -5039,7 +5041,7 @@ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { for (int i = 0; i < selectedDialogs.size(); i++) { topicKeys.add(MessagesStorage.TopicKey.of(selectedDialogs.get(i), 0)); } - delegate.didSelectDialogs(DialogsActivity.this, topicKeys, commentView.getFieldText(), false, notify, scheduleDate, scheduleRepeatPeriod, null); + sendSelectedDialogsWithProForward(topicKeys, commentView.getFieldText(), notify, scheduleDate, scheduleRepeatPeriod); }); writeButton.setOnLongClickListener(v -> { if (isNextButton) { @@ -11347,7 +11349,7 @@ public boolean onTouch(View v, MotionEvent event) { for (int i = 0; i < selectedDialogs.size(); i++) { topicKeys.add(MessagesStorage.TopicKey.of(selectedDialogs.get(i), 0)); } - delegate.didSelectDialogs(DialogsActivity.this, topicKeys, commentView.getFieldText(), false, notify, scheduleDate, scheduleRepeatPeriod, null); + sendSelectedDialogsWithProForward(topicKeys, commentView.getFieldText(), notify, scheduleDate, scheduleRepeatPeriod); }); boolean onlyMyself = false; @@ -11386,7 +11388,7 @@ public void didSelectDate(boolean notify, int scheduleDate, int scheduleRepeatPe for (int i = 0; i < selectedDialogs.size(); i++) { topicKeys.add(MessagesStorage.TopicKey.of(selectedDialogs.get(i), 0)); } - delegate.didSelectDialogs(DialogsActivity.this, topicKeys, commentView.getFieldText(), false, notify, scheduleDate, scheduleRepeatPeriod, null); + sendSelectedDialogsWithProForward(topicKeys, commentView.getFieldText(), notify, scheduleDate, scheduleRepeatPeriod); } }, resourcesProvider); }); @@ -11418,6 +11420,33 @@ public void didSelectDate(boolean notify, int scheduleDate, int scheduleRepeatPe return false; } + private void sendSelectedDialogsWithProForward(ArrayList topicKeys, CharSequence message, boolean notify, int scheduleDate, int scheduleRepeatPeriod) { + if (delegate == null || topicKeys == null || topicKeys.isEmpty()) { + return; + } + + Runnable sendAction = () -> { + int repeat = 1; + if (SpaceGramConfig.forwardProEnabled && SpaceGramConfig.forwardProMultipleOption) { + repeat = SpaceGramConfig.clampRepeatCount(SpaceGramConfig.forwardProRepeatCount); + } + for (int i = 0; i < repeat; i++) { + delegate.didSelectDialogs(DialogsActivity.this, topicKeys, message, false, notify, scheduleDate, scheduleRepeatPeriod, null); + } + }; + + if (SpaceGramConfig.forwardProEnabled && SpaceGramConfig.forwardProConfirmAlert && getParentActivity() != null) { + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + builder.setTitle(getString(R.string.SettingsSpaceGramChatForwardPro)); + builder.setMessage(getString(R.string.SettingsSpaceGramClientSideNote)); + builder.setPositiveButton(getString(R.string.OK), (dialog, which) -> sendAction.run()); + builder.setNegativeButton(getString(R.string.Cancel), null); + showDialog(builder.create()); + } else { + sendAction.run(); + } + } + private float getRightSlidingProgress() { if (rightSlidingDialogContainer != null && rightSlidingDialogContainer.hasFragment()) { return rightSlidingDialogContainer.openedProgress; diff --git a/TMessagesProj/src/main/res/values-es/strings.xml b/TMessagesProj/src/main/res/values-es/strings.xml index 39ef9b7a5e4..439e307d9f6 100644 --- a/TMessagesProj/src/main/res/values-es/strings.xml +++ b/TMessagesProj/src/main/res/values-es/strings.xml @@ -1,6 +1,6 @@ - SpaceGram + SpaceGram🚀 SpaceGram beta Español InglĂ©s @@ -1316,4 +1316,23 @@ \'Recordar el\' d \'de\' MMM \'de\' yyyy \'a las\' HH:mm Menu 👍 Entendido + + MenĂș contextual + Elige quĂ© opciones aparecen en el menĂș contextual del chat. + ReenvĂ­o Pro + Herramientas avanzadas de reenvĂ­o del lado cliente. + Activar ReenvĂ­o Pro + OpciĂłn de reenvĂ­o mĂșltiple + Mostrar alerta de confirmaciĂłn + EnvĂ­o mĂșltiple de dibujo + Contar mĂșltiples mensajes enviados + Mostrar ID de usuario + Guardar medios rĂĄpido + Copiar enlace del mensaje + Accesos directos de fijado + Interruptor de ReenvĂ­o Pro + Opciones del menĂș contextual + Cantidad de reenvĂ­os repetidos + Nota: estas opciones son del lado cliente y no pueden saltar restricciones del servidor de Telegram. + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml index 21a9d8cf7df..2c9f5d5b811 100644 --- a/TMessagesProj/src/main/res/values/strings.xml +++ b/TMessagesProj/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ - SpaceGram + SpaceGram🚀 SpaceGram beta English English @@ -10428,4 +10428,23 @@ On Message Pop-up Dialogue Google Translator + + Contextual Menu + Choose what appears in the chat contextual menu. + Pro Forwarding + Advanced client-side forwarding tools. + Enable Pro Forwarding + Multiple forwarding option + Show confirmation alert + Multi-send for drawings + Repeat sent message count + Show User ID + Save media quickly + Copy message link + Pin shortcuts + Pro Forwarding toggle + Contextual Menu Options + Repeat forward count + Note: these options are client-side only and cannot bypass Telegram server restrictions. + \ No newline at end of file