mirror of https://github.com/NekoX-Dev/NekoX.git
parent
4f4e9d1246
commit
d75af66bc7
|
@ -50,6 +50,8 @@ import org.telegram.ui.Components.RecyclerListView;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import tw.nekomimi.nekogram.MessageHelper;
|
||||
|
||||
import static org.telegram.ui.ActionBar.FloatingToolbar.STYLE_THEME;
|
||||
import static org.telegram.ui.ActionBar.Theme.key_chat_inTextSelectionHighlight;
|
||||
|
||||
|
@ -1218,6 +1220,7 @@ public abstract class TextSelectionHelper<Cell extends TextSelectionHelper.Selec
|
|||
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
|
||||
menu.add(Menu.NONE, android.R.id.copy, 0, android.R.string.copy);
|
||||
menu.add(Menu.NONE, android.R.id.selectAll, 1, android.R.string.selectAll);
|
||||
menu.add(Menu.NONE, R.id.menu_translate, 2, R.string.Translate);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1254,6 +1257,20 @@ public abstract class TextSelectionHelper<Cell extends TextSelectionHelper.Selec
|
|||
invalidate();
|
||||
showActions();
|
||||
return true;
|
||||
case R.id.menu_translate:
|
||||
if (!isSelectionMode()) {
|
||||
return true;
|
||||
}
|
||||
CharSequence str = getTextForCopy();
|
||||
if (str == null) {
|
||||
return true;
|
||||
}
|
||||
MessageHelper.showTranslateDialog(textSelectionOverlay.getContext(), str.toString());
|
||||
hideActions();
|
||||
clear(true);
|
||||
if (TextSelectionHelper.this.callback != null) {
|
||||
TextSelectionHelper.this.callback.onTextCopied();
|
||||
}
|
||||
default:
|
||||
clear();
|
||||
}
|
||||
|
|
|
@ -1,18 +1,27 @@
|
|||
package tw.nekomimi.nekogram;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import org.telegram.messenger.AndroidUtilities;
|
||||
import org.telegram.messenger.BaseController;
|
||||
import org.telegram.messenger.LocaleController;
|
||||
import org.telegram.messenger.MessageObject;
|
||||
import org.telegram.messenger.R;
|
||||
import org.telegram.messenger.UserConfig;
|
||||
import org.telegram.tgnet.ConnectionsManager;
|
||||
import org.telegram.tgnet.TLRPC;
|
||||
import org.telegram.ui.ActionBar.AlertDialog;
|
||||
import org.telegram.ui.Cells.ChatMessageCell;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import tw.nekomimi.nekogram.translator.TranslateBottomSheet;
|
||||
import tw.nekomimi.nekogram.translator.Translator;
|
||||
|
||||
public class MessageHelper extends BaseController {
|
||||
|
||||
private static volatile MessageHelper[] Instance = new MessageHelper[UserConfig.MAX_ACCOUNT_COUNT];
|
||||
private static AlertDialog progressDialog;
|
||||
private int lastReqId;
|
||||
|
||||
public MessageHelper(int num) {
|
||||
|
@ -32,6 +41,53 @@ public class MessageHelper extends BaseController {
|
|||
chatMessageCell.invalidate();
|
||||
}
|
||||
|
||||
public static void showTranslateDialog(Context context, String query) {
|
||||
if (NekoConfig.translationProvider < 0) {
|
||||
TranslateBottomSheet.show(context, query);
|
||||
} else {
|
||||
if (progressDialog != null) {
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
Translator.translate(query, new Translator.TranslateCallBack() {
|
||||
@Override
|
||||
public void onSuccess(String translation) {
|
||||
if (progressDialog != null) {
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
builder.setMessage(translation);
|
||||
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
|
||||
builder.setNeutralButton(LocaleController.getString("Copy", R.string.Copy), (dialog, which) -> AndroidUtilities.addToClipboard(translation));
|
||||
builder.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
if (progressDialog != null) {
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
builder.setMessage(LocaleController.getString("TranslateFailed", R.string.TranslateFailed));
|
||||
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
|
||||
builder.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUnsupported() {
|
||||
if (progressDialog != null) {
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(context);
|
||||
builder.setMessage(LocaleController.getString("TranslateApiUnsupported", R.string.TranslateApiUnsupported));
|
||||
builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null);
|
||||
builder.show();
|
||||
}
|
||||
});
|
||||
progressDialog = new AlertDialog(context, 3);
|
||||
progressDialog.showDelayed(400);
|
||||
}
|
||||
}
|
||||
|
||||
public static MessageHelper getInstance(int num) {
|
||||
MessageHelper localInstance = Instance[num];
|
||||
if (localInstance == null) {
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
<item name="acc_action_small_button" type="id"/>
|
||||
<item name="acc_action_msg_options" type="id"/>
|
||||
<item name="acc_action_open_photo" type="id"/>
|
||||
<item name="menu_translate" type="id"/>
|
||||
|
||||
<!-- there are required for focusing order customization on the passcode screen -->
|
||||
<item name="passcode_btn_1" type="id"/>
|
||||
|
|
Loading…
Reference in New Issue