[Improvement] Click-to-copy for phone
This commit is contained in:
parent
b25a015603
commit
92f6b6f688
2 changed files with 28 additions and 3 deletions
|
|
@ -118,6 +118,7 @@
|
|||
"ktg_group_id_copied": "Group ID copied to clipboard.",
|
||||
"ktg_supergroup_id_copied": "Supergroup ID copied to clipboard.",
|
||||
"ktg_channel_id_copied": "Channel ID copied to clipboard.",
|
||||
"ktg_phone_copied": "Phone copied to clipboard.",
|
||||
"ktg_forward_go_to_chat": "Go to chat",
|
||||
"ktg_settings_forward": "Forward",
|
||||
"ktg_settings_forward_retain_selection": "Retain selection after forward",
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "ui/layers/generic_box.h"
|
||||
#include "ui/toast/toast.h"
|
||||
#include "ui/text/text_utilities.h" // Ui::Text::ToUpper
|
||||
#include "ui/text/format_values.h" // Ui::FormatPhone
|
||||
#include "ui/text/text_variant.h"
|
||||
#include "history/history_location_manager.h" // LocationClickHandler.
|
||||
#include "history/view/history_view_context_menu.h" // HistoryView::ShowReportPeerBox
|
||||
|
|
@ -482,7 +483,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
|
|||
std::move(label),
|
||||
std::move(text),
|
||||
st::infoLabeledOneLineInline);
|
||||
result->setContextCopyText(contextCopyText);
|
||||
result.text->setContextCopyText(contextCopyText);
|
||||
return result;
|
||||
};
|
||||
if (const auto user = _peer->asUser()) {
|
||||
|
|
@ -500,7 +501,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
|
|||
std::move(idDrawableText),
|
||||
ktr("ktg_profile_copy_id"));
|
||||
|
||||
idInfo->setClickHandlerFilter([user](auto&&...) {
|
||||
idInfo.text->setClickHandlerFilter([user](auto&&...) {
|
||||
const auto idText = IDString(user);
|
||||
if (!idText.isEmpty()) {
|
||||
QGuiApplication::clipboard()->setText(idText);
|
||||
|
|
@ -518,6 +519,21 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
|
|||
user->session().supportHelper().infoTextValue(user));
|
||||
}
|
||||
|
||||
auto phoneDrawableText = rpl::combine(
|
||||
PhoneValue(user),
|
||||
UsernameValue(user),
|
||||
AboutValue(user),
|
||||
tr::lng_info_mobile_hidden()
|
||||
) | rpl::map([](
|
||||
const TextWithEntities &phone,
|
||||
const TextWithEntities &username,
|
||||
const TextWithEntities &bio,
|
||||
const QString &hidden) {
|
||||
return (phone.text.isEmpty() && username.text.isEmpty() && bio.text.isEmpty())
|
||||
? Ui::Text::WithEntities(hidden)
|
||||
: Ui::Text::Link(phone.text);
|
||||
});
|
||||
|
||||
{
|
||||
const auto phoneLabel = addInfoOneLine(
|
||||
tr::lng_info_mobile_label(),
|
||||
|
|
@ -528,6 +544,14 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
|
|||
AddPhoneMenu(request.menu, user);
|
||||
};
|
||||
phoneLabel->setContextMenuHook(hook);
|
||||
phoneLabel->setClickHandlerFilter([user](auto&&...) {
|
||||
const auto phoneText = user->phone();
|
||||
if (!phoneText.isEmpty()) {
|
||||
QGuiApplication::clipboard()->setText(Ui::FormatPhone(phoneText));
|
||||
Ui::Toast::Show(ktr("ktg_phone_copied"));
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
auto label = user->isBot()
|
||||
? tr::lng_info_about_label()
|
||||
|
|
@ -625,7 +649,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
|
|||
std::move(idDrawableText),
|
||||
ktr("ktg_profile_copy_id"));
|
||||
|
||||
idInfo->setClickHandlerFilter([peer = _peer](auto&&...) {
|
||||
idInfo.text->setClickHandlerFilter([peer = _peer](auto&&...) {
|
||||
const auto idText = IDString(peer);
|
||||
if (!idText.isEmpty()) {
|
||||
QGuiApplication::clipboard()->setText(idText);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue