package com.quemb.qmbform.sample.controller; import com.quemb.qmbform.descriptor.CellDescriptor; import com.quemb.qmbform.descriptor.DataSource; import com.quemb.qmbform.FormManager; import com.quemb.qmbform.OnFormRowClickListener; import com.quemb.qmbform.descriptor.DataSourceListener; 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.sample.R; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import java.util.ArrayList; import java.util.HashMap; /** * Created by tonimoeckel on 17.07.14. */ public class SampleMultivalueSectionFormFragment extends Fragment implements OnFormRowValueChangedListener, OnFormRowClickListener, OnFormRowChangeListener { private ListView mListView; private HashMap<String, Value<?>> mChangesMap; private MenuItem mSaveMenuItem; public static String TAG = "SampleFormFragment"; private FormManager mFormManager; public static final SampleMultivalueSectionFormFragment newInstance() { SampleMultivalueSectionFormFragment f = new SampleMultivalueSectionFormFragment(); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.form_sample, container, false); mListView = (ListView) v.findViewById(R.id.list); return v; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mChangesMap = new HashMap<String, Value<?>>(); // More styles and colors for cells HashMap<String, Object> cellConfig = new HashMap<>(8); // TextAppearance for section, label, value and button //cellConfig.put(CellDescriptor.APPEARANCE_SECTION, Integer.valueOf(R.style.TextAppearance_Form_Section)); //cellConfig.put(CellDescriptor.APPEARANCE_TEXT_LABEL, Integer.valueOf(R.style.TextAppearance_Form_Label)); //cellConfig.put(CellDescriptor.APPEARANCE_TEXT_VALUE, Integer.valueOf(R.style.TextAppearance_Form_Value)); //cellConfig.put(CellDescriptor.APPEARANCE_BUTTON, Integer.valueOf(R.style.TextAppearance_Form_Button)); // color for label and value cellConfig.put(CellDescriptor.COLOR_LABEL, Integer.valueOf(0x80C0FFC0)); cellConfig.put(CellDescriptor.COLOR_VALUE, Integer.valueOf(0xC0C0FFC0)); // Disabled color for label and value cellConfig.put(CellDescriptor.COLOR_LABEL_DISABLED, Integer.valueOf(0x80FFC0C0)); cellConfig.put(CellDescriptor.COLOR_VALUE_DISABLED, Integer.valueOf(0xC0FFC0C0)); FormDescriptor descriptor = FormDescriptor.newInstance(); descriptor.setCellConfig(cellConfig); final ArrayList<String> values = new ArrayList<>(); values.add("red"); values.add("blue"); values.add("green"); SectionDescriptor sectionDescriptor = SectionDescriptor.newInstance("colors","Colors"); sectionDescriptor.setMultivalueSection(true); descriptor.addSection(sectionDescriptor); for (String item : values){ sectionDescriptor.addRow(RowDescriptor.newInstance("colors-"+item, RowDescriptor.FormRowDescriptorTypeText,null,new Value<String>(item)), cellConfig); } sectionDescriptor.addRow(RowDescriptor.newInstance("new", RowDescriptor.FormRowDescriptorTypeText), cellConfig); SectionDescriptor sectionDescriptor2 = SectionDescriptor.newInstance("multiPicker","Pick a color"); sectionDescriptor2.setMultivalueSection(true); descriptor.addSection(sectionDescriptor2); RowDescriptor pickerDescriptor2 = RowDescriptor.newInstance("picker2",RowDescriptor.FormRowDescriptorTypeSelectorPickerDialog); pickerDescriptor2.setDataSource(new DataSource() { @Override public void loadData(final DataSourceListener listener) { listener.onDataSourceLoaded(values); } }); sectionDescriptor2.addRow( pickerDescriptor2, cellConfig); SectionDescriptor sectionDescriptor3 = SectionDescriptor.newInstance("multiPicker","Pick a color"); sectionDescriptor3.setMultivalueSection(true); descriptor.addSection(sectionDescriptor3); RowDescriptor pickerDescriptor3 = RowDescriptor.newInstance("picker3",RowDescriptor.FormRowDescriptorTypeTextPickerDialog); pickerDescriptor3.setDataSource(new DataSource() { @Override public void loadData(final DataSourceListener listener) { listener.onDataSourceLoaded(values); } }); sectionDescriptor3.addRow( pickerDescriptor3, cellConfig); mFormManager = new FormManager(); mFormManager.setup(descriptor, mListView, getActivity()); mFormManager.setOnFormRowClickListener(this); mFormManager.setOnFormRowChangeListener(this); mFormManager.setOnFormRowValueChangedListener(this); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.sample, menu); mSaveMenuItem = menu.findItem(R.id.action_save); } @Override public void onPrepareOptionsMenu(Menu menu) { updateSaveItem(); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item == mSaveMenuItem){ mChangesMap.clear(); updateSaveItem(); } return super.onOptionsItemSelected(item); } @Override public void onFormRowClick(FormItemDescriptor itemDescriptor) { } @Override public void onValueChanged(RowDescriptor rowDescriptor, Value<?> oldValue, Value<?> newValue) { Log.d(TAG, "Value Changed: " + rowDescriptor.getTitle()); // mChangesMap.put(rowDescriptor.getTag(), newValue); updateSaveItem(); } private void updateSaveItem() { if (mSaveMenuItem != null){ mSaveMenuItem.setVisible(mChangesMap.size()>0); } } @Override public void onRowAdded(RowDescriptor rowDescriptor, SectionDescriptor sectionDescriptor) { } @Override public void onRowRemoved(RowDescriptor rowDescriptor, SectionDescriptor sectionDescriptor) { } @Override public void onRowChanged(RowDescriptor rowDescriptor, SectionDescriptor sectionDescriptor) { } private class CustomTask extends AsyncTask<DataSourceListener, Void, ArrayList<String>> { private DataSourceListener mListener; private ProgressDialog mProgressDialog; @Override protected void onPreExecute() { super.onPreExecute(); mProgressDialog = ProgressDialog.show(getActivity(), "Loading", "Do some work", true); } protected ArrayList<String> doInBackground(DataSourceListener... listeners) { mListener = (DataSourceListener)listeners[0]; ArrayList<String> items = new ArrayList<String>(); for (Integer i=0;i<10;i++){ doFakeWork(); items.add("Item "+String.valueOf(i)); } return items; } @Override protected void onPostExecute(ArrayList<String> strings) { super.onPostExecute(strings); mProgressDialog.dismiss(); mListener.onDataSourceLoaded(strings); } private void doFakeWork() { try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } } }