소스 검색

convert rxjava to coroutines - set conversation read only

Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
sowjanyakch 6 달 전
부모
커밋
452a4c72f4

+ 7 - 2
app/src/main/java/com/nextcloud/talk/api/NcApiCoroutines.kt

@@ -142,8 +142,13 @@ interface NcApiCoroutines {
     ): GenericOverall
 
     @DELETE
-    suspend fun clearChatHistory(
+    suspend fun clearChatHistory(@Header("Authorization") authorization: String, @Url url: String): GenericOverall
+
+    @FormUrlEncoded
+    @PUT
+    suspend fun setConversationReadOnly(
         @Header("Authorization") authorization: String,
-        @Url url: String
+        @Url url: String,
+        @Field("state") state: Int
     ): GenericOverall
 }

+ 3 - 4
app/src/main/java/com/nextcloud/talk/conversation/RenameConversationDialogFragment.kt

@@ -171,13 +171,12 @@ class RenameConversationDialogFragment : DialogFragment() {
     private fun setupStateObserver() {
         viewModel.renameRoomUiState.observe(viewLifecycleOwner) { state ->
             when (state) {
-                is ConversationInfoEditViewModel.RenameRoomUiState.None ->{
-
+                is ConversationInfoEditViewModel.RenameRoomUiState.None -> {
                 }
-                is ConversationInfoEditViewModel.RenameRoomUiState.Success ->{
+                is ConversationInfoEditViewModel.RenameRoomUiState.Success -> {
                     handleSuccess()
                 }
-                is ConversationInfoEditViewModel.RenameRoomUiState.Error ->{
+                is ConversationInfoEditViewModel.RenameRoomUiState.Error -> {
                     showError()
                 }
             }

+ 0 - 2
app/src/main/java/com/nextcloud/talk/conversation/repository/ConversationRepositoryImpl.kt

@@ -23,8 +23,6 @@ class ConversationRepositoryImpl(private val ncApi: NcApi, currentUserProvider:
     val currentUser: User = currentUserProvider.currentUser.blockingGet()
     val credentials: String = ApiUtils.getCredentials(currentUser.username, currentUser.token)!!
 
-
-
     override fun createConversation(
         roomName: String,
         conversationType: ConversationEnums.ConversationType?

+ 13 - 17
app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt

@@ -260,37 +260,33 @@ class ConversationInfoActivity :
 
         viewModel.getConversationReadOnlyState.observe(this) { state ->
             when (state) {
-                is ConversationInfoViewModel.SetConversationReadOnlySuccessState -> {
+                is ConversationInfoViewModel.SetConversationReadOnlyViewState.Success -> {
                 }
-                is ConversationInfoViewModel.SetConversationReadOnlyErrorState -> {
+                is ConversationInfoViewModel.SetConversationReadOnlyViewState.Error -> {
                     Snackbar.make(binding.root, R.string.conversation_read_only_failed, Snackbar.LENGTH_LONG).show()
                 }
-                else -> {
+                is ConversationInfoViewModel.SetConversationReadOnlyViewState.None -> {
+
                 }
             }
         }
 
-        viewModel.clearChatHistoryViewState.observe(this){uiState ->
-            when(uiState){
-                is ConversationInfoViewModel.ClearChatHistoryViewState.None ->{
-
+        viewModel.clearChatHistoryViewState.observe(this) { uiState ->
+            when (uiState) {
+                is ConversationInfoViewModel.ClearChatHistoryViewState.None -> {
                 }
-                is ConversationInfoViewModel.ClearChatHistoryViewState.Success ->{
+                is ConversationInfoViewModel.ClearChatHistoryViewState.Success -> {
                     Snackbar.make(
                         binding.root,
                         context.getString(R.string.nc_clear_history_success),
                         Snackbar.LENGTH_LONG
                     ).show()
-
-
                 }
-                is ConversationInfoViewModel.ClearChatHistoryViewState.Error ->{
+                is ConversationInfoViewModel.ClearChatHistoryViewState.Error -> {
                     Snackbar.make(binding.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show()
                     Log.e(TAG, "failed to clear chat history", uiState.exception)
-
                 }
             }
-
         }
     }
 
@@ -747,7 +743,7 @@ class ConversationInfoActivity :
 
     private fun clearHistory() {
         val apiVersion = ApiUtils.getChatApiVersion(spreedCapabilities, intArrayOf(1))
-        viewModel.clearChatHistory(apiVersion,conversationToken)
+        viewModel.clearChatHistory(apiVersion, conversationToken)
     }
 
     private fun deleteConversation() {
@@ -842,7 +838,7 @@ class ConversationInfoActivity :
                 binding.lockConversationSwitch.isChecked = !isLocked
                 databaseStorageModule!!.saveBoolean("lock_switch", !isLocked)
                 val state = if (isLocked) 0 else 1
-                makeConversationReadOnly(conversationUser, conversationToken, state)
+                makeConversationReadOnly(conversationToken, state)
             }
         } else {
             binding.lockConversation.visibility = GONE
@@ -922,8 +918,8 @@ class ConversationInfoActivity :
         }
     }
 
-    private fun makeConversationReadOnly(conversationUser: User, roomToken: String, state: Int) {
-        viewModel.setConversationReadOnly(conversationUser, roomToken, state)
+    private fun makeConversationReadOnly(roomToken: String, state: Int) {
+        viewModel.setConversationReadOnly( roomToken, state)
     }
 
     private fun initRecordingConsentOption() {

+ 33 - 47
app/src/main/java/com/nextcloud/talk/conversationinfo/viewmodel/ConversationInfoViewModel.kt

@@ -18,11 +18,9 @@ import com.nextcloud.talk.chat.data.network.ChatNetworkDataSource
 import com.nextcloud.talk.data.user.model.User
 import com.nextcloud.talk.models.domain.ConversationModel
 import com.nextcloud.talk.models.json.capabilities.SpreedCapability
-import com.nextcloud.talk.models.json.generic.GenericMeta
 import com.nextcloud.talk.models.json.generic.GenericOverall
 import com.nextcloud.talk.models.json.participants.TalkBan
 import com.nextcloud.talk.repositories.conversations.ConversationsRepository
-import com.nextcloud.talk.repositories.conversations.ConversationsRepositoryImpl.Companion.STATUS_CODE_OK
 import com.nextcloud.talk.utils.ApiUtils
 import io.reactivex.Observer
 import io.reactivex.android.schedulers.AndroidSchedulers
@@ -81,13 +79,6 @@ class ConversationInfoViewModel @Inject constructor(
     val getUnBanActorState: LiveData<ViewState>
         get() = _getUnBanActorState
 
-    object SetConversationReadOnlySuccessState : ViewState
-    object SetConversationReadOnlyErrorState : ViewState
-
-    private val _getConversationReadOnlyState: MutableLiveData<ViewState> = MutableLiveData()
-    val getConversationReadOnlyState: LiveData<ViewState>
-        get() = _getConversationReadOnlyState
-
     object GetRoomStartState : ViewState
     object GetRoomErrorState : ViewState
     open class GetRoomSuccessState(val conversationModel: ConversationModel) : ViewState
@@ -112,10 +103,16 @@ class ConversationInfoViewModel @Inject constructor(
     val getCapabilitiesViewState: LiveData<ViewState>
         get() = _getCapabilitiesViewState
 
-    private val _clearChatHistoryViewState:MutableLiveData<ClearChatHistoryViewState> = MutableLiveData(ClearChatHistoryViewState.None)
-    val clearChatHistoryViewState:LiveData<ClearChatHistoryViewState>
+    private val _clearChatHistoryViewState: MutableLiveData<ClearChatHistoryViewState> =
+        MutableLiveData(ClearChatHistoryViewState.None)
+    val clearChatHistoryViewState: LiveData<ClearChatHistoryViewState>
         get() = _clearChatHistoryViewState
 
+    private val _getConversationReadOnlyState: MutableLiveData<SetConversationReadOnlyViewState> =
+        MutableLiveData(SetConversationReadOnlyViewState.None)
+    val getConversationReadOnlyState: LiveData<SetConversationReadOnlyViewState>
+        get() = _getConversationReadOnlyState
+
     fun getRoom(user: User, token: String) {
         _viewState.value = GetRoomStartState
         chatNetworkDataSource.getRoom(user, token)
@@ -202,28 +199,15 @@ class ConversationInfoViewModel @Inject constructor(
             })
     }
 
-    fun setConversationReadOnly(user: User, token: String, state: Int) {
-        val apiVersion = ApiUtils.getConversationApiVersion(user, intArrayOf(ApiUtils.API_V4, ApiUtils.API_V1))
-        val url = ApiUtils.getUrlForConversationReadOnly(apiVersion, user.baseUrl!!, token)
-        conversationsRepository.setConversationReadOnly(user.getCredentials(), url, state)
-            .subscribeOn(Schedulers.io())
-            ?.observeOn(AndroidSchedulers.mainThread())
-            ?.subscribe(object : Observer<GenericOverall> {
-                override fun onSubscribe(p0: Disposable) {
-                }
-
-                override fun onError(error: Throwable) {
-                    _getConversationReadOnlyState.value = SetConversationReadOnlyErrorState
-                }
-
-                override fun onComplete() {
-                    // unused atm
-                }
-
-                override fun onNext(p0: GenericOverall) {
-                    _getConversationReadOnlyState.value = SetConversationReadOnlySuccessState
-                }
-            })
+    fun setConversationReadOnly(roomToken: String, state: Int) {
+        viewModelScope.launch {
+            try {
+                conversationsRepository.setConversationReadOnly(roomToken, state)
+                _getConversationReadOnlyState.value = SetConversationReadOnlyViewState.Success
+            } catch (exception: Exception) {
+                _getConversationReadOnlyState.value = SetConversationReadOnlyViewState.Error(exception)
+            }
+        }
     }
 
     fun unbanActor(user: User, token: String, banId: Int) {
@@ -285,16 +269,12 @@ class ConversationInfoViewModel @Inject constructor(
         conversationsRepository.unarchiveConversation(user.getCredentials(), url)
     }
 
-    fun clearChatHistory(apiVersion:Int,roomToken:String){
-        viewModelScope.launch{
-            try{
-                val clearChatResult = conversationsRepository.clearChatHistory(apiVersion,roomToken)
-                val statusCode: GenericMeta? = clearChatResult.ocs?.meta
-                val result = statusCode?.statusCode == STATUS_CODE_OK
-                if (result) {
-                    _clearChatHistoryViewState.value = ClearChatHistoryViewState.Success
-                }
-            }catch(exception:Exception){
+    fun clearChatHistory(apiVersion: Int, roomToken: String)  {
+        viewModelScope.launch {
+            try {
+                conversationsRepository.clearChatHistory(apiVersion, roomToken)
+                _clearChatHistoryViewState.value = ClearChatHistoryViewState.Success
+            } catch (exception: Exception) {
                 _clearChatHistoryViewState.value = ClearChatHistoryViewState.Error(exception)
             }
         }
@@ -323,10 +303,16 @@ class ConversationInfoViewModel @Inject constructor(
         private val TAG = ConversationInfoViewModel::class.simpleName
     }
 
-    sealed class ClearChatHistoryViewState{
-        data object None: ClearChatHistoryViewState()
-        data object Success:ClearChatHistoryViewState()
-        data class Error(val exception:Exception):ClearChatHistoryViewState()
+    sealed class ClearChatHistoryViewState {
+        data object None : ClearChatHistoryViewState()
+        data object Success : ClearChatHistoryViewState()
+        data class Error(val exception: Exception) : ClearChatHistoryViewState()
+    }
+
+    sealed class SetConversationReadOnlyViewState {
+        data object None : SetConversationReadOnlyViewState()
+        data object Success : SetConversationReadOnlyViewState()
+        data class Error(val exception: Exception) : SetConversationReadOnlyViewState()
     }
 
     sealed class AllowGuestsUIState {

+ 15 - 20
app/src/main/java/com/nextcloud/talk/conversationinfoedit/ConversationInfoEditActivity.kt

@@ -167,19 +167,18 @@ class ConversationInfoEditActivity : BaseActivity() {
                 else -> {}
             }
         }
-        conversationInfoEditViewModel.renameRoomUiState.observe(this){uiState ->
-            when(uiState){
-                is ConversationInfoEditViewModel.RenameRoomUiState.None ->{
-
+        conversationInfoEditViewModel.renameRoomUiState.observe(this) { uiState ->
+            when (uiState) {
+                is ConversationInfoEditViewModel.RenameRoomUiState.None -> {
                 }
-                is ConversationInfoEditViewModel.RenameRoomUiState.Success ->{
+                is ConversationInfoEditViewModel.RenameRoomUiState.Success -> {
                     if (CapabilitiesUtil.isConversationDescriptionEndpointAvailable(spreedCapabilities)) {
                         saveConversationDescription()
                     } else {
                         finish()
                     }
                 }
-                is ConversationInfoEditViewModel.RenameRoomUiState.Error ->{
+                is ConversationInfoEditViewModel.RenameRoomUiState.Error -> {
                     Snackbar.make(
                         binding.root,
                         context.getString(R.string.default_error_msg),
@@ -190,27 +189,23 @@ class ConversationInfoEditActivity : BaseActivity() {
             }
         }
 
-        conversationInfoEditViewModel.setConversationDescriptionUiState.observe(this){ uiState ->
-            when(uiState){
-                is ConversationInfoEditViewModel.SetConversationDescriptionUiState.None ->{
-
+        conversationInfoEditViewModel.setConversationDescriptionUiState.observe(this) { uiState ->
+            when (uiState) {
+                is ConversationInfoEditViewModel.SetConversationDescriptionUiState.None -> {
                 }
-                is ConversationInfoEditViewModel.SetConversationDescriptionUiState.Success ->{
+                is ConversationInfoEditViewModel.SetConversationDescriptionUiState.Success -> {
                     finish()
                 }
-                is ConversationInfoEditViewModel.SetConversationDescriptionUiState.Error ->{
+                is ConversationInfoEditViewModel.SetConversationDescriptionUiState.Error -> {
                     Snackbar.make(
                         binding.root,
                         context.getString(R.string.default_error_msg),
                         Snackbar.LENGTH_LONG
                     ).show()
                     Log.e(TAG, "Error while saving conversation description", uiState.exception)
-
                 }
             }
-
         }
-
     }
 
     private fun setupAvatarOptions() {
@@ -276,14 +271,14 @@ class ConversationInfoEditActivity : BaseActivity() {
 
     private fun saveConversationNameAndDescription() {
         val newRoomName = binding.conversationName.text.toString()
-         conversationInfoEditViewModel.renameRoom(
-             conversation!!.token,
-             newRoomName
-         )
+        conversationInfoEditViewModel.renameRoom(
+            conversation!!.token,
+            newRoomName
+        )
     }
 
     fun saveConversationDescription() {
-       val conversationDescription = binding.conversationDescription.text.toString()
+        val conversationDescription = binding.conversationDescription.text.toString()
         conversationInfoEditViewModel.setConversationDescription(conversation!!.token, conversationDescription)
     }
 

+ 1 - 1
app/src/main/java/com/nextcloud/talk/conversationinfoedit/data/ConversationInfoEditRepository.kt

@@ -20,5 +20,5 @@ interface ConversationInfoEditRepository {
 
     suspend fun renameConversation(roomToken: String, roomNameNew: String): GenericOverall
 
-    suspend fun setConversationDescription(roomToken:String, conversationDescription:String?): GenericOverall
+    suspend fun setConversationDescription(roomToken: String, conversationDescription: String?): GenericOverall
 }

+ 4 - 2
app/src/main/java/com/nextcloud/talk/conversationinfoedit/data/ConversationInfoEditRepositoryImpl.kt

@@ -20,9 +20,11 @@ import okhttp3.MultipartBody
 import okhttp3.RequestBody.Companion.asRequestBody
 import java.io.File
 
-class ConversationInfoEditRepositoryImpl(private val ncApi: NcApi,
+class ConversationInfoEditRepositoryImpl(
+    private val ncApi: NcApi,
     private val ncApiCoroutines: NcApiCoroutines,
-    currentUserProvider: CurrentUserProviderNew) :
+    currentUserProvider: CurrentUserProviderNew
+) :
     ConversationInfoEditRepository {
 
     val currentUser: User = currentUserProvider.currentUser.blockingGet()

+ 27 - 23
app/src/main/java/com/nextcloud/talk/conversationinfoedit/viewmodel/ConversationInfoEditViewModel.kt

@@ -47,11 +47,12 @@ class ConversationInfoEditViewModel @Inject constructor(
         get() = _viewState
 
     private val _renameRoomUiState = MutableLiveData<RenameRoomUiState>(RenameRoomUiState.None)
-    val renameRoomUiState:LiveData<RenameRoomUiState>
+    val renameRoomUiState: LiveData<RenameRoomUiState>
         get() = _renameRoomUiState
 
-    private val _setConversationDescriptionUiState = MutableLiveData<SetConversationDescriptionUiState>(SetConversationDescriptionUiState.None)
-    val setConversationDescriptionUiState:LiveData<SetConversationDescriptionUiState>
+    private val _setConversationDescriptionUiState =
+        MutableLiveData<SetConversationDescriptionUiState>(SetConversationDescriptionUiState.None)
+    val setConversationDescriptionUiState: LiveData<SetConversationDescriptionUiState>
         get() = _setConversationDescriptionUiState
 
     fun getRoom(user: User, token: String) {
@@ -76,31 +77,34 @@ class ConversationInfoEditViewModel @Inject constructor(
             ?.subscribe(DeleteConversationAvatarObserver())
     }
 
-    fun renameRoom(roomToken:String, newRoomName:String){
-        viewModelScope.launch{
-            try{
+    fun renameRoom(roomToken: String, newRoomName: String)  {
+        viewModelScope.launch {
+            try {
                 val renameRoomResult = conversationInfoEditRepository.renameConversation(roomToken, newRoomName)
-                val statusCode:GenericMeta? = renameRoomResult.ocs?.meta
+                val statusCode: GenericMeta? = renameRoomResult.ocs?.meta
                 val result = statusCode?.statusCode == STATUS_CODE_OK
-                if(result){
+                if (result) {
                     _renameRoomUiState.value = RenameRoomUiState.Success(result)
                 }
-            }catch(exception:Exception){
+            } catch (exception: Exception) {
                 _renameRoomUiState.value = RenameRoomUiState.Error(exception)
             }
         }
     }
 
-    fun setConversationDescription(roomToken:String, conversationDescription:String?){
-        viewModelScope.launch{
-            try{
-                val setConversationDescriptionResult = conversationInfoEditRepository.setConversationDescription(roomToken, conversationDescription)
+    fun setConversationDescription(roomToken: String, conversationDescription: String?)  {
+        viewModelScope.launch {
+            try {
+                val setConversationDescriptionResult = conversationInfoEditRepository.setConversationDescription(
+                    roomToken,
+                    conversationDescription
+                )
                 val statusCode: GenericMeta? = setConversationDescriptionResult.ocs?.meta
                 val result = statusCode?.statusCode == STATUS_CODE_OK
-                if(result){
+                if (result) {
                     _setConversationDescriptionUiState.value = SetConversationDescriptionUiState.Success(result)
                 }
-            }catch(exception:Exception){
+            } catch (exception: Exception) {
                 _setConversationDescriptionUiState.value = SetConversationDescriptionUiState.Error(exception)
             }
         }
@@ -167,15 +171,15 @@ class ConversationInfoEditViewModel @Inject constructor(
         private val TAG = ConversationInfoEditViewModel::class.simpleName
     }
 
-    sealed class RenameRoomUiState{
-        data object None: RenameRoomUiState()
-        data class Success(val result:Boolean): RenameRoomUiState()
-        data class Error(val exception:Exception): RenameRoomUiState()
+    sealed class RenameRoomUiState {
+        data object None : RenameRoomUiState()
+        data class Success(val result: Boolean) : RenameRoomUiState()
+        data class Error(val exception: Exception) : RenameRoomUiState()
     }
 
-    sealed class SetConversationDescriptionUiState{
-        data object None: SetConversationDescriptionUiState()
-        data class Success(val result:Boolean):SetConversationDescriptionUiState()
-        data class Error(val exception:Exception):SetConversationDescriptionUiState()
+    sealed class SetConversationDescriptionUiState {
+        data object None : SetConversationDescriptionUiState()
+        data class Success(val result: Boolean) : SetConversationDescriptionUiState()
+        data class Error(val exception: Exception) : SetConversationDescriptionUiState()
     }
 }

+ 1 - 1
app/src/main/java/com/nextcloud/talk/dagger/modules/RepositoryModule.kt

@@ -162,7 +162,7 @@ class RepositoryModule {
         ncApiCoroutines: NcApiCoroutines,
         userProvider: CurrentUserProviderNew
     ): ConversationInfoEditRepository {
-        return ConversationInfoEditRepositoryImpl(ncApi, ncApiCoroutines,userProvider)
+        return ConversationInfoEditRepositoryImpl(ncApi, ncApiCoroutines, userProvider)
     }
 
     @Provides

+ 2 - 2
app/src/main/java/com/nextcloud/talk/repositories/conversations/ConversationsRepository.kt

@@ -25,7 +25,7 @@ interface ConversationsRepository {
 
     suspend fun setPassword(password: String, token: String): GenericOverall
 
-    fun setConversationReadOnly(credentials: String, url: String, state: Int): Observable<GenericOverall>
+    suspend fun setConversationReadOnly(roomToken: String, state: Int): GenericOverall
 
-    suspend fun clearChatHistory(apiVersion:Int,roomToken:String): GenericOverall
+    suspend fun clearChatHistory(apiVersion: Int, roomToken: String): GenericOverall
 }

+ 4 - 3
app/src/main/java/com/nextcloud/talk/repositories/conversations/ConversationsRepositoryImpl.kt

@@ -74,8 +74,10 @@ class ConversationsRepositoryImpl(
         return coroutineApi.unarchiveConversation(credentials, url)
     }
 
-    override fun setConversationReadOnly(credentials: String, url: String, state: Int): Observable<GenericOverall> {
-        return api.setConversationReadOnly(credentials, url, state)
+    override suspend fun setConversationReadOnly(roomToken: String, state: Int): GenericOverall {
+        val apiVersion = ApiUtils.getConversationApiVersion(user, intArrayOf(ApiUtils.API_V4, ApiUtils.API_V1))
+        val url = ApiUtils.getUrlForConversationReadOnly(apiVersion, user.baseUrl!!, roomToken)
+        return coroutineApi.setConversationReadOnly(credentials, url, state)
     }
 
     override suspend fun setPassword(password: String, token: String): GenericOverall {
@@ -91,7 +93,6 @@ class ConversationsRepositoryImpl(
         return result
     }
 
-    override suspend fun clearChatHistory(roomToken:String): GenericOverall {
     override suspend fun clearChatHistory(apiVersion:Int,roomToken:String): GenericOverall {
         return coroutineApi.clearChatHistory(
             credentials,