Migrate Settings and Profile controller from requery to room

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2022-07-16 17:45:58 +02:00
parent 74fbd3feeb
commit ac7652b5de
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
3 changed files with 25 additions and 49 deletions

View File

@ -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)

View File

@ -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 {

View File

@ -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?,