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); } }