// Path: mobile/src/main/java/io/ashdavies/eternity/Config.java
// public interface Config extends Logger.Preparable {
// 
//   boolean favouriteEnabled();
// 
//   boolean repostEnabled();
// 
//   interface State {
// 
//     boolean invalidated();
// 
//     void invalidate();
// 
//     void reset();
//   }
// }
// 
// Path: mobile/src/main/java/io/ashdavies/eternity/android/StringResolver.java
// public class StringResolver {
// 
//   private final Resources resources;
// 
//   @Inject
//   public StringResolver(Resources resources) {
//     this.resources = resources;
//   }
// 
//   public String get(@StringRes int resId, Object... args) {
//     return resources.getString(resId, args);
//   }
// }
// 
// Path: mobile/src/main/java/io/ashdavies/eternity/domain/Author.java
// @AutoValue
// @FirebaseValue
// public abstract class Author {
// 
//   public abstract String uuid();
//   public abstract String name();
//   public abstract String email();
//   public abstract String avatar();
// 
//   public Object toFirebaseValue() {
//     return new AutoValue_Author.FirebaseValue(this);
//   }
// 
//   public static Builder builder() {
//     return new AutoValue_Author.Builder();
//   }
// 
//   public static Author create(DataSnapshot snapshot) {
//     return snapshot.getValue(AutoValue_Author.FirebaseValue.class).toAutoValue();
//   }
// 
//   public static Author from(FirebaseUser user) {
//     return builder()
//         .uuid(user.getUid())
//         .name(user.getDisplayName())
//         .email(user.getEmail())
//         .avatar(user.getPhotoUrl())
//         .build();
//   }
// 
//   @AutoValue.Builder
//   public static abstract class Builder {
// 
//     public abstract Builder uuid(String uuid);
//     public abstract Builder name(String name);
//     public abstract Builder email(String email);
//     public abstract Builder avatar(String avatar);
// 
//     public Builder avatar(Uri uri) {
//       avatar(String.valueOf(uri));
//       return this;
//     }
// 
//     public abstract Author build();
//   }
// }
// 
// Path: mobile/src/main/java/io/ashdavies/eternity/domain/Message.java
// @AutoValue
// @FirebaseValue
// public abstract class Message {
// 
//   public abstract String uuid();
//   public abstract String text();
//   public abstract Author author();
//   public abstract long created();
// 
//   @Nullable
//   public abstract Message original();
// 
//   public Object toFirebaseValue() {
//     return new AutoValue_Message.FirebaseValue(this);
//   }
// 
//   private static Builder builder() {
//     return new AutoValue_Message.Builder()
//         .uuid(UUID.randomUUID().toString())
//         .created(System.currentTimeMillis());
//   }
// 
//   public static Builder from(String text) {
//     return builder().text(text);
//   }
// 
//   public static Builder from(Message message) {
//     return from(message.text()).original(message);
//   }
// 
//   public static Message create(DataSnapshot snapshot) {
//     return snapshot.getValue(AutoValue_Message.FirebaseValue.class).toAutoValue();
//   }
// 
//   @AutoValue.Builder
//   public abstract static class Builder {
// 
//     public abstract Builder uuid(String uuid);
//     public abstract Builder text(String text);
//     public abstract Builder author(Author author);
//     public abstract Builder created(long created);
// 
//     public abstract Builder original(@Nullable Message message);
// 
//     public abstract Message build();
//   }
// }
// 
// Path: mobile/src/main/java/io/ashdavies/eternity/rx/AbstractViewError.java
// public class AbstractViewError<View extends AbstractView> implements Consumer<Throwable> {
// 
//   private final View view;
// 
//   public AbstractViewError(View view) {
//     this.view = view;
//   }
// 
//   @Override
//   public void accept(@NonNull Throwable throwable) throws Exception {
//     view.onError(throwable);
//   }
// }


import android.content.Intent;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v4.util.Pair;
import com.google.android.gms.appinvite.AppInviteInvitation;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import io.ashdavies.commons.presenter.AbstractViewPresenter;
import io.ashdavies.commons.view.ListView;
import io.ashdavies.eternity.Config;
import io.ashdavies.eternity.R;
import io.ashdavies.eternity.android.StringResolver;
import io.ashdavies.eternity.domain.Author;
import io.ashdavies.eternity.domain.Message;
import io.ashdavies.eternity.rx.AbstractViewError;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import javax.inject.Inject;
package io.ashdavies.eternity.chat;


class ChatPresenter extends AbstractViewPresenter<ChatPresenter.View> implements MessageListener {

  private CompositeDisposable disposables;

  @Inject Config config;

  @Inject MessageIndexer indexer;
  @Inject MessageRepository messages;
  @Inject MessageReporting reporting;
  @Inject MessageStateStorage storage;
// Path: mobile/src/main/java/io/ashdavies/eternity/Config.java
// public interface Config extends Logger.Preparable {
// 
//   boolean favouriteEnabled();
// 
//   boolean repostEnabled();
// 
//   interface State {
// 
//     boolean invalidated();
// 
//     void invalidate();
// 
//     void reset();
//   }
// }
// 
// Path: mobile/src/main/java/io/ashdavies/eternity/android/StringResolver.java
// public class StringResolver {
// 
//   private final Resources resources;
// 
//   @Inject
//   public StringResolver(Resources resources) {
//     this.resources = resources;
//   }
// 
//   public String get(@StringRes int resId, Object... args) {
//     return resources.getString(resId, args);
//   }
// }
// 
// Path: mobile/src/main/java/io/ashdavies/eternity/domain/Author.java
// @AutoValue
// @FirebaseValue
// public abstract class Author {
// 
//   public abstract String uuid();
//   public abstract String name();
//   public abstract String email();
//   public abstract String avatar();
// 
//   public Object toFirebaseValue() {
//     return new AutoValue_Author.FirebaseValue(this);
//   }
// 
//   public static Builder builder() {
//     return new AutoValue_Author.Builder();
//   }
// 
//   public static Author create(DataSnapshot snapshot) {
//     return snapshot.getValue(AutoValue_Author.FirebaseValue.class).toAutoValue();
//   }
// 
//   public static Author from(FirebaseUser user) {
//     return builder()
//         .uuid(user.getUid())
//         .name(user.getDisplayName())
//         .email(user.getEmail())
//         .avatar(user.getPhotoUrl())
//         .build();
//   }
// 
//   @AutoValue.Builder
//   public static abstract class Builder {
// 
//     public abstract Builder uuid(String uuid);
//     public abstract Builder name(String name);
//     public abstract Builder email(String email);
//     public abstract Builder avatar(String avatar);
// 
//     public Builder avatar(Uri uri) {
//       avatar(String.valueOf(uri));
//       return this;
//     }
// 
//     public abstract Author build();
//   }
// }
// 
// Path: mobile/src/main/java/io/ashdavies/eternity/domain/Message.java
// @AutoValue
// @FirebaseValue
// public abstract class Message {
// 
//   public abstract String uuid();
//   public abstract String text();
//   public abstract Author author();
//   public abstract long created();
// 
//   @Nullable
//   public abstract Message original();
// 
//   public Object toFirebaseValue() {
//     return new AutoValue_Message.FirebaseValue(this);
//   }
// 
//   private static Builder builder() {
//     return new AutoValue_Message.Builder()
//         .uuid(UUID.randomUUID().toString())
//         .created(System.currentTimeMillis());
//   }
// 
//   public static Builder from(String text) {
//     return builder().text(text);
//   }
// 
//   public static Builder from(Message message) {
//     return from(message.text()).original(message);
//   }
// 
//   public static Message create(DataSnapshot snapshot) {
//     return snapshot.getValue(AutoValue_Message.FirebaseValue.class).toAutoValue();
//   }
// 
//   @AutoValue.Builder
//   public abstract static class Builder {
// 
//     public abstract Builder uuid(String uuid);
//     public abstract Builder text(String text);
//     public abstract Builder author(Author author);
//     public abstract Builder created(long created);
// 
//     public abstract Builder original(@Nullable Message message);
// 
//     public abstract Message build();
//   }
// }
// 
// Path: mobile/src/main/java/io/ashdavies/eternity/rx/AbstractViewError.java
// public class AbstractViewError<View extends AbstractView> implements Consumer<Throwable> {
// 
//   private final View view;
// 
//   public AbstractViewError(View view) {
//     this.view = view;
//   }
// 
//   @Override
//   public void accept(@NonNull Throwable throwable) throws Exception {
//     view.onError(throwable);
//   }
// }


// Path: mobile/src/main/java/io/ashdavies/eternity/chat/ChatPresenter.java
import android.content.Intent;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v4.util.Pair;
import com.google.android.gms.appinvite.AppInviteInvitation;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import io.ashdavies.commons.presenter.AbstractViewPresenter;
import io.ashdavies.commons.view.ListView;
import io.ashdavies.eternity.Config;
import io.ashdavies.eternity.R;
import io.ashdavies.eternity.android.StringResolver;
import io.ashdavies.eternity.domain.Author;
import io.ashdavies.eternity.domain.Message;
import io.ashdavies.eternity.rx.AbstractViewError;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import javax.inject.Inject;

package io.ashdavies.eternity.chat;


class ChatPresenter extends AbstractViewPresenter<ChatPresenter.View> implements MessageListener {

  private CompositeDisposable disposables;

  @Inject Config config;

  @Inject MessageIndexer indexer;
  @Inject MessageRepository messages;
  @Inject MessageReporting reporting;
  @Inject MessageStateStorage storage;
  @Inject StringResolver resolver;