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"))); onView(withId(R.id.user_name)).check(matches(withText("User One")));
activityScenario.onActivity(activity -> { 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 user = userId.substringBeforeLast("@")
val baseUrl = userId.substringAfterLast("@") val baseUrl = userId.substringAfterLast("@")
if (userManager.currentUser?.baseUrl?.endsWith(baseUrl) == true) { if (userManager.currentUser.blockingFirst()?.baseUrl?.endsWith(baseUrl) == true) {
startConversation(user) startConversation(user)
} else { } else {
Snackbar.make( Snackbar.make(
@ -279,7 +279,7 @@ class MainActivity : BaseActivity(), ActionBarProvider {
private fun startConversation(userId: String) { private fun startConversation(userId: String) {
val roomType = "1" val roomType = "1"
val currentUser = userManager.currentUser val currentUser = userManager.currentUser.blockingFirst()
val apiVersion = ApiUtils.getConversationApiVersion(currentUser, intArrayOf(ApiUtils.APIv4, 1)) val apiVersion = ApiUtils.getConversationApiVersion(currentUser, intArrayOf(ApiUtils.APIv4, 1))
val credentials = ApiUtils.getCredentials(currentUser?.username, currentUser?.token) 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.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import kotlinx.coroutines.runBlocking
import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener
import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody import okhttp3.RequestBody
@ -140,7 +139,7 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
resources!!.getString(R.string.nc_settings) resources!!.getString(R.string.nc_settings)
private fun getCurrentUser() { private fun getCurrentUser() {
currentUser = currentUserProvider.currentUser currentUser = currentUserProvider.currentUser.firstOrError().blockingGet()
credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token) credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token)
} }
@ -151,46 +150,44 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
ViewCompat.setTransitionName((binding.avatarImage), "userAvatar.transitionTag") ViewCompat.setTransitionName((binding.avatarImage), "userAvatar.transitionTag")
runBlocking { getCurrentUser()
getCurrentUser()
if (saveStateHandler == null) { if (saveStateHandler == null) {
saveStateHandler = LovelySaveStateHandler() 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()
} }
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) Log.i(TAG, "Current user: " + currentUser?.displayName)
} }
@ -472,72 +469,67 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
actionBar?.show() actionBar?.show()
dispose(null) 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 { setupCheckables()
sendLogs() setupScreenLockSetting()
}
if (!TextUtils.isEmpty(currentUser!!.clientCertificate)) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
binding.settingsClientCert.setTitle(R.string.nc_client_cert_change) binding.settingsNotificationsCategory.setTitle(
} else { resources!!.getString(R.string.nc_settings_notification_sounds_post_oreo)
binding.settingsClientCert.setTitle(R.string.nc_client_cert_setup) )
} }
setupCheckables() val callRingtoneUri = getCallRingtoneUri(view.context, (appPreferences)!!)
setupScreenLockSetting() 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) { setupProxyTypeSettings()
binding.settingsNotificationsCategory.setTitle( setupProxyCredentialSettings()
resources!!.getString(R.string.nc_settings_notification_sounds_post_oreo)
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)!!) if (currentUser!!.displayName != null) {
binding.settingsCallSound.setSummary(getRingtoneName(view.context, callRingtoneUri)) binding.displayNameText.text = currentUser!!.displayName
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)
}
} }
setupMessageView() DisplayUtils.loadAvatarImage(currentUser, binding.avatarImage, false)
binding.avatarContainer.setOnClickListener { setupProfileQueryDisposable()
router
.pushController(
RouterTransaction.with(ProfileController())
.pushChangeHandler(HorizontalChangeHandler())
.popChangeHandler(HorizontalChangeHandler())
) 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() { private fun setupProxyTypeSettings() {

View File

@ -74,6 +74,7 @@ abstract class UsersDao {
@Query("SELECT * FROM User where id = :id") @Query("SELECT * FROM User where id = :id")
abstract fun getUserWithId(id: Long): Observable<UserNgEntity?> abstract fun getUserWithId(id: Long): Observable<UserNgEntity?>
// TODO remove this one, duplicated
@Query("SELECT * FROM User where id = :id") @Query("SELECT * FROM User where id = :id")
abstract fun getUserWithIdLiveData(id: Long): Observable<UserNgEntity?> 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) return Observable.just(result)
} }
override val currentUser: UserNgEntity? override val currentUser: Observable<UserNgEntity?>
get() { get() {
return userRepository.getActiveUserSynchronously() return userRepository.getActiveUser()
} }
fun deleteUser(internalId: Long) { fun deleteUser(internalId: Long) {
@ -245,62 +245,34 @@ class UserManager internal constructor(private val userRepository: UsersReposito
username: String?, username: String?,
userAttributes: UserAttributes, userAttributes: UserAttributes,
): Observable<UserNgEntity?> { ): 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) 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) { } else if (userAttributes.id != null) {
userRepository.getUserWithId(userAttributes.id) 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 { } else {
updateUserData( Observable.just(null)
user!!,
userAttributes
)
} }
userRepository.insertUser(user!!) return userObservable
return userRepository.getUserWithIdLiveData(user!!.id) .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?> { fun getUserWithUsernameAndServer(username: String, server: String): Observable<UserNgEntity?> {

View File

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