Improve filters tooltip logic

This commit is contained in:
Ali
2020-03-19 01:11:34 +04:00
parent a62e0a4819
commit c191cb8d62

View File

@@ -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)
} }
}) }
})) }))
} }
} }