Added description to context menu for anonymous phone numbers.
This commit is contained in:
		
							parent
							
								
									d424a8b039
								
							
						
					
					
						commit
						aa8ca28f77
					
				
					 5 changed files with 161 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -849,6 +849,8 @@ PRIVATE
 | 
			
		|||
    info/profile/info_profile_members.h
 | 
			
		||||
    info/profile/info_profile_members_controllers.cpp
 | 
			
		||||
    info/profile/info_profile_members_controllers.h
 | 
			
		||||
    info/profile/info_profile_phone_menu.cpp
 | 
			
		||||
    info/profile/info_profile_phone_menu.h
 | 
			
		||||
    info/profile/info_profile_text.cpp
 | 
			
		||||
    info/profile/info_profile_text.h
 | 
			
		||||
    info/profile/info_profile_values.cpp
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1196,6 +1196,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | 
			
		|||
"lng_info_tab_media" = "Media";
 | 
			
		||||
"lng_info_public_photo" = "public photo";
 | 
			
		||||
"lng_info_mobile_label" = "Mobile";
 | 
			
		||||
"lng_info_mobile_context_menu_fragment_about" = "This number is not tied to a SIM card and was acquired on {link}.";
 | 
			
		||||
"lng_info_mobile_context_menu_fragment_about_link" = "Fragment";
 | 
			
		||||
"lng_info_mobile_hidden" = "Hidden";
 | 
			
		||||
"lng_info_username_label" = "Username";
 | 
			
		||||
"lng_info_usernames_label" = "also";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,6 +45,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | 
			
		|||
#include "info/info_controller.h"
 | 
			
		||||
#include "info/info_memento.h"
 | 
			
		||||
#include "info/profile/info_profile_icon.h"
 | 
			
		||||
#include "info/profile/info_profile_phone_menu.h"
 | 
			
		||||
#include "info/profile/info_profile_values.h"
 | 
			
		||||
#include "info/profile/info_profile_text.h"
 | 
			
		||||
#include "support/support_helper.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -391,10 +392,17 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
 | 
			
		|||
				user->session().supportHelper().infoTextValue(user));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		addInfoOneLine(
 | 
			
		||||
			tr::lng_info_mobile_label(),
 | 
			
		||||
			PhoneOrHiddenValue(user),
 | 
			
		||||
			tr::lng_profile_copy_phone(tr::now));
 | 
			
		||||
		{
 | 
			
		||||
			const auto phoneLabel = addInfoOneLine(
 | 
			
		||||
				tr::lng_info_mobile_label(),
 | 
			
		||||
				PhoneOrHiddenValue(user),
 | 
			
		||||
				tr::lng_profile_copy_phone(tr::now)).text;
 | 
			
		||||
			const auto hook = [=](Ui::FlatLabel::ContextMenuRequest request) {
 | 
			
		||||
				phoneLabel->fillContextMenu(request);
 | 
			
		||||
				AddPhoneMenu(request.menu, user);
 | 
			
		||||
			};
 | 
			
		||||
			phoneLabel->setContextMenuHook(hook);
 | 
			
		||||
		}
 | 
			
		||||
		auto label = user->isBot()
 | 
			
		||||
			? tr::lng_info_about_label()
 | 
			
		||||
			: tr::lng_info_bio_label();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										123
									
								
								Telegram/SourceFiles/info/profile/info_profile_phone_menu.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								Telegram/SourceFiles/info/profile/info_profile_phone_menu.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,123 @@
 | 
			
		|||
/*
 | 
			
		||||
This file is part of Telegram Desktop,
 | 
			
		||||
the official desktop application for the Telegram messaging service.
 | 
			
		||||
 | 
			
		||||
For license and copyright information please follow this link:
 | 
			
		||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | 
			
		||||
*/
 | 
			
		||||
#include "info/profile/info_profile_phone_menu.h"
 | 
			
		||||
 | 
			
		||||
#include "data/data_user.h"
 | 
			
		||||
#include "lang/lang_keys.h"
 | 
			
		||||
#include "main/main_account.h"
 | 
			
		||||
#include "main/main_app_config.h"
 | 
			
		||||
#include "main/main_session.h"
 | 
			
		||||
#include "ui/text/text_utilities.h"
 | 
			
		||||
#include "ui/widgets/labels.h"
 | 
			
		||||
#include "ui/widgets/menu/menu_action.h"
 | 
			
		||||
#include "ui/widgets/popup_menu.h"
 | 
			
		||||
#include "styles/style_chat.h" // expandedMenuSeparator.
 | 
			
		||||
 | 
			
		||||
namespace Info {
 | 
			
		||||
namespace Profile {
 | 
			
		||||
namespace {
 | 
			
		||||
 | 
			
		||||
class TextItem final : public Ui::Menu::ItemBase {
 | 
			
		||||
public:
 | 
			
		||||
	TextItem(
 | 
			
		||||
		not_null<Ui::RpWidget*> parent,
 | 
			
		||||
		const style::Menu &st,
 | 
			
		||||
		rpl::producer<TextWithEntities> &&text);
 | 
			
		||||
 | 
			
		||||
	not_null<QAction*> action() const override;
 | 
			
		||||
	bool isEnabled() const override;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	int contentHeight() const override;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	const base::unique_qptr<Ui::FlatLabel> _label;
 | 
			
		||||
	const not_null<QAction*> _dummyAction;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TextItem::TextItem(
 | 
			
		||||
	not_null<Ui::RpWidget*> parent,
 | 
			
		||||
	const style::Menu &st,
 | 
			
		||||
	rpl::producer<TextWithEntities> &&text)
 | 
			
		||||
: ItemBase(parent, st)
 | 
			
		||||
, _label(base::make_unique_q<Ui::FlatLabel>(
 | 
			
		||||
	this,
 | 
			
		||||
	std::move(text),
 | 
			
		||||
	st::historyMessagesTTLLabel))
 | 
			
		||||
, _dummyAction(Ui::CreateChild<QAction>(parent.get())) {
 | 
			
		||||
 | 
			
		||||
	setMinWidth(st::historyMessagesTTLLabel.minWidth
 | 
			
		||||
		+ st.itemPadding.left());
 | 
			
		||||
 | 
			
		||||
	sizeValue(
 | 
			
		||||
	) | rpl::start_with_next([=](const QSize &s) {
 | 
			
		||||
		_label->moveToLeft(
 | 
			
		||||
			st.itemPadding.left(),
 | 
			
		||||
			(s.height() - _label->height()) / 2);
 | 
			
		||||
	}, lifetime());
 | 
			
		||||
 | 
			
		||||
	initResizeHook(parent->sizeValue());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
not_null<QAction*> TextItem::action() const {
 | 
			
		||||
	return _dummyAction;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TextItem::isEnabled() const {
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int TextItem::contentHeight() const {
 | 
			
		||||
	return _label->height();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace
 | 
			
		||||
 | 
			
		||||
void AddPhoneMenu(not_null<Ui::PopupMenu*> menu, not_null<UserData*> user) {
 | 
			
		||||
	if (user->isSelf()) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	using Strings = std::vector<QString>;
 | 
			
		||||
	const auto prefixes = user->session().account().appConfig().get<Strings>(
 | 
			
		||||
		u"fragment_prefixes"_q,
 | 
			
		||||
		std::vector<QString>());
 | 
			
		||||
	{
 | 
			
		||||
		const auto proj = [&phone = user->phone()](const QString &p) {
 | 
			
		||||
			return phone.startsWith(p);
 | 
			
		||||
		};
 | 
			
		||||
		if (ranges::none_of(prefixes, proj)) {
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	const auto domains = user->session().account().appConfig().get<Strings>(
 | 
			
		||||
		u"whitelisted_domains"_q,
 | 
			
		||||
		std::vector<QString>());
 | 
			
		||||
	const auto proj = [&, domain = u"fragment"_q](const QString &p) {
 | 
			
		||||
		return p.contains(domain);
 | 
			
		||||
	};
 | 
			
		||||
	const auto it = ranges::find_if(domains, proj);
 | 
			
		||||
	if (it == end(domains)) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	menu->addSeparator(&st::expandedMenuSeparator);
 | 
			
		||||
	const auto link = Ui::Text::Link(
 | 
			
		||||
		tr::lng_info_mobile_context_menu_fragment_about_link(tr::now),
 | 
			
		||||
		*it);
 | 
			
		||||
	menu->addAction(base::make_unique_q<TextItem>(
 | 
			
		||||
		menu->menu(),
 | 
			
		||||
		st::reactionMenu.menu,
 | 
			
		||||
		tr::lng_info_mobile_context_menu_fragment_about(
 | 
			
		||||
			lt_link,
 | 
			
		||||
			rpl::single(link),
 | 
			
		||||
			Ui::Text::RichLangValue)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace Profile
 | 
			
		||||
} // namespace Info
 | 
			
		||||
							
								
								
									
										22
									
								
								Telegram/SourceFiles/info/profile/info_profile_phone_menu.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								Telegram/SourceFiles/info/profile/info_profile_phone_menu.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
/*
 | 
			
		||||
This file is part of Telegram Desktop,
 | 
			
		||||
the official desktop application for the Telegram messaging service.
 | 
			
		||||
 | 
			
		||||
For license and copyright information please follow this link:
 | 
			
		||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | 
			
		||||
*/
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
class UserData;
 | 
			
		||||
 | 
			
		||||
namespace Ui {
 | 
			
		||||
class PopupMenu;
 | 
			
		||||
} // namespace Ui
 | 
			
		||||
 | 
			
		||||
namespace Info {
 | 
			
		||||
namespace Profile {
 | 
			
		||||
 | 
			
		||||
void AddPhoneMenu(not_null<Ui::PopupMenu*> menu, not_null<UserData*> user);
 | 
			
		||||
 | 
			
		||||
} // namespace Profile
 | 
			
		||||
} // namespace Info
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue