mirror of
https://github.com/nextcloud/talk-android
synced 2025-02-02 12:42:20 +00:00
Merge pull request #2221 from nextcloud/chore/1549/roomMigration3
Migrate contacts and creation of talk rooms from requery to room
This commit is contained in:
commit
26ce9ee868
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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]
|
||||
|
@ -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 @@
|
||||
152
|
||||
151
|
Loading…
Reference in New Issue
Block a user