package com.badoo.chateau.example.data.repos.istyping;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.content.LocalBroadcastManager;
import com.badoo.chateau.core.repos.istyping.IsTypingDataSource;
import com.badoo.chateau.core.repos.istyping.IsTypingQueries;
import com.badoo.chateau.example.Broadcaster;
import com.badoo.chateau.example.data.model.ExampleUser;
import com.badoo.chateau.example.data.util.ParseHelper;
import com.badoo.chateau.example.data.util.ParseUtils;
import java.util.HashMap;
import java.util.Map;
import rx.Observable;
import rx.subjects.PublishSubject;
public class ParseIsTypingDataSource implements IsTypingDataSource<ExampleUser> {
private final Map<String, PublishSubject<ExampleUser>> mPublishers = new HashMap<>();
private final ParseHelper mParseHelper;
public ParseIsTypingDataSource(@NonNull Context context, @NonNull ParseHelper parseHelper) {
mParseHelper = parseHelper;
LocalBroadcastManager.getInstance(context).registerReceiver(new Broadcaster.OtherUserTypingReceiver() {
@Override
protected void onOtherUserTyping(@NonNull String userId, @NonNull String chatId) {
// TODO Pass back some useful data which we can use for group chats
PublishSubject<ExampleUser> publisher = mPublishers.get(chatId);
if (publisher != null) {
publisher.onNext(new ExampleUser(userId, null));
}
}
}, Broadcaster.getOtherUserTypingFilter());
}
@Override
public Observable<Void> sendUserIsTyping(@NonNull IsTypingQueries.SendIsTyping query) {
final Map<String, Object> params = new HashMap<>();
params.put(ParseUtils.SendUserTypingFunc.Fields.CHAT_ID, query.getConversationId());
return mParseHelper.callFunction(ParseUtils.SendUserTypingFunc.NAME, params);
}
@NonNull
@Override
public Observable<ExampleUser> subscribeToUsersTyping(@NonNull IsTypingQueries.SubscribeToUsersTypingQuery query) {
if (!mPublishers.containsKey(query.getConversationId())) {
PublishSubject<ExampleUser> publisher = PublishSubject.create();
mPublishers.put(query.getConversationId(), publisher);
}
return mPublishers.get(query.getConversationId());
}
}