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.h | ||||||
|     info/profile/info_profile_members_controllers.cpp |     info/profile/info_profile_members_controllers.cpp | ||||||
|     info/profile/info_profile_members_controllers.h |     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.cpp | ||||||
|     info/profile/info_profile_text.h |     info/profile/info_profile_text.h | ||||||
|     info/profile/info_profile_values.cpp |     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_tab_media" = "Media"; | ||||||
| "lng_info_public_photo" = "public photo"; | "lng_info_public_photo" = "public photo"; | ||||||
| "lng_info_mobile_label" = "Mobile"; | "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_mobile_hidden" = "Hidden"; | ||||||
| "lng_info_username_label" = "Username"; | "lng_info_username_label" = "Username"; | ||||||
| "lng_info_usernames_label" = "also"; | "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_controller.h" | ||||||
| #include "info/info_memento.h" | #include "info/info_memento.h" | ||||||
| #include "info/profile/info_profile_icon.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_values.h" | ||||||
| #include "info/profile/info_profile_text.h" | #include "info/profile/info_profile_text.h" | ||||||
| #include "support/support_helper.h" | #include "support/support_helper.h" | ||||||
|  | @ -391,10 +392,17 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() { | ||||||
| 				user->session().supportHelper().infoTextValue(user)); | 				user->session().supportHelper().infoTextValue(user)); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		addInfoOneLine( | 		{ | ||||||
|  | 			const auto phoneLabel = addInfoOneLine( | ||||||
| 				tr::lng_info_mobile_label(), | 				tr::lng_info_mobile_label(), | ||||||
| 				PhoneOrHiddenValue(user), | 				PhoneOrHiddenValue(user), | ||||||
| 			tr::lng_profile_copy_phone(tr::now)); | 				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() | 		auto label = user->isBot() | ||||||
| 			? tr::lng_info_about_label() | 			? tr::lng_info_about_label() | ||||||
| 			: tr::lng_info_bio_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