From ac7652b5de7440b2e41320697a73e0b8f7e74377 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sat, 16 Jul 2022 17:45:58 +0200 Subject: [PATCH] Migrate Settings and Profile controller from requery to room Signed-off-by: Andy Scherzinger --- .../talk/controllers/ProfileController.kt | 16 +++--- .../talk/controllers/SettingsController.kt | 50 ++++--------------- .../com/nextcloud/talk/users/UserManager.kt | 8 +++ 3 files changed, 25 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ProfileController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ProfileController.kt index ea4a44557..52631f15f 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ProfileController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ProfileController.kt @@ -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) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt index 185ad0b4b..14ba69c66 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt @@ -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(R.id.mp_checkable) as Checkable).isChecked = !CapabilitiesUtilNew.isReadStatusPrivate(currentUser!!) } else { diff --git a/app/src/main/java/com/nextcloud/talk/users/UserManager.kt b/app/src/main/java/com/nextcloud/talk/users/UserManager.kt index cfd83b88b..68a1dac9d 100644 --- a/app/src/main/java/com/nextcloud/talk/users/UserManager.kt +++ b/app/src/main/java/com/nextcloud/talk/users/UserManager.kt @@ -123,6 +123,14 @@ class UserManager internal constructor(private val userRepository: UsersReposito }.toSingle() } + fun updateUser(user: User): Single { + 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?,