This commit is contained in:
Riko Sakurauchi 2019-06-20 21:37:50 +08:00
parent 2299a7a250
commit f09d8a39fe
No known key found for this signature in database
GPG Key ID: 25AC0345B92902AF
3 changed files with 95 additions and 1 deletions

View File

@ -696,6 +696,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
private final static int text_mono = 52;
private final static int text_link = 53;
private final static int text_regular = 54;
private final static int text_mention = 55;
private final static int search = 40;
@ -1340,6 +1341,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
chatActivityEnterView.getEditField().setSelectionOverride(editTextStart, editTextEnd);
chatActivityEnterView.getEditField().makeSelectedUrl();
}
} else if (id == text_mention) {
if (chatActivityEnterView != null) {
chatActivityEnterView.getEditField().setSelectionOverride(editTextStart, editTextEnd);
chatActivityEnterView.getEditField().makeSelectedMention();
}
} else if (id == text_regular) {
if (chatActivityEnterView != null) {
chatActivityEnterView.getEditField().setSelectionOverride(editTextStart, editTextEnd);
@ -1499,6 +1505,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
editTextItem.addSubItem(text_mono, stringBuilder);
editTextItem.addSubItem(text_link, LocaleController.getString("CreateLink", R.string.CreateLink));
editTextItem.addSubItem(text_mention, LocaleController.getString("CreateMention", R.string.CreateMention));
editTextItem.addSubItem(text_regular, LocaleController.getString("Regular", R.string.Regular));
if (searchItem != null) {
@ -10705,7 +10712,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
stringBuilder.setSpan(new TypefaceSpan(Typeface.MONOSPACE), 0, stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
menu.add(R.id.menu_groupbolditalic, R.id.menu_mono, 8, stringBuilder);
menu.add(R.id.menu_groupbolditalic, R.id.menu_link, 9, LocaleController.getString("CreateLink", R.string.CreateLink));
menu.add(R.id.menu_groupbolditalic, R.id.menu_regular, 10, LocaleController.getString("Regular", R.string.Regular));
menu.add(R.id.menu_groupbolditalic, R.id.menu_mention, 10, LocaleController.getString("CreateMention", R.string.CreateMention));
menu.add(R.id.menu_groupbolditalic, R.id.menu_regular, 11, LocaleController.getString("Regular", R.string.Regular));
return true;
}

View File

@ -88,6 +88,87 @@ public class EditTextCaption extends EditTextBoldCursor {
applyTextStyleToSelection(new TypefaceSpan(Typeface.MONOSPACE));
}
public void makeSelectedMention() {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle(LocaleController.getString("CreateMention", R.string.CreateMention));
final EditTextBoldCursor editText = new EditTextBoldCursor(getContext()) {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(64), MeasureSpec.EXACTLY));
}
};
editText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
editText.setTextColor(Theme.getColor(Theme.key_dialogTextBlack));
editText.setHintText("ID");
editText.setHeaderHintColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlueHeader));
editText.setSingleLine(true);
editText.setFocusable(true);
editText.setTransformHintToHeader(true);
editText.setLineColors(Theme.getColor(Theme.key_windowBackgroundWhiteInputField), Theme.getColor(Theme.key_windowBackgroundWhiteInputFieldActivated), Theme.getColor(Theme.key_windowBackgroundWhiteRedText3));
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
editText.setBackgroundDrawable(null);
editText.requestFocus();
editText.setPadding(0, 0, 0, 0);
builder.setView(editText);
final int start;
final int end;
if (selectionStart >= 0 && selectionEnd >= 0) {
start = selectionStart;
end = selectionEnd;
selectionStart = selectionEnd = -1;
} else {
start = getSelectionStart();
end = getSelectionEnd();
}
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialogInterface, i) -> {
Editable editable = getText();
CharacterStyle spans[] = editable.getSpans(start, end, CharacterStyle.class);
if (spans != null && spans.length > 0) {
for (int a = 0; a < spans.length; a++) {
CharacterStyle oldSpan = spans[a];
int spanStart = editable.getSpanStart(oldSpan);
int spanEnd = editable.getSpanEnd(oldSpan);
editable.removeSpan(oldSpan);
if (spanStart < start) {
editable.setSpan(oldSpan, spanStart, start, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
if (spanEnd > end) {
editable.setSpan(oldSpan, end, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
try {
editable.setSpan(new URLSpanUserMention(editText.getText().toString(), 1), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
} catch (Exception ignore) {
}
if (delegate != null) {
delegate.onSpansChanged();
}
});
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
builder.show().setOnShowListener(dialog -> {
editText.requestFocus();
AndroidUtilities.showKeyboard(editText);
});
if (editText != null) {
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) editText.getLayoutParams();
if (layoutParams != null) {
if (layoutParams instanceof FrameLayout.LayoutParams) {
((FrameLayout.LayoutParams) layoutParams).gravity = Gravity.CENTER_HORIZONTAL;
}
layoutParams.rightMargin = layoutParams.leftMargin = AndroidUtilities.dp(24);
layoutParams.height = AndroidUtilities.dp(36);
editText.setLayoutParams(layoutParams);
}
editText.setSelection(0, editText.getText().length());
}
}
public void makeSelectedUrl() {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle(LocaleController.getString("CreateLink", R.string.CreateLink));
@ -257,6 +338,10 @@ public class EditTextCaption extends EditTextBoldCursor {
makeSelectedUrl();
mode.finish();
return true;
} else if (item.getItemId() == R.id.menu_mention) {
makeSelectedMention();
mode.finish();
return true;
}
try {
return callback.onActionItemClicked(mode, item);

View File

@ -2,6 +2,7 @@
<item name="menu_regular" type="id"/>
<item name="menu_bold" type="id"/>
<item name="menu_italic" type="id"/>
<item name="menu_mention" type="id"/>
<item name="menu_link" type="id"/>
<item name="menu_mono" type="id"/>
<item name="menu_groupbolditalic" type="id"/>