From f4cde24f8edd9cb6735b3dd55aa3dcd595c0f22a Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sat, 16 Jul 2022 15:52:01 +0200 Subject: [PATCH 1/3] Migrate contacts and creation of talk rooms from requery to room Signed-off-by: Andy Scherzinger --- .../talk/adapters/items/ContactItem.java | 12 +++---- .../talk/controllers/ContactsController.kt | 36 +++++++++---------- .../bottomsheet/OperationsMenuController.kt | 35 ++++++++---------- 3 files changed, 38 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ContactItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/ContactItem.java index 58a149aa5..a358c931c 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ContactItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ContactItem.java @@ -32,8 +32,8 @@ import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.interfaces.DraweeController; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; +import com.nextcloud.talk.data.user.model.User; import com.nextcloud.talk.databinding.RvItemContactBinding; -import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.participants.Participant; import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.DisplayUtils; @@ -57,15 +57,15 @@ public class ContactItem extends AbstractFlexibleItem? = null @@ -168,7 +168,7 @@ class ContactsController(args: Bundle) : override fun onViewBound(view: View) { super.onViewBound(view) - currentUser = userUtils.currentUser + currentUser = userManager.currentUser.blockingGet() if (currentUser != null) { credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token) } @@ -285,7 +285,7 @@ class ContactsController(args: Bundle) : Parcels.wrap(roomOverall.ocs!!.data!!) ) ConductorRemapping.remapChatController( - router, currentUser!!.id, + router, currentUser!!.id!!, roomOverall.ocs!!.data!!.token!!, bundle, true ) } @@ -311,12 +311,12 @@ class ContactsController(args: Bundle) : } private fun addParticipantsToConversation() { - val userIdsArray: Array = selectedUserIds.toTypedArray() - val groupIdsArray: Array = selectedGroupIds.toTypedArray() - val emailsArray: Array = selectedEmails.toTypedArray() - val circleIdsArray: Array = selectedCircleIds.toTypedArray() + val userIdsArray: Array = selectedUserIds.toTypedArray() + val groupIdsArray: Array = selectedGroupIds.toTypedArray() + val emailsArray: Array = selectedEmails.toTypedArray() + val circleIdsArray: Array = selectedCircleIds.toTypedArray() val data = Data.Builder() - data.putLong(BundleKeys.KEY_INTERNAL_USER_ID, currentUser!!.id) + data.putLong(BundleKeys.KEY_INTERNAL_USER_ID, currentUser!!.id!!) data.putString(BundleKeys.KEY_TOKEN, conversationToken) data.putStringArray(BundleKeys.KEY_SELECTED_USERS, userIdsArray) data.putStringArray(BundleKeys.KEY_SELECTED_GROUPS, groupIdsArray) @@ -402,13 +402,13 @@ class ContactsController(args: Bundle) : if (!isAddingParticipantsView) { // groups shareTypesList.add("1") - } else if (CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails")) { + } else if (CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails")) { // groups shareTypesList.add("1") // emails shareTypesList.add("4") } - if (CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "circles-support")) { + if (CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "circles-support")) { // circles shareTypesList.add("7") } @@ -732,7 +732,7 @@ class ContactsController(args: Bundle) : @Subscribe(threadMode = ThreadMode.MAIN) fun onMessageEvent(openConversationEvent: OpenConversationEvent) { ConductorRemapping.remapChatController( - router, currentUser!!.id, + router, currentUser!!.id!!, openConversationEvent.conversation!!.token!!, openConversationEvent.bundle!!, true ) @@ -759,8 +759,8 @@ class ContactsController(args: Bundle) : private fun updateSelection(contactItem: ContactItem) { contactItem.model.selected = !contactItem.model.selected updateSelectionLists(contactItem.model) - if (CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "last-room-activity") && - !CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails") && + if (CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "last-room-activity") && + !CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails") && isValidGroupSelection(contactItem, contactItem.model, adapter) ) { val currentItems: List = adapter?.currentItems as List @@ -817,7 +817,7 @@ class ContactsController(args: Bundle) : ) ConductorRemapping.remapChatController( router, - currentUser!!.id, + currentUser!!.id!!, roomOverall.ocs!!.data!!.token!!, bundle, true diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.kt b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.kt index 680ba0420..db94f4074 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.kt @@ -30,19 +30,17 @@ import android.view.View import autodagger.AutoInjector import com.bluelinelabs.conductor.RouterTransaction import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler -import com.bluelinelabs.logansquare.LoganSquare import com.nextcloud.talk.R import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.controllers.base.NewBaseController import com.nextcloud.talk.controllers.util.viewBinding +import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.ControllerOperationsMenuBinding import com.nextcloud.talk.events.ConversationsListFetchDataEvent import com.nextcloud.talk.events.OpenConversationEvent import com.nextcloud.talk.models.RetrofitBucket -import com.nextcloud.talk.models.database.CapabilitiesUtil -import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.json.capabilities.Capabilities import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall import com.nextcloud.talk.models.json.conversations.Conversation @@ -50,6 +48,7 @@ import com.nextcloud.talk.models.json.conversations.Conversation.ConversationTyp import com.nextcloud.talk.models.json.conversations.RoomOverall import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.participants.AddParticipantOverall +import com.nextcloud.talk.users.UserManager import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.NoSupportedApiException @@ -66,7 +65,7 @@ import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SERVER_CAPABILITIES import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_USER_ENTITY -import com.nextcloud.talk.utils.database.user.UserUtils +import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder import io.reactivex.Observer import io.reactivex.android.schedulers.AndroidSchedulers @@ -90,14 +89,14 @@ class OperationsMenuController(args: Bundle) : NewBaseController( lateinit var ncApi: NcApi @Inject - lateinit var userUtils: UserUtils + lateinit var userManager: UserManager @Inject lateinit var eventBus: EventBus private val operation: ConversationOperationEnum? private var conversation: Conversation? = null - private var currentUser: UserEntity? = null + private var currentUser: User? = null private val callPassword: String private val callUrl: String private var baseUrl: String? = null @@ -116,7 +115,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController( override fun onViewBound(view: View) { super.onViewBound(view) sharedApplication!!.componentApplication.inject(this) - currentUser = userUtils.currentUser + currentUser = userManager.currentUser.blockingGet() if (!TextUtils.isEmpty(callUrl) && callUrl.contains("/call")) { conversationToken = callUrl.substring(callUrl.lastIndexOf("/") + 1) @@ -144,11 +143,11 @@ class OperationsMenuController(args: Bundle) : NewBaseController( @Throws(IOException::class) private fun useBundledCapabilitiesForGuest() { - currentUser = UserEntity() + currentUser = User() currentUser!!.baseUrl = baseUrl currentUser!!.userId = "?" try { - currentUser!!.capabilities = LoganSquare.serialize(serverCapabilities) + currentUser!!.capabilities = serverCapabilities } catch (e: IOException) { Log.e("OperationsMenu", "Failed to serialize capabilities") throw e @@ -172,12 +171,11 @@ class OperationsMenuController(args: Bundle) : NewBaseController( } override fun onNext(capabilitiesOverall: CapabilitiesOverall) { - currentUser = UserEntity() + currentUser = User() currentUser!!.baseUrl = baseUrl currentUser!!.userId = "?" try { - currentUser!!.capabilities = LoganSquare - .serialize(capabilitiesOverall.ocs!!.data!!.capabilities) + currentUser!!.capabilities = capabilitiesOverall.ocs!!.data!!.capabilities } catch (e: IOException) { Log.e("OperationsMenu", "Failed to serialize capabilities") } @@ -469,12 +467,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController( try { bundle.putParcelable( KEY_SERVER_CAPABILITIES, - Parcels.wrap( - LoganSquare.parse( - currentUser!!.capabilities, - Capabilities::class.java - ) - ) + Parcels.wrap(currentUser!!.capabilities) ) } catch (e: IOException) { Log.e(TAG, "Failed to parse capabilities for guest") @@ -604,7 +597,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController( } @kotlin.Throws(NoSupportedApiException::class) - private fun checkCapabilities(currentUser: UserEntity) { + private fun checkCapabilities(currentUser: User) { ApiUtils.getConversationApiVersion(currentUser, intArrayOf(ApiUtils.APIv4, 1)) ApiUtils.getCallApiVersion(currentUser, intArrayOf(ApiUtils.APIv4, 1)) ApiUtils.getChatApiVersion(currentUser, intArrayOf(1)) @@ -619,7 +612,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController( } val apiVersion = ApiUtils.getConversationApiVersion(currentUser, API_CONVERSATION_VERSIONS) if (localInvitedUsers!!.size > 0 || localInvitedGroups.size > 0 && - CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails") + CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails") ) { addGroupsToConversation(localInvitedUsers, localInvitedGroups, apiVersion) addUsersToConversation(localInvitedUsers, localInvitedGroups, apiVersion) @@ -676,7 +669,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController( ) { var retrofitBucket: RetrofitBucket if (localInvitedGroups!!.size > 0 && - CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails") + CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails") ) { for (i in localInvitedGroups.indices) { val groupId = localInvitedGroups[i] From 80570e59b4f925def386bfbe7cc19a71616a2255 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sat, 16 Jul 2022 16:01:15 +0200 Subject: [PATCH 2/3] rename user var to better reflect its type Signed-off-by: Andy Scherzinger --- .../ui/bottom/sheet/ProfileBottomSheet.kt | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/ui/bottom/sheet/ProfileBottomSheet.kt b/app/src/main/java/com/nextcloud/talk/ui/bottom/sheet/ProfileBottomSheet.kt index cf580ba63..a9130d288 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/bottom/sheet/ProfileBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/bottom/sheet/ProfileBottomSheet.kt @@ -51,15 +51,15 @@ import org.parceler.Parcels private const val TAG = "ProfileBottomSheet" -class ProfileBottomSheet(val ncApi: NcApi, val userEntity: User, val router: Router) { +class ProfileBottomSheet(val ncApi: NcApi, val userModel: User, val router: Router) { private val allowedAppIds = listOf(SPREED.stringValue, PROFILE.stringValue, EMAIL.stringValue) fun showFor(user: String, context: Context) { ncApi.hoverCard( - ApiUtils.getCredentials(userEntity.username, userEntity.token), - ApiUtils.getUrlForHoverCard(userEntity.baseUrl, user) + ApiUtils.getCredentials(userModel.username, userModel.token), + ApiUtils.getUrlForHoverCard(userModel.baseUrl, user) ).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .subscribe(object : Observer { override fun onSubscribe(d: Disposable) { @@ -68,7 +68,8 @@ class ProfileBottomSheet(val ncApi: NcApi, val userEntity: User, val router: Rou override fun onNext(hoverCardOverall: HoverCardOverall) { bottomSheet( - hoverCardOverall.ocs!!.data!!.actions!!, hoverCardOverall.ocs!!.data!!.displayName!!, + hoverCardOverall.ocs!!.data!!.actions!!, + hoverCardOverall.ocs!!.data!!.displayName!!, user, context ) @@ -124,16 +125,16 @@ class ProfileBottomSheet(val ncApi: NcApi, val userEntity: User, val router: Rou private fun talkTo(userId: String) { val apiVersion = - ApiUtils.getConversationApiVersion(userEntity, intArrayOf(ApiUtils.APIv4, 1)) + ApiUtils.getConversationApiVersion(userModel, intArrayOf(ApiUtils.APIv4, 1)) val retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom( apiVersion, - userEntity.baseUrl, + userModel.baseUrl, "1", null, userId, null ) - val credentials = ApiUtils.getCredentials(userEntity.username, userEntity.token) + val credentials = ApiUtils.getCredentials(userModel.username, userModel.token) ncApi.createRoom( credentials, retrofitBucket.url, retrofitBucket.queryMap @@ -147,7 +148,7 @@ class ProfileBottomSheet(val ncApi: NcApi, val userEntity: User, val router: Rou override fun onNext(roomOverall: RoomOverall) { val bundle = Bundle() - bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, userEntity) + bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, userModel) bundle.putString(BundleKeys.KEY_ROOM_TOKEN, roomOverall.ocs!!.data!!.token) bundle.putString(BundleKeys.KEY_ROOM_ID, roomOverall.ocs!!.data!!.roomId) @@ -155,7 +156,7 @@ class ProfileBottomSheet(val ncApi: NcApi, val userEntity: User, val router: Rou ncApi.getRoom( credentials, ApiUtils.getUrlForRoom( - apiVersion, userEntity.baseUrl, + apiVersion, userModel.baseUrl, roomOverall.ocs!!.data!!.token ) ) @@ -172,7 +173,7 @@ class ProfileBottomSheet(val ncApi: NcApi, val userEntity: User, val router: Rou Parcels.wrap(roomOverall.ocs!!.data) ) ConductorRemapping.remapChatController( - router, userEntity.id!!, + router, userModel.id!!, roomOverall.ocs!!.data!!.token!!, bundle, true ) } From 2821d84226f11362d3b84c1e6b4577e592f334b5 Mon Sep 17 00:00:00 2001 From: drone Date: Sat, 16 Jul 2022 14:11:12 +0000 Subject: [PATCH 3/3] Drone: update FindBugs results to reflect reduced error/warning count [skip ci] Signed-off-by: drone --- scripts/analysis/findbugs-results.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/analysis/findbugs-results.txt b/scripts/analysis/findbugs-results.txt index 2d73b5e3b..c663e4d09 100644 --- a/scripts/analysis/findbugs-results.txt +++ b/scripts/analysis/findbugs-results.txt @@ -1 +1 @@ -152 \ No newline at end of file +151 \ No newline at end of file