Skip to content

Commit

Permalink
feat: text style configuable
Browse files Browse the repository at this point in the history
Signed-off-by: Next Alone <12210746+NextAlone@users.noreply.github.com>
  • Loading branch information
NextAlone committed Jun 30, 2023
1 parent 287b0c5 commit 6637ebd
Show file tree
Hide file tree
Showing 11 changed files with 346 additions and 63 deletions.
158 changes: 105 additions & 53 deletions TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,7 @@
import xyz.nextalone.nnngram.helpers.TranslateHelper;
import xyz.nextalone.nnngram.translate.LanguageDetectorTimeout;
import xyz.nextalone.nnngram.ui.TranslatorSettingsPopupWrapper;
import xyz.nextalone.nnngram.ui.sortList.items.TextStyleItems;
import xyz.nextalone.nnngram.utils.Defines;
import xyz.nextalone.nnngram.utils.Log;
import xyz.nextalone.nnngram.utils.MessageUtils;
Expand Down Expand Up @@ -8032,33 +8033,58 @@ private void checkEditTextItemMenu() {
}

ActionBarMenuItem item = editTextItem.createView();
item.addSubItem(text_spoiler, LocaleController.getString("Spoiler", R.string.Spoiler));
SpannableStringBuilder stringBuilder = new SpannableStringBuilder(LocaleController.getString("Bold", R.string.Bold));
stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/rmedium.ttf")), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
item.addSubItem(text_bold, stringBuilder);
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Italic", R.string.Italic));
stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/ritalic.ttf")), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
item.addSubItem(text_italic, stringBuilder);
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Mono", R.string.Mono));
stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
item.addSubItem(text_mono, stringBuilder);
if (currentEncryptedChat == null || AndroidUtilities.getPeerLayerVersion(currentEncryptedChat.layer) >= 101) {
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Strike", R.string.Strike));
TextStyleSpan.TextStyleRun run = new TextStyleSpan.TextStyleRun();
run.flags |= TextStyleSpan.FLAG_STYLE_STRIKE;
stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
item.addSubItem(text_strike, stringBuilder);

stringBuilder = new SpannableStringBuilder(LocaleController.getString("Underline", R.string.Underline));
run = new TextStyleSpan.TextStyleRun();
run.flags |= TextStyleSpan.FLAG_STYLE_UNDERLINE;
stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
item.addSubItem(text_underline, stringBuilder);
}
item.addSubItem(text_link, LocaleController.getString("CreateLink", R.string.CreateLink));
item.addSubItem(text_mention, LocaleController.getString("CreateMention", R.string.CreateMention));
item.addSubItem(text_regular, LocaleController.getString("Regular", R.string.Regular));

SpannableStringBuilder stringBuilder;
TextStyleSpan.TextStyleRun run;
List<Integer> enabledOrder = TextStyleItems.INSTANCE.getEnabledOrder();
for (int i : enabledOrder) {
switch (i) {
case 0:
item.addSubItem(text_spoiler, LocaleController.getString("Spoiler", R.string.Spoiler));
break;
case 1:
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Bold", R.string.Bold));
stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/rmedium.ttf")), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
item.addSubItem(text_bold, stringBuilder);
break;
case 2:
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Italic", R.string.Italic));
stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/ritalic.ttf")), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
item.addSubItem(text_italic, stringBuilder);
break;
case 3:
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Mono", R.string.Mono));
stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
item.addSubItem(text_mono, stringBuilder);
break;
case 4:
if (currentEncryptedChat == null || AndroidUtilities.getPeerLayerVersion(currentEncryptedChat.layer) >= 101) {
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Strike", R.string.Strike));
run = new TextStyleSpan.TextStyleRun();
run.flags |= TextStyleSpan.FLAG_STYLE_STRIKE;
stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
item.addSubItem(text_strike, stringBuilder);
}
break;
case 5:
if (currentEncryptedChat == null || AndroidUtilities.getPeerLayerVersion(currentEncryptedChat.layer) >= 101) {
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Underline", R.string.Underline));
run = new TextStyleSpan.TextStyleRun();
run.flags |= TextStyleSpan.FLAG_STYLE_UNDERLINE;
stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
item.addSubItem(text_underline, stringBuilder);
}
break;
case 6:
item.addSubItem(text_link, LocaleController.getString("CreateLink", R.string.CreateLink));
break;
case 7:
item.addSubItem(text_mention, LocaleController.getString("CreateMention", R.string.CreateMention));
break;
case 8:
item.addSubItem(text_regular, LocaleController.getString("Regular", R.string.Regular));
break;
}
}
filledEditTextItemMenu = true;
}

Expand Down Expand Up @@ -20752,32 +20778,58 @@ public void fillActionModeMenu(Menu menu) {
menu.removeItem(android.R.id.shareText);
}
int order = 6;
menu.add(R.id.menu_groupbolditalic, R.id.menu_spoiler, order++, LocaleController.getString("Spoiler", R.string.Spoiler));

SpannableStringBuilder stringBuilder = new SpannableStringBuilder(LocaleController.getString("Bold", R.string.Bold));
stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/rmedium.ttf")), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
menu.add(R.id.menu_groupbolditalic, R.id.menu_bold, order++, stringBuilder);
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Italic", R.string.Italic));
stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/ritalic.ttf")), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
menu.add(R.id.menu_groupbolditalic, R.id.menu_italic, order++, stringBuilder);
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Mono", R.string.Mono));
stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
menu.add(R.id.menu_groupbolditalic, R.id.menu_mono, order++, stringBuilder);
if (currentEncryptedChat == null || AndroidUtilities.getPeerLayerVersion(currentEncryptedChat.layer) >= 101) {
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Strike", R.string.Strike));
TextStyleSpan.TextStyleRun run = new TextStyleSpan.TextStyleRun();
run.flags |= TextStyleSpan.FLAG_STYLE_STRIKE;
stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
menu.add(R.id.menu_groupbolditalic, R.id.menu_strike, order++, stringBuilder);
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Underline", R.string.Underline));
run = new TextStyleSpan.TextStyleRun();
run.flags |= TextStyleSpan.FLAG_STYLE_UNDERLINE;
stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
menu.add(R.id.menu_groupbolditalic, R.id.menu_underline, order++, stringBuilder);
}
menu.add(R.id.menu_groupbolditalic, R.id.menu_link, order++, LocaleController.getString("CreateLink", R.string.CreateLink));
menu.add(R.id.menu_groupbolditalic, R.id.menu_mention, order++, LocaleController.getString("CreateMention", R.string.CreateMention));
menu.add(R.id.menu_groupbolditalic, R.id.menu_regular, order++, LocaleController.getString("Regular", R.string.Regular));
SpannableStringBuilder stringBuilder;
TextStyleSpan.TextStyleRun run;
List<Integer> enabledOrder = TextStyleItems.INSTANCE.getEnabledOrder();
for (int i : enabledOrder) {
switch (i) {
case 0:
menu.add(R.id.menu_groupbolditalic, R.id.menu_spoiler, order++, LocaleController.getString("Spoiler", R.string.Spoiler));
break;
case 1:
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Bold", R.string.Bold));
stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/rmedium.ttf")), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
menu.add(R.id.menu_groupbolditalic, R.id.menu_bold, order++, stringBuilder);
break;
case 2:
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Italic", R.string.Italic));
stringBuilder.setSpan(new TypefaceSpan(AndroidUtilities.getTypeface("fonts/ritalic.ttf")), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
menu.add(R.id.menu_groupbolditalic, R.id.menu_italic, order++, stringBuilder);
break;
case 3:
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Mono", R.string.Mono));
stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
menu.add(R.id.menu_groupbolditalic, R.id.menu_mono, order++, stringBuilder);
break;
case 4:
if (currentEncryptedChat == null || AndroidUtilities.getPeerLayerVersion(currentEncryptedChat.layer) >= 101) {
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Strike", R.string.Strike));
run = new TextStyleSpan.TextStyleRun();
run.flags |= TextStyleSpan.FLAG_STYLE_STRIKE;
stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
menu.add(R.id.menu_groupbolditalic, R.id.menu_strike, order++, stringBuilder);
break;
}
case 5:
if (currentEncryptedChat == null || AndroidUtilities.getPeerLayerVersion(currentEncryptedChat.layer) >= 101) {
stringBuilder = new SpannableStringBuilder(LocaleController.getString("Underline", R.string.Underline));
run = new TextStyleSpan.TextStyleRun();
run.flags |= TextStyleSpan.FLAG_STYLE_UNDERLINE;
stringBuilder.setSpan(new TextStyleSpan(run), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
menu.add(R.id.menu_groupbolditalic, R.id.menu_underline, order++, stringBuilder);
}
break;
case 6:
menu.add(R.id.menu_groupbolditalic, R.id.menu_link, order++, LocaleController.getString("CreateLink", R.string.CreateLink));
break;
case 7:
menu.add(R.id.menu_groupbolditalic, R.id.menu_mention, order++, LocaleController.getString("CreateMention", R.string.CreateMention));
break;
case 8:
menu.add(R.id.menu_groupbolditalic, R.id.menu_regular, order++, LocaleController.getString("Regular", R.string.Regular));
break;
}
}
}

private void updateScheduledInterface(boolean animated) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@

import java.util.List;

import xyz.nextalone.nnngram.ui.sortList.items.TextStyleItems;
import xyz.nextalone.nnngram.ui.syntaxhighlight.SyntaxHighlight;

public class EditTextCaption extends EditTextBoldCursor {
Expand Down Expand Up @@ -704,15 +705,10 @@ public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
}
}
if (hasSelection()) {
infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_spoiler, LocaleController.getString("Spoiler", R.string.Spoiler)));
infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_bold, LocaleController.getString("Bold", R.string.Bold)));
infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_italic, LocaleController.getString("Italic", R.string.Italic)));
infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_mono, LocaleController.getString("Mono", R.string.Mono)));
infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_strike, LocaleController.getString("Strike", R.string.Strike)));
infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_underline, LocaleController.getString("Underline", R.string.Underline)));
infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_mention, LocaleController.getString("CreateMention", R.string.CreateMention)));
infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_link, LocaleController.getString("CreateLink", R.string.CreateLink)));
infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(R.id.menu_regular, LocaleController.getString("Regular", R.string.Regular)));
List<Integer> enabledOrder = TextStyleItems.INSTANCE.getEnabledOrder();
for (int i : enabledOrder) {
infoCompat.addAction(new AccessibilityNodeInfoCompat.AccessibilityActionCompat(TextStyleItems.INSTANCE.getItemIds()[i], TextStyleItems.INSTANCE.getItemNames()[i]));
}
}
}

Expand Down
Loading

0 comments on commit 6637ebd

Please sign in to comment.