package org.openlmis.core.view.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.ListView;
import android.widget.TextView;
import com.google.inject.Inject;
import org.openlmis.core.R;
import org.openlmis.core.model.RnRForm;
import org.openlmis.core.presenter.VIARequisitionPresenter;
import org.openlmis.core.utils.ListViewUtil;
import org.openlmis.core.view.activity.BaseActivity;
import org.openlmis.core.view.adapter.RequisitionFormAdapter;
import org.openlmis.core.view.adapter.RequisitionProductAdapter;
import roboguice.RoboGuice;
import roboguice.inject.InjectView;
import static org.openlmis.core.view.widget.DoubleListScrollListener.scrollInSync;
public class ViaRequisitionBodyView extends FrameLayout {
@InjectView(R.id.requisition_form_list_view)
ListView requisitionFormList;
@InjectView(R.id.product_name_list_view)
ListView requisitionProductList;
@InjectView(R.id.requisition_header_right)
View bodyHeaderView;
@InjectView(R.id.requisition_header_left)
View productHeaderView;
@InjectView(R.id.form_layout)
HorizontalScrollView formLayout;
@InjectView(R.id.tv_label_request)
TextView headerRequestAmount;
@InjectView(R.id.tv_label_approve)
TextView headerApproveAmount;
private VIARequisitionPresenter presenter;
@Inject
Context context;
private RequisitionFormAdapter requisitionFormAdapter;
private RequisitionProductAdapter requisitionProductAdapter;
public ViaRequisitionBodyView(Context context) {
super(context);
init(context);
}
public ViaRequisitionBodyView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
LayoutInflater.from(context).inflate(R.layout.via_requisition_body, this);
RoboGuice.injectMembers(getContext(), this);
RoboGuice.getInjector(getContext()).injectViewMembers(this);
}
public void showListInputError(final int position) {
requisitionFormList.setSelection(position);
requisitionProductList.setSelection(position);
requisitionFormList.post(new Runnable() {
@Override
public void run() {
View childAt = ListViewUtil.getViewByPosition(position, requisitionFormList);
EditText requestAmount = (EditText) childAt.findViewById(R.id.et_request_amount);
EditText approvedAmount = (EditText) childAt.findViewById(R.id.et_approved_amount);
if (requestAmount.isEnabled()) {
requestAmount.requestFocus();
requestAmount.setError(getResources().getString(R.string.hint_error_input));
} else {
approvedAmount.requestFocus();
approvedAmount.setError(getResources().getString(R.string.hint_error_input));
}
}
});
}
public void initUI(VIARequisitionPresenter presenter) {
this.presenter = presenter;
this.requisitionFormAdapter = new RequisitionFormAdapter(context, presenter);
this.requisitionProductAdapter = new RequisitionProductAdapter(context, presenter);
requisitionFormList.setAdapter(requisitionFormAdapter);
requisitionProductList.setAdapter(requisitionProductAdapter);
requisitionProductList.post(new Runnable() {
@Override
public void run() {
productHeaderView.getLayoutParams().height = bodyHeaderView.getHeight();
}
});
scrollInSync(requisitionFormList, requisitionProductList);
}
public void autoScrollLeftToRight() {
if (!presenter.isHistoryForm()) {
formLayout.post(new Runnable() {
public void run() {
formLayout.fullScroll(FOCUS_RIGHT);
}
});
}
}
public void refresh(RnRForm rnRForm) {
refreshProductNameList();
refreshFormList(rnRForm.getStatus());
}
public void setEditable(boolean isRnrFormMissed) {
if (isRnrFormMissed) {
requisitionFormList.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
} else {
requisitionFormList.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
}
}
public void refreshProductNameList() {
requisitionProductAdapter.notifyDataSetChanged();
}
public void refreshFormList(RnRForm.STATUS status) {
requisitionFormAdapter.updateStatus(status);
}
public void highLightApprovedAmount() {
headerRequestAmount.setBackgroundResource(android.R.color.transparent);
headerRequestAmount.setTextColor(getResources().getColor(R.color.color_text_primary));
headerApproveAmount.setBackgroundResource(R.color.color_accent);
headerApproveAmount.setTextColor(getResources().getColor(R.color.color_white));
refreshFormList(RnRForm.STATUS.SUBMITTED);
}
public void highLightRequestAmount() {
headerRequestAmount.setBackgroundResource(R.color.color_accent);
headerRequestAmount.setTextColor(getResources().getColor(R.color.color_white));
headerApproveAmount.setBackgroundResource(android.R.color.transparent);
headerApproveAmount.setTextColor(getResources().getColor(R.color.color_text_primary));
refreshFormList(RnRForm.STATUS.DRAFT);
}
public void setHideImmOnTouchListener() {
formLayout.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (context instanceof BaseActivity) {
((BaseActivity) context).hideImm();
}
return false;
}
});
}
}