commit a9d82305ab4a014567be3eb4e88e629ce7e465d4
parent 7854b167dde4a6ed0f56dfa6c8c4af642742e8e6
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Sat, 19 Aug 2023 12:31:37 +0200

feat(section/social): click add dialog

Diffstat:
Mapp/src/main/kotlin/me/rhunk/snapenhance/RemoteSideContext.kt | 2++
Mapp/src/main/kotlin/me/rhunk/snapenhance/bridge/BridgeService.kt | 23++++++++++++++++-------
Mapp/src/main/kotlin/me/rhunk/snapenhance/messaging/ModDatabase.kt | 9++++++---
Mapp/src/main/kotlin/me/rhunk/snapenhance/ui/manager/sections/social/AddFriendDialog.kt | 19+++++++++++++++----
4 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/RemoteSideContext.kt b/app/src/main/kotlin/me/rhunk/snapenhance/RemoteSideContext.kt @@ -5,6 +5,7 @@ import android.content.Context import android.content.Intent import android.net.Uri import androidx.documentfile.provider.DocumentFile +import me.rhunk.snapenhance.bridge.BridgeService import me.rhunk.snapenhance.bridge.wrapper.LocaleWrapper import me.rhunk.snapenhance.bridge.wrapper.MappingsWrapper import me.rhunk.snapenhance.core.config.ModConfig @@ -22,6 +23,7 @@ class RemoteSideContext( val androidContext: Context ) { private var _activity: WeakReference<Activity>? = null + lateinit var bridgeService: BridgeService var activity: Activity? get() = _activity?.get() diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/BridgeService.kt b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/BridgeService.kt @@ -21,16 +21,29 @@ import kotlin.system.measureTimeMillis class BridgeService : Service() { private lateinit var messageLoggerWrapper: MessageLoggerWrapper private lateinit var remoteSideContext: RemoteSideContext - private lateinit var syncCallback: SyncCallback + lateinit var syncCallback: SyncCallback override fun onBind(intent: Intent): IBinder { remoteSideContext = SharedContextHolder.remote(this).apply { checkForRequirements() } + remoteSideContext.bridgeService = this messageLoggerWrapper = MessageLoggerWrapper(getDatabasePath(BridgeFileType.MESSAGE_LOGGER_DATABASE.fileName)).also { it.init() } return BridgeBinder() } + fun triggerFriendSync(friendId: String) { + SerializableDataObject.fromJson<FriendInfo>(syncCallback.syncFriend(friendId)).let { + remoteSideContext.modDatabase.syncFriend(it) + } + } + + fun triggerGroupSync(groupId: String) { + SerializableDataObject.fromJson<MessagingGroupInfo>(syncCallback.syncGroup(groupId)).let { + remoteSideContext.modDatabase.syncGroupInfo(it) + } + } + inner class BridgeBinder : BridgeInterface.Stub() { override fun fileOperation(action: Int, fileType: Int, content: ByteArray?): ByteArray { val resolvedFile by lazy { @@ -111,18 +124,14 @@ class BridgeService : Service() { measureTimeMillis { remoteSideContext.modDatabase.getFriendsIds().forEach { friendId -> runCatching { - SerializableDataObject.fromJson<FriendInfo>(callback.syncFriend(friendId)).let { - remoteSideContext.modDatabase.syncFriend(it) - } + triggerFriendSync(friendId) }.onFailure { Logger.error("Failed to sync friend $friendId", it) } } remoteSideContext.modDatabase.getGroupsIds().forEach { groupId -> runCatching { - SerializableDataObject.fromJson<MessagingGroupInfo>(callback.syncGroup(groupId)).let { - remoteSideContext.modDatabase.syncGroupInfo(it) - } + triggerGroupSync(groupId) }.onFailure { Logger.error("Failed to sync group $groupId", it) } diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/messaging/ModDatabase.kt b/app/src/main/kotlin/me/rhunk/snapenhance/messaging/ModDatabase.kt @@ -25,6 +25,9 @@ class ModDatabase( var receiveMessagingDataCallback: (friends: List<MessagingFriendInfo>, groups: List<MessagingGroupInfo>) -> Unit = { _, _ -> } + fun executeAsync(block: () -> Unit) { + executor.execute(block) + } fun init() { database = context.androidContext.openOrCreateDatabase("main.db", 0, null) @@ -126,7 +129,7 @@ class ModDatabase( fun syncGroupInfo(conversationInfo: MessagingGroupInfo) { - executor.execute { + executeAsync { try { database.execSQL("INSERT OR REPLACE INTO groups VALUES (?, ?, ?)", arrayOf( conversationInfo.conversationId, @@ -140,12 +143,12 @@ class ModDatabase( } fun syncFriend(friend: FriendInfo) { - executor.execute { + executeAsync { try { database.execSQL("INSERT OR REPLACE INTO friends VALUES (?, ?, ?, ?, ?)", arrayOf( friend.userId, friend.displayName, - friend.usernameForSorting!!.split("|")[1], + friend.usernameForSorting!!, friend.bitmojiAvatarId, friend.bitmojiSelfieId )) diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/manager/sections/social/AddFriendDialog.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/manager/sections/social/AddFriendDialog.kt @@ -1,5 +1,6 @@ package me.rhunk.snapenhance.ui.manager.sections.social +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding @@ -39,9 +40,9 @@ class AddFriendDialog( @Composable - private fun ListCardEntry(name: String) { + private fun ListCardEntry(name: String, modifier: Modifier = Modifier) { Card( - modifier = Modifier.padding(5.dp), + modifier = Modifier.padding(5.dp).then(modifier), ) { Text(text = name, modifier = Modifier.padding(10.dp)) } @@ -108,14 +109,24 @@ class AddFriendDialog( Spacer(modifier = Modifier.padding(5.dp)) } items(cachedGroups!!.size) { - ListCardEntry(name = cachedGroups!![it].name) + ListCardEntry(name = cachedGroups!![it].name, modifier = Modifier.clickable { + context.bridgeService.triggerGroupSync(cachedGroups!![it].conversationId) + context.modDatabase.executeAsync { + section.onResumed() + } + }) } item { Text(text = "Friends", fontSize = 20.sp) Spacer(modifier = Modifier.padding(5.dp)) } items(cachedFriends!!.size) { - ListCardEntry(name = cachedFriends!![it].displayName ?: cachedFriends!![it].mutableUsername) + ListCardEntry(name = cachedFriends!![it].displayName ?: cachedFriends!![it].mutableUsername, modifier = Modifier.clickable { + context.bridgeService.triggerFriendSync(cachedFriends!![it].userId) + context.modDatabase.executeAsync { + section.onResumed() + } + }) } } }