From d0a6c96668912ebe6eee3cd531636e45f1befda6 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 20 May 2021 22:09:38 +0200 Subject: [PATCH] make observer type save fixes #1270 Signed-off-by: Andy Scherzinger --- .../bottomsheet/OperationsMenuController.java | 89 +++++++++++++------ 1 file changed, 61 insertions(+), 28 deletions(-) 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 2f2230c4e..d14cd85e2 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 @@ -51,6 +51,7 @@ import com.nextcloud.talk.models.json.capabilities.Capabilities; import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall; import com.nextcloud.talk.models.json.conversations.Conversation; import com.nextcloud.talk.models.json.conversations.RoomOverall; +import com.nextcloud.talk.models.json.generic.GenericOverall; import com.nextcloud.talk.models.json.participants.AddParticipantOverall; import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.ConductorRemapping; @@ -75,6 +76,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import retrofit2.HttpException; +import retrofit2.Response; @AutoInjector(NextcloudTalkApplication.class) public class OperationsMenuController extends BaseController { @@ -260,7 +262,8 @@ public class OperationsMenuController extends BaseController { @SuppressLint("LongLogTag") private void processOperation() { - OperationsObserver operationsObserver = new OperationsObserver(); + RoomOperationsObserver roomOperationsObserver = new RoomOperationsObserver(); + GenericOperationsObserver genericOperationsObserver = new GenericOperationsObserver(); if (currentUser == null) { showResultImage(false, true); @@ -279,7 +282,7 @@ public class OperationsMenuController extends BaseController { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) - .subscribe(operationsObserver); + .subscribe(genericOperationsObserver); break; case 3: ncApi.makeRoomPublic(credentials, ApiUtils.getUrlForRoomPublic(apiVersion, currentUser.getBaseUrl(), @@ -287,7 +290,7 @@ public class OperationsMenuController extends BaseController { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) - .subscribe(operationsObserver); + .subscribe(genericOperationsObserver); break; case 4: case 5: @@ -301,7 +304,7 @@ public class OperationsMenuController extends BaseController { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) - .subscribe(operationsObserver); + .subscribe(genericOperationsObserver); break; case 7: // Operation 7 is sharing, so we handle this differently @@ -313,7 +316,7 @@ public class OperationsMenuController extends BaseController { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) - .subscribe(operationsObserver); + .subscribe(genericOperationsObserver); break; case 10: ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, baseUrl, conversationToken)) @@ -477,7 +480,7 @@ public class OperationsMenuController extends BaseController { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) - .subscribe(operationsObserver); + .subscribe(genericOperationsObserver); } else { ncApi.addConversationToFavorites(credentials, ApiUtils.getUrlForRoomFavorite(apiVersion, @@ -486,7 +489,7 @@ public class OperationsMenuController extends BaseController { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) - .subscribe(operationsObserver); + .subscribe(genericOperationsObserver); } break; case 99: @@ -497,7 +500,7 @@ public class OperationsMenuController extends BaseController { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .retry(1) - .subscribe(operationsObserver); + .subscribe(roomOperationsObserver); break; default: break; @@ -690,41 +693,71 @@ public class OperationsMenuController extends BaseController { } } - private class OperationsObserver implements Observer { + private void handleObserverError(@io.reactivex.annotations.NonNull Throwable e) { + if (operationCode != 99 || !(e instanceof HttpException)) { + showResultImage(false, false); + } else { + Response response = ((HttpException) e).response(); + if (response != null && response.code() == 403) { + eventBus.post(new BottomSheetLockEvent(true, 0, false, + false)); + ApplicationWideMessageHolder.getInstance().setMessageType(ApplicationWideMessageHolder.MessageType.CALL_PASSWORD_WRONG); + getRouter().popCurrentController(); + } else { + showResultImage(false, false); + } + } + dispose(); + } + + private class GenericOperationsObserver implements Observer { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { disposable = d; } @Override - public void onNext(Object o) { + public void onNext(@io.reactivex.annotations.NonNull GenericOverall genericOverall) { + if (operationCode != 99) { + showResultImage(true, false); + } else { + throw new IllegalArgumentException("Unsupported operation code observed!"); + } + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + handleObserverError(e); + } + + @Override + public void onComplete() { + dispose(); + } + } + + private class RoomOperationsObserver implements Observer { + + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + disposable = d; + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull RoomOverall roomOverall) { + conversation = roomOverall.getOcs().getData(); if (operationCode != 99) { - RoomOverall roomOverall = (RoomOverall) o; - conversation = roomOverall.getOcs().getData(); showResultImage(true, false); } else { - RoomOverall roomOverall = (RoomOverall) o; conversation = roomOverall.getOcs().getData(); initiateConversation(true); } } @Override - public void onError(Throwable e) { - if (operationCode != 99 || !(e instanceof HttpException)) { - showResultImage(false, false); - } else { - if (((HttpException) e).response().code() == 403) { - eventBus.post(new BottomSheetLockEvent(true, 0, false, - false)); - ApplicationWideMessageHolder.getInstance().setMessageType(ApplicationWideMessageHolder.MessageType.CALL_PASSWORD_WRONG); - getRouter().popCurrentController(); - } else { - showResultImage(false, false); - } - } - dispose(); + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + handleObserverError(e); } @Override