From 1d002b6a4d8a2d9b647d362e638c72da0557080c Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 6 Jan 2023 14:35:26 +0100 Subject: [PATCH] use real endpoints instead faked ones - fix api - add error state for recording model Signed-off-by: Marcel Hibbe --- .../talk/activities/CallActivity.java | 18 +++---- .../java/com/nextcloud/talk/api/NcApi.java | 6 ++- .../CallRecordingRepositoryImpl.kt | 53 ++++++++++--------- .../talk/ui/dialog/MoreCallActionsDialog.kt | 3 +- .../com/nextcloud/talk/utils/ApiUtils.java | 2 +- .../talk/viewmodels/CallRecordingViewModel.kt | 24 ++++++--- 6 files changed, 60 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java index 1e90510a7..ef861ebe3 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -409,6 +409,9 @@ public class CallActivity extends CallBaseActivity { dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ); + } else if (viewState instanceof CallRecordingViewModel.RecordingErrorState) { + Toast.makeText(context, context.getResources().getString(R.string.nc_common_error_sorry), + Toast.LENGTH_LONG).show(); } else { hideCallRecordingIndicator(); } @@ -462,15 +465,12 @@ public class CallActivity extends CallBaseActivity { } private void initFeaturesVisibility() { - // TODO: check for isAllowedToRecordCall once api is ready -// boolean showMoreCallActionsItem = isAllowedToRecordCall(); -// if (showMoreCallActionsItem) { -// binding.moreCallActions.setVisibility(View.VISIBLE); -// } else { -// binding.moreCallActions.setVisibility(View.GONE); -// } - - binding.moreCallActions.setVisibility(View.VISIBLE); + boolean showMoreCallActionsItem = isAllowedToRecordCall(); + if (showMoreCallActionsItem) { + binding.moreCallActions.setVisibility(View.VISIBLE); + } else { + binding.moreCallActions.setVisibility(View.GONE); + } } private void initClickListeners() { diff --git a/app/src/main/java/com/nextcloud/talk/api/NcApi.java b/app/src/main/java/com/nextcloud/talk/api/NcApi.java index 6b8972e1d..51f343a57 100644 --- a/app/src/main/java/com/nextcloud/talk/api/NcApi.java +++ b/app/src/main/java/com/nextcloud/talk/api/NcApi.java @@ -574,11 +574,13 @@ public interface NcApi { @Url String url, @Query("reference") String urlToFindPreviewFor); + @FormUrlEncoded @POST Observable startRecording(@Header("Authorization") String authorization, - @Url String url); + @Url String url, + @Field("status") Integer status); - @POST + @DELETE Observable stopRecording(@Header("Authorization") String authorization, @Url String url); } diff --git a/app/src/main/java/com/nextcloud/talk/repositories/callrecording/CallRecordingRepositoryImpl.kt b/app/src/main/java/com/nextcloud/talk/repositories/callrecording/CallRecordingRepositoryImpl.kt index 72e6cf62e..919689b11 100644 --- a/app/src/main/java/com/nextcloud/talk/repositories/callrecording/CallRecordingRepositoryImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/repositories/callrecording/CallRecordingRepositoryImpl.kt @@ -35,46 +35,47 @@ class CallRecordingRepositoryImpl(private val ncApi: NcApi, currentUserProvider: val currentUser: User = currentUserProvider.currentUser.blockingGet() val credentials: String = ApiUtils.getCredentials(currentUser.username, currentUser.token) - var apiVersion = ApiUtils.getCallApiVersion(currentUser, intArrayOf(ApiUtils.APIv4, 1)) - - override fun startRecording( - roomToken: String - ): Observable { - return Observable.just(StartCallRecordingModel(true)) - } + var apiVersion = 1 // override fun startRecording( // roomToken: String // ): Observable { - // return ncApi.startRecording( - // credentials, - // ApiUtils.getUrlForRecording( - // apiVersion, - // currentUser.baseUrl, - // roomToken - // ) - // ).map { mapToStartCallRecordingModel(it.ocs?.meta!!) } + // return Observable.just(StartCallRecordingModel(true)) // } - override fun stopRecording( + override fun startRecording( roomToken: String - ): Observable { - return Observable.just(StopCallRecordingModel(true)) + ): Observable { + return ncApi.startRecording( + credentials, + ApiUtils.getUrlForRecording( + apiVersion, + currentUser.baseUrl, + roomToken + ), + 1 + ).map { mapToStartCallRecordingModel(it.ocs?.meta!!) } } // override fun stopRecording( // roomToken: String // ): Observable { - // return ncApi.stopRecording( - // credentials, - // ApiUtils.getUrlForRecording( - // apiVersion, - // currentUser.baseUrl, - // roomToken - // ) - // ).map { mapToStopCallRecordingModel(it.ocs?.meta!!) } + // return Observable.just(StopCallRecordingModel(true)) // } + override fun stopRecording( + roomToken: String + ): Observable { + return ncApi.stopRecording( + credentials, + ApiUtils.getUrlForRecording( + apiVersion, + currentUser.baseUrl, + roomToken + ) + ).map { mapToStopCallRecordingModel(it.ocs?.meta!!) } + } + private fun mapToStartCallRecordingModel( response: GenericMeta ): StartCallRecordingModel { diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/MoreCallActionsDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/MoreCallActionsDialog.kt index a7a6899c0..5e0d058c2 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/MoreCallActionsDialog.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/MoreCallActionsDialog.kt @@ -67,8 +67,7 @@ class MoreCallActionsDialog(private val callActivity: CallActivity) : BottomShee } private fun initItemsVisibility() { - // if (callActivity.isAllowedToRecordCall) { - if (true) { + if (callActivity.isAllowedToRecordCall) { binding.recordCall.visibility = View.VISIBLE } else { binding.recordCall.visibility = View.GONE diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java index cc4653544..9e1d9868b 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -496,6 +496,6 @@ public class ApiUtils { } public static String getUrlForRecording(int version, String baseUrl, String token) { - return getUrlForCall(version, baseUrl, token) + "/recording"; + return getUrlForApi(version, baseUrl) + "/recording/" + token; } } diff --git a/app/src/main/java/com/nextcloud/talk/viewmodels/CallRecordingViewModel.kt b/app/src/main/java/com/nextcloud/talk/viewmodels/CallRecordingViewModel.kt index da0838332..e8cc0dee1 100644 --- a/app/src/main/java/com/nextcloud/talk/viewmodels/CallRecordingViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/viewmodels/CallRecordingViewModel.kt @@ -47,6 +47,7 @@ class CallRecordingViewModel @Inject constructor(private val repository: CallRec object RecordingStartLoadingState : ViewState object RecordingStopLoadingState : ViewState object RecordingConfirmStopState : ViewState + object RecordingErrorState : ViewState private val _viewState: MutableLiveData = MutableLiveData(RecordingStoppedState) val viewState: LiveData @@ -60,21 +61,28 @@ class CallRecordingViewModel @Inject constructor(private val repository: CallRec _viewState.value = RecordingConfirmStopState } RecordingStoppedState -> { - _viewState.value = RecordingStartLoadingState - repository.startRecording(roomToken) - .subscribeOn(Schedulers.io()) - ?.observeOn(AndroidSchedulers.mainThread()) - ?.subscribe(CallStartRecordingObserver()) + startRecording() } RecordingConfirmStopState -> { // confirm dialog to stop recording might have been dismissed without to click an action. // just show it again. _viewState.value = RecordingConfirmStopState } + RecordingErrorState -> { + stopRecording() + } else -> {} } } + private fun startRecording() { + _viewState.value = RecordingStartLoadingState + repository.startRecording(roomToken) + .subscribeOn(Schedulers.io()) + ?.observeOn(AndroidSchedulers.mainThread()) + ?.subscribe(CallStartRecordingObserver()) + } + fun stopRecording() { _viewState.value = RecordingStopLoadingState repository.stopRecording(roomToken) @@ -109,6 +117,7 @@ class CallRecordingViewModel @Inject constructor(private val repository: CallRec override fun onError(e: Throwable) { Log.e(TAG, "failure in CallStartRecordingObserver", e) + _viewState.value = RecordingErrorState } override fun onComplete() { @@ -122,11 +131,14 @@ class CallRecordingViewModel @Inject constructor(private val repository: CallRec } override fun onNext(stopCallRecordingModel: StopCallRecordingModel) { - _viewState.value = RecordingStoppedState + if (stopCallRecordingModel.success) { + _viewState.value = RecordingStoppedState + } } override fun onError(e: Throwable) { Log.e(TAG, "failure in CallStopRecordingObserver", e) + _viewState.value = RecordingErrorState } override fun onComplete() {