mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Improve filters tooltip logic
This commit is contained in:
@@ -1140,51 +1140,59 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !self.processedFeaturedFilters {
|
if !self.processedFeaturedFilters {
|
||||||
self.featuredFiltersDisposable.set((
|
let initializedFeatured = self.context.account.postbox.preferencesView(keys: [
|
||||||
self.context.account.postbox.transaction { transaction -> ChatListFiltersFeaturedState? in
|
PreferencesKeys.chatListFiltersFeaturedState
|
||||||
return transaction.getPreferencesEntry(key: PreferencesKeys.chatListFiltersFeaturedState) as? ChatListFiltersFeaturedState
|
])
|
||||||
|
|> mapToSignal { view -> Signal<Bool, NoError> in
|
||||||
|
if let entry = view.values[PreferencesKeys.chatListFiltersFeaturedState] as? ChatListFiltersFeaturedState {
|
||||||
|
return .single(!entry.filters.isEmpty && !entry.isSeen)
|
||||||
|
} else {
|
||||||
|
return .complete()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|> take(1)
|
||||||
|
|
||||||
|
let initializedFilters = updatedChatListFiltersInfo(postbox: self.context.account.postbox)
|
||||||
|
|> mapToSignal { (filters, isInitialized) -> Signal<Bool, NoError> in
|
||||||
|
if isInitialized {
|
||||||
|
return .single(!filters.isEmpty)
|
||||||
|
} else {
|
||||||
|
return .complete()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|> take(1)
|
||||||
|
|
||||||
|
self.featuredFiltersDisposable.set((
|
||||||
|
combineLatest(initializedFeatured, initializedFilters)
|
||||||
|
|> take(1)
|
||||||
|> delay(1.0, queue: .mainQueue())
|
|> delay(1.0, queue: .mainQueue())
|
||||||
|> deliverOnMainQueue
|
|> deliverOnMainQueue
|
||||||
).start(next: { [weak self] featuredState in
|
).start(next: { [weak self] hasFeatured, hasFilters in
|
||||||
guard let strongSelf = self, let featuredState = featuredState else {
|
guard let strongSelf = self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let _ = (currentChatListFilters(postbox: strongSelf.context.account.postbox)
|
strongSelf.processedFeaturedFilters = true
|
||||||
|> deliverOnMainQueue).start(next: { filters in
|
if hasFeatured {
|
||||||
guard let strongSelf = self else {
|
if let _ = strongSelf.validLayout, let parentController = strongSelf.parent as? TabBarController, let sourceFrame = parentController.frameForControllerTab(controller: strongSelf) {
|
||||||
return
|
let absoluteFrame = sourceFrame
|
||||||
}
|
let text: String
|
||||||
strongSelf.processedFeaturedFilters = true
|
if hasFilters {
|
||||||
if !featuredState.isSeen && !featuredState.filters.isEmpty {
|
text = strongSelf.presentationData.strings.ChatList_TabIconFoldersTooltipNonEmptyFolders
|
||||||
let _ = (currentChatListFilters(postbox: strongSelf.context.account.postbox)
|
} else {
|
||||||
|> deliverOnMainQueue).start(next: { filters in
|
text = strongSelf.presentationData.strings.ChatList_TabIconFoldersTooltipEmptyFolders
|
||||||
guard let strongSelf = self else {
|
}
|
||||||
return
|
parentController.present(TooltipScreen(text: text, location: CGPoint(x: absoluteFrame.midX - 14.0, y: absoluteFrame.minY - 8.0), shouldDismissOnTouch: { point in
|
||||||
|
guard let strongSelf = self, let parentController = strongSelf.parent as? TabBarController else {
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
let hasFilters = !filters.isEmpty
|
if parentController.isPointInsideContentArea(point: point) {
|
||||||
if let _ = strongSelf.validLayout, let parentController = strongSelf.parent as? TabBarController, let sourceFrame = parentController.frameForControllerTab(controller: strongSelf) {
|
return false
|
||||||
let absoluteFrame = sourceFrame
|
|
||||||
let text: String
|
|
||||||
if hasFilters {
|
|
||||||
text = strongSelf.presentationData.strings.ChatList_TabIconFoldersTooltipNonEmptyFolders
|
|
||||||
} else {
|
|
||||||
text = strongSelf.presentationData.strings.ChatList_TabIconFoldersTooltipEmptyFolders
|
|
||||||
}
|
|
||||||
parentController.present(TooltipScreen(text: text, location: CGPoint(x: absoluteFrame.midX - 14.0, y: absoluteFrame.minY - 8.0), shouldDismissOnTouch: { point in
|
|
||||||
guard let strongSelf = self, let parentController = strongSelf.parent as? TabBarController else {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if parentController.isPointInsideContentArea(point: point) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}), in: .current)
|
|
||||||
}
|
}
|
||||||
})
|
return true
|
||||||
|
}), in: .current)
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user