package org.openlmis.core.view.activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import org.openlmis.core.R; import org.openlmis.core.googleAnalytics.ScreenName; import org.openlmis.core.model.RnrFormItem; import org.openlmis.core.presenter.AddDrugsToVIAPresenter; import org.openlmis.core.utils.Constants; import org.openlmis.core.utils.InjectPresenter; import org.openlmis.core.utils.ToastUtil; import org.openlmis.core.view.adapter.AddDrugsToVIAAdapter; import org.openlmis.core.view.widget.SingleClickButtonListener; import java.util.ArrayList; import java.util.Date; import java.util.List; import roboguice.inject.ContentView; import roboguice.inject.InjectView; import rx.Subscriber; import rx.Subscription; import rx.functions.Action1; @ContentView(R.layout.activity_add_drugs_to_via) public class AddDrugsToVIAActivity extends SearchBarActivity { @InjectView(R.id.btn_complete) public View btnComplete; @InjectView(R.id.products_list) public RecyclerView productListRecycleView; @InjectPresenter(AddDrugsToVIAPresenter.class) AddDrugsToVIAPresenter presenter; protected AddDrugsToVIAAdapter mAdapter; private Date periodBegin; @Override protected ScreenName getScreenName() { return ScreenName.AddDrugsToVIAScreen; } @Override protected int getThemeRes() { return R.style.AppTheme_PURPLE; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); periodBegin = ((Date) getIntent().getSerializableExtra(Constants.PARAM_PERIOD_BEGIN)); List<String> existingAdditionalProductList = (List<String>) getIntent().getSerializableExtra(Constants.PARAM_ADDED_DRUG_CODES_IN_VIA); initRecyclerView(); loading(); Subscription subscription = presenter.loadActiveProductsNotInVIAForm(existingAdditionalProductList).subscribe(subscriber); subscriptions.add(subscription); btnComplete.setOnClickListener(new SingleClickButtonListener() { @Override public void onSingleClick(View v) { getRnrFormItemsAndPassToViaForm(); } }); } private void initRecyclerView() { productListRecycleView.setLayoutManager(new LinearLayoutManager(this)); mAdapter = new AddDrugsToVIAAdapter(presenter.getInventoryViewModelList()); productListRecycleView.setAdapter(mAdapter); } Subscriber<Void> subscriber = new Subscriber<Void>() { @Override public void onCompleted() { loaded(); mAdapter.notifyDataSetChanged(); } @Override public void onError(Throwable e) { loaded(); ToastUtil.show(e.getMessage()); } @Override public void onNext(Void v) { mAdapter.refresh(); } }; private void getRnrFormItemsAndPassToViaForm() { if (validateInventory()) { loading(); Subscription subscription = presenter.convertViewModelsToRnrFormItems().subscribe(nextMainPageAction, errorAction); subscriptions.add(subscription); } } private boolean validateInventory() { int position = mAdapter.validateAll(); if (position >= 0) { clearSearch(); productListRecycleView.scrollToPosition(position); return false; } return true; } private void goToParentPage(ArrayList<RnrFormItem> addedRnrFormItemsInVIAs) { Intent returnIntent = new Intent(); setResult(RESULT_OK, returnIntent); returnIntent.putExtra(Constants.PARAM_ADDED_DRUGS_TO_VIA, addedRnrFormItemsInVIAs); returnIntent.putExtra(Constants.PARAM_PERIOD_BEGIN, periodBegin); this.finish(); } private void showErrorMessage(String msg) { ToastUtil.show(msg); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { } @Override public boolean onSearchStart(String query) { mAdapter.filter(query); return false; } private Action1<ArrayList<RnrFormItem>> nextMainPageAction = new Action1<ArrayList<RnrFormItem>>() { @Override public void call(ArrayList<RnrFormItem> rnrFormItemList) { loaded(); goToParentPage(rnrFormItemList); } }; private Action1<Throwable> errorAction = new Action1<Throwable>() { @Override public void call(Throwable throwable) { loaded(); showErrorMessage(throwable.getMessage()); } }; public static Intent getIntentToMe(Context context, Date periodBegin, ArrayList<String> addedDrugsInVIAs) { Intent intent = new Intent(context, AddDrugsToVIAActivity.class); intent.putExtra(Constants.PARAM_PERIOD_BEGIN, periodBegin); intent.putExtra(Constants.PARAM_ADDED_DRUG_CODES_IN_VIA, addedDrugsInVIAs); return intent; } }