package com.quemb.qmbform;
import com.quemb.qmbform.adapter.FormAdapter;
import com.quemb.qmbform.descriptor.FormDescriptor;
import com.quemb.qmbform.descriptor.FormItemDescriptor;
import com.quemb.qmbform.descriptor.OnFormRowChangeListener;
import com.quemb.qmbform.descriptor.OnFormRowValueChangedListener;
import com.quemb.qmbform.descriptor.RowDescriptor;
import com.quemb.qmbform.descriptor.SectionDescriptor;
import com.quemb.qmbform.descriptor.Value;
import com.quemb.qmbform.view.Cell;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
/**
* Created by tonimoeckel on 15.07.14.
*/
public class FormManager implements OnFormRowChangeListener, OnFormRowValueChangedListener {
private FormDescriptor mFormDescriptor;
protected ListView mListView;
protected OnFormRowClickListener mOnFormRowClickListener;
private OnFormRowChangeListener mOnFormRowChangeListener;
private OnFormRowValueChangedListener mOnFormRowValueChangedListener;
public FormManager(){
}
public void setup(FormDescriptor formDescriptor, final ListView listView, Activity activity){
Context context = activity;
// activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
mFormDescriptor = formDescriptor;
mFormDescriptor.setOnFormRowChangeListener(this);
mFormDescriptor.setOnFormRowValueChangedListener(this);
final FormAdapter adapter = FormAdapter.newInstance(mFormDescriptor, context);
listView.setAdapter(adapter);
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FormItemDescriptor itemDescriptor = adapter.getItem(position);
Cell cell = itemDescriptor.getCell();
if (cell != null && itemDescriptor instanceof RowDescriptor){
RowDescriptor rowDescriptor = (RowDescriptor) itemDescriptor;
if (!rowDescriptor.getDisabled()){
cell.onCellSelected();
}
}
OnFormRowClickListener descriptorListener = itemDescriptor.getOnFormRowClickListener();
if (descriptorListener != null){
descriptorListener.onFormRowClick(itemDescriptor);
}
if (mOnFormRowClickListener != null){
mOnFormRowClickListener.onFormRowClick(itemDescriptor);
}
}
});
mListView = listView;
}
public OnFormRowClickListener getOnFormRowClickListener() {
return mOnFormRowClickListener;
}
public void setOnFormRowClickListener(OnFormRowClickListener onFormRowClickListener) {
mOnFormRowClickListener = onFormRowClickListener;
}
public void updateRows(){
FormAdapter adapter = (FormAdapter) mListView.getAdapter();
if (adapter != null){
adapter.notifyDataSetChanged();
}
}
public OnFormRowChangeListener getOnFormRowChangeListener() {
return mOnFormRowChangeListener;
}
public void setOnFormRowChangeListener(OnFormRowChangeListener onFormRowChangeListener) {
mOnFormRowChangeListener = onFormRowChangeListener;
}
@Override
public void onRowAdded(RowDescriptor rowDescriptor, SectionDescriptor sectionDescriptor) {
updateRows();
if (mOnFormRowChangeListener != null){
mOnFormRowChangeListener.onRowAdded(rowDescriptor, sectionDescriptor);
}
}
@Override
public void onRowRemoved(RowDescriptor rowDescriptor, SectionDescriptor sectionDescriptor) {
updateRows();
if (mOnFormRowChangeListener != null){
mOnFormRowChangeListener.onRowRemoved(rowDescriptor, sectionDescriptor);
}
}
@Override
public void onRowChanged(RowDescriptor rowDescriptor, SectionDescriptor sectionDescriptor) {
updateRows();
if (mOnFormRowChangeListener != null){
mOnFormRowChangeListener.onRowChanged(rowDescriptor, sectionDescriptor);
}
}
@Override
public void onValueChanged(RowDescriptor rowDescriptor, Value<?> oldValue, Value<?> newValue) {
if (mOnFormRowValueChangedListener != null){
mOnFormRowValueChangedListener.onValueChanged(rowDescriptor, oldValue, newValue);
}
ArrayList<String> updateWhiteList = new ArrayList<String>();
updateWhiteList.add(RowDescriptor.FormRowDescriptorTypeDatePicker);
updateWhiteList.add(RowDescriptor.FormRowDescriptorTypeSelectorPickerDialog);
updateWhiteList.add(RowDescriptor.FormRowDescriptorTypeSelectorPickerDialogVertical);
updateWhiteList.add(RowDescriptor.FormRowDescriptorTypePicker);
if (updateWhiteList.contains(rowDescriptor.getRowType())){
updateRows();
}
}
public void setOnFormRowValueChangedListener(
OnFormRowValueChangedListener onFormRowValueChangedListener) {
mOnFormRowValueChangedListener = onFormRowValueChangedListener;
}
}