Use participants names for group title placeholder

This commit is contained in:
Ilya Laktyushin 2023-03-15 14:26:00 +04:00
parent 927af7afe7
commit eed0f5cee6
9 changed files with 86 additions and 0 deletions

View File

@ -9073,3 +9073,11 @@ Sorry for the inconvenience.";
"DataUsage.Reset" = "Reset Statistics"; "DataUsage.Reset" = "Reset Statistics";
"Conversation.SendWhenOnlineTooltip" = "Long tap to send the message later."; "Conversation.SendWhenOnlineTooltip" = "Long tap to send the message later.";
"Bot.Active" = "bot is active now";
"Bot.Inactive" = "bot is not active";
"Bot.Slow" = "bot replies slowly";
"Bot.TapToUse" = "Tap here to use this bot";
"CreateGroup.PeersTitleDelimeter" = ", ";
"CreateGroup.PeersTitleLastDelimeter" = " and ";

View File

@ -507,6 +507,10 @@ class CreatePollOptionItemNode: ItemListRevealOptionsItemNode, ItemListItemNode,
self.textNode.becomeFirstResponder() self.textNode.becomeFirstResponder()
} }
func selectAll() {
self.textNode.textView.selectAll(nil)
}
override func isReorderable(at point: CGPoint) -> Bool { override func isReorderable(at point: CGPoint) -> Bool {
if self.reorderControlNode.frame.contains(point), !self.reorderControlNode.isHidden, !self.isDisplayingRevealedOptions { if self.reorderControlNode.frame.contains(point), !self.reorderControlNode.isHidden, !self.isDisplayingRevealedOptions {
return true return true

View File

@ -617,6 +617,10 @@ public class CreatePollTextInputItemNode: ListViewItemNode, ASEditableTextNodeDe
} }
} }
public func selectAll() {
self.textNode.textView.selectAll(nil)
}
public func animateError() { public func animateError() {
self.textNode.layer.addShakeAnimation() self.textNode.layer.addShakeAnimation()
} }

View File

@ -1118,6 +1118,10 @@ public class ItemListAvatarAndNameInfoItemNode: ListViewItemNode, ItemListItemNo
self.inputFirstField?.becomeFirstResponder() self.inputFirstField?.becomeFirstResponder()
} }
public func selectAll() {
self.inputFirstField?.selectAll(nil)
}
override public func longTapped() { override public func longTapped() {
self.item?.longTapAction?() self.item?.longTapAction?()
} }

View File

@ -37,6 +37,7 @@ public protocol ItemListItemNode {
public protocol ItemListItemFocusableNode { public protocol ItemListItemFocusableNode {
func focus() func focus()
func selectAll()
} }
public enum ItemListInsetWithOtherSection { public enum ItemListInsetWithOtherSection {

View File

@ -472,6 +472,10 @@ public class ItemListMultilineInputItemNode: ListViewItemNode, ASEditableTextNod
} }
} }
public func selectAll() {
self.textNode.textView.selectAll(nil)
}
public func animateError() { public func animateError() {
self.textNode.layer.addShakeAnimation() self.textNode.layer.addShakeAnimation()
} }

View File

@ -473,6 +473,10 @@ public class ItemListSingleLineInputItemNode: ListViewItemNode, UITextFieldDeleg
} }
} }
public func selectAll() {
self.textNode.textField.selectAll(nil)
}
@objc public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { @objc public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if let item = self.item { if let item = self.item {
let newText = ((textField.text ?? "") as NSString).replacingCharacters(in: range, with: string) let newText = ((textField.text ?? "") as NSString).replacingCharacters(in: range, with: string)

View File

@ -347,4 +347,8 @@ class UserInfoEditingPhoneItemNode: ItemListRevealOptionsItemNode, ItemListItemN
func focus() { func focus() {
self.phoneNode.numberField?.becomeFirstResponder() self.phoneNode.numberField?.becomeFirstResponder()
} }
func selectAll() {
self.phoneNode.numberField?.textField.selectAll(nil)
}
} }

View File

@ -553,6 +553,7 @@ public func createGroupControllerImpl(context: AccountContext, peerIds: [PeerId]
var endEditingImpl: (() -> Void)? var endEditingImpl: (() -> Void)?
var ensureItemVisibleImpl: ((CreateGroupEntryTag, Bool) -> Void)? var ensureItemVisibleImpl: ((CreateGroupEntryTag, Bool) -> Void)?
var findAutoremoveReferenceNode: (() -> ItemListDisclosureItemNode?)? var findAutoremoveReferenceNode: (() -> ItemListDisclosureItemNode?)?
var selectTitleImpl: (() -> Void)?
let actionsDisposable = DisposableSet() let actionsDisposable = DisposableSet()
@ -564,6 +565,50 @@ public func createGroupControllerImpl(context: AccountContext, peerIds: [PeerId]
let uploadedAvatar = Promise<UploadedPeerPhotoData>() let uploadedAvatar = Promise<UploadedPeerPhotoData>()
var uploadedVideoAvatar: (Promise<UploadedPeerPhotoData?>, Double?)? = nil var uploadedVideoAvatar: (Promise<UploadedPeerPhotoData?>, Double?)? = nil
if initialTitle == nil && peerIds.count > 0 && peerIds.count < 5 {
let _ = (context.engine.data.get(
TelegramEngine.EngineData.Item.Peer.Peer(id: context.account.peerId),
EngineDataList(
peerIds.map(TelegramEngine.EngineData.Item.Peer.Peer.init)
)
)
|> deliverOnMainQueue).start(next: { accountPeer, peers in
var allNames: [String] = []
if case let .user(user) = accountPeer, let firstName = user.firstName, !firstName.isEmpty {
allNames.append(firstName)
}
for peer in peers {
if case let .user(user) = peer, let firstName = user.firstName, !firstName.isEmpty {
allNames.append(firstName)
}
}
if allNames.count > 1 {
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
var title: String = ""
for i in 0 ..< allNames.count {
if i == 0 {
} else if i < allNames.count - 1 {
title.append(presentationData.strings.CreateGroup_PeersTitleDelimeter)
} else {
title.append(presentationData.strings.CreateGroup_PeersTitleLastDelimeter)
}
title.append(allNames[i])
}
updateState { current in
var current = current
current.editingName = .title(title: title, type: .group)
return current
}
Queue.mainQueue().after(0.3) {
selectTitleImpl?()
}
}
})
}
let addressPromise = Promise<String?>(nil) let addressPromise = Promise<String?>(nil)
let venuesPromise = Promise<[TelegramMediaMap]?>(nil) let venuesPromise = Promise<[TelegramMediaMap]?>(nil)
if case let .locatedGroup(latitude, longitude, address) = mode { if case let .locatedGroup(latitude, longitude, address) = mode {
@ -1341,6 +1386,14 @@ public func createGroupControllerImpl(context: AccountContext, peerIds: [PeerId]
} }
} }
selectTitleImpl = { [weak controller] in
controller?.forEachItemNode({ itemNode in
if let itemNode = itemNode as? ItemListAvatarAndNameInfoItemNode {
itemNode.selectAll()
}
})
}
return controller return controller
} }