add feature
This commit is contained in:
@@ -166,6 +166,9 @@ android {
|
||||
val releaseKeyAlias = gradleOrEnv("PS_RELEASE_KEY_ALIAS", providers)
|
||||
if (releaseStore.exists() && !releaseStorePass.isNullOrBlank() && !releaseKeyAlias.isNullOrBlank()) {
|
||||
signingConfig = signingConfigs.getByName("release")
|
||||
} else {
|
||||
// Keep local release builds installable when private release credentials are unavailable.
|
||||
signingConfig = signingConfigs.getByName("debug")
|
||||
}
|
||||
}
|
||||
debug {
|
||||
|
||||
@@ -223,13 +223,7 @@ class AddFriendDialog(
|
||||
friends: List<MessagingFriendInfo>,
|
||||
groups: List<MessagingGroupInfo>
|
||||
) {
|
||||
cachedFriends = friends.run {
|
||||
if (pinnedIds != null) {
|
||||
sortedBy { -pinnedIds.indexOf(it.userId) }
|
||||
} else {
|
||||
this
|
||||
}
|
||||
}
|
||||
cachedFriends = context.sortSocialFriends(friends, pinnedIds = pinnedIds)
|
||||
cachedGroups = groups.run {
|
||||
if (pinnedIds != null) {
|
||||
sortedBy { -pinnedIds.indexOf(it.conversationId) }
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package me.eternal.purrfectsnap.ui.manager.pages.social
|
||||
|
||||
import me.eternal.purrfectsnap.RemoteSideContext
|
||||
import me.eternal.purrfectsnap.common.data.MessagingFriendInfo
|
||||
|
||||
internal fun RemoteSideContext.sortSocialFriends(
|
||||
friends: List<MessagingFriendInfo>,
|
||||
pinnedIds: List<String>? = null
|
||||
): List<MessagingFriendInfo> {
|
||||
if (config.root.userInterface.sortSocialTabByStreakLength.get()) {
|
||||
return friends.sortedWith(
|
||||
compareByDescending<MessagingFriendInfo> { (it.streaks?.length ?: 0) > 0 }
|
||||
.thenByDescending { it.streaks?.length ?: 0 }
|
||||
)
|
||||
}
|
||||
|
||||
return if (pinnedIds != null) {
|
||||
friends.sortedBy { -pinnedIds.indexOf(it.userId) }
|
||||
} else {
|
||||
friends
|
||||
}
|
||||
}
|
||||
@@ -39,10 +39,12 @@ import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.navigation.NavBackStackEntry
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import me.eternal.purrfectsnap.R
|
||||
import me.eternal.purrfectsnap.common.data.SocialScope
|
||||
import me.eternal.purrfectsnap.ui.manager.pages.social.SocialRootSection
|
||||
import me.eternal.purrfectsnap.ui.manager.pages.social.sortSocialFriends
|
||||
import me.eternal.purrfectsnap.ui.manager.theme.PurrfectPalette
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@@ -68,9 +70,15 @@ fun SocialRootSection.AphelionSocialScreen(nav: NavBackStackEntry) {
|
||||
context.database.receiveMessagingDataCallback = { _, _ -> }
|
||||
}
|
||||
}
|
||||
val sortByStreakLength by produceState(initialValue = context.config.root.userInterface.sortSocialTabByStreakLength.get()) {
|
||||
while (true) {
|
||||
delay(300)
|
||||
value = context.config.root.userInterface.sortSocialTabByStreakLength.get()
|
||||
}
|
||||
}
|
||||
val normalizedQuery = remember(searchQuery) { searchQuery.trim() }
|
||||
val filteredFriends = remember(friendList, normalizedQuery) {
|
||||
if (normalizedQuery.isBlank()) {
|
||||
val filteredFriends = remember(friendList, normalizedQuery, sortByStreakLength) {
|
||||
val matchingFriends = if (normalizedQuery.isBlank()) {
|
||||
friendList
|
||||
} else {
|
||||
friendList.filter {
|
||||
@@ -78,6 +86,8 @@ fun SocialRootSection.AphelionSocialScreen(nav: NavBackStackEntry) {
|
||||
it.displayName?.contains(normalizedQuery, ignoreCase = true) == true
|
||||
}
|
||||
}
|
||||
|
||||
context.sortSocialFriends(matchingFriends)
|
||||
}
|
||||
val filteredGroups = remember(groupList, normalizedQuery) {
|
||||
if (normalizedQuery.isBlank()) {
|
||||
|
||||
@@ -113,6 +113,7 @@ import me.eternal.purrfectsnap.ui.manager.pages.home.HomeSettings
|
||||
import me.eternal.purrfectsnap.ui.manager.pages.home.QuickActionsDialog
|
||||
import me.eternal.purrfectsnap.ui.manager.pages.scripting.ScriptingRootSection
|
||||
import me.eternal.purrfectsnap.ui.manager.pages.social.SocialRootSection
|
||||
import me.eternal.purrfectsnap.ui.manager.pages.social.sortSocialFriends
|
||||
import me.eternal.purrfectsnap.ui.manager.pages.tracker.FriendTrackerManagerRoot
|
||||
import me.eternal.purrfectsnap.ui.manager.theme.PurrfectPalette
|
||||
import me.eternal.purrfectsnap.ui.setup.Requirements
|
||||
@@ -1316,9 +1317,15 @@ object LegacyTheme : ThemeContract {
|
||||
context.database.receiveMessagingDataCallback = { _, _ -> }
|
||||
}
|
||||
}
|
||||
val sortByStreakLength by produceState(initialValue = context.config.root.userInterface.sortSocialTabByStreakLength.get()) {
|
||||
while (true) {
|
||||
delay(300)
|
||||
value = context.config.root.userInterface.sortSocialTabByStreakLength.get()
|
||||
}
|
||||
}
|
||||
val normalizedQuery = remember(searchQuery) { searchQuery.trim() }
|
||||
val filteredFriends = remember(friendList, normalizedQuery) {
|
||||
if (normalizedQuery.isBlank()) {
|
||||
val filteredFriends = remember(friendList, normalizedQuery, sortByStreakLength) {
|
||||
val matchingFriends = if (normalizedQuery.isBlank()) {
|
||||
friendList
|
||||
} else {
|
||||
friendList.filter {
|
||||
@@ -1326,6 +1333,8 @@ object LegacyTheme : ThemeContract {
|
||||
it.displayName?.contains(normalizedQuery, ignoreCase = true) == true
|
||||
}
|
||||
}
|
||||
|
||||
context.sortSocialFriends(matchingFriends)
|
||||
}
|
||||
val filteredGroups = remember(groupList, normalizedQuery) {
|
||||
if (normalizedQuery.isBlank()) {
|
||||
|
||||
@@ -1105,6 +1105,10 @@
|
||||
"name": "Show Streak Expiration Info",
|
||||
"description": "Shows a Streak Expiration timer next to the Streaks counter"
|
||||
},
|
||||
"sort_social_tab_by_streak_length": {
|
||||
"name": "Sort Social Tab by Streak Length",
|
||||
"description": "Shows friends with streaks first, ordered from the longest streak to the shortest in the social tab and friend picker"
|
||||
},
|
||||
"hide_friend_feed_entry": {
|
||||
"name": "Hide Friend Feed Entry",
|
||||
"description": "Hides a specific friend from the Friend Feed\nUse the social tab to manage this feature"
|
||||
|
||||
@@ -1156,6 +1156,10 @@
|
||||
"name": "Show Streak Expiration Info",
|
||||
"description": "Shows a Streak Expiration timer next to the Streaks counter"
|
||||
},
|
||||
"sort_social_tab_by_streak_length": {
|
||||
"name": "Sort Social Tab by Streak Length",
|
||||
"description": "Shows friends with streaks first, ordered from the longest streak to the shortest in the social tab and friend picker"
|
||||
},
|
||||
"hide_friend_feed_entry": {
|
||||
"name": "Hide Friend Feed Entry",
|
||||
"description": "Hides a specific friend from the Friend Feed\nUse the social tab to manage this feature"
|
||||
|
||||
@@ -33,6 +33,7 @@ class UserInterfaceTweaks : ConfigContainer() {
|
||||
val mapFriendNameTags = boolean("map_friend_nametags") { requireRestart() }
|
||||
val preventMessageListAutoScroll = boolean("prevent_message_list_auto_scroll") { requireRestart(); addNotices(FeatureNotice.UNSTABLE) }
|
||||
val streakExpirationInfo = boolean("streak_expiration_info") { requireRestart() }
|
||||
val sortSocialTabByStreakLength = boolean("sort_social_tab_by_streak_length").apply { set(true) }
|
||||
val hideFriendFeedEntry = boolean("hide_friend_feed_entry") { requireRestart() }
|
||||
val hideStreakRestore = boolean("hide_streak_restore") { requireRestart() }
|
||||
val hideQuickAddSuggestions = boolean("hide_quick_add_suggestions") { requireRestart() }
|
||||
|
||||
Reference in New Issue
Block a user