WIP improvements during pair programming call

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
This commit is contained in:
Álvaro Brey 2022-06-23 17:33:19 +02:00 committed by Andy Scherzinger
parent 5881e5021c
commit afbec06ad3
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
6 changed files with 113 additions and 147 deletions

View File

@ -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());
});
}
}

View File

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

View File

@ -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,46 +150,44 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
ViewCompat.setTransitionName((binding.avatarImage), "userAvatar.transitionTag")
runBlocking {
getCurrentUser()
getCurrentUser()
if (saveStateHandler == null) {
saveStateHandler = LovelySaveStateHandler()
}
registerChangeListeners()
setupSettingsScreen()
setupLicenceSetting()
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)
)
)
}
setupPrivacyUrl()
setupSourceCodeUrl()
binding.settingsVersion.setSummary("v" + BuildConfig.VERSION_NAME)
setupSoundSettings()
setupPhoneBookIntegration()
setupClientCertView()
if (saveStateHandler == null) {
saveStateHandler = LovelySaveStateHandler()
}
registerChangeListeners()
setupSettingsScreen()
setupLicenceSetting()
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)
)
)
}
setupPrivacyUrl()
setupSourceCodeUrl()
binding.settingsVersion.setSummary("v" + BuildConfig.VERSION_NAME)
setupSoundSettings()
setupPhoneBookIntegration()
setupClientCertView()
Log.i(TAG, "Current user: " + currentUser?.displayName)
}
@ -472,72 +469,67 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
actionBar?.show()
dispose(null)
runBlocking {
binding.settingsVersion.setOnClickListener {
sendLogs()
}
getCurrentUser()
if (!TextUtils.isEmpty(currentUser!!.clientCertificate)) {
binding.settingsClientCert.setTitle(R.string.nc_client_cert_change)
} else {
binding.settingsClientCert.setTitle(R.string.nc_client_cert_setup)
}
binding.settingsVersion.setOnClickListener {
sendLogs()
}
setupCheckables()
setupScreenLockSetting()
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 (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
binding.settingsNotificationsCategory.setTitle(
resources!!.getString(R.string.nc_settings_notification_sounds_post_oreo)
)
}
setupCheckables()
setupScreenLockSetting()
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))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
binding.settingsNotificationsCategory.setTitle(
resources!!.getString(R.string.nc_settings_notification_sounds_post_oreo)
setupProxyTypeSettings()
setupProxyCredentialSettings()
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())
)
}
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()
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())
)
}
if (currentUser!!.displayName != null) {
binding.displayNameText.text = currentUser!!.displayName
}
DisplayUtils.loadAvatarImage(currentUser, binding.avatarImage, false)
setupProfileQueryDisposable()
binding.settingsRemoveAccount.addPreferenceClickListener {
showLovelyDialog(ID_REMOVE_ACCOUNT_WARNING_DIALOG, null)
}
if (currentUser!!.displayName != null) {
binding.displayNameText.text = currentUser!!.displayName
}
setupMessageView()
DisplayUtils.loadAvatarImage(currentUser, binding.avatarImage, false)
binding.avatarContainer.setOnClickListener {
router
.pushController(
RouterTransaction.with(ProfileController())
.pushChangeHandler(HorizontalChangeHandler())
.popChangeHandler(HorizontalChangeHandler())
setupProfileQueryDisposable()
)
binding.settingsRemoveAccount.addPreferenceClickListener {
showLovelyDialog(ID_REMOVE_ACCOUNT_WARNING_DIALOG, null)
}
}
setupMessageView()
binding.avatarContainer.setOnClickListener {
router
.pushController(
RouterTransaction.with(ProfileController())
.pushChangeHandler(HorizontalChangeHandler())
.popChangeHandler(HorizontalChangeHandler())
)
}
}
private fun setupProxyTypeSettings() {

View File

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

View File

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

View File

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