mirror of
https://github.com/nextcloud/talk-android
synced 2025-03-06 22:29:09 +00:00
WIP improvements during pair programming call
Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
This commit is contained in:
parent
5881e5021c
commit
afbec06ad3
@ -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());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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() {
|
||||||
|
@ -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?>
|
||||||
|
|
||||||
|
@ -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?> {
|
||||||
|
@ -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?>
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user