mirror of
https://github.com/element-hq/element-x-ios.git
synced 2025-03-10 21:39:12 +00:00
Implement frequency tracking for frequently used emojis
This commit is contained in:
parent
e04c87445e
commit
60e94120cc
@ -232,7 +232,7 @@ final class AppSettings {
|
||||
@UserPreference(key: UserDefaultsKeys.hasRunIdentityConfirmationOnboarding, defaultValue: false, storageType: .userDefaults(store))
|
||||
var hasRunIdentityConfirmationOnboarding
|
||||
|
||||
@UserPreference(key: UserDefaultsKeys.frequentlyUsedSystemEmojis, defaultValue: [String](), storageType: .userDefaults(store))
|
||||
@UserPreference(key: UserDefaultsKeys.frequentlyUsedSystemEmojis, defaultValue: [FrequentlyUsedEmoji](), storageType: .userDefaults(store))
|
||||
var frequentlyUsedSystemEmojis
|
||||
|
||||
// MARK: - Home Screen
|
||||
|
@ -7,7 +7,6 @@
|
||||
|
||||
import Emojibase
|
||||
import Foundation
|
||||
import OrderedCollections
|
||||
|
||||
class EmojiProvider: EmojiProviderProtocol {
|
||||
private let maxFrequentEmojis = 20
|
||||
@ -61,7 +60,7 @@ class EmojiProvider: EmojiProviderProtocol {
|
||||
return []
|
||||
}
|
||||
|
||||
return appSettings.frequentlyUsedSystemEmojis
|
||||
return appSettings.frequentlyUsedSystemEmojis.map(\.key)
|
||||
}
|
||||
|
||||
func markEmojiAsFrequentlyUsed(_ emoji: String) {
|
||||
@ -69,10 +68,19 @@ class EmojiProvider: EmojiProviderProtocol {
|
||||
return
|
||||
}
|
||||
|
||||
var uniqueOrderedRecents = OrderedSet(appSettings.frequentlyUsedSystemEmojis)
|
||||
uniqueOrderedRecents.insert(emoji, at: 0)
|
||||
let frequentlyUsed = if !frequentlyUsedSystemEmojis().contains(emoji) {
|
||||
appSettings.frequentlyUsedSystemEmojis + [.init(count: 0, key: emoji)]
|
||||
} else {
|
||||
appSettings.frequentlyUsedSystemEmojis.map { frequentlyUsedEmoji in
|
||||
if frequentlyUsedEmoji.key == emoji {
|
||||
return FrequentlyUsedEmoji(count: frequentlyUsedEmoji.count + 1, key: emoji)
|
||||
}
|
||||
|
||||
return frequentlyUsedEmoji
|
||||
}
|
||||
}
|
||||
|
||||
appSettings.frequentlyUsedSystemEmojis = Array(uniqueOrderedRecents)
|
||||
appSettings.frequentlyUsedSystemEmojis = frequentlyUsed.sorted { $0.count > $1.count }
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
@ -31,6 +31,15 @@ enum EmojiProviderState {
|
||||
case loaded([EmojiCategory])
|
||||
}
|
||||
|
||||
struct FrequentlyUsedEmoji: Codable, Hashable {
|
||||
let count: UInt
|
||||
let key: String
|
||||
|
||||
static func == (lhs: FrequentlyUsedEmoji, rhs: FrequentlyUsedEmoji) -> Bool {
|
||||
lhs.key == rhs.key
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
protocol EmojiProviderProtocol {
|
||||
var state: EmojiProviderState { get }
|
||||
|
Loading…
x
Reference in New Issue
Block a user