mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-19 19:49:33 +01:00
Migrate Settings and Profile controller from requery to room
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
parent
74fbd3feeb
commit
ac7652b5de
@ -59,10 +59,9 @@ 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.ControllerProfileBinding
|
import com.nextcloud.talk.databinding.ControllerProfileBinding
|
||||||
import com.nextcloud.talk.databinding.UserInfoDetailsTableItemBinding
|
import com.nextcloud.talk.databinding.UserInfoDetailsTableItemBinding
|
||||||
import com.nextcloud.talk.models.database.CapabilitiesUtil
|
|
||||||
import com.nextcloud.talk.models.database.UserEntity
|
|
||||||
import com.nextcloud.talk.models.json.generic.GenericOverall
|
import com.nextcloud.talk.models.json.generic.GenericOverall
|
||||||
import com.nextcloud.talk.models.json.userprofile.Scope
|
import com.nextcloud.talk.models.json.userprofile.Scope
|
||||||
import com.nextcloud.talk.models.json.userprofile.UserProfileData
|
import com.nextcloud.talk.models.json.userprofile.UserProfileData
|
||||||
@ -70,6 +69,7 @@ import com.nextcloud.talk.models.json.userprofile.UserProfileFieldsOverall
|
|||||||
import com.nextcloud.talk.models.json.userprofile.UserProfileOverall
|
import com.nextcloud.talk.models.json.userprofile.UserProfileOverall
|
||||||
import com.nextcloud.talk.remotefilebrowser.activities.RemoteFileBrowserActivity
|
import com.nextcloud.talk.remotefilebrowser.activities.RemoteFileBrowserActivity
|
||||||
import com.nextcloud.talk.ui.dialog.ScopeDialog
|
import com.nextcloud.talk.ui.dialog.ScopeDialog
|
||||||
|
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.FileUtils
|
import com.nextcloud.talk.utils.FileUtils
|
||||||
@ -77,7 +77,7 @@ import com.nextcloud.talk.utils.Mimetype.IMAGE_JPG
|
|||||||
import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX
|
import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX
|
||||||
import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX_GENERIC
|
import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX_GENERIC
|
||||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_MIME_TYPE_FILTER
|
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_MIME_TYPE_FILTER
|
||||||
import com.nextcloud.talk.utils.database.user.UserUtils
|
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew
|
||||||
import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil
|
import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil
|
||||||
import io.reactivex.Observer
|
import io.reactivex.Observer
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
@ -105,12 +105,12 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
|
|||||||
lateinit var ncApi: NcApi
|
lateinit var ncApi: NcApi
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var userUtils: UserUtils
|
lateinit var userManager: UserManager
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var permissionUtil: PlatformPermissionUtil
|
lateinit var permissionUtil: PlatformPermissionUtil
|
||||||
|
|
||||||
private var currentUser: UserEntity? = null
|
private var currentUser: User? = null
|
||||||
private var edit = false
|
private var edit = false
|
||||||
private var adapter: UserInfoAdapter? = null
|
private var adapter: UserInfoAdapter? = null
|
||||||
private var userInfo: UserProfileData? = null
|
private var userInfo: UserProfileData? = null
|
||||||
@ -151,7 +151,7 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
|
|||||||
item.setTitle(R.string.save)
|
item.setTitle(R.string.save)
|
||||||
binding.emptyList.root.visibility = View.GONE
|
binding.emptyList.root.visibility = View.GONE
|
||||||
binding.userinfoList.visibility = View.VISIBLE
|
binding.userinfoList.visibility = View.VISIBLE
|
||||||
if (CapabilitiesUtil.isAvatarEndpointAvailable(currentUser)) {
|
if (CapabilitiesUtilNew.isAvatarEndpointAvailable(currentUser!!)) {
|
||||||
// TODO later avatar can also be checked via user fields, for now it is in Talk capability
|
// TODO later avatar can also be checked via user fields, for now it is in Talk capability
|
||||||
binding.avatarButtons.visibility = View.VISIBLE
|
binding.avatarButtons.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
@ -199,7 +199,7 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
|
|||||||
adapter = UserInfoAdapter(null, activity!!.resources.getColor(R.color.colorPrimary), this)
|
adapter = UserInfoAdapter(null, activity!!.resources.getColor(R.color.colorPrimary), this)
|
||||||
binding.userinfoList.adapter = adapter
|
binding.userinfoList.adapter = adapter
|
||||||
binding.userinfoList.setItemViewCacheSize(DEFAULT_CACHE_SIZE)
|
binding.userinfoList.setItemViewCacheSize(DEFAULT_CACHE_SIZE)
|
||||||
currentUser = userUtils.currentUser
|
currentUser = userManager.currentUser.blockingGet()
|
||||||
val credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token)
|
val credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token)
|
||||||
binding.avatarUpload.setOnClickListener { sendSelectLocalFileIntent() }
|
binding.avatarUpload.setOnClickListener { sendSelectLocalFileIntent() }
|
||||||
binding.avatarChoose.setOnClickListener { showBrowserScreen() }
|
binding.avatarChoose.setOnClickListener { showBrowserScreen() }
|
||||||
@ -310,7 +310,7 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// show edit button
|
// show edit button
|
||||||
if (CapabilitiesUtil.canEditScopes(currentUser)) {
|
if (CapabilitiesUtilNew.canEditScopes(currentUser!!)) {
|
||||||
ncApi.getEditableUserProfileFields(
|
ncApi.getEditableUserProfileFields(
|
||||||
ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token),
|
ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token),
|
||||||
ApiUtils.getUrlForUserFields(currentUser!!.baseUrl)
|
ApiUtils.getUrlForUserFields(currentUser!!.baseUrl)
|
||||||
|
@ -75,10 +75,9 @@ import com.nextcloud.talk.jobs.AccountRemovalWorker
|
|||||||
import com.nextcloud.talk.jobs.ContactAddressBookWorker
|
import com.nextcloud.talk.jobs.ContactAddressBookWorker
|
||||||
import com.nextcloud.talk.jobs.ContactAddressBookWorker.Companion.checkPermission
|
import com.nextcloud.talk.jobs.ContactAddressBookWorker.Companion.checkPermission
|
||||||
import com.nextcloud.talk.jobs.ContactAddressBookWorker.Companion.deleteAll
|
import com.nextcloud.talk.jobs.ContactAddressBookWorker.Companion.deleteAll
|
||||||
import com.nextcloud.talk.models.database.CapabilitiesUtil
|
|
||||||
import com.nextcloud.talk.models.database.UserEntity
|
|
||||||
import com.nextcloud.talk.models.json.generic.GenericOverall
|
import com.nextcloud.talk.models.json.generic.GenericOverall
|
||||||
import com.nextcloud.talk.models.json.userprofile.UserProfileOverall
|
import com.nextcloud.talk.models.json.userprofile.UserProfileOverall
|
||||||
|
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.LoggingUtils.sendMailWithAttachment
|
import com.nextcloud.talk.utils.LoggingUtils.sendMailWithAttachment
|
||||||
@ -89,7 +88,6 @@ import com.nextcloud.talk.utils.SecurityUtils
|
|||||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ARE_CALL_SOUNDS
|
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ARE_CALL_SOUNDS
|
||||||
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew
|
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew
|
||||||
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
|
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
|
||||||
import com.nextcloud.talk.utils.database.user.UserUtils
|
|
||||||
import com.nextcloud.talk.utils.preferences.MagicUserInputModule
|
import com.nextcloud.talk.utils.preferences.MagicUserInputModule
|
||||||
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder
|
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder
|
||||||
import com.yarolegovich.lovelydialog.LovelySaveStateHandler
|
import com.yarolegovich.lovelydialog.LovelySaveStateHandler
|
||||||
@ -115,7 +113,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
|
|||||||
lateinit var ncApi: NcApi
|
lateinit var ncApi: NcApi
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var userUtils: UserUtils
|
lateinit var userManager: UserManager
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var currentUserProvider: CurrentUserProviderNew
|
lateinit var currentUserProvider: CurrentUserProviderNew
|
||||||
@ -328,19 +326,8 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
|
|||||||
finalAlias = ""
|
finalAlias = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
userUtils.createOrUpdateUser(
|
currentUser!!.clientCertificate = finalAlias
|
||||||
null,
|
userManager.updateUser(currentUser!!)
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
currentUser!!.id,
|
|
||||||
null,
|
|
||||||
finalAlias,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
arrayOf("RSA", "EC"),
|
arrayOf("RSA", "EC"),
|
||||||
null,
|
null,
|
||||||
@ -430,7 +417,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun removeCurrentAccount() {
|
private fun removeCurrentAccount() {
|
||||||
val otherUserExists = userUtils.scheduleUserForDeletionWithId(currentUser!!.id!!)
|
val otherUserExists = userManager.scheduleUserForDeletionWithId(currentUser!!.id!!).blockingGet()
|
||||||
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java).build()
|
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java).build()
|
||||||
WorkManager.getInstance().enqueue(accountRemovalWork)
|
WorkManager.getInstance().enqueue(accountRemovalWork)
|
||||||
if (otherUserExists && view != null) {
|
if (otherUserExists && view != null) {
|
||||||
@ -613,28 +600,9 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
|
|||||||
displayName = userProfileOverall.ocs!!.data!!.displayNameAlt
|
displayName = userProfileOverall.ocs!!.data!!.displayNameAlt
|
||||||
}
|
}
|
||||||
if ((!TextUtils.isEmpty(displayName) && !(displayName == currentUser!!.displayName))) {
|
if ((!TextUtils.isEmpty(displayName) && !(displayName == currentUser!!.displayName))) {
|
||||||
dbQueryDisposable = userUtils.createOrUpdateUser(
|
currentUser!!.displayName = displayName
|
||||||
null,
|
userManager.updateUser(currentUser!!)
|
||||||
null,
|
binding.displayNameText.text = currentUser!!.displayName
|
||||||
null,
|
|
||||||
displayName,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
currentUser!!.id,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
.subscribeOn(Schedulers.io())
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe(
|
|
||||||
{ userEntityResult: UserEntity ->
|
|
||||||
binding.displayNameText.text = userEntityResult.displayName
|
|
||||||
},
|
|
||||||
{ dispose(dbQueryDisposable) },
|
|
||||||
{ dispose(dbQueryDisposable) }
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ dispose(profileQueryDisposable) },
|
{ dispose(profileQueryDisposable) },
|
||||||
@ -682,7 +650,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
|
|||||||
appPreferences!!.isKeyboardIncognito
|
appPreferences!!.isKeyboardIncognito
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CapabilitiesUtil.isReadStatusAvailable(userUtils.currentUser)) {
|
if (CapabilitiesUtilNew.isReadStatusAvailable(userManager.currentUser.blockingGet())) {
|
||||||
(binding.settingsReadPrivacy.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked =
|
(binding.settingsReadPrivacy.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked =
|
||||||
!CapabilitiesUtilNew.isReadStatusPrivate(currentUser!!)
|
!CapabilitiesUtilNew.isReadStatusPrivate(currentUser!!)
|
||||||
} else {
|
} else {
|
||||||
|
@ -123,6 +123,14 @@ class UserManager internal constructor(private val userRepository: UsersReposito
|
|||||||
}.toSingle()
|
}.toSingle()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun updateUser(user: User): Single<Int> {
|
||||||
|
return if (user.id != null) {
|
||||||
|
Single.just(userRepository.updateUser(user))
|
||||||
|
} else {
|
||||||
|
Single.just(userRepository.insertUser(user).toInt())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Deprecated("Only available for migration, use updateExternalSignalingServer or create new methods")
|
@Deprecated("Only available for migration, use updateExternalSignalingServer or create new methods")
|
||||||
fun createOrUpdateUser(
|
fun createOrUpdateUser(
|
||||||
username: String?,
|
username: String?,
|
||||||
|
Loading…
Reference in New Issue
Block a user