package com.kickstarter.ui.activities; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Pair; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import com.kickstarter.R; import com.kickstarter.libs.BaseActivity; import com.kickstarter.libs.KSCurrency; import com.kickstarter.libs.KSString; import com.kickstarter.libs.qualifiers.RequiresActivityViewModel; import com.kickstarter.libs.utils.DateTimeUtils; import com.kickstarter.libs.utils.ViewUtils; import com.kickstarter.models.Backing; import com.kickstarter.models.Project; import com.kickstarter.ui.adapters.MessagesAdapter; import com.kickstarter.viewmodels.MessagesViewModel; import butterknife.Bind; import butterknife.BindString; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.OnTextChanged; import static com.kickstarter.libs.rx.transformers.Transformers.observeForUI; @RequiresActivityViewModel(MessagesViewModel.ViewModel.class) public final class MessagesActivity extends BaseActivity<MessagesViewModel.ViewModel> { private KSCurrency ksCurrency; private KSString ksString; private MessagesAdapter adapter; protected @Bind(R.id.backing_amount_text_view) TextView backingAmountTextViewText; protected @Bind(R.id.backing_info_view) View backingInfoView; protected @Bind(R.id.messages_participant_name_text_view) TextView participantNameTextView; protected @Bind(R.id.message_edit_text) EditText messageEditText; protected @Bind(R.id.messages_project_name_text_view) TextView projectNameTextView; protected @Bind(R.id.messages_recycler_view) RecyclerView recyclerView; protected @Bind(R.id.view_pledge_button) Button viewPledgeButton; protected @BindString(R.string.backer_modal_pledge_amount_on_pledge_date) String pledgeAmountOnPledgeDateString; protected @BindString(R.string.project_view_button) String viewPledgeString; @Override protected void onCreate(final @Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.messages_layout); ButterKnife.bind(this); this.ksCurrency = this.environment().ksCurrency(); this.ksString = this.environment().ksString(); this.adapter = new MessagesAdapter(); this.recyclerView.setAdapter(this.adapter); final LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setStackFromEnd(true); this.recyclerView.setLayoutManager(layoutManager); this.viewPledgeButton.setText(viewPledgeString); this.viewModel.outputs.backingAndProject() .compose(bindToLifecycle()) .compose(observeForUI()) .subscribe(this::setBackingInfoView); this.viewModel.outputs.backingInfoViewHidden() .compose(bindToLifecycle()) .compose(observeForUI()) .subscribe(ViewUtils.setGone(this.backingInfoView)); this.viewModel.outputs.participantNameTextViewText() .compose(bindToLifecycle()) .compose(observeForUI()) .subscribe(this.participantNameTextView::setText); this.viewModel.outputs.messages() .compose(bindToLifecycle()) .compose(observeForUI()) .subscribe(this.adapter::messages); this.viewModel.outputs.projectNameTextViewText() .compose(bindToLifecycle()) .compose(observeForUI()) .subscribe(this.projectNameTextView::setText); this.viewModel.outputs.setMessageEditText() .compose(bindToLifecycle()) .compose(observeForUI()) .subscribe(this.messageEditText::setText); this.viewModel.outputs.showMessageErrorToast() .compose(bindToLifecycle()) .compose(observeForUI()) .subscribe(error -> ViewUtils.showToast(this, error)); } @Override protected void onDestroy() { super.onDestroy(); this.recyclerView.setAdapter(null); } @OnClick(R.id.send_message_button) public void sendMessageButtonClicked() { this.viewModel.inputs.sendMessageButtonClicked(); } @OnTextChanged(R.id.message_edit_text) public void onMessageEditTextChanged(final @NonNull CharSequence message) { this.viewModel.inputs.messageEditTextChanged(message.toString()); } private void setBackingInfoView(final @NonNull Pair<Backing, Project> backingAndProject) { final String pledgeAmount = ksCurrency.format(backingAndProject.first.amount(), backingAndProject.second); final String pledgeDate = DateTimeUtils.relative(this, this.ksString, backingAndProject.first.pledgedAt()); this.backingAmountTextViewText.setText( this.ksString.format( this.pledgeAmountOnPledgeDateString, "pledge_amount", pledgeAmount, "pledge_date", pledgeDate ) ); } }