From fd81dd3d9bb9b445dbd474e29ca1bd8008797fbc Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Sun, 20 Oct 2019 23:02:59 +0200 Subject: [PATCH] Various bug fixes and improvements Signed-off-by: Mario Danic --- .../talk/adapters/items/ConversationItem.java | 2 +- .../talk/controllers/CallController.java | 2 +- .../CallNotificationController.java | 2 +- .../talk/controllers/ChatController.kt | 6 +-- .../talk/controllers/ContactsController.java | 4 +- .../bottomsheet/OperationsMenuController.java | 2 +- .../json/conversations/Conversation.java | 2 +- .../models/json/participants/Participant.java | 2 +- .../usecases/DeleteConversationUseCase.kt | 5 ++- .../usecases/GetConversationsUseCase.kt | 3 +- .../usecases/LeaveConversationUseCase.kt | 5 ++- .../SetConversationFavoriteValueUseCase.kt | 6 ++- .../domain/usecases/base/BaseUseCase.kt | 4 -- .../ConversationsListView.kt | 4 +- .../ConversationsListViewModel.kt | 43 ++++++++++--------- .../nextcloud/talk/newarch/utils/ViewState.kt | 3 +- 16 files changed, 52 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java index 062408c08..0941860dd 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.java @@ -71,7 +71,7 @@ public class ConversationItem public boolean equals(Object o) { if (o instanceof ConversationItem) { ConversationItem inItem = (ConversationItem) o; - return conversation.equals(inItem.getModel()); + return conversation.getConversationId().equals(inItem.getModel().getConversationId()); } return false; } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java index 23dd3836a..3a1ab3f38 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -415,7 +415,7 @@ public class CallController extends BaseController { @Override public void onNext(RoomsOverall roomsOverall) { for (Conversation conversation : roomsOverall.getOcs().getData()) { - if (roomId.equals(conversation.getRoomId())) { + if (roomId.equals(conversation.getConversationId())) { roomToken = conversation.getToken(); break; } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java index c37b342c4..26b75aa40 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -274,7 +274,7 @@ public class CallNotificationController extends BaseController { @Override public void onNext(RoomsOverall roomsOverall) { for (Conversation conversation : roomsOverall.getOcs().getData()) { - if (roomId.equals(conversation.getRoomId())) { + if (roomId.equals(conversation.getConversationId())) { currentConversation = conversation; runAllThings(); break; diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index 6726b7b37..53ee3e71b 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -282,7 +282,7 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter override fun onNext(roomsOverall: RoomsOverall) { for (conversation in roomsOverall.ocs.data) { - if (roomId == conversation.roomId) { + if (roomId == conversation.conversationId) { roomToken = conversation.token currentConversation = conversation setTitle() @@ -519,7 +519,7 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter .nc_description_send_message_button ) - if (currentConversation != null && currentConversation?.roomId != null) { + if (currentConversation != null && currentConversation?.conversationId != null) { loadAvatarForStatusBar() checkLobbyState() setTitle() @@ -1472,7 +1472,7 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter val bundle = Bundle() bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, conversationUser) bundle.putString(BundleKeys.KEY_ROOM_TOKEN, roomOverall.ocs.data.token) - bundle.putString(BundleKeys.KEY_ROOM_ID, roomOverall.ocs.data.roomId) + bundle.putString(BundleKeys.KEY_ROOM_ID, roomOverall.ocs.data.conversationId) if (conversationUser != null) { if (conversationUser.hasSpreedFeatureCapability("chat-v2")) { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java index 0a8562c19..9c42d7dfa 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java @@ -308,7 +308,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), roomOverall.getOcs().getData().getToken()); bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_ID(), - roomOverall.getOcs().getData().getRoomId()); + roomOverall.getOcs().getData().getConversationId()); if (currentUser.hasSpreedFeatureCapability("chat-v2")) { ncApi.getRoom(credentials, @@ -903,7 +903,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), roomOverall.getOcs().getData().getToken()); bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_ID(), - roomOverall.getOcs().getData().getRoomId()); + roomOverall.getOcs().getData().getConversationId()); conversationIntent.putExtras(bundle); if (currentUser.hasSpreedFeatureCapability("chat-v2")) { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java index 8cd477b99..aed36a97c 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java @@ -652,7 +652,7 @@ public class OperationsMenuController extends BaseController { Intent conversationIntent = new Intent(getActivity(), MagicCallActivity.class); bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN(), conversation.getToken()); - bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_ID(), conversation.getRoomId()); + bundle.putString(BundleKeys.INSTANCE.getKEY_ROOM_ID(), conversation.getConversationId()); bundle.putString(BundleKeys.INSTANCE.getKEY_CONVERSATION_NAME(), conversation.getDisplayName()); UserEntity conversationUser; diff --git a/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java b/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java index 098553aae..7c0a3fc6a 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java @@ -43,7 +43,7 @@ import org.parceler.Parcel; @JsonObject public class Conversation { @JsonField(name = "id") - public String roomId; + public String conversationId; @JsonField(name = "token") public String token; @JsonField(name = "name") diff --git a/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java b/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java index a9013ebbb..29539fd2b 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/participants/Participant.java @@ -52,7 +52,7 @@ public class Participant { @JsonField(name = "sessionId") public String sessionId; - @JsonField(name = "roomId") + @JsonField(name = "conversationId") public long roomId; @ParcelPropertyConverter(ObjectParcelConverter.class) diff --git a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/DeleteConversationUseCase.kt b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/DeleteConversationUseCase.kt index 4527b782e..ee5cd7368 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/DeleteConversationUseCase.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/DeleteConversationUseCase.kt @@ -33,6 +33,9 @@ class DeleteConversationUseCase constructor( override suspend fun run(params: Any?): GenericOverall { val definitionParameters = params as DefinitionParameters - return nextcloudTalkRepository.deleteConversationForUser(user, definitionParameters.get(0)) + return nextcloudTalkRepository.deleteConversationForUser( + definitionParameters.get(0), + definitionParameters.get(1) + ) } } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/GetConversationsUseCase.kt b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/GetConversationsUseCase.kt index 4add18c3f..facd6175d 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/GetConversationsUseCase.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/GetConversationsUseCase.kt @@ -24,6 +24,7 @@ import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.newarch.data.source.remote.ApiErrorHandler import com.nextcloud.talk.newarch.domain.repository.NextcloudTalkRepository import com.nextcloud.talk.newarch.domain.usecases.base.UseCase +import org.koin.core.parameter.DefinitionParameters class GetConversationsUseCase constructor( private val nextcloudTalkRepository: NextcloudTalkRepository, @@ -31,6 +32,6 @@ class GetConversationsUseCase constructor( ) : UseCase, Any?>(apiErrorHandler) { override suspend fun run(params: Any?): List { - return nextcloudTalkRepository.getConversationsForUser(user) + return nextcloudTalkRepository.getConversationsForUser((params as DefinitionParameters).get(0)) } } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/LeaveConversationUseCase.kt b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/LeaveConversationUseCase.kt index 1267d8b87..5bfc2cba7 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/LeaveConversationUseCase.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/LeaveConversationUseCase.kt @@ -33,6 +33,9 @@ class LeaveConversationUseCase constructor( override suspend fun run(params: Any?): GenericOverall { val definitionParameters = params as DefinitionParameters - return nextcloudTalkRepository.leaveConversationForUser(user, definitionParameters.get(0)) + return nextcloudTalkRepository.leaveConversationForUser( + definitionParameters.get(0), + definitionParameters.get(1) + ) } } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/SetConversationFavoriteValueUseCase.kt b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/SetConversationFavoriteValueUseCase.kt index ea9929043..706498bf6 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/SetConversationFavoriteValueUseCase.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/SetConversationFavoriteValueUseCase.kt @@ -33,6 +33,10 @@ class SetConversationFavoriteValueUseCase constructor( override suspend fun run(params: Any?): GenericOverall { val definitionParameters = params as DefinitionParameters - return nextcloudTalkRepository.setFavoriteValueForConversation(user, definitionParameters.get(0), definitionParameters.get(1)) + return nextcloudTalkRepository.setFavoriteValueForConversation( + definitionParameters.get(0), + definitionParameters.get(1), + definitionParameters.get(2) + ) } } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/base/BaseUseCase.kt b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/base/BaseUseCase.kt index 514540ca9..f1a9aa565 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/base/BaseUseCase.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/base/BaseUseCase.kt @@ -20,8 +20,6 @@ package com.nextcloud.talk.newarch.domain.usecases.base -import com.nextcloud.talk.models.database.UserEntity -import com.nextcloud.talk.models.json.generic.GenericOverall import com.nextcloud.talk.newarch.data.source.remote.ApiErrorHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.async @@ -30,8 +28,6 @@ import kotlinx.coroutines.launch abstract class UseCase(private val apiErrorHandler: ApiErrorHandler?) where Type : Any { abstract suspend fun run(params: Params? = null): Type - lateinit var user: UserEntity - fun isUserInitialized() = ::user.isInitialized fun invoke( scope: CoroutineScope, 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 73a6bdd06..6d9547ab9 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 @@ -220,7 +220,7 @@ class ConversationsListView : BaseView(), OnQueryTextListener, ) ) { view?.stateWithMessageView?.errorStateImageView?.setImageResource( - drawable.ic_cloud_off_white_24dp + drawable.ic_signal_wifi_off_white_24dp ) } else { view?.stateWithMessageView?.errorStateImageView?.setImageResource( @@ -396,7 +396,7 @@ class ConversationsListView : BaseView(), OnQueryTextListener, val bundle = Bundle() bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, viewModel.currentUser) bundle.putString(BundleKeys.KEY_ROOM_TOKEN, conversation.token) - bundle.putString(BundleKeys.KEY_ROOM_ID, conversation.roomId) + bundle.putString(BundleKeys.KEY_ROOM_ID, conversation.conversationId) bundle.putParcelable(BundleKeys.KEY_ACTIVE_CONVERSATION, Parcels.wrap(conversation)) ConductorRemapping.remapChatController( router, viewModel.currentUser.id, conversation.token, 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 b763efe2d..c2f3550b8 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 @@ -49,6 +49,7 @@ import com.nextcloud.talk.newarch.domain.usecases.SetConversationFavoriteValueUs import com.nextcloud.talk.newarch.domain.usecases.base.UseCaseResponse import com.nextcloud.talk.newarch.utils.ViewState import com.nextcloud.talk.newarch.utils.ViewState.FAILED +import com.nextcloud.talk.newarch.utils.ViewState.INITIAL_LOAD import com.nextcloud.talk.newarch.utils.ViewState.LOADED import com.nextcloud.talk.newarch.utils.ViewState.LOADED_EMPTY import com.nextcloud.talk.newarch.utils.ViewState.LOADING @@ -70,7 +71,7 @@ class ConversationsListViewModel constructor( private var conversations: MutableList = mutableListOf() val conversationsLiveListData = MutableLiveData>() - val viewState = MutableLiveData(LOADING) + val viewState = MutableLiveData(INITIAL_LOAD) var messageData: String? = null val searchQuery = MutableLiveData() var currentUser: UserEntity = userUtils.currentUser @@ -84,15 +85,13 @@ class ConversationsListViewModel constructor( } fun leaveConversation(conversation: Conversation) { - leaveConversationUseCase.user = currentUser - setConversationUpdateStatus(conversation, true) - leaveConversationUseCase.invoke(viewModelScope, parametersOf(conversation), + leaveConversationUseCase.invoke(viewModelScope, parametersOf(currentUser, conversation), object : UseCaseResponse { override fun onSuccess(result: GenericOverall) { // TODO: Use binary search to find the right room - conversations.find { it.roomId == conversation.roomId } + conversations.find { it.conversationId == conversation.conversationId } ?.let { conversations.remove(it) conversationsLiveListData.value = conversations @@ -109,15 +108,13 @@ class ConversationsListViewModel constructor( } fun deleteConversation(conversation: Conversation) { - deleteConversationUseCase.user = currentUser - setConversationUpdateStatus(conversation, true) - deleteConversationUseCase.invoke(viewModelScope, parametersOf(conversation), + deleteConversationUseCase.invoke(viewModelScope, parametersOf(currentUser, conversation), object : UseCaseResponse { override fun onSuccess(result: GenericOverall) { // TODO: Use binary search to find the right room - conversations.find { it.roomId == conversation.roomId } + conversations.find { it.conversationId == conversation.conversationId } ?.let { conversations.remove(it) conversationsLiveListData.value = conversations @@ -138,15 +135,17 @@ class ConversationsListViewModel constructor( conversation: Conversation, favorite: Boolean ) { - setConversationFavoriteValueUseCase.user = currentUser - setConversationUpdateStatus(conversation, true) - setConversationFavoriteValueUseCase.invoke(viewModelScope, parametersOf(conversation, favorite), + setConversationFavoriteValueUseCase.invoke(viewModelScope, parametersOf( + currentUser, + conversation, + favorite + ), object : UseCaseResponse { override fun onSuccess(result: GenericOverall) { // TODO: Use binary search to find the right room - conversations.find { it.roomId == conversation.roomId } + conversations.find { it.conversationId == conversation.conversationId } ?.apply { updating = false isFavorite = favorite @@ -161,17 +160,20 @@ class ConversationsListViewModel constructor( } fun loadConversations() { - currentUser = userUtils.currentUser + val userChanged = !currentUser.equals(userUtils.currentUser) + + if (userChanged) { + currentUser = userUtils.currentUser + } if ((FAILED).equals(viewState.value) || (LOADED_EMPTY).equals(viewState.value) || - !getConversationsUseCase.isUserInitialized() || getConversationsUseCase.user != currentUser + (INITIAL_LOAD).equals(viewState.value) || !currentUser.equals(userUtils.currentUser) || userChanged ) { - getConversationsUseCase.user = currentUser viewState.value = LOADING } getConversationsUseCase.invoke( - viewModelScope, null, object : UseCaseResponse> { + viewModelScope, parametersOf(currentUser), object : UseCaseResponse> { override fun onSuccess(result: List) { val newConversations = result.toMutableList() @@ -232,7 +234,7 @@ class ConversationsListViewModel constructor( putExtra( Intent.EXTRA_SUBJECT, String.format( - context.getString(R.string.nc_share_subject), + context.getString(string.nc_share_subject), context.getString(R.string.nc_app_name) ) ) @@ -248,9 +250,8 @@ class ConversationsListViewModel constructor( type = "text/plain" } - val intent = Intent.createChooser(sendIntent, context.getString(string.nc_share_link)) // TODO filter our own app once we're there - return intent + return Intent.createChooser(sendIntent, context.getString(string.nc_share_link)) } fun getConversationMenuItemsForConversation(conversation: Conversation): MutableList { @@ -307,7 +308,7 @@ class ConversationsListViewModel constructor( conversation: Conversation, value: Boolean ) { - conversations.find { it.roomId == conversation.roomId } + conversations.find { it.conversationId == conversation.conversationId } ?.apply { updating = value conversationsLiveListData.value = conversations diff --git a/app/src/main/java/com/nextcloud/talk/newarch/utils/ViewState.kt b/app/src/main/java/com/nextcloud/talk/newarch/utils/ViewState.kt index ab613ff2a..cf20d3080 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/utils/ViewState.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/utils/ViewState.kt @@ -21,8 +21,9 @@ package com.nextcloud.talk.newarch.utils enum class ViewState { + INITIAL_LOAD, LOADING, LOADED_EMPTY, LOADED, FAILED -} \ No newline at end of file +}