package org.openlmis.core.view.activity;
import android.app.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.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import org.openlmis.core.R;
import org.openlmis.core.googleAnalytics.ScreenName;
import org.openlmis.core.presenter.UnpackKitPresenter;
import org.openlmis.core.utils.Constants;
import org.openlmis.core.utils.InjectPresenter;
import org.openlmis.core.utils.ToastUtil;
import org.openlmis.core.view.adapter.UnpackKitAdapter;
import org.openlmis.core.view.fragment.SimpleDialogFragment;
import org.openlmis.core.view.viewmodel.InventoryViewModel;
import org.openlmis.core.view.widget.SignatureDialog;
import org.openlmis.core.view.widget.SingleClickButtonListener;
import java.util.List;
import roboguice.inject.ContentView;
import roboguice.inject.InjectView;
import rx.Subscriber;
import rx.Subscription;
@ContentView(R.layout.activity_kit_unpack)
public class UnpackKitActivity extends BaseActivity {
@InjectView(R.id.products_list)
protected RecyclerView productListRecycleView;
@InjectView(R.id.tv_total)
protected TextView tvTotal;
@InjectView(R.id.tv_total_kit)
protected TextView tvTotalKit;
@InjectView(R.id.et_document_number)
protected EditText etDocumentNumber;
@InjectView(R.id.vg_kit_document_number)
protected View documentNumberContainer;
@InjectPresenter(UnpackKitPresenter.class)
private UnpackKitPresenter presenter;
private String kitCode;
protected UnpackKitAdapter mAdapter;
private int kitNum;
@Override
protected int getThemeRes() {
return R.style.AppTheme_TEAL;
}
@Override
protected ScreenName getScreenName() {
return ScreenName.UnpackKitScreen;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
kitCode = intent.getStringExtra(Constants.PARAM_KIT_CODE);
kitNum = intent.getIntExtra(Constants.PARAM_KIT_NUM, 0);
String kitName = intent.getStringExtra(Constants.PARAM_KIT_NAME);
tvTotalKit.setText(getString(R.string.kit_number, kitNum, kitName));
initRecyclerView();
Subscription subscription = presenter.getKitProductsObservable(kitCode, kitNum).subscribe(loadViewModelSubscriber);
subscriptions.add(subscription);
}
private void initRecyclerView() {
productListRecycleView.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new UnpackKitAdapter(presenter.getInventoryViewModels(), signDialogListener);
productListRecycleView.setAdapter(mAdapter);
productListRecycleView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.requestFocus();
return false;
}
});
}
Subscriber<List<InventoryViewModel>> loadViewModelSubscriber = new Subscriber<List<InventoryViewModel>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
ToastUtil.show(e.getMessage());
loaded();
}
@Override
public void onNext(List<InventoryViewModel> inventoryViewModels) {
mAdapter.refresh();
setTotal(inventoryViewModels.size());
loaded();
}
};
private SingleClickButtonListener signDialogListener = new SingleClickButtonListener() {
@Override
public void onSingleClick(View v) {
if (validateAll()) {
showSignDialog();
}
}
};
private void showSignDialog() {
SignatureDialog signatureDialog = new SignatureDialog();
signatureDialog.setArguments(SignatureDialog.getBundleToMe(getString(R.string.dialog_unpack_kit_signature)));
signatureDialog.setDelegate(signatureDialogDelegate);
signatureDialog.show(getFragmentManager(), "signature_dialog_for_unpack_kit");
}
protected SignatureDialog.DialogDelegate signatureDialogDelegate = new SignatureDialog.DialogDelegate() {
@Override
public void onSign(String sign) {
loading();
Subscription subscription = presenter.saveUnpackProductsObservable(kitNum, etDocumentNumber.getText().toString(), sign).subscribe(saveKitSubscriber);
subscriptions.add(subscription);
}
};
Subscriber<Void> saveKitSubscriber = new Subscriber<Void>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
ToastUtil.show(e.getMessage());
loaded();
}
@Override
public void onNext(Void object) {
loaded();
saveSuccess();
}
};
private void setTotal(int total) {
tvTotal.setText(getString(R.string.label_total, total));
}
public static Intent getIntentToMe(Context context, String code, int num, String kitName) {
Intent intent = new Intent(context, UnpackKitActivity.class);
intent.putExtra(Constants.PARAM_KIT_CODE, code);
intent.putExtra(Constants.PARAM_KIT_NUM, num);
intent.putExtra(Constants.PARAM_KIT_NAME, kitName);
return intent;
}
private void saveSuccess() {
setResult(Activity.RESULT_OK);
finish();
}
public boolean validateAll() {
int position = mAdapter.validateAll();
if (position >= 0) {
productListRecycleView.scrollToPosition(position);
return false;
}
return true;
}
@Override
public void onBackPressed() {
final SimpleDialogFragment dialogFragment = SimpleDialogFragment.newInstance(null,
getString(R.string.msg_unpack_kit_back_confirm), getString(R.string.btn_discard), getString(R.string.btn_cancel), "on_back_pressed");
dialogFragment.setCallBackListener(new SimpleDialogFragment.MsgDialogCallBack() {
@Override
public void positiveClick(String tag) {
finish();
}
@Override
public void negativeClick(String tag) {
dialogFragment.dismiss();
}
});
dialogFragment.show(getFragmentManager(), "back_confirm_dialog");
}
}