diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index ea2526cf9..e4486a055 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -1270,7 +1270,7 @@ class ChatActivity : } is ChatViewModel.ThreadCreationUiState.Error -> { - Log.e(TAG, "Error when creating thread") + Log.e(TAG, "Error when creating thread", uiState.exception) Snackbar.make(binding.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show() } @@ -1290,7 +1290,7 @@ class ChatActivity : } is ChatViewModel.ThreadRetrieveUiState.Error -> { - Log.e(TAG, "Error when retrieving thread") + Log.e(TAG, "Error when retrieving thread", uiState.exception) Snackbar.make(binding.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show() } diff --git a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt index 230d6b80a..42b4df4c0 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt @@ -435,15 +435,23 @@ class ChatViewModel @Inject constructor( fun createThread(credentials: String, url: String) { viewModelScope.launch { - val thread = chatNetworkDataSource.createThread(credentials, url) - _threadCreationState.value = ThreadCreationUiState.Success(thread.ocs?.data) + try { + val thread = chatNetworkDataSource.createThread(credentials, url) + _threadCreationState.value = ThreadCreationUiState.Success(thread.ocs?.data) + } catch (exception: Exception) { + _threadCreationState.value = ThreadCreationUiState.Error(exception) + } } } fun getThread(credentials: String, url: String) { viewModelScope.launch { - val thread = threadsRepository.getThread(credentials, url) - _threadRetrieveState.value = ThreadRetrieveUiState.Success(thread.ocs?.data) + try { + val thread = threadsRepository.getThread(credentials, url) + _threadRetrieveState.value = ThreadRetrieveUiState.Success(thread.ocs?.data) + } catch (exception: Exception) { + _threadRetrieveState.value = ThreadRetrieveUiState.Error(exception) + } } } @@ -900,12 +908,12 @@ class ChatViewModel @Inject constructor( sealed class ThreadCreationUiState { data object None : ThreadCreationUiState() data class Success(val thread: ThreadInfo?) : ThreadCreationUiState() - data class Error(val message: String) : ThreadCreationUiState() + data class Error(val exception: Exception) : ThreadCreationUiState() } sealed class ThreadRetrieveUiState { data object None : ThreadRetrieveUiState() data class Success(val thread: ThreadInfo?) : ThreadRetrieveUiState() - data class Error(val message: String) : ThreadRetrieveUiState() + data class Error(val exception: Exception) : ThreadRetrieveUiState() } } diff --git a/app/src/main/java/com/nextcloud/talk/threadsoverview/ThreadsOverviewActivity.kt b/app/src/main/java/com/nextcloud/talk/threadsoverview/ThreadsOverviewActivity.kt index 24aab666b..1571505a7 100644 --- a/app/src/main/java/com/nextcloud/talk/threadsoverview/ThreadsOverviewActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/threadsoverview/ThreadsOverviewActivity.kt @@ -10,6 +10,7 @@ package com.nextcloud.talk.threadsoverview import android.content.Intent import android.os.Bundle import android.text.format.DateUtils +import android.util.Log import androidx.activity.compose.setContent import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -24,10 +25,13 @@ import androidx.compose.foundation.lazy.items import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext @@ -41,6 +45,7 @@ import com.nextcloud.talk.activities.BaseActivity import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.chat.ChatActivity +import com.nextcloud.talk.chat.ChatActivity.Companion.TAG import com.nextcloud.talk.components.ColoredStatusBar import com.nextcloud.talk.components.StandardAppBar import com.nextcloud.talk.contacts.loadImage @@ -52,7 +57,6 @@ import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_THREAD_ID import javax.inject.Inject -import kotlin.toString @AutoInjector(NextcloudTalkApplication::class) class ThreadsOverviewActivity : BaseActivity() { @@ -162,7 +166,8 @@ fun ThreadsOverviewScreen( ) } is ThreadsOverviewViewModel.ThreadsListUiState.Error -> { - ErrorView(message = state.message) + Log.e(TAG, "Error when retrieving threads", uiState.exception) + ErrorView(message = stringResource(R.string.nc_common_error_sorry)) } } } diff --git a/app/src/main/java/com/nextcloud/talk/threadsoverview/viewmodels/ThreadsOverviewViewModel.kt b/app/src/main/java/com/nextcloud/talk/threadsoverview/viewmodels/ThreadsOverviewViewModel.kt index 471ce7744..9cb357231 100644 --- a/app/src/main/java/com/nextcloud/talk/threadsoverview/viewmodels/ThreadsOverviewViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/threadsoverview/viewmodels/ThreadsOverviewViewModel.kt @@ -43,14 +43,18 @@ class ThreadsOverviewViewModel @Inject constructor( fun getThreads(credentials: String, url: String) { viewModelScope.launch { - val threads = threadsRepository.getThreads(credentials, url) - _threadsListState.value = ThreadsListUiState.Success(threads.ocs?.data) + try { + val threads = threadsRepository.getThreads(credentials, url) + _threadsListState.value = ThreadsListUiState.Success(threads.ocs?.data) + } catch (exception: Exception) { + _threadsListState.value = ThreadsListUiState.Error(exception) + } } } sealed class ThreadsListUiState { data object None : ThreadsListUiState() data class Success(val threadsList: List?) : ThreadsListUiState() - data class Error(val message: String) : ThreadsListUiState() + data class Error(val exception: Exception) : ThreadsListUiState() } }