Migrate contacts and creation of talk rooms from requery to room

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2022-07-16 15:52:01 +02:00
parent 1c672c04e3
commit f4cde24f8e
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
3 changed files with 38 additions and 45 deletions

View File

@ -32,8 +32,8 @@ import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.interfaces.DraweeController;
import com.nextcloud.talk.R; import com.nextcloud.talk.R;
import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.data.user.model.User;
import com.nextcloud.talk.databinding.RvItemContactBinding; 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.models.json.participants.Participant;
import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.DisplayUtils; 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"; public static final String PARTICIPANT_SOURCE_USERS = "users";
private final Participant participant; private final Participant participant;
private final UserEntity userEntity; private final User user;
private GenericTextHeaderItem header; private GenericTextHeaderItem header;
public boolean isOnline = true; public boolean isOnline = true;
public ContactItem(Participant participant, public ContactItem(Participant participant,
UserEntity userEntity, User user,
GenericTextHeaderItem genericTextHeaderItem) { GenericTextHeaderItem genericTextHeaderItem) {
this.participant = participant; this.participant = participant;
this.userEntity = userEntity; this.user = user;
this.header = genericTextHeaderItem; this.header = genericTextHeaderItem;
} }
@ -179,7 +179,7 @@ public class ContactItem extends AbstractFlexibleItem<ContactItem.ContactItemVie
.setOldController(holder.binding.avatarDraweeView.getController()) .setOldController(holder.binding.avatarDraweeView.getController())
.setAutoPlayAnimations(true) .setAutoPlayAnimations(true)
.setImageRequest(DisplayUtils.getImageRequestForUrl( .setImageRequest(DisplayUtils.getImageRequestForUrl(
ApiUtils.getUrlForGuestAvatar(userEntity.getBaseUrl(), ApiUtils.getUrlForGuestAvatar(user.getBaseUrl(),
displayName, displayName,
false))) false)))
.build(); .build();
@ -191,7 +191,7 @@ public class ContactItem extends AbstractFlexibleItem<ContactItem.ContactItemVie
.setOldController(holder.binding.avatarDraweeView.getController()) .setOldController(holder.binding.avatarDraweeView.getController())
.setAutoPlayAnimations(true) .setAutoPlayAnimations(true)
.setImageRequest(DisplayUtils.getImageRequestForUrl( .setImageRequest(DisplayUtils.getImageRequestForUrl(
ApiUtils.getUrlForAvatar(userEntity.getBaseUrl(), ApiUtils.getUrlForAvatar(user.getBaseUrl(),
participant.getCalculatedActorId(), participant.getCalculatedActorId(),
false))) false)))
.build(); .build();

View File

@ -52,12 +52,11 @@ import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedA
import com.nextcloud.talk.controllers.base.NewBaseController import com.nextcloud.talk.controllers.base.NewBaseController
import com.nextcloud.talk.controllers.bottomsheet.ConversationOperationEnum import com.nextcloud.talk.controllers.bottomsheet.ConversationOperationEnum
import com.nextcloud.talk.controllers.util.viewBinding 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.databinding.ControllerContactsRvBinding
import com.nextcloud.talk.events.OpenConversationEvent import com.nextcloud.talk.events.OpenConversationEvent
import com.nextcloud.talk.jobs.AddParticipantsToConversation import com.nextcloud.talk.jobs.AddParticipantsToConversation
import com.nextcloud.talk.models.RetrofitBucket 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.AutocompleteOverall
import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser
import com.nextcloud.talk.models.json.conversations.Conversation 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.converters.EnumActorTypeConverter
import com.nextcloud.talk.models.json.participants.Participant import com.nextcloud.talk.models.json.participants.Participant
import com.nextcloud.talk.ui.dialog.ContactsBottomDialog import com.nextcloud.talk.ui.dialog.ContactsBottomDialog
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.ConductorRemapping import com.nextcloud.talk.utils.ConductorRemapping
import com.nextcloud.talk.utils.bundle.BundleKeys 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.FlexibleAdapter
import eu.davidea.flexibleadapter.SelectableAdapter import eu.davidea.flexibleadapter.SelectableAdapter
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
@ -95,7 +95,7 @@ class ContactsController(args: Bundle) :
private val binding: ControllerContactsRvBinding by viewBinding(ControllerContactsRvBinding::bind) private val binding: ControllerContactsRvBinding by viewBinding(ControllerContactsRvBinding::bind)
@Inject @Inject
lateinit var userUtils: UserUtils lateinit var userManager: UserManager
@Inject @Inject
lateinit var eventBus: EventBus lateinit var eventBus: EventBus
@ -104,7 +104,7 @@ class ContactsController(args: Bundle) :
lateinit var ncApi: NcApi lateinit var ncApi: NcApi
private var credentials: String? = null private var credentials: String? = null
private var currentUser: UserEntity? = null private var currentUser: User? = null
private var contactsQueryDisposable: Disposable? = null private var contactsQueryDisposable: Disposable? = null
private var cacheQueryDisposable: Disposable? = null private var cacheQueryDisposable: Disposable? = null
private var adapter: FlexibleAdapter<*>? = null private var adapter: FlexibleAdapter<*>? = null
@ -168,7 +168,7 @@ class ContactsController(args: Bundle) :
override fun onViewBound(view: View) { override fun onViewBound(view: View) {
super.onViewBound(view) super.onViewBound(view)
currentUser = userUtils.currentUser currentUser = userManager.currentUser.blockingGet()
if (currentUser != null) { if (currentUser != null) {
credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token) credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token)
} }
@ -285,7 +285,7 @@ class ContactsController(args: Bundle) :
Parcels.wrap(roomOverall.ocs!!.data!!) Parcels.wrap(roomOverall.ocs!!.data!!)
) )
ConductorRemapping.remapChatController( ConductorRemapping.remapChatController(
router, currentUser!!.id, router, currentUser!!.id!!,
roomOverall.ocs!!.data!!.token!!, bundle, true roomOverall.ocs!!.data!!.token!!, bundle, true
) )
} }
@ -311,12 +311,12 @@ class ContactsController(args: Bundle) :
} }
private fun addParticipantsToConversation() { private fun addParticipantsToConversation() {
val userIdsArray: Array<String> = selectedUserIds.toTypedArray<String>() val userIdsArray: Array<String> = selectedUserIds.toTypedArray()
val groupIdsArray: Array<String> = selectedGroupIds.toTypedArray<String>() val groupIdsArray: Array<String> = selectedGroupIds.toTypedArray()
val emailsArray: Array<String> = selectedEmails.toTypedArray<String>() val emailsArray: Array<String> = selectedEmails.toTypedArray()
val circleIdsArray: Array<String> = selectedCircleIds.toTypedArray<String>() val circleIdsArray: Array<String> = selectedCircleIds.toTypedArray()
val data = Data.Builder() 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.putString(BundleKeys.KEY_TOKEN, conversationToken)
data.putStringArray(BundleKeys.KEY_SELECTED_USERS, userIdsArray) data.putStringArray(BundleKeys.KEY_SELECTED_USERS, userIdsArray)
data.putStringArray(BundleKeys.KEY_SELECTED_GROUPS, groupIdsArray) data.putStringArray(BundleKeys.KEY_SELECTED_GROUPS, groupIdsArray)
@ -402,13 +402,13 @@ class ContactsController(args: Bundle) :
if (!isAddingParticipantsView) { if (!isAddingParticipantsView) {
// groups // groups
shareTypesList.add("1") shareTypesList.add("1")
} else if (CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails")) { } else if (CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails")) {
// groups // groups
shareTypesList.add("1") shareTypesList.add("1")
// emails // emails
shareTypesList.add("4") shareTypesList.add("4")
} }
if (CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "circles-support")) { if (CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "circles-support")) {
// circles // circles
shareTypesList.add("7") shareTypesList.add("7")
} }
@ -732,7 +732,7 @@ class ContactsController(args: Bundle) :
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)
fun onMessageEvent(openConversationEvent: OpenConversationEvent) { fun onMessageEvent(openConversationEvent: OpenConversationEvent) {
ConductorRemapping.remapChatController( ConductorRemapping.remapChatController(
router, currentUser!!.id, router, currentUser!!.id!!,
openConversationEvent.conversation!!.token!!, openConversationEvent.conversation!!.token!!,
openConversationEvent.bundle!!, true openConversationEvent.bundle!!, true
) )
@ -759,8 +759,8 @@ class ContactsController(args: Bundle) :
private fun updateSelection(contactItem: ContactItem) { private fun updateSelection(contactItem: ContactItem) {
contactItem.model.selected = !contactItem.model.selected contactItem.model.selected = !contactItem.model.selected
updateSelectionLists(contactItem.model) updateSelectionLists(contactItem.model)
if (CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "last-room-activity") && if (CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "last-room-activity") &&
!CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails") && !CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails") &&
isValidGroupSelection(contactItem, contactItem.model, adapter) isValidGroupSelection(contactItem, contactItem.model, adapter)
) { ) {
val currentItems: List<ContactItem> = adapter?.currentItems as List<ContactItem> val currentItems: List<ContactItem> = adapter?.currentItems as List<ContactItem>
@ -817,7 +817,7 @@ class ContactsController(args: Bundle) :
) )
ConductorRemapping.remapChatController( ConductorRemapping.remapChatController(
router, router,
currentUser!!.id, currentUser!!.id!!,
roomOverall.ocs!!.data!!.token!!, roomOverall.ocs!!.data!!.token!!,
bundle, bundle,
true true

View File

@ -30,19 +30,17 @@ import android.view.View
import autodagger.AutoInjector import autodagger.AutoInjector
import com.bluelinelabs.conductor.RouterTransaction import com.bluelinelabs.conductor.RouterTransaction
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler
import com.bluelinelabs.logansquare.LoganSquare
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.controllers.base.NewBaseController import com.nextcloud.talk.controllers.base.NewBaseController
import com.nextcloud.talk.controllers.util.viewBinding 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.databinding.ControllerOperationsMenuBinding
import com.nextcloud.talk.events.ConversationsListFetchDataEvent import com.nextcloud.talk.events.ConversationsListFetchDataEvent
import com.nextcloud.talk.events.OpenConversationEvent import com.nextcloud.talk.events.OpenConversationEvent
import com.nextcloud.talk.models.RetrofitBucket 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.Capabilities
import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall
import com.nextcloud.talk.models.json.conversations.Conversation 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.conversations.RoomOverall
import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.models.json.generic.GenericOverall
import com.nextcloud.talk.models.json.participants.AddParticipantOverall 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.ApiUtils
import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.NoSupportedApiException 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_ROOM_TOKEN
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SERVER_CAPABILITIES 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.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 com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder
import io.reactivex.Observer import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -90,14 +89,14 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
lateinit var ncApi: NcApi lateinit var ncApi: NcApi
@Inject @Inject
lateinit var userUtils: UserUtils lateinit var userManager: UserManager
@Inject @Inject
lateinit var eventBus: EventBus lateinit var eventBus: EventBus
private val operation: ConversationOperationEnum? private val operation: ConversationOperationEnum?
private var conversation: Conversation? = null private var conversation: Conversation? = null
private var currentUser: UserEntity? = null private var currentUser: User? = null
private val callPassword: String private val callPassword: String
private val callUrl: String private val callUrl: String
private var baseUrl: String? = null private var baseUrl: String? = null
@ -116,7 +115,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
override fun onViewBound(view: View) { override fun onViewBound(view: View) {
super.onViewBound(view) super.onViewBound(view)
sharedApplication!!.componentApplication.inject(this) sharedApplication!!.componentApplication.inject(this)
currentUser = userUtils.currentUser currentUser = userManager.currentUser.blockingGet()
if (!TextUtils.isEmpty(callUrl) && callUrl.contains("/call")) { if (!TextUtils.isEmpty(callUrl) && callUrl.contains("/call")) {
conversationToken = callUrl.substring(callUrl.lastIndexOf("/") + 1) conversationToken = callUrl.substring(callUrl.lastIndexOf("/") + 1)
@ -144,11 +143,11 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
@Throws(IOException::class) @Throws(IOException::class)
private fun useBundledCapabilitiesForGuest() { private fun useBundledCapabilitiesForGuest() {
currentUser = UserEntity() currentUser = User()
currentUser!!.baseUrl = baseUrl currentUser!!.baseUrl = baseUrl
currentUser!!.userId = "?" currentUser!!.userId = "?"
try { try {
currentUser!!.capabilities = LoganSquare.serialize(serverCapabilities) currentUser!!.capabilities = serverCapabilities
} catch (e: IOException) { } catch (e: IOException) {
Log.e("OperationsMenu", "Failed to serialize capabilities") Log.e("OperationsMenu", "Failed to serialize capabilities")
throw e throw e
@ -172,12 +171,11 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
} }
override fun onNext(capabilitiesOverall: CapabilitiesOverall) { override fun onNext(capabilitiesOverall: CapabilitiesOverall) {
currentUser = UserEntity() currentUser = User()
currentUser!!.baseUrl = baseUrl currentUser!!.baseUrl = baseUrl
currentUser!!.userId = "?" currentUser!!.userId = "?"
try { try {
currentUser!!.capabilities = LoganSquare currentUser!!.capabilities = capabilitiesOverall.ocs!!.data!!.capabilities
.serialize(capabilitiesOverall.ocs!!.data!!.capabilities)
} catch (e: IOException) { } catch (e: IOException) {
Log.e("OperationsMenu", "Failed to serialize capabilities") Log.e("OperationsMenu", "Failed to serialize capabilities")
} }
@ -469,12 +467,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
try { try {
bundle.putParcelable( bundle.putParcelable(
KEY_SERVER_CAPABILITIES, KEY_SERVER_CAPABILITIES,
Parcels.wrap<Capabilities>( Parcels.wrap<Capabilities>(currentUser!!.capabilities)
LoganSquare.parse<Capabilities>(
currentUser!!.capabilities,
Capabilities::class.java
)
)
) )
} catch (e: IOException) { } catch (e: IOException) {
Log.e(TAG, "Failed to parse capabilities for guest") Log.e(TAG, "Failed to parse capabilities for guest")
@ -604,7 +597,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
} }
@kotlin.Throws(NoSupportedApiException::class) @kotlin.Throws(NoSupportedApiException::class)
private fun checkCapabilities(currentUser: UserEntity) { private fun checkCapabilities(currentUser: User) {
ApiUtils.getConversationApiVersion(currentUser, intArrayOf(ApiUtils.APIv4, 1)) ApiUtils.getConversationApiVersion(currentUser, intArrayOf(ApiUtils.APIv4, 1))
ApiUtils.getCallApiVersion(currentUser, intArrayOf(ApiUtils.APIv4, 1)) ApiUtils.getCallApiVersion(currentUser, intArrayOf(ApiUtils.APIv4, 1))
ApiUtils.getChatApiVersion(currentUser, intArrayOf(1)) ApiUtils.getChatApiVersion(currentUser, intArrayOf(1))
@ -619,7 +612,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
} }
val apiVersion = ApiUtils.getConversationApiVersion(currentUser, API_CONVERSATION_VERSIONS) val apiVersion = ApiUtils.getConversationApiVersion(currentUser, API_CONVERSATION_VERSIONS)
if (localInvitedUsers!!.size > 0 || localInvitedGroups.size > 0 && 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) addGroupsToConversation(localInvitedUsers, localInvitedGroups, apiVersion)
addUsersToConversation(localInvitedUsers, localInvitedGroups, apiVersion) addUsersToConversation(localInvitedUsers, localInvitedGroups, apiVersion)
@ -676,7 +669,7 @@ class OperationsMenuController(args: Bundle) : NewBaseController(
) { ) {
var retrofitBucket: RetrofitBucket var retrofitBucket: RetrofitBucket
if (localInvitedGroups!!.size > 0 && if (localInvitedGroups!!.size > 0 &&
CapabilitiesUtil.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails") CapabilitiesUtilNew.hasSpreedFeatureCapability(currentUser, "invite-groups-and-mails")
) { ) {
for (i in localInvitedGroups.indices) { for (i in localInvitedGroups.indices) {
val groupId = localInvitedGroups[i] val groupId = localInvitedGroups[i]