Copy inline button data

This commit is contained in:
NekoInverter 2020-02-08 12:13:55 +08:00
parent 9dc029ff6a
commit 92380ecfea
2 changed files with 46 additions and 2 deletions

View File

@ -35,6 +35,7 @@ import android.graphics.drawable.RippleDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.text.Layout;
import android.text.Spannable;
@ -52,6 +53,7 @@ import android.view.HapticFeedbackConstants;
import android.view.MotionEvent;
import android.view.SoundEffectConstants;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.ViewStructure;
import android.view.accessibility.AccessibilityEvent;
@ -61,6 +63,8 @@ import android.view.accessibility.AccessibilityNodeProvider;
import android.view.animation.Interpolator;
import android.widget.Toast;
import com.google.gson.Gson;
import org.telegram.PhoneFormat.PhoneFormat;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.ChatObject;
@ -88,6 +92,7 @@ import org.telegram.messenger.browser.Browser;
import org.telegram.tgnet.ConnectionsManager;
import org.telegram.tgnet.TLObject;
import org.telegram.tgnet.TLRPC;
import org.telegram.ui.ActionBar.AlertDialog;
import org.telegram.ui.ActionBar.Theme;
import org.telegram.ui.ChatActivity;
import org.telegram.ui.Components.AnimatedFileDrawable;
@ -1553,6 +1558,43 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
int y = (int) event.getY();
boolean result = false;
final Handler handler = new Handler();
Runnable mLongPressed = () -> {
if (pressedBotButton != -1) {
BotButton button = botButtons.get(pressedBotButton);
Gson gson = new Gson();
if (!TextUtils.isEmpty(button.button.url)) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setItems(new CharSequence[]{LocaleController.getString("Copy", R.string.Copy), LocaleController.getString("CopyLink", R.string.CopyLink)}, (dialogInterface, i) -> {
if (i == 0) {
try {
AndroidUtilities.addToClipboard(gson.toJson(button.button));
Toast.makeText(getContext(), LocaleController.getString("TextCopied", R.string.TextCopied), Toast.LENGTH_SHORT).show();
} catch (Exception e) {
FileLog.e(e);
}
} else if (i == 1) {
try {
AndroidUtilities.addToClipboard(button.button.url);
Toast.makeText(getContext(), LocaleController.getString("LinkCopied", R.string.LinkCopied), Toast.LENGTH_SHORT).show();
} catch (Exception e) {
FileLog.e(e);
}
}
});
builder.show();
} else {
try {
AndroidUtilities.addToClipboard(gson.toJson(button.button));
Toast.makeText(getContext(), LocaleController.getString("TextCopied", R.string.TextCopied), Toast.LENGTH_SHORT).show();
} catch (Exception e) {
FileLog.e(e);
}
}
pressedBotButton = -1;
invalidate();
}
};
if (event.getAction() == MotionEvent.ACTION_DOWN) {
int addX;
if (currentMessageObject.isOutOwner()) {
@ -1567,6 +1609,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
pressedBotButton = a;
invalidate();
result = true;
handler.postDelayed(mLongPressed, ViewConfiguration.getLongPressTimeout());
break;
}
}
@ -1636,6 +1679,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate
}
if (!result) {
result = checkBotButtonMotionEvent(event);
disallowLongPress = result;
}
if (!result) {
result = checkPollButtonMotionEvent(event);

View File

@ -1009,7 +1009,7 @@ public class AlertsCreator {
revokeTimeLimit = MessagesController.getInstance(account).revokeTimeLimit;
}
boolean canDeleteInbox = !secret && user != null && canRevokeInbox && revokeTimeLimit == 0x7fffffff;
final boolean[] deleteForAll = { true };
final boolean[] deleteForAll = {true};
if (!second && canDeleteInbox) {
cell[0] = new CheckBoxCell(context, 1);
@ -2428,7 +2428,7 @@ public class AlertsCreator {
}
final boolean[] checks = new boolean[3];
final boolean[] deleteForAll = { true };
final boolean[] deleteForAll = {true};
TLRPC.User actionUser = null;
boolean canRevokeInbox = user != null && MessagesController.getInstance(currentAccount).canRevokePmInbox;
int revokeTimeLimit;