diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7429c9430..03d9cfc79 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -60,7 +60,7 @@ android:name=".activities.CallActivity" android:configChanges="orientation|screenSize" android:launchMode="singleTask" - /> + android:noHistory="true"/> diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java index 5a918f1c0..a2c36c332 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java @@ -60,6 +60,7 @@ import com.nextcloud.talk.controllers.bottomsheet.CallMenuController; import com.nextcloud.talk.controllers.bottomsheet.EntryMenuController; import com.nextcloud.talk.events.BottomSheetLockEvent; import com.nextcloud.talk.events.MoreMenuClickEvent; +import com.nextcloud.talk.events.ShowScreenEvent; import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.participants.Participant; import com.nextcloud.talk.models.json.rooms.Room; @@ -168,6 +169,7 @@ public class CallsListController extends BaseController implements SearchView.On protected void onAttach(@NonNull View view) { super.onAttach(view); eventBus.register(this); + getParentController().getView().findViewById(R.id.navigation).setVisibility(View.VISIBLE); } @Override @@ -412,6 +414,15 @@ public class CallsListController extends BaseController implements SearchView.On return onQueryTextChange(query); } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onMessageEvent(ShowScreenEvent showScreenEvent) { + if (showScreenEvent.getScreenType().equals(ShowScreenEvent.ScreenType.CONTACTS_SCREEN)) { + getRouter().pushController((RouterTransaction.with(new ContactsController(showScreenEvent.getBundle())) + .pushChangeHandler(new VerticalChangeHandler()) + .popChangeHandler(new VerticalChangeHandler()))); + } + } + @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(BottomSheetLockEvent bottomSheetLockEvent) { if (bottomSheet != null) { 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 532d5d2a3..ba34e38fa 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java @@ -62,6 +62,7 @@ import com.nextcloud.talk.api.NcApi; import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.controllers.base.BaseController; import com.nextcloud.talk.controllers.bottomsheet.EntryMenuController; +import com.nextcloud.talk.events.BottomSheetLockEvent; import com.nextcloud.talk.models.RetrofitBucket; import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.participants.Participant; @@ -73,6 +74,9 @@ import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; import org.parceler.Parcels; import java.util.ArrayList; @@ -115,6 +119,9 @@ public class ContactsController extends BaseController implements SearchView.OnQ @Inject NcApi ncApi; + @Inject + EventBus eventBus; + @BindView(R.id.recycler_view) RecyclerView recyclerView; @@ -172,6 +179,8 @@ public class ContactsController extends BaseController implements SearchView.OnQ @Override protected void onAttach(@NonNull View view) { super.onAttach(view); + eventBus.register(this); + if (isNewConversationView) { checkAndHandleBottomButtons(); @@ -186,6 +195,10 @@ public class ContactsController extends BaseController implements SearchView.OnQ super.onViewBound(view); NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this); + if (isNewConversationView) { + getParentController().getView().findViewById(R.id.navigation).setVisibility(View.GONE); + } + FlipView.resetLayoutAnimationDelay(true, 1000L); FlipView.stopLayoutAnimation(); @@ -239,26 +252,65 @@ public class ContactsController extends BaseController implements SearchView.OnQ @Optional @OnClick(R.id.done_button) public void onDoneButtonClick() { - Bundle bundle = new Bundle(); - Room.RoomType roomType; - if (isPublicCall) { - roomType = Room.RoomType.ROOM_PUBLIC_CALL; - } else { - roomType = Room.RoomType.ROOM_GROUP_CALL; - } - bundle.putParcelable(BundleKeys.KEY_CONVERSATION_TYPE, Parcels.wrap(roomType)); - ArrayList userIds = new ArrayList<>(); - Set selectedPositions = adapter.getSelectedPositionsAsSet(); - for (int selectedPosition : selectedPositions) { - if (adapter.getItem(selectedPosition) instanceof UserItem) { - UserItem userItem = (UserItem) adapter.getItem(selectedPosition); - userIds.add(userItem.getModel().getUserId()); - } + if (!isPublicCall && adapter.getSelectedPositions().size() == 1) { + RetrofitBucket retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(userEntity.getBaseUrl(), "1", + ((UserItem) adapter.getItem(adapter.getSelectedPositions().get(0))).getModel().getUserId(), null); + ncApi.createRoom(ApiUtils.getCredentials(userEntity.getUsername(), userEntity.getToken()), + retrofitBucket.getUrl(), retrofitBucket.getQueryMap()) + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(RoomOverall roomOverall) { + if (getActivity() != null) { + overridePushHandler(new NoOpControllerChangeHandler()); + overridePopHandler(new NoOpControllerChangeHandler()); + Intent callIntent = new Intent(getActivity(), CallActivity.class); + Bundle bundle = new Bundle(); + bundle.putString(BundleKeys.KEY_ROOM_TOKEN, roomOverall.getOcs().getData().getToken()); + bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, Parcels.wrap(userEntity)); + callIntent.putExtras(bundle); + startActivity(callIntent); + } + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onComplete() { + } + }); + } else { + + Bundle bundle = new Bundle(); + Room.RoomType roomType; + if (isPublicCall) { + roomType = Room.RoomType.ROOM_PUBLIC_CALL; + } else { + roomType = Room.RoomType.ROOM_GROUP_CALL; + } + bundle.putParcelable(BundleKeys.KEY_CONVERSATION_TYPE, Parcels.wrap(roomType)); + ArrayList userIds = new ArrayList<>(); + Set selectedPositions = adapter.getSelectedPositionsAsSet(); + for (int selectedPosition : selectedPositions) { + if (adapter.getItem(selectedPosition) instanceof UserItem) { + UserItem userItem = (UserItem) adapter.getItem(selectedPosition); + userIds.add(userItem.getModel().getUserId()); + } + } + bundle.putStringArrayList(BundleKeys.KEY_INVITED_PARTICIPANTS, userIds); + bundle.putInt(BundleKeys.KEY_OPERATION_CODE, 11); + prepareAndShowBottomSheetWithBundle(bundle); } - bundle.putStringArrayList(BundleKeys.KEY_INVITED_PARTICIPANTS, userIds); - bundle.putInt(BundleKeys.KEY_OPERATION_CODE, 11); - prepareAndShowBottomSheetWithBundle(bundle); } private void initSearchView() { @@ -588,7 +640,6 @@ public class ContactsController extends BaseController implements SearchView.OnQ bundle.putString(BundleKeys.KEY_ROOM_TOKEN, roomOverall.getOcs().getData().getToken()); bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, Parcels.wrap(userEntity)); callIntent.putExtras(bundle); - startActivity(callIntent); } } @@ -681,4 +732,25 @@ public class ContactsController extends BaseController implements SearchView.OnQ bottomSheet.show(); } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onMessageEvent(BottomSheetLockEvent bottomSheetLockEvent) { + if (bottomSheet != null) { + if (!bottomSheetLockEvent.isCancelable()) { + bottomSheet.setCancelable(bottomSheetLockEvent.isCancelable()); + } else { + bottomSheet.setCancelable(bottomSheetLockEvent.isCancelable()); + if (bottomSheet.isShowing() && bottomSheetLockEvent.isCancel()) { + bottomSheet.cancel(); + } + } + } + } + + @Override + protected void onDetach(@NonNull View view) { + super.onDetach(view); + eventBus.unregister(this); + } + } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java index b86fb9714..f4c563e40 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/CallMenuController.java @@ -38,9 +38,9 @@ import com.nextcloud.talk.R; import com.nextcloud.talk.adapters.items.AppItem; import com.nextcloud.talk.adapters.items.MenuItem; import com.nextcloud.talk.application.NextcloudTalkApplication; -import com.nextcloud.talk.controllers.ContactsController; import com.nextcloud.talk.controllers.base.BaseController; import com.nextcloud.talk.events.BottomSheetLockEvent; +import com.nextcloud.talk.events.ShowScreenEvent; import com.nextcloud.talk.models.json.rooms.Room; import com.nextcloud.talk.utils.ShareUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; @@ -237,12 +237,7 @@ public class CallMenuController extends BaseController implements FlexibleAdapte eventBus.post(new BottomSheetLockEvent(true, 0, false, true)); bundle = new Bundle(); bundle.putBoolean(BundleKeys.KEY_NEW_CONVERSATION, true); - if (getParentController() != null && getParentController().getParentController() != null) { - getParentController().getParentController().getRouter().pushController( - (RouterTransaction.with(new ContactsController(bundle)) - .pushChangeHandler(new HorizontalChangeHandler()) - .popChangeHandler(new HorizontalChangeHandler()))); - } + eventBus.post(new ShowScreenEvent(ShowScreenEvent.ScreenType.CONTACTS_SCREEN, bundle)); } else { bundle = new Bundle(); bundle.putInt(BundleKeys.KEY_OPERATION_CODE, 10); 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 5ca60ce7d..f77706a8b 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 @@ -507,6 +507,7 @@ public class OperationsMenuController extends BaseController { bundle.putString(BundleKeys.KEY_MODIFIED_BASE_URL, baseUrl); } bundle.putString(BundleKeys.KEY_CALL_SESSION, callSession); + overridePushHandler(new NoOpControllerChangeHandler()); overridePopHandler(new NoOpControllerChangeHandler()); Intent callIntent = new Intent(getActivity(), CallActivity.class);