mirror of
https://github.com/TelegramMessenger/Telegram-iOS.git
synced 2026-07-06 03:33:41 +02:00
Various improvements
This commit is contained in:
parent
7f59789ffc
commit
0d12dd29ad
190 changed files with 16735 additions and 5317 deletions
|
|
@ -23,6 +23,20 @@ public enum CallListControllerMode {
|
|||
case navigation
|
||||
}
|
||||
|
||||
public enum CallListEntryTag: ItemListItemTag, Equatable {
|
||||
case edit
|
||||
case showTab
|
||||
case missed
|
||||
|
||||
public func isEqual(to other: ItemListItemTag) -> Bool {
|
||||
if let other = other as? CallListEntryTag, self == other {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private final class DeleteAllButtonNode: ASDisplayNode {
|
||||
private let pressed: () -> Void
|
||||
|
||||
|
|
@ -69,6 +83,8 @@ private final class DeleteAllButtonNode: ASDisplayNode {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public final class CallListController: TelegramBaseController {
|
||||
private var controllerNode: CallListControllerNode {
|
||||
return self.displayNode as! CallListControllerNode
|
||||
|
|
@ -81,6 +97,7 @@ public final class CallListController: TelegramBaseController {
|
|||
|
||||
private let context: AccountContext
|
||||
private let mode: CallListControllerMode
|
||||
private let focusOnItemTag: CallListEntryTag?
|
||||
|
||||
private var presentationData: PresentationData
|
||||
private var presentationDataDisposable: Disposable?
|
||||
|
|
@ -96,9 +113,15 @@ public final class CallListController: TelegramBaseController {
|
|||
private let clearDisposable = MetaDisposable()
|
||||
private var createConferenceCallDisposable: Disposable?
|
||||
|
||||
public init(context: AccountContext, mode: CallListControllerMode) {
|
||||
public init(
|
||||
context: AccountContext,
|
||||
mode: CallListControllerMode,
|
||||
focusOnItemTag: CallListEntryTag? = nil
|
||||
) {
|
||||
self.context = context
|
||||
self.mode = mode
|
||||
self.focusOnItemTag = focusOnItemTag
|
||||
|
||||
self.presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||
|
||||
self.segmentedTitleView = ItemListControllerSegmentedTitleView(theme: self.presentationData.theme, segments: [self.presentationData.strings.Calls_All, self.presentationData.strings.Calls_Missed], selectedIndex: 0)
|
||||
|
|
@ -409,7 +432,7 @@ public final class CallListController: TelegramBaseController {
|
|||
if let strongSelf = self {
|
||||
strongSelf.callPressed()
|
||||
}
|
||||
})
|
||||
}, focusOnItemTag: self.focusOnItemTag)
|
||||
|
||||
if case .navigation = self.mode {
|
||||
self.controllerNode.navigationBar = self.navigationBar
|
||||
|
|
@ -421,6 +444,18 @@ public final class CallListController: TelegramBaseController {
|
|||
}
|
||||
self._ready.set(self.controllerNode.ready)
|
||||
self.displayNodeDidLoad()
|
||||
|
||||
switch self.focusOnItemTag {
|
||||
case .edit:
|
||||
self.editPressed()
|
||||
case .missed:
|
||||
Queue.mainQueue().after(0.1) {
|
||||
self.segmentedTitleView.index = 1
|
||||
self.controllerNode.updateType(.missed)
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
override public var navigationEdgeEffectExtension: CGFloat {
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ private func mappedInsertEntries(context: AccountContext, presentationData: Item
|
|||
case let .displayTab(_, text, value):
|
||||
return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: ItemListSwitchItem(presentationData: presentationData, systemStyle: .glass, title: text, value: value, enabled: true, noCorners: false, sectionId: 0, style: .blocks, updated: { value in
|
||||
nodeInteraction.updateShowCallsTab(value)
|
||||
}), directionHint: entry.directionHint)
|
||||
}, tag: CallListEntryTag.showTab), directionHint: entry.directionHint)
|
||||
case let .displayTabInfo(_, text):
|
||||
return ListViewInsertItem(index: entry.index, previousIndex: entry.previousIndex, item: ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: 0), directionHint: entry.directionHint)
|
||||
case .openNewCall:
|
||||
|
|
@ -149,7 +149,7 @@ private func mappedUpdateEntries(context: AccountContext, presentationData: Item
|
|||
case let .displayTab(_, text, value):
|
||||
return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: ItemListSwitchItem(presentationData: presentationData, systemStyle: .glass, title: text, value: value, enabled: true, noCorners: false, sectionId: 0, style: .blocks, updated: { value in
|
||||
nodeInteraction.updateShowCallsTab(value)
|
||||
}), directionHint: entry.directionHint)
|
||||
}, tag: CallListEntryTag.showTab), directionHint: entry.directionHint)
|
||||
case let .displayTabInfo(_, text):
|
||||
return ListViewUpdateItem(index: entry.index, previousIndex: entry.previousIndex, item: ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: 0), directionHint: entry.directionHint)
|
||||
case .openNewCall:
|
||||
|
|
@ -184,6 +184,7 @@ final class CallListControllerNode: ASDisplayNode {
|
|||
private let context: AccountContext
|
||||
private let mode: CallListControllerMode
|
||||
private var presentationData: PresentationData
|
||||
private var focusOnItemTag: CallListEntryTag?
|
||||
|
||||
private var containerLayout: (ContainerViewLayout, CGFloat)?
|
||||
|
||||
|
|
@ -241,7 +242,7 @@ final class CallListControllerNode: ASDisplayNode {
|
|||
|
||||
private var previousContentOffset: ListViewVisibleContentOffset?
|
||||
|
||||
init(controller: CallListController, context: AccountContext, mode: CallListControllerMode, presentationData: PresentationData, call: @escaping (EngineMessage) -> Void, joinGroupCall: @escaping (EnginePeer.Id, EngineGroupCallDescription) -> Void, openInfo: @escaping (EnginePeer.Id, [EngineMessage]) -> Void, emptyStateUpdated: @escaping (Bool) -> Void, openNewCall: @escaping () -> Void) {
|
||||
init(controller: CallListController, context: AccountContext, mode: CallListControllerMode, presentationData: PresentationData, call: @escaping (EngineMessage) -> Void, joinGroupCall: @escaping (EnginePeer.Id, EngineGroupCallDescription) -> Void, openInfo: @escaping (EnginePeer.Id, [EngineMessage]) -> Void, emptyStateUpdated: @escaping (Bool) -> Void, openNewCall: @escaping () -> Void, focusOnItemTag: CallListEntryTag?) {
|
||||
self.controller = controller
|
||||
self.context = context
|
||||
self.mode = mode
|
||||
|
|
@ -253,6 +254,7 @@ final class CallListControllerNode: ASDisplayNode {
|
|||
self.openNewCall = openNewCall
|
||||
self.currentState = CallListNodeState(presentationData: ItemListPresentationData(presentationData), dateTimeFormat: presentationData.dateTimeFormat, disableAnimations: true, editing: false, messageIdWithRevealedOptions: nil)
|
||||
self.statePromise = ValuePromise(self.currentState, ignoreRepeated: true)
|
||||
self.focusOnItemTag = focusOnItemTag
|
||||
|
||||
self.listNode = ListView()
|
||||
self.listNode.verticalScrollIndicatorColor = self.presentationData.theme.list.scrollIndicatorColor
|
||||
|
|
@ -861,6 +863,16 @@ final class CallListControllerNode: ASDisplayNode {
|
|||
strongSelf._ready.set(true)
|
||||
}
|
||||
|
||||
if let focusOnItemTag = strongSelf.focusOnItemTag {
|
||||
strongSelf.focusOnItemTag = nil
|
||||
|
||||
strongSelf.listNode.forEachItemNode { itemNode in
|
||||
if let itemNode = itemNode as? ItemListItemNode, let tag = itemNode.tag, tag.isEqual(to: focusOnItemTag) {
|
||||
itemNode.displayHighlight()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
completion()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue