protected void setChatState (TypingIndicatorHandler.State state) { if(ChatSDK.typingIndicator() != null) { ChatSDK.typingIndicator().setChatState(state, thread) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new CrashReportingCompletableObserver(disposableList)); } }
/** * Stop listening to thread details change **/ public void off() { FirebaseReferenceManager.shared().removeListeners(FirebasePaths.threadDetailsRef(model.getEntityID())); FirebaseReferenceManager.shared().removeListeners(FirebasePaths.threadLastMessageRef(model.getEntityID())); metaOff(); if(ChatSDK.typingIndicator() != null) { ChatSDK.typingIndicator().typingOff(model); } }
/** * Start listening to thread details changes. **/ public Observable<Thread> on() { return Observable.create((ObservableOnSubscribe<Thread>) e -> { DatabaseReference detailsRef = FirebasePaths.threadDetailsRef(model.getEntityID()); if (FirebaseReferenceManager.shared().isOn(detailsRef)) { e.onComplete(); return; } ValueEventListener listener = detailsRef.addValueEventListener(new FirebaseEventListener().onValue((snapshot, hasValue) -> { if (hasValue && snapshot.getValue() instanceof Map) { deserialize((Map<String, Object>)snapshot.getValue()); } updateReadReceipts(); e.onNext(model); })); FirebaseReferenceManager.shared().addRef(detailsRef, listener); if(ChatSDK.typingIndicator() != null) { ChatSDK.typingIndicator().typingOn(model); } }).subscribeOn(Schedulers.single()); }