From 06ed99f3ad9a613d18172cf4d7b75630422fb894 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Thu, 17 Oct 2019 11:44:38 +0200 Subject: [PATCH] i18n and loading after connection issues Signed-off-by: Mario Danic --- .../talk/newarch/data/model/ErrorModel.kt | 33 +++++++++++-------- .../data/source/remote/ApiErrorHandler.kt | 7 ++-- .../ConversationsListView.kt | 11 ++++--- .../ConversationsListViewModel.kt | 11 ++++--- app/src/main/res/values/strings.xml | 9 +++++ 5 files changed, 48 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/newarch/data/model/ErrorModel.kt b/app/src/main/java/com/nextcloud/talk/newarch/data/model/ErrorModel.kt index ca138cdff..3dee15be6 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/data/model/ErrorModel.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/data/model/ErrorModel.kt @@ -22,18 +22,14 @@ package com.nextcloud.talk.newarch.data.model +import com.nextcloud.talk.R +import com.nextcloud.talk.application.NextcloudTalkApplication + /** * This class designed to show different types of errors through error status & message * * */ -private const val NO_CONNECTION_ERROR_MESSAGE = "No connection" -private const val BAD_RESPONSE_ERROR_MESSAGE = "Bad response" -private const val TIME_OUT_ERROR_MESSAGE = "Time out" -private const val EMPTY_RESPONSE_ERROR_MESSAGE = "Empty response" -private const val NOT_DEFINED_ERROR_MESSAGE = "Not defined" -private const val UNAUTHORIZED_ERROR_MESSAGE = "Unauthorized" - data class ErrorModel( val message: String?, val code: Int?, @@ -48,12 +44,23 @@ data class ErrorModel( fun getErrorMessage(): String { return when (errorStatus) { - ErrorStatus.NO_CONNECTION -> NO_CONNECTION_ERROR_MESSAGE - ErrorStatus.BAD_RESPONSE -> BAD_RESPONSE_ERROR_MESSAGE - ErrorStatus.TIMEOUT -> TIME_OUT_ERROR_MESSAGE - ErrorStatus.EMPTY_RESPONSE -> EMPTY_RESPONSE_ERROR_MESSAGE - ErrorStatus.NOT_DEFINED -> NOT_DEFINED_ERROR_MESSAGE - ErrorStatus.UNAUTHORIZED -> UNAUTHORIZED_ERROR_MESSAGE + ErrorStatus.NO_CONNECTION -> NextcloudTalkApplication.sharedApplication?.resources!!.getString( + R.string.nc_no_connection_error + ) + ErrorStatus.BAD_RESPONSE -> NextcloudTalkApplication.sharedApplication?.resources!!.getString( + R.string.nc_bad_response_error + ) + ErrorStatus.TIMEOUT -> NextcloudTalkApplication.sharedApplication?.resources!!.getString( + R.string.nc_timeout_error + ) + ErrorStatus.EMPTY_RESPONSE -> NextcloudTalkApplication.sharedApplication?.resources!!.getString( + R.string.nc_empty_response_error + ) + ErrorStatus.NOT_DEFINED -> NextcloudTalkApplication.sharedApplication?.resources!!.getString( + R.string.nc_not_defined_error + ) + ErrorStatus.UNAUTHORIZED -> NextcloudTalkApplication.sharedApplication?.resources!! + .getString(R.string.nc_unauthorized_error) } } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/data/source/remote/ApiErrorHandler.kt b/app/src/main/java/com/nextcloud/talk/newarch/data/source/remote/ApiErrorHandler.kt index 480739a65..c3820d65f 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/data/source/remote/ApiErrorHandler.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/data/source/remote/ApiErrorHandler.kt @@ -23,12 +23,13 @@ package com.nextcloud.talk.newarch.data.source.remote +import com.nextcloud.talk.R +import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.newarch.data.model.ErrorModel import okhttp3.ResponseBody import retrofit2.HttpException import java.io.IOException import java.net.SocketTimeoutException -import java.net.UnknownHostException /** * This class trace exceptions(api call or parse data or connection errors) & @@ -62,7 +63,9 @@ class ApiErrorHandler { } else -> null } - return errorModel ?: ErrorModel("No Defined Error!", 0, ErrorModel.ErrorStatus.BAD_RESPONSE) + return errorModel ?: ErrorModel( + NextcloudTalkApplication.sharedApplication?.resources!!.getString(R.string.nc_not_defined_error), 0, ErrorModel.ErrorStatus.BAD_RESPONSE + ) } /** diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt index 2e651a2e8..3141607b1 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt @@ -191,7 +191,7 @@ class ConversationsListView : BaseView(), OnQueryTextListener, LOADED -> { view?.loadingStateView?.visibility = View.GONE view?.stateWithMessageView?.visibility = View.GONE - view!!.dataStateView.visibility = View.VISIBLE + view?.dataStateView?.visibility = View.VISIBLE view?.floatingActionButton?.visibility = View.GONE searchItem?.isVisible = true } @@ -207,7 +207,8 @@ class ConversationsListView : BaseView(), OnQueryTextListener, R.drawable.ic_announcement_white_24dp ) } else { - view?.stateWithMessageView?.errorStateTextView?.text = resources?.getText(R.string.nc_conversations_empty) + view?.stateWithMessageView?.errorStateTextView?.text = + resources?.getText(R.string.nc_conversations_empty) view?.stateWithMessageView?.errorStateImageView?.setImageResource(R.drawable.ic_logo) } @@ -255,8 +256,10 @@ class ConversationsListView : BaseView(), OnQueryTextListener, dataSource.subscribe(object : BaseBitmapDataSubscriber() { override fun onNewResultImpl(bitmap: Bitmap?) { if (bitmap != null && resources != null) { - val roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(resources as Resources, - bitmap) + val roundedBitmapDrawable = RoundedBitmapDrawableFactory.create( + resources as Resources, + bitmap + ) roundedBitmapDrawable.isCircular = true roundedBitmapDrawable.setAntiAlias(true) menuItem.icon = roundedBitmapDrawable diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt index 7a9fb926c..146338011 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt @@ -21,6 +21,7 @@ package com.nextcloud.talk.newarch.features.conversationsList import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.viewModelScope import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.newarch.conversationsList.mvp.BaseViewModel @@ -42,20 +43,22 @@ class ConversationsListViewModel constructor( val conversationsListData = MutableLiveData>() val viewState = MutableLiveData(LOADING) - var messageData : String? = null + var messageData: String? = null val searchQuery = MutableLiveData() var currentUser: UserEntity = userUtils.currentUser fun loadConversations() { currentUser = userUtils.currentUser - if (!conversationsUseCase.isUserInitialized() || conversationsUseCase.user != currentUser) { + if (viewState.value?.equals(FAILED)!! || !conversationsUseCase.isUserInitialized() || + conversationsUseCase.user != currentUser + ) { conversationsUseCase.user = currentUser viewState.value = LOADING } conversationsUseCase.invoke( - backgroundAndUIScope, null, object : UseCaseResponse> { + viewModelScope, null, object : UseCaseResponse> { override fun onSuccess(result: List) { val newConversations = result.toMutableList() @@ -68,7 +71,7 @@ class ConversationsListViewModel constructor( conversationsListData.value = newConversations viewState.value = if (newConversations.isNotEmpty()) LOADED else LOADED_EMPTY - + messageData = "" } override fun onError(errorModel: ErrorModel?) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 28771aec1..bb6852ff2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -298,4 +298,13 @@ You are currently waiting in the lobby.\n This meeting is scheduled for %1$s. Not set + + + No connection + Bad response + Timeout + Empty response + Unknown error + No Unauthorized +