Smaller improvements overall

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2020-01-14 23:39:49 +01:00
parent 739e63782f
commit 5e7866be53
No known key found for this signature in database
GPG Key ID: CDE0BBD2738C4CC0
7 changed files with 75 additions and 37 deletions

View File

@ -85,6 +85,19 @@ abstract class BaseController : ButterKnifeController(), ComponentCallbacks {
return floatingActionButton return floatingActionButton
} }
protected val appBar: AppBarLayout?
get() {
var appBarLayout: AppBarLayout? = null
activity?.let {
if (it is MainActivity) {
appBarLayout = it.appBar
}
}
return appBarLayout
}
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) { return when (item.itemId) {
android.R.id.home -> { android.R.id.home -> {

View File

@ -98,7 +98,7 @@ class NextcloudTalkRepositoryImpl(private val apiService: ApiService) : Nextclou
} }
override suspend fun registerPushWithProxyForUser(user: UserNgEntity, options: Map<String, String>): Any { override suspend fun registerPushWithProxyForUser(user: UserNgEntity, options: Map<String, String>): Any {
return apiService.unregisterForPushWithProxy(ApiUtils.getUrlPushProxy(), options) return apiService.registerForPushWithProxy(ApiUtils.getUrlPushProxy(), options)
} }
override suspend fun unregisterPushWithProxyForUser(user: UserNgEntity, options: Map<String, String>): Any { override suspend fun unregisterPushWithProxyForUser(user: UserNgEntity, options: Map<String, String>): Any {

View File

@ -27,7 +27,6 @@ import com.nextcloud.talk.models.json.generic.GenericOverall
import com.nextcloud.talk.models.json.push.PushRegistrationOverall import com.nextcloud.talk.models.json.push.PushRegistrationOverall
import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall
import com.nextcloud.talk.models.json.userprofile.UserProfileOverall import com.nextcloud.talk.models.json.userprofile.UserProfileOverall
import io.reactivex.Observable
import retrofit2.http.* import retrofit2.http.*
interface ApiService { interface ApiService {

View File

@ -65,10 +65,12 @@ class LoginEntryView(val bundle: Bundle) : BaseView() {
@SuppressLint("SetJavaScriptEnabled") @SuppressLint("SetJavaScriptEnabled")
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup): View { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup): View {
actionBar?.hide()
viewModel = viewModelProvider(factory).get(LoginEntryViewModel::class.java) viewModel = viewModelProvider(factory).get(LoginEntryViewModel::class.java)
val view = super.onCreateView(inflater, container) val view = super.onCreateView(inflater, container)
appBar?.isVisible = false
actionBar?.hide()
assembledPrefix = resources?.getString(R.string.nc_talk_login_scheme) + protocolSuffix + "login/" assembledPrefix = resources?.getString(R.string.nc_talk_login_scheme) + protocolSuffix + "login/"
viewModel.state.observe(this@LoginEntryView, Observer { viewModel.state.observe(this@LoginEntryView, Observer {

View File

@ -19,7 +19,9 @@ import com.nextcloud.talk.newarch.domain.usecases.base.UseCaseResponse
import com.nextcloud.talk.newarch.local.models.UserNgEntity import com.nextcloud.talk.newarch.local.models.UserNgEntity
import com.nextcloud.talk.utils.PushUtils import com.nextcloud.talk.utils.PushUtils
import com.nextcloud.talk.utils.preferences.AppPreferences import com.nextcloud.talk.utils.preferences.AppPreferences
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.koin.core.parameter.parametersOf import org.koin.core.parameter.parametersOf
import java.net.URLDecoder import java.net.URLDecoder
@ -107,7 +109,7 @@ class LoginEntryViewModel constructor(
} }
} }
private fun getProfile(loginData: LoginData) { private suspend fun getProfile(loginData: LoginData) {
user.username = loginData.username!! user.username = loginData.username!!
user.baseUrl = loginData.serverUrl!! user.baseUrl = loginData.serverUrl!!
user.token = loginData.token user.token = loginData.token
@ -128,7 +130,7 @@ class LoginEntryViewModel constructor(
}) })
} }
private fun getCapabilities() { private suspend fun getCapabilities() {
getCapabilitiesUseCase.invoke(viewModelScope, parametersOf(user.baseUrl), object : UseCaseResponse<CapabilitiesOverall> { getCapabilitiesUseCase.invoke(viewModelScope, parametersOf(user.baseUrl), object : UseCaseResponse<CapabilitiesOverall> {
override suspend fun onSuccess(result: CapabilitiesOverall) { override suspend fun onSuccess(result: CapabilitiesOverall) {
user.capabilities = result.ocs.data.capabilities user.capabilities = result.ocs.data.capabilities
@ -141,15 +143,18 @@ class LoginEntryViewModel constructor(
}) })
} }
private fun getSignalingSettings() { private suspend fun getSignalingSettings() {
getSignalingSettingsUseCase.invoke(viewModelScope, parametersOf(user), object : UseCaseResponse<SignalingSettingsOverall> { getSignalingSettingsUseCase.invoke(viewModelScope, parametersOf(user), object : UseCaseResponse<SignalingSettingsOverall> {
override suspend fun onSuccess(result: SignalingSettingsOverall) { override suspend fun onSuccess(result: SignalingSettingsOverall) {
user.signalingSettings = result.ocs.signalingSettings withContext(Dispatchers.IO) {
val pushConfiguration = PushConfiguration() user.signalingSettings = result.ocs.signalingSettings
val pushConfigurationStateWrapper = PushConfigurationStateWrapper(PushConfigurationState.PENDING, 0) val pushConfiguration = PushConfiguration()
pushConfiguration.pushConfigurationStateWrapper = pushConfigurationStateWrapper val pushConfigurationStateWrapper = PushConfigurationStateWrapper(PushConfigurationState.PENDING, 0)
usersRepository.insertUser(user) pushConfiguration.pushConfigurationStateWrapper = pushConfigurationStateWrapper
registerForPush() usersRepository.insertUser(user)
setAdjustedUserAsActive()
registerForPush()
}
} }
override suspend fun onError(errorModel: ErrorModel?) { override suspend fun onError(errorModel: ErrorModel?) {
@ -161,31 +166,37 @@ class LoginEntryViewModel constructor(
private suspend fun registerForPush() { private suspend fun registerForPush() {
val token = appPreferences.pushToken val token = appPreferences.pushToken
if (!token.isNullOrBlank()) { if (!token.isNullOrBlank()) {
user.pushConfiguration?.pushToken = token withContext(Dispatchers.IO) {
usersRepository.updateUser(user) user.pushConfiguration?.pushToken = token
registerForPushWithServer(token) usersRepository.updateUser(user)
registerForPushWithServer(token)
}
} else { } else {
state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.PUSH_REGISTRATION_MISSING_TOKEN)) state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.PUSH_REGISTRATION_MISSING_TOKEN))
} }
} }
private fun registerForPushWithServer(token: String) { private suspend fun registerForPushWithServer(token: String) {
val options = PushUtils(usersRepository).getMapForPushRegistrationWithServer(context, token) val options = PushUtils(usersRepository).getMapForPushRegistrationWithServer(context, token)
registerPushWithServerUseCase.invoke(viewModelScope, parametersOf(user, options), object : UseCaseResponse<PushRegistrationOverall> { registerPushWithServerUseCase.invoke(viewModelScope, parametersOf(user, options), object : UseCaseResponse<PushRegistrationOverall> {
override suspend fun onSuccess(result: PushRegistrationOverall) { override suspend fun onSuccess(result: PushRegistrationOverall) {
user.pushConfiguration?.deviceIdentifier = result.ocs.data.deviceIdentifier withContext(Dispatchers.IO) {
user.pushConfiguration?.deviceIdentifierSignature = result.ocs.data.signature user.pushConfiguration?.deviceIdentifier = result.ocs.data.deviceIdentifier
user.pushConfiguration?.userPublicKey = result.ocs.data.publicKey user.pushConfiguration?.deviceIdentifierSignature = result.ocs.data.signature
user.pushConfiguration?.pushConfigurationStateWrapper = PushConfigurationStateWrapper(PushConfigurationState.SERVER_REGISTRATION_DONE, null) user.pushConfiguration?.userPublicKey = result.ocs.data.publicKey
usersRepository.updateUser(user) user.pushConfiguration?.pushConfigurationStateWrapper = PushConfigurationStateWrapper(PushConfigurationState.SERVER_REGISTRATION_DONE, null)
registerForPushWithProxy() usersRepository.updateUser(user)
registerForPushWithProxy()
}
} }
override suspend fun onError(errorModel: ErrorModel?) { override suspend fun onError(errorModel: ErrorModel?) {
user.pushConfiguration?.pushConfigurationStateWrapper?.pushConfigurationState = PushConfigurationState.FAILED_WITH_SERVER_REGISTRATION withContext(Dispatchers.IO) {
user.pushConfiguration?.pushConfigurationStateWrapper?.reason = errorModel?.code user.pushConfiguration?.pushConfigurationStateWrapper?.pushConfigurationState = PushConfigurationState.FAILED_WITH_SERVER_REGISTRATION
usersRepository.updateUser(user) user.pushConfiguration?.pushConfigurationStateWrapper?.reason = errorModel?.code
state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.PUSH_REGISTRATION_WITH_SERVER_FAILED)) usersRepository.updateUser(user)
state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.PUSH_REGISTRATION_WITH_SERVER_FAILED))
}
} }
}) })
} }
@ -196,22 +207,29 @@ class LoginEntryViewModel constructor(
if (options != null) { if (options != null) {
registerPushWithProxyUseCase.invoke(viewModelScope, parametersOf(user, options), object : UseCaseResponse<Any> { registerPushWithProxyUseCase.invoke(viewModelScope, parametersOf(user, options), object : UseCaseResponse<Any> {
override suspend fun onSuccess(result: Any) { override suspend fun onSuccess(result: Any) {
user.pushConfiguration?.pushConfigurationStateWrapper = PushConfigurationStateWrapper(PushConfigurationState.PROXY_REGISTRATION_DONE, null) withContext(Dispatchers.IO) {
usersRepository.updateUser(user) user.pushConfiguration?.pushConfigurationStateWrapper = PushConfigurationStateWrapper(PushConfigurationState.PROXY_REGISTRATION_DONE, null)
state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, if (!updatingUser) LoginEntryStateClarification.ACCOUNT_CREATED else LoginEntryStateClarification.ACCOUNT_UPDATED)) usersRepository.updateUser(user)
state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, if (!updatingUser) LoginEntryStateClarification.ACCOUNT_CREATED else LoginEntryStateClarification.ACCOUNT_UPDATED))
}
} }
override suspend fun onError(errorModel: ErrorModel?) { override suspend fun onError(errorModel: ErrorModel?) {
user.pushConfiguration?.pushConfigurationStateWrapper?.pushConfigurationState = PushConfigurationState.FAILED_WITH_PROXY_REGISTRATION withContext(Dispatchers.IO) {
user.pushConfiguration?.pushConfigurationStateWrapper?.reason = errorModel?.code user.pushConfiguration?.pushConfigurationStateWrapper?.pushConfigurationState = PushConfigurationState.FAILED_WITH_PROXY_REGISTRATION
usersRepository.updateUser(user) user.pushConfiguration?.pushConfigurationStateWrapper?.reason = errorModel?.code
state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.PUSH_REGISTRATION_WITH_PUSH_PROXY_FAILED)) usersRepository.updateUser(user)
setAdjustedUserAsActive()
state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.PUSH_REGISTRATION_WITH_PUSH_PROXY_FAILED))
}
} }
}) })
} else { } else {
user.pushConfiguration?.pushConfigurationStateWrapper?.pushConfigurationState = PushConfigurationState.FAILED_WITH_PROXY_REGISTRATION withContext(Dispatchers.IO) {
usersRepository.updateUser(user) user.pushConfiguration?.pushConfigurationStateWrapper?.pushConfigurationState = PushConfigurationState.FAILED_WITH_PROXY_REGISTRATION
state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.PUSH_REGISTRATION_WITH_PUSH_PROXY_FAILED)) usersRepository.updateUser(user)
state.postValue(LoginEntryStateWrapper(LoginEntryState.OK, LoginEntryStateClarification.PUSH_REGISTRATION_WITH_PUSH_PROXY_FAILED))
}
} }
} }

View File

@ -48,10 +48,12 @@ class ServerEntryView : BaseView() {
} }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup): View { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup): View {
actionBar?.hide()
viewModel = viewModelProvider(factory).get(ServerEntryViewModel::class.java) viewModel = viewModelProvider(factory).get(ServerEntryViewModel::class.java)
val view = super.onCreateView(inflater, container) val view = super.onCreateView(inflater, container)
appBar?.isVisible = false
actionBar?.hide()
view.serverEntryTextInputEditText.setCompoundDrawablesWithIntrinsicBounds(null, null, resources?.getDrawable(R.drawable.ic_arrow_forward_white_24px), null) view.serverEntryTextInputEditText.setCompoundDrawablesWithIntrinsicBounds(null, null, resources?.getDrawable(R.drawable.ic_arrow_forward_white_24px), null)
view.serverEntryTextInputEditText.compoundDrawables[2].alpha = 99 view.serverEntryTextInputEditText.compoundDrawables[2].alpha = 99

View File

@ -41,6 +41,10 @@ class PushConfigurationConverter {
@TypeConverter @TypeConverter
fun fromStringToPushConfiguration(value: String): PushConfiguration? { fun fromStringToPushConfiguration(value: String): PushConfiguration? {
if (value.isNullOrBlank()) {
return null
}
return json.parse(PushConfiguration.serializer(), value) return json.parse(PushConfiguration.serializer(), value)
} }
} }