Browse Source

Merge pull request #2221 from nextcloud/chore/1549/roomMigration3

Migrate contacts and creation of talk rooms from requery to room
Andy Scherzinger 2 years ago
parent
commit
26ce9ee868

+ 6 - 6
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<ContactItem.ContactItemVie
     public static final String PARTICIPANT_SOURCE_USERS = "users";
 
     private final Participant participant;
-    private final UserEntity userEntity;
+    private final User user;
     private GenericTextHeaderItem header;
     public boolean isOnline = true;
 
     public ContactItem(Participant participant,
-                       UserEntity userEntity,
+                       User user,
                        GenericTextHeaderItem genericTextHeaderItem) {
         this.participant = participant;
-        this.userEntity = userEntity;
+        this.user = user;
         this.header = genericTextHeaderItem;
     }
 
@@ -179,7 +179,7 @@ public class ContactItem extends AbstractFlexibleItem<ContactItem.ContactItemVie
                 .setOldController(holder.binding.avatarDraweeView.getController())
                 .setAutoPlayAnimations(true)
                 .setImageRequest(DisplayUtils.getImageRequestForUrl(
-                    ApiUtils.getUrlForGuestAvatar(userEntity.getBaseUrl(),
+                    ApiUtils.getUrlForGuestAvatar(user.getBaseUrl(),
                                                   displayName,
                                                   false)))
                 .build();
@@ -191,7 +191,7 @@ public class ContactItem extends AbstractFlexibleItem<ContactItem.ContactItemVie
                 .setOldController(holder.binding.avatarDraweeView.getController())
                 .setAutoPlayAnimations(true)
                 .setImageRequest(DisplayUtils.getImageRequestForUrl(
-                    ApiUtils.getUrlForAvatar(userEntity.getBaseUrl(),
+                    ApiUtils.getUrlForAvatar(user.getBaseUrl(),
                                              participant.getCalculatedActorId(),
                                              false)))
                 .build();

+ 18 - 18
app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt

@@ -52,12 +52,11 @@ import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedA
 import com.nextcloud.talk.controllers.base.NewBaseController
 import com.nextcloud.talk.controllers.bottomsheet.ConversationOperationEnum
 import com.nextcloud.talk.controllers.util.viewBinding
+import com.nextcloud.talk.data.user.model.User
 import com.nextcloud.talk.databinding.ControllerContactsRvBinding
 import com.nextcloud.talk.events.OpenConversationEvent
 import com.nextcloud.talk.jobs.AddParticipantsToConversation
 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.autocomplete.AutocompleteOverall
 import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser
 import com.nextcloud.talk.models.json.conversations.Conversation
@@ -65,10 +64,11 @@ import com.nextcloud.talk.models.json.conversations.RoomOverall
 import com.nextcloud.talk.models.json.converters.EnumActorTypeConverter
 import com.nextcloud.talk.models.json.participants.Participant
 import com.nextcloud.talk.ui.dialog.ContactsBottomDialog
+import com.nextcloud.talk.users.UserManager
 import com.nextcloud.talk.utils.ApiUtils
 import com.nextcloud.talk.utils.ConductorRemapping
 import com.nextcloud.talk.utils.bundle.BundleKeys
-import com.nextcloud.talk.utils.database.user.UserUtils
+import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew
 import eu.davidea.flexibleadapter.FlexibleAdapter
 import eu.davidea.flexibleadapter.SelectableAdapter
 import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
@@ -95,7 +95,7 @@ class ContactsController(args: Bundle) :
     private val binding: ControllerContactsRvBinding by viewBinding(ControllerContactsRvBinding::bind)
 
     @Inject
-    lateinit var userUtils: UserUtils
+    lateinit var userManager: UserManager
 
     @Inject
     lateinit var eventBus: EventBus
@@ -104,7 +104,7 @@ class ContactsController(args: Bundle) :
     lateinit var ncApi: NcApi
 
     private var credentials: String? = null
-    private var currentUser: UserEntity? = null
+    private var currentUser: User? = null
     private var contactsQueryDisposable: Disposable? = null
     private var cacheQueryDisposable: Disposable? = null
     private var adapter: FlexibleAdapter<*>? = 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<String> = selectedUserIds.toTypedArray<String>()
-        val groupIdsArray: Array<String> = selectedGroupIds.toTypedArray<String>()
-        val emailsArray: Array<String> = selectedEmails.toTypedArray<String>()
-        val circleIdsArray: Array<String> = selectedCircleIds.toTypedArray<String>()
+        val userIdsArray: Array<String> = selectedUserIds.toTypedArray()
+        val groupIdsArray: Array<String> = selectedGroupIds.toTypedArray()
+        val emailsArray: Array<String> = selectedEmails.toTypedArray()
+        val circleIdsArray: Array<String> = 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<ContactItem> = adapter?.currentItems as List<ContactItem>
@@ -817,7 +817,7 @@ class ContactsController(args: Bundle) :
                         )
                         ConductorRemapping.remapChatController(
                             router,
-                            currentUser!!.id,
+                            currentUser!!.id!!,
                             roomOverall.ocs!!.data!!.token!!,
                             bundle,
                             true

+ 14 - 21
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<Capabilities>(
-                                    LoganSquare.parse<Capabilities>(
-                                        currentUser!!.capabilities,
-                                        Capabilities::class.java
-                                    )
-                                )
+                                Parcels.wrap<Capabilities>(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]

+ 11 - 10
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<HoverCardOverall> {
                 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
                                 )
                             }

+ 1 - 1
scripts/analysis/findbugs-results.txt

@@ -1 +1 @@
-152
+151