package com.kickstarter.ui.activities;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Pair;
import android.widget.TextView;
import com.kickstarter.R;
import com.kickstarter.libs.BaseActivity;
import com.kickstarter.libs.RecyclerViewPaginator;
import com.kickstarter.libs.SwipeRefresher;
import com.kickstarter.libs.qualifiers.RequiresActivityViewModel;
import com.kickstarter.libs.utils.ViewUtils;
import com.kickstarter.ui.adapters.MessageThreadsAdapter;
import com.kickstarter.viewmodels.MessageThreadsViewModel;
import butterknife.Bind;
import butterknife.BindString;
import butterknife.ButterKnife;
import static com.kickstarter.libs.rx.transformers.Transformers.observeForUI;
import static com.kickstarter.libs.utils.TransitionUtils.slideInFromLeft;
@RequiresActivityViewModel(MessageThreadsViewModel.ViewModel.class)
public class MessageThreadsActivity extends BaseActivity<MessageThreadsViewModel.ViewModel> {
private MessageThreadsAdapter adapter;
private RecyclerViewPaginator recyclerViewPaginator;
private SwipeRefresher swipeRefresher;
protected @Bind(R.id.mailbox_text_view) TextView mailboxTextView;
protected @Bind(R.id.message_threads_recycler_view) RecyclerView recyclerView;
protected @Bind(R.id.message_threads_swipe_refresh_layout) SwipeRefreshLayout swipeRefreshLayout;
protected @Bind(R.id.unread_count_text_view) TextView unreadCountTextView;
protected @BindString(R.string.messages_navigation_inbox) String inboxString;
@Override
protected void onCreate(final @Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.message_threads_layout);
ButterKnife.bind(this);
this.adapter = new MessageThreadsAdapter();
this.recyclerView.setAdapter(this.adapter);
this.recyclerView.setLayoutManager(new LinearLayoutManager(this));
this.recyclerViewPaginator = new RecyclerViewPaginator(this.recyclerView, this.viewModel.inputs::nextPage);
this.swipeRefresher = new SwipeRefresher(
this, this.swipeRefreshLayout, this.viewModel.inputs::refresh, this.viewModel.outputs::isFetchingMessageThreads
);
this.mailboxTextView.setText(inboxString); // todo: Sent mailbox logic
this.viewModel.outputs.messageThreads()
.compose(bindToLifecycle())
.compose(observeForUI())
.subscribe(this.adapter::messageThreads);
this.viewModel.outputs.unreadCountTextViewHidden()
.compose(bindToLifecycle())
.compose(observeForUI())
.subscribe(ViewUtils.setGone(this.unreadCountTextView));
this.viewModel.outputs.unreadCountTextViewText()
.compose(bindToLifecycle())
.compose(observeForUI())
.subscribe(this.unreadCountTextView::setText); // todo: localize when design is finalized
}
@Override
protected @Nullable Pair<Integer, Integer> exitTransition() {
return slideInFromLeft();
}
@Override
protected void onDestroy() {
super.onDestroy();
this.recyclerViewPaginator.stop();
this.recyclerView.setAdapter(null);
}
}