Эх сурвалжийг харах

Migrate Settings and Profile controller from requery to room

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Andy Scherzinger 2 жил өмнө
parent
commit
ac7652b5de

+ 8 - 8
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)

+ 9 - 41
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<View>(R.id.mp_checkable) as Checkable).isChecked =
                 !CapabilitiesUtilNew.isReadStatusPrivate(currentUser!!)
         } else {

+ 8 - 0
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<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?,