Update stickers settings screen layout

This commit is contained in:
Ilya Laktyushin
2023-03-02 17:03:17 +04:00
parent eccea93186
commit 6765de3a0f

View File

@@ -59,9 +59,8 @@ private final class InstalledStickerPacksControllerArguments {
} }
private enum InstalledStickerPacksSection: Int32 { private enum InstalledStickerPacksSection: Int32 {
case settings
case categories case categories
case order case settings
case stickers case stickers
} }
@@ -85,8 +84,6 @@ private enum InstalledStickerPacksEntryId: Hashable {
private indirect enum InstalledStickerPacksEntry: ItemListNodeEntry { private indirect enum InstalledStickerPacksEntry: ItemListNodeEntry {
case suggestOptions(PresentationTheme, String, String) case suggestOptions(PresentationTheme, String, String)
case largeEmoji(PresentationTheme, String, Bool) case largeEmoji(PresentationTheme, String, Bool)
case animatedStickers(PresentationTheme, String, Bool)
case animatedStickersInfo(PresentationTheme, String)
case trending(PresentationTheme, String, Int32) case trending(PresentationTheme, String, Int32)
case archived(PresentationTheme, String, Int32, [ArchivedStickerPackItem]?) case archived(PresentationTheme, String, Int32, [ArchivedStickerPackItem]?)
case masks(PresentationTheme, String) case masks(PresentationTheme, String)
@@ -101,12 +98,10 @@ private indirect enum InstalledStickerPacksEntry: ItemListNodeEntry {
var section: ItemListSectionId { var section: ItemListSectionId {
switch self { switch self {
case .suggestOptions, .largeEmoji, .animatedStickers, .animatedStickersInfo, .suggestAnimatedEmoji:
return InstalledStickerPacksSection.settings.rawValue
case .trending, .masks, .emoji, .quickReaction, .archived: case .trending, .masks, .emoji, .quickReaction, .archived:
return InstalledStickerPacksSection.categories.rawValue return InstalledStickerPacksSection.categories.rawValue
case .packOrder, .packOrderInfo: case .suggestOptions, .largeEmoji, .suggestAnimatedEmoji, .packOrder, .packOrderInfo:
return InstalledStickerPacksSection.order.rawValue return InstalledStickerPacksSection.settings.rawValue
case .packsTitle, .pack, .packsInfo: case .packsTitle, .pack, .packsInfo:
return InstalledStickerPacksSection.stickers.rawValue return InstalledStickerPacksSection.stickers.rawValue
} }
@@ -114,36 +109,32 @@ private indirect enum InstalledStickerPacksEntry: ItemListNodeEntry {
var stableId: InstalledStickerPacksEntryId { var stableId: InstalledStickerPacksEntryId {
switch self { switch self {
case .suggestOptions:
return .index(0)
case .largeEmoji:
return .index(1)
case .animatedStickers:
return .index(2)
case .animatedStickersInfo:
return .index(3)
case .trending: case .trending:
return .index(4) return .index(0)
case .archived: case .archived:
return .index(5) return .index(1)
case .emoji: case .emoji:
return .index(6) return .index(2)
case .masks: case .masks:
return .index(7) return .index(3)
case .quickReaction: case .quickReaction:
return .index(8) return .index(4)
case .suggestOptions:
return .index(5)
case .largeEmoji:
return .index(6)
case .suggestAnimatedEmoji: case .suggestAnimatedEmoji:
return .index(9) return .index(7)
case .packOrder: case .packOrder:
return .index(10) return .index(8)
case .packOrderInfo: case .packOrderInfo:
return .index(11) return .index(9)
case .packsTitle: case .packsTitle:
return .index(12) return .index(10)
case let .pack(_, _, _, info, _, _, _, _, _, _): case let .pack(_, _, _, info, _, _, _, _, _, _):
return .pack(info.id) return .pack(info.id)
case .packsInfo: case .packsInfo:
return .index(13) return .index(11)
} }
} }
@@ -191,18 +182,6 @@ private indirect enum InstalledStickerPacksEntry: ItemListNodeEntry {
} else { } else {
return false return false
} }
case let .animatedStickers(lhsTheme, lhsText, lhsValue):
if case let .animatedStickers(rhsTheme, rhsText, rhsValue) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsValue == rhsValue {
return true
} else {
return false
}
case let .animatedStickersInfo(lhsTheme, lhsText):
if case let .animatedStickersInfo(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText {
return true
} else {
return false
}
case let .packOrder(lhsTheme, lhsText, lhsValue): case let .packOrder(lhsTheme, lhsText, lhsValue):
if case let .packOrder(rhsTheme, rhsText, rhsValue) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsValue == rhsValue { if case let .packOrder(rhsTheme, rhsText, rhsValue) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsValue == rhsValue {
return true return true
@@ -274,93 +253,79 @@ private indirect enum InstalledStickerPacksEntry: ItemListNodeEntry {
static func <(lhs: InstalledStickerPacksEntry, rhs: InstalledStickerPacksEntry) -> Bool { static func <(lhs: InstalledStickerPacksEntry, rhs: InstalledStickerPacksEntry) -> Bool {
switch lhs { switch lhs {
case .suggestOptions:
switch rhs {
case .suggestOptions:
return false
default:
return true
}
case .largeEmoji:
switch rhs {
case .suggestOptions, .largeEmoji:
return false
default:
return true
}
case .animatedStickers:
switch rhs {
case .suggestOptions, .largeEmoji, .animatedStickers:
return false
default:
return true
}
case .animatedStickersInfo:
switch rhs {
case .suggestOptions, .largeEmoji, .animatedStickers, .animatedStickersInfo:
return false
default:
return true
}
case .trending: case .trending:
switch rhs { switch rhs {
case .suggestOptions, .largeEmoji, .animatedStickers, .animatedStickersInfo, .trending: case .trending:
return false return false
default: default:
return true return true
} }
case .archived: case .archived:
switch rhs { switch rhs {
case .suggestOptions, .largeEmoji, .animatedStickers, .animatedStickersInfo, .trending, .archived: case .trending, .archived:
return false return false
default: default:
return true return true
} }
case .masks: case .masks:
switch rhs { switch rhs {
case .suggestOptions, .largeEmoji, .animatedStickers, .animatedStickersInfo, .trending, .archived, .masks: case .trending, .archived, .masks:
return false return false
default: default:
return true return true
} }
case .emoji: case .emoji:
switch rhs { switch rhs {
case .suggestOptions, .largeEmoji, .animatedStickers, .animatedStickersInfo, .trending, .archived, .masks, .emoji: case .trending, .archived, .masks, .emoji:
return false return false
default: default:
return true return true
} }
case .quickReaction: case .quickReaction:
switch rhs { switch rhs {
case .suggestOptions, .largeEmoji, .animatedStickers, .animatedStickersInfo, .trending, .archived, .masks, .emoji, .quickReaction: case .trending, .archived, .masks, .emoji, .quickReaction:
return false
default:
return true
}
case .suggestOptions:
switch rhs {
case .trending, .archived, .masks, .emoji, .quickReaction, .suggestOptions:
return false
default:
return true
}
case .largeEmoji:
switch rhs {
case .trending, .archived, .masks, .emoji, .quickReaction, .suggestOptions, .largeEmoji:
return false return false
default: default:
return true return true
} }
case .packOrder: case .packOrder:
switch rhs { switch rhs {
case .suggestOptions, .largeEmoji, .animatedStickers, .animatedStickersInfo, .trending, .archived, .masks, .emoji, .quickReaction, .packOrder: case .trending, .archived, .masks, .emoji, .quickReaction, .suggestOptions, .largeEmoji, .packOrder:
return false return false
default: default:
return true return true
} }
case .packOrderInfo: case .packOrderInfo:
switch rhs { switch rhs {
case .suggestOptions, .largeEmoji, .animatedStickers, .animatedStickersInfo, .trending, .archived, .masks, .emoji, .quickReaction, .packOrder, .packOrderInfo: case .trending, .archived, .masks, .emoji, .quickReaction, .suggestOptions, .largeEmoji, .packOrder, .packOrderInfo:
return false return false
default: default:
return true return true
} }
case .suggestAnimatedEmoji: case .suggestAnimatedEmoji:
switch rhs { switch rhs {
case .suggestOptions, .largeEmoji, .animatedStickers, .animatedStickersInfo, .trending, .archived, .masks, .emoji, .quickReaction, .packOrder, .packOrderInfo, .suggestAnimatedEmoji: case .trending, .archived, .masks, .emoji, .quickReaction, .suggestOptions, .largeEmoji, .packOrder, .packOrderInfo, .suggestAnimatedEmoji:
return false return false
default: default:
return true return true
} }
case .packsTitle: case .packsTitle:
switch rhs { switch rhs {
case .suggestOptions, .largeEmoji, .animatedStickers, .animatedStickersInfo, .trending, .masks, .emoji, .quickReaction, .archived, .packOrder, .packOrderInfo, .suggestAnimatedEmoji, .packsTitle: case .trending, .archived, .masks, .emoji, .quickReaction, .suggestOptions, .largeEmoji, .packOrder, .packOrderInfo, .suggestAnimatedEmoji, .packsTitle:
return false return false
default: default:
return true return true
@@ -395,11 +360,6 @@ private indirect enum InstalledStickerPacksEntry: ItemListNodeEntry {
return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, sectionId: self.section, style: .blocks, updated: { value in return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, sectionId: self.section, style: .blocks, updated: { value in
arguments.toggleLargeEmoji(value) arguments.toggleLargeEmoji(value)
}) })
case let .animatedStickers(_, text, value):
return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, sectionId: self.section, style: .blocks, updated: { _ in
})
case let .animatedStickersInfo(_, text):
return ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: self.section)
case let .trending(theme, text, count): case let .trending(theme, text, count):
return ItemListDisclosureItem(presentationData: presentationData, icon: UIImage(bundleImageName: "Settings/Menu/Trending")?.precomposed(), title: text, label: count == 0 ? "" : "\(count)", labelStyle: .badge(theme.list.itemAccentColor), sectionId: self.section, style: .blocks, action: { return ItemListDisclosureItem(presentationData: presentationData, icon: UIImage(bundleImageName: "Settings/Menu/Trending")?.precomposed(), title: text, label: count == 0 ? "" : "\(count)", labelStyle: .badge(theme.list.itemAccentColor), sectionId: self.section, style: .blocks, action: {
arguments.openFeatured() arguments.openFeatured()
@@ -535,6 +495,17 @@ private func installedStickerPacksControllerEntries(context: AccountContext, pre
switch mode { switch mode {
case .general, .modal: case .general, .modal:
if !featured.isEmpty {
entries.append(.trending(presentationData.theme, presentationData.strings.StickerPacksSettings_TrendingStickers, Int32(featured.count)))
}
if let archived = archived, !archived.isEmpty {
entries.append(.archived(presentationData.theme, presentationData.strings.StickerPacksSettings_ArchivedPacks, Int32(archived.count), archived))
}
entries.append(.emoji(presentationData.theme, presentationData.strings.StickerPacksSettings_Emoji, emojiCount))
if let quickReaction = quickReaction, let availableReactions = availableReactions {
entries.append(.quickReaction(presentationData.strings.Settings_QuickReactionSetup_NavigationTitle, quickReaction, availableReactions))
}
let suggestString: String let suggestString: String
switch stickerSettings.emojiStickerSuggestionMode { switch stickerSettings.emojiStickerSuggestionMode {
case .none: case .none:
@@ -545,22 +516,7 @@ private func installedStickerPacksControllerEntries(context: AccountContext, pre
suggestString = presentationData.strings.Stickers_SuggestAdded suggestString = presentationData.strings.Stickers_SuggestAdded
} }
entries.append(.suggestOptions(presentationData.theme, presentationData.strings.Stickers_SuggestStickers, suggestString)) entries.append(.suggestOptions(presentationData.theme, presentationData.strings.Stickers_SuggestStickers, suggestString))
entries.append(.largeEmoji(presentationData.theme, presentationData.strings.Appearance_LargeEmoji, presentationData.largeEmoji)) entries.append(.largeEmoji(presentationData.theme, presentationData.strings.Appearance_LargeEmoji, presentationData.largeEmoji))
if !featured.isEmpty {
entries.append(.trending(presentationData.theme, presentationData.strings.StickerPacksSettings_TrendingStickers, Int32(featured.count)))
}
if let archived = archived, !archived.isEmpty {
entries.append(.archived(presentationData.theme, presentationData.strings.StickerPacksSettings_ArchivedPacks, Int32(archived.count), archived))
}
entries.append(.emoji(presentationData.theme, presentationData.strings.StickerPacksSettings_Emoji, emojiCount))
if let quickReaction = quickReaction, let availableReactions = availableReactions {
entries.append(.quickReaction(presentationData.strings.Settings_QuickReactionSetup_NavigationTitle, quickReaction, availableReactions))
}
entries.append(.packOrder(presentationData.theme, presentationData.strings.StickerPacksSettings_DynamicOrder, stickerSettings.dynamicPackOrder)) entries.append(.packOrder(presentationData.theme, presentationData.strings.StickerPacksSettings_DynamicOrder, stickerSettings.dynamicPackOrder))
entries.append(.packOrderInfo(presentationData.theme, presentationData.strings.StickerPacksSettings_DynamicOrderInfo)) entries.append(.packOrderInfo(presentationData.theme, presentationData.strings.StickerPacksSettings_DynamicOrderInfo))