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.controllers.base.NewBaseController
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.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.userprofile.Scope
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.remotefilebrowser.activities.RemoteFileBrowserActivity
import com.nextcloud.talk.ui.dialog.ScopeDialog
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DisplayUtils
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_GENERIC
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 io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers
@ -105,12 +105,12 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
lateinit var ncApi: NcApi
@Inject
lateinit var userUtils: UserUtils
lateinit var userManager: UserManager
@Inject
lateinit var permissionUtil: PlatformPermissionUtil
private var currentUser: UserEntity? = null
private var currentUser: User? = null
private var edit = false
private var adapter: UserInfoAdapter? = null
private var userInfo: UserProfileData? = null
@ -151,7 +151,7 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
item.setTitle(R.string.save)
binding.emptyList.root.visibility = View.GONE
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
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)
binding.userinfoList.adapter = adapter
binding.userinfoList.setItemViewCacheSize(DEFAULT_CACHE_SIZE)
currentUser = userUtils.currentUser
currentUser = userManager.currentUser.blockingGet()
val credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token)
binding.avatarUpload.setOnClickListener { sendSelectLocalFileIntent() }
binding.avatarChoose.setOnClickListener { showBrowserScreen() }
@ -310,7 +310,7 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
}
// show edit button
if (CapabilitiesUtil.canEditScopes(currentUser)) {
if (CapabilitiesUtilNew.canEditScopes(currentUser!!)) {
ncApi.getEditableUserProfileFields(
ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token),
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.Companion.checkPermission
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.userprofile.UserProfileOverall
import com.nextcloud.talk.users.UserManager
import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DisplayUtils
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.database.user.CapabilitiesUtilNew
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.singletons.ApplicationWideMessageHolder
import com.yarolegovich.lovelydialog.LovelySaveStateHandler
@ -115,7 +113,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
lateinit var ncApi: NcApi
@Inject
lateinit var userUtils: UserUtils
lateinit var userManager: UserManager
@Inject
lateinit var currentUserProvider: CurrentUserProviderNew
@ -328,19 +326,8 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
finalAlias = ""
}
userUtils.createOrUpdateUser(
null,
null,
null,
null,
null,
null,
null,
currentUser!!.id,
null,
finalAlias,
null
)
currentUser!!.clientCertificate = finalAlias
userManager.updateUser(currentUser!!)
},
arrayOf("RSA", "EC"),
null,
@ -430,7 +417,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
}
private fun removeCurrentAccount() {
val otherUserExists = userUtils.scheduleUserForDeletionWithId(currentUser!!.id!!)
val otherUserExists = userManager.scheduleUserForDeletionWithId(currentUser!!.id!!).blockingGet()
val accountRemovalWork = OneTimeWorkRequest.Builder(AccountRemovalWorker::class.java).build()
WorkManager.getInstance().enqueue(accountRemovalWork)
if (otherUserExists && view != null) {
@ -613,28 +600,9 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
displayName = userProfileOverall.ocs!!.data!!.displayNameAlt
}
if ((!TextUtils.isEmpty(displayName) && !(displayName == currentUser!!.displayName))) {
dbQueryDisposable = userUtils.createOrUpdateUser(
null,
null,
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) }
)
currentUser!!.displayName = displayName
userManager.updateUser(currentUser!!)
binding.displayNameText.text = currentUser!!.displayName
}
},
{ dispose(profileQueryDisposable) },
@ -682,7 +650,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
appPreferences!!.isKeyboardIncognito
}
if (CapabilitiesUtil.isReadStatusAvailable(userUtils.currentUser)) {
if (CapabilitiesUtilNew.isReadStatusAvailable(userManager.currentUser.blockingGet())) {
(binding.settingsReadPrivacy.findViewById<View>(R.id.mp_checkable) as Checkable).isChecked =
!CapabilitiesUtilNew.isReadStatusPrivate(currentUser!!)
} else {

View File

@ -123,6 +123,14 @@ class UserManager internal constructor(private val userRepository: UsersReposito
}.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")
fun createOrUpdateUser(
username: String?,