public LocationChatOption(String title, Integer iconResourceId) { super(title, iconResourceId, null, ChatOptionType.SendMessage); action = (activity, thread) -> Observable.create((ObservableOnSubscribe<MessageSendProgress>) e -> { try { final LocationSelector locationSelector = new LocationSelector(); dispose(); activityResultDisposable = ActivityResultPushSubjectHolder.shared().subscribe(result1 -> locationSelector.handleResult(activity, result1.requestCode, result1.resultCode, result1.data)); LocationSelector.Result locationResult = (snapshotPath, latLng) -> { dispose(); ObservableConnector<MessageSendProgress> connector = new ObservableConnector<>(); connector.connect(ChatSDK.locationMessage().sendMessageWithLocation(snapshotPath, latLng, thread), e); }; locationSelector.startChooseLocationActivity(activity, locationResult); } catch (Exception ex) { ToastHelper.show(activity, ex.getLocalizedMessage()); } }); }