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

WIP improvements during pair programming call

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Álvaro Brey 2 жил өмнө
parent
commit
afbec06ad3

+ 1 - 1
app/src/androidTest/java/com/nextcloud/talk/ui/LoginIT.java

@@ -143,7 +143,7 @@ public class LoginIT {
         onView(withId(R.id.user_name)).check(matches(withText("User One")));
 
         activityScenario.onActivity(activity -> {
-            assertEquals(loginName, Objects.requireNonNull(activity.userManager.getCurrentUser()).getUserId());
+            assertEquals(loginName, Objects.requireNonNull(activity.userManager.getCurrentUser().blockingFirst()).getUserId());
         });
     }
 }

+ 2 - 2
app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt

@@ -262,7 +262,7 @@ class MainActivity : BaseActivity(), ActionBarProvider {
                     val user = userId.substringBeforeLast("@")
                     val baseUrl = userId.substringAfterLast("@")
 
-                    if (userManager.currentUser?.baseUrl?.endsWith(baseUrl) == true) {
+                    if (userManager.currentUser.blockingFirst()?.baseUrl?.endsWith(baseUrl) == true) {
                         startConversation(user)
                     } else {
                         Snackbar.make(
@@ -279,7 +279,7 @@ class MainActivity : BaseActivity(), ActionBarProvider {
     private fun startConversation(userId: String) {
         val roomType = "1"
 
-        val currentUser = userManager.currentUser
+        val currentUser = userManager.currentUser.blockingFirst()
 
         val apiVersion = ApiUtils.getConversationApiVersion(currentUser, intArrayOf(ApiUtils.APIv4, 1))
         val credentials = ApiUtils.getCredentials(currentUser?.username, currentUser?.token)

+ 75 - 83
app/src/main/java/com/nextcloud/talk/controllers/SettingsController.kt

@@ -98,7 +98,6 @@ import io.reactivex.Observer
 import io.reactivex.android.schedulers.AndroidSchedulers
 import io.reactivex.disposables.Disposable
 import io.reactivex.schedulers.Schedulers
-import kotlinx.coroutines.runBlocking
 import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener
 import okhttp3.MediaType.Companion.toMediaTypeOrNull
 import okhttp3.RequestBody
@@ -140,7 +139,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
             resources!!.getString(R.string.nc_settings)
 
     private fun getCurrentUser() {
-        currentUser = currentUserProvider.currentUser
+        currentUser = currentUserProvider.currentUser.firstOrError().blockingGet()
         credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token)
     }
 
@@ -151,45 +150,43 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
 
         ViewCompat.setTransitionName((binding.avatarImage), "userAvatar.transitionTag")
 
-        runBlocking {
-            getCurrentUser()
+        getCurrentUser()
 
-            if (saveStateHandler == null) {
-                saveStateHandler = LovelySaveStateHandler()
-            }
+        if (saveStateHandler == null) {
+            saveStateHandler = LovelySaveStateHandler()
+        }
 
-            registerChangeListeners()
+        registerChangeListeners()
 
-            setupSettingsScreen()
-            setupLicenceSetting()
+        setupSettingsScreen()
+        setupLicenceSetting()
 
-            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
-                binding.settingsIncognitoKeyboard.visibility = View.GONE
-            }
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+            binding.settingsIncognitoKeyboard.visibility = View.GONE
+        }
 
-            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
-                binding.settingsScreenLock.visibility = View.GONE
-                binding.settingsScreenLockTimeout.visibility = View.GONE
-            } else {
-                binding.settingsScreenLock.setSummary(
-                    String.format(
-                        Locale.getDefault(),
-                        resources!!.getString(R.string.nc_settings_screen_lock_desc),
-                        resources!!.getString(R.string.nc_app_product_name)
-                    )
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
+            binding.settingsScreenLock.visibility = View.GONE
+            binding.settingsScreenLockTimeout.visibility = View.GONE
+        } else {
+            binding.settingsScreenLock.setSummary(
+                String.format(
+                    Locale.getDefault(),
+                    resources!!.getString(R.string.nc_settings_screen_lock_desc),
+                    resources!!.getString(R.string.nc_app_product_name)
                 )
-            }
+            )
+        }
 
-            setupPrivacyUrl()
-            setupSourceCodeUrl()
-            binding.settingsVersion.setSummary("v" + BuildConfig.VERSION_NAME)
+        setupPrivacyUrl()
+        setupSourceCodeUrl()
+        binding.settingsVersion.setSummary("v" + BuildConfig.VERSION_NAME)
 
-            setupSoundSettings()
+        setupSoundSettings()
 
-            setupPhoneBookIntegration()
+        setupPhoneBookIntegration()
 
-            setupClientCertView()
-        }
+        setupClientCertView()
 
         Log.i(TAG, "Current user: " + currentUser?.displayName)
     }
@@ -472,71 +469,66 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
         actionBar?.show()
         dispose(null)
 
-        runBlocking {
-
-            getCurrentUser()
-
-            binding.settingsVersion.setOnClickListener {
-                sendLogs()
-            }
+        binding.settingsVersion.setOnClickListener {
+            sendLogs()
+        }
 
-            if (!TextUtils.isEmpty(currentUser!!.clientCertificate)) {
-                binding.settingsClientCert.setTitle(R.string.nc_client_cert_change)
-            } else {
-                binding.settingsClientCert.setTitle(R.string.nc_client_cert_setup)
-            }
+        if (!TextUtils.isEmpty(currentUser!!.clientCertificate)) {
+            binding.settingsClientCert.setTitle(R.string.nc_client_cert_change)
+        } else {
+            binding.settingsClientCert.setTitle(R.string.nc_client_cert_setup)
+        }
 
-            setupCheckables()
-            setupScreenLockSetting()
+        setupCheckables()
+        setupScreenLockSetting()
 
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-                binding.settingsNotificationsCategory.setTitle(
-                    resources!!.getString(R.string.nc_settings_notification_sounds_post_oreo)
-                )
-            }
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            binding.settingsNotificationsCategory.setTitle(
+                resources!!.getString(R.string.nc_settings_notification_sounds_post_oreo)
+            )
+        }
 
-            val callRingtoneUri = getCallRingtoneUri(view.context, (appPreferences)!!)
-            binding.settingsCallSound.setSummary(getRingtoneName(view.context, callRingtoneUri))
-            val messageRingtoneUri = getMessageRingtoneUri(view.context, (appPreferences)!!)
-            binding.settingsMessageSound.setSummary(getRingtoneName(view.context, messageRingtoneUri))
+        val callRingtoneUri = getCallRingtoneUri(view.context, (appPreferences)!!)
+        binding.settingsCallSound.setSummary(getRingtoneName(view.context, callRingtoneUri))
+        val messageRingtoneUri = getMessageRingtoneUri(view.context, (appPreferences)!!)
+        binding.settingsMessageSound.setSummary(getRingtoneName(view.context, messageRingtoneUri))
 
-            setupProxyTypeSettings()
-            setupProxyCredentialSettings()
+        setupProxyTypeSettings()
+        setupProxyCredentialSettings()
 
-            if (currentUser != null) {
-                binding.baseUrlText.text = Uri.parse(currentUser!!.baseUrl).host
-                setupServerAgeWarning()
+        if (currentUser != null) {
+            binding.baseUrlText.text = Uri.parse(currentUser!!.baseUrl).host
+            setupServerAgeWarning()
 
-                binding.settingsReauthorize.addPreferenceClickListener {
-                    router.pushController(
-                        RouterTransaction.with(WebViewLoginController(currentUser!!.baseUrl, true))
-                            .pushChangeHandler(VerticalChangeHandler())
-                            .popChangeHandler(VerticalChangeHandler())
-                    )
-                }
+            binding.settingsReauthorize.addPreferenceClickListener {
+                router.pushController(
+                    RouterTransaction.with(WebViewLoginController(currentUser!!.baseUrl, true))
+                        .pushChangeHandler(VerticalChangeHandler())
+                        .popChangeHandler(VerticalChangeHandler())
+                )
+            }
 
-                if (currentUser!!.displayName != null) {
-                    binding.displayNameText.text = currentUser!!.displayName
-                }
-                DisplayUtils.loadAvatarImage(currentUser, binding.avatarImage, false)
+            if (currentUser!!.displayName != null) {
+                binding.displayNameText.text = currentUser!!.displayName
+            }
+            DisplayUtils.loadAvatarImage(currentUser, binding.avatarImage, false)
 
-                setupProfileQueryDisposable()
+            setupProfileQueryDisposable()
 
-                binding.settingsRemoveAccount.addPreferenceClickListener {
-                    showLovelyDialog(ID_REMOVE_ACCOUNT_WARNING_DIALOG, null)
-                }
+            binding.settingsRemoveAccount.addPreferenceClickListener {
+                showLovelyDialog(ID_REMOVE_ACCOUNT_WARNING_DIALOG, null)
             }
-            setupMessageView()
+        }
+        setupMessageView()
 
-            binding.avatarContainer.setOnClickListener {
-                router
-                    .pushController(
-                        RouterTransaction.with(ProfileController())
-                            .pushChangeHandler(HorizontalChangeHandler())
-                            .popChangeHandler(HorizontalChangeHandler())
+        binding.avatarContainer.setOnClickListener {
+            router
+                .pushController(
+                    RouterTransaction.with(ProfileController())
+                        .pushChangeHandler(HorizontalChangeHandler())
+                        .popChangeHandler(HorizontalChangeHandler())
 
-                    )
-            }
+                )
         }
     }
 

+ 1 - 0
app/src/main/java/com/nextcloud/talk/data/user/UsersDao.kt

@@ -74,6 +74,7 @@ abstract class UsersDao {
     @Query("SELECT * FROM User where id = :id")
     abstract fun getUserWithId(id: Long): Observable<UserNgEntity?>
 
+    // TODO remove this one, duplicated
     @Query("SELECT * FROM User where id = :id")
     abstract fun getUserWithIdLiveData(id: Long): Observable<UserNgEntity?>
 

+ 23 - 51
app/src/main/java/com/nextcloud/talk/users/UserManager.kt

@@ -74,9 +74,9 @@ class UserManager internal constructor(private val userRepository: UsersReposito
         return Observable.just(result)
     }
 
-    override val currentUser: UserNgEntity?
+    override val currentUser: Observable<UserNgEntity?>
         get() {
-            return userRepository.getActiveUserSynchronously()
+            return userRepository.getActiveUser()
         }
 
     fun deleteUser(internalId: Long) {
@@ -245,62 +245,34 @@ class UserManager internal constructor(private val userRepository: UsersReposito
         username: String?,
         userAttributes: UserAttributes,
     ): Observable<UserNgEntity?> {
-        var user: UserNgEntity? = null
 
-        if (userAttributes.id == null && username != null && userAttributes.serverUrl != null) {
+        val userObservable = if (userAttributes.id == null && username != null && userAttributes.serverUrl != null) {
             userRepository.getUserWithUsernameAndServer(username, userAttributes.serverUrl)
-                .subscribe(object : Observer<UserNgEntity?> {
-                    override fun onSubscribe(d: Disposable) {
-                        // unused atm
-                    }
-
-                    override fun onNext(userEntity: UserNgEntity) {
-                        user = userEntity
-                    }
-
-                    override fun onError(e: Throwable) {
-                        // unused atm
-                    }
-
-                    override fun onComplete() {
-                        // unused atm
-                    }
-                })
         } else if (userAttributes.id != null) {
             userRepository.getUserWithId(userAttributes.id)
-                .subscribe(object : Observer<UserNgEntity?> {
-                    override fun onSubscribe(d: Disposable) {
-                        // unused atm
-                    }
-
-                    override fun onNext(userEntity: UserNgEntity) {
-                        user = userEntity
-                    }
-
-                    override fun onError(e: Throwable) {
-                        // unused atm
-                    }
-
-                    override fun onComplete() {
-                        // unused atm
-                    }
-                })
-        }
-
-        if (user == null) {
-            user = createUser(
-                username,
-                userAttributes
-            )
         } else {
-            updateUserData(
-                user!!,
-                userAttributes
-            )
+            Observable.just(null)
         }
 
-        userRepository.insertUser(user!!)
-        return userRepository.getUserWithIdLiveData(user!!.id)
+        return userObservable
+            .map { user: UserNgEntity? ->
+                val userEntity = when (user) {
+                    null -> createUser(
+                        username,
+                        userAttributes
+                    )
+                    else -> {
+                        updateUserData(
+                            user,
+                            userAttributes
+                        )
+                        user
+                    }
+                }
+                userRepository.insertUser(userEntity)
+            }.flatMap { id ->
+                userRepository.getUserWithIdLiveData(id)
+            }
     }
 
     fun getUserWithUsernameAndServer(username: String, server: String): Observable<UserNgEntity?> {

+ 2 - 1
app/src/main/java/com/nextcloud/talk/utils/database/user/CurrentUserProviderNew.kt

@@ -21,7 +21,8 @@
 package com.nextcloud.talk.utils.database.user
 
 import com.nextcloud.talk.data.user.model.UserNgEntity
+import io.reactivex.Observable
 
 interface CurrentUserProviderNew {
-    val currentUser: UserNgEntity?
+    val currentUser: Observable<UserNgEntity?>
 }