package com.ijoomer.components.jomsocial; import android.content.Context; import android.graphics.Color; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.Spinner; import com.ijoomer.common.classes.IjoomerUtilities; import com.ijoomer.common.classes.ViewHolder; import com.ijoomer.custom.interfaces.CustomClickListner; import com.ijoomer.customviews.IjoomerButton; import com.ijoomer.customviews.IjoomerCheckBox; import com.ijoomer.customviews.IjoomerEditText; import com.ijoomer.customviews.IjoomerRadioButton; import com.ijoomer.customviews.IjoomerSpinnerAdapter; import com.ijoomer.customviews.IjoomerTextView; import com.ijoomer.library.jomsocial.JomAdvancedSearchDataProvider; import com.ijoomer.src.R; import com.ijoomer.weservice.WebCallListener; import com.smart.exception.InvalidKeyFormatException; import com.smart.exception.NullDataException; import com.smart.exception.WronNumberOfArgumentsException; import com.smart.framework.CustomAlertNeutral; import com.smart.framework.ItemView; import com.smart.framework.SmartListAdapterWithHolder; import com.smart.framework.SmartListItem; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; /** * This Class Contains All Method Related To JomAdvanceSearchActivity. * * @author tasol * */ public class JomAdvanceSearchActivity extends JomMasterActivity{ private ListView lstAdvanceSearch; private LinearLayout containsSingleValue,containsToValue; private IjoomerEditText txtValue; private IjoomerEditText txtValueMultiSelect; private IjoomerEditText txtValueTo; private IjoomerEditText txtValueFrom; private IjoomerButton btnSearch; private IjoomerCheckBox chbMemberWithAvatar; private IjoomerRadioButton rbMatchAllCriteria,rbMatchAnyCriteria; private Spinner spCriteria,spCondition,spOptions; private ImageView btnAddCriteria; private RadioGroup rgCriteria; private View headerView; private ArrayList<SmartListItem> listData = new ArrayList<SmartListItem>(); private ArrayList<HashMap<String, String>> formData; private ArrayList<String> advanceSearchCondition ; private ArrayList<String> advanceSearchData ; private ArrayList<String> advanceSearchGroup ; private ArrayList<String> advanceSearchId ; private ArrayList<String> advanceSearchConditionOptions; private ArrayList<String> advanceSearchOptionValue ; private ArrayList<String> advanceSearchConditionOptionName; private ArrayList<String> advanceSearchConditionOptionRange; private ArrayList<String> advanceSearchConditionValue; private ArrayList<String> advanceSearchConditionType; private ArrayList<HashMap<String, String>> selectedArray; private HashMap<String, String> selectedHash; private SmartListAdapterWithHolder listAdapterWithHolderSearch; private JomAdvancedSearchDataProvider jomAdvancedSearch; private JSONObject jObject; private JSONObject joOptions; public static String operator = "and",avatarOnly = "0"; private static String selectedValue; private static String selectedValueTo; private static String selectedValueFrom; private String NAME = "name"; private String TMP_CRITERIA_ID = "tmpCriteriaID"; private String TMP_CONDITION_ID = "tmpConditionID"; private String FIELD_ID = "fieldid"; private String FIELD = "field"; private String CONDITION_NAME = "condition_name"; private String CONDITION = "condition"; private String FIELD_TYPE = "fieldType"; private String VALUE_TYPE = "valuetype"; private String VALUE = "value"; private static int fieldPosition =1,conditionPosition=0,selectedListCount=0,selectedListPosition; private boolean isFromMultipleValue; private boolean isFromSelect; private boolean isListSelected; /** * Overrides method */ @Override public int setLayoutId() { return R.layout.jom_advance_search; } @Override public void initComponents() { jomAdvancedSearch = new JomAdvancedSearchDataProvider(this); LayoutInflater inflater = (LayoutInflater) this.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); lstAdvanceSearch = (ListView) findViewById(R.id.lstAdvanceSearch); headerView=inflater.inflate(R.layout.jom_advance_search_header,null); txtValue = (IjoomerEditText) headerView.findViewById(R.id.txtValue); txtValueFrom = (IjoomerEditText) headerView.findViewById(R.id.txtValueFrom); txtValueTo = (IjoomerEditText) headerView.findViewById(R.id.txtValueTo); txtValueMultiSelect = (IjoomerEditText) headerView.findViewById(R.id.txtValueMultiSelect); btnSearch = (IjoomerButton) findViewById(R.id.btnSearch); btnAddCriteria = (ImageView) headerView.findViewById(R.id.btnAddCriteria); rgCriteria = (RadioGroup) findViewById(R.id.rgCriteria); rbMatchAnyCriteria = (IjoomerRadioButton) findViewById(R.id.rbMatchAnyCriteria); rbMatchAllCriteria = (IjoomerRadioButton) findViewById(R.id.rbMatchAllCriteria); rbMatchAllCriteria.setButtonDrawable(this.getResources().getDrawable(R.drawable.radio_selector)); rbMatchAnyCriteria.setButtonDrawable(this.getResources().getDrawable(R.drawable.radio_selector)); rbMatchAnyCriteria.setPadding(30,3,10,1); rbMatchAllCriteria.setPadding(30,3,0,1); containsSingleValue = (LinearLayout)headerView.findViewById(R.id.containsSingleValue); containsToValue = (LinearLayout)headerView.findViewById(R.id.containsToValue); chbMemberWithAvatar = (IjoomerCheckBox) findViewById(R.id.chbMemberWithAvatar); chbMemberWithAvatar.setPadding(30,1,0,3); chbMemberWithAvatar.setButtonDrawable(this.getResources().getDrawable(R.drawable.checkbox_selector)); spCriteria = (Spinner)headerView.findViewById(R.id.spCriteria); spCondition = (Spinner) headerView.findViewById(R.id.spCondition); spOptions = (Spinner) headerView.findViewById(R.id.spOptions); isFromMultipleValue = false; isFromSelect = false; advanceSearchId = new ArrayList<String>(); advanceSearchGroup = new ArrayList<String>(); advanceSearchData = new ArrayList<String>(); advanceSearchCondition = new ArrayList<String>(); advanceSearchConditionOptions = new ArrayList<String>(); selectedArray = new ArrayList<HashMap<String,String>>(); try{ lstAdvanceSearch.addHeaderView(headerView); lstAdvanceSearch.setAdapter(null); }catch (Throwable e) { } } @Override public void prepareViews() { jomAdvancedSearch.getAdvanceSearchData(new WebCallListener() { final SeekBar proSeekBar = IjoomerUtilities.getLoadingDialog(getString(R.string.dialog_loading_sending_request)); @Override public void onProgressUpdate(int progressCount) { proSeekBar.setProgress(progressCount); } @Override public void onCallComplete(int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) { if (responseCode == 200) { formData = data1; for (HashMap<String, String> hashMap : data1) { try { advanceSearchData.add(hashMap.get(NAME)); advanceSearchGroup.add(hashMap.get(TYPE)); if(hashMap.containsKey(OPTIONS)){ advanceSearchConditionOptions.add(hashMap.get(OPTIONS)); }else{ advanceSearchConditionOptions.add(""); } if(!hashMap.get(TYPE).equals(GROUP)){ advanceSearchCondition.add(hashMap.get(CONDITION)); }else{ advanceSearchCondition.add(""); } } catch (Exception e) { e.printStackTrace(); } } spCriteria.setAdapter(new IjoomerSpinnerAdapter(JomAdvanceSearchActivity.this, advanceSearchData,advanceSearchGroup,advanceSearchId)); spCriteria.setSelection(1); }else { responseErrorMessageHandler(responseCode, true); } } }); } @Override protected void onResume() { super.onResume(); if(selectedArray!=null && selectedArray.size()>0){ selectedArray.clear(); if(listAdapterWithHolderSearch!=null){ listAdapterWithHolderSearch.clear(); } } } @Override public void setActionListeners() { try{ txtValueTo.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { IjoomerUtilities.getDateDialog(((IjoomerEditText) v).getText().toString(), false, new CustomClickListner() { @Override public void onClick(String value) { txtValueTo.setText(value); selectedValueTo = value; } }); } }); txtValueFrom.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { IjoomerUtilities.getDateDialog(((IjoomerEditText) v).getText().toString(), false, new CustomClickListner() { @Override public void onClick(String value) { txtValueFrom.setText(value); selectedValueFrom = value.trim(); } }); } }); txtValue.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { selectedValue =s.toString(); } }); spCriteria.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { fieldPosition = arg2; JSONArray ja; JSONArray jaOptions; advanceSearchConditionValue = new ArrayList<String>(); advanceSearchConditionType = new ArrayList<String>(); advanceSearchOptionValue = new ArrayList<String>(); advanceSearchConditionOptionName = new ArrayList<String>(); advanceSearchConditionOptionRange = new ArrayList<String>(); try { ja = new JSONArray(advanceSearchCondition.get(arg2)); for(int i = 0;i<ja.length();i++){ jObject = ja.getJSONObject(i); advanceSearchConditionValue.add(jObject.getString(NAME)); advanceSearchConditionType.add(jObject.getString(CONDITION_VALUE_TYPE)); advanceSearchConditionOptionRange.add(jObject.getString("range").trim()); } } catch (JSONException e1) { e1.printStackTrace(); } if(formData.get(arg2).get(TYPE).equals("select") || formData.get(arg2).get(TYPE).equals("radio") || formData.get(arg2).get(TYPE).equals("checkbox") || formData.get(arg2).get(TYPE).equals("gender")){ isFromSelect = true; txtValue.setVisibility(View.GONE); spOptions.setVisibility(View.VISIBLE); try { jaOptions = new JSONArray(advanceSearchConditionOptions.get(arg2)); for(int i = 0;i<jaOptions.length();i++){ joOptions = jaOptions.getJSONObject(i); advanceSearchOptionValue.add(joOptions.getString(VALUE)); advanceSearchConditionOptionName.add(joOptions.getString(NAME)); } } catch (JSONException e1) { e1.printStackTrace(); } if(advanceSearchOptionValue!=null && advanceSearchOptionValue.get(0)!=null){ selectedValue = advanceSearchOptionValue.get(0); } spOptions.setAdapter(new IjoomerSpinnerAdapter(JomAdvanceSearchActivity.this, advanceSearchConditionOptionName,advanceSearchOptionValue,advanceSearchId)); }else if(formData.get(arg2).get(TYPE).equals("birthdate") || formData.get(arg2).get(TYPE).equals("date")){ isFromSelect = false; spOptions.setVisibility(View.GONE); txtValue.setVisibility(View.VISIBLE); }else if(formData.get(arg2).get(TYPE).equals("multiselect")){ isFromSelect = false; spOptions.setVisibility(View.GONE); txtValue.setVisibility(View.GONE); try { jaOptions = new JSONArray(advanceSearchConditionOptions.get(arg2)); for(int i = 0;i<jaOptions.length();i++){ joOptions = jaOptions.getJSONObject(i); advanceSearchOptionValue.add(joOptions.getString(VALUE)); advanceSearchConditionOptionName.add(joOptions.getString(NAME)); } } catch (JSONException e1) { e1.printStackTrace(); } containsToValue.setVisibility(View.GONE); containsSingleValue.setVisibility(View.VISIBLE); txtValueMultiSelect.setVisibility(View.VISIBLE); }else{ isFromSelect = false; selectedValue = ""; containsToValue.setVisibility(View.GONE); containsSingleValue.setVisibility(View.VISIBLE); txtValue.setVisibility(View.VISIBLE); txtValueMultiSelect.setVisibility(View.GONE); spOptions.setVisibility(View.GONE); } spCondition.setAdapter(new IjoomerSpinnerAdapter(JomAdvanceSearchActivity.this, advanceSearchConditionValue,advanceSearchConditionType,advanceSearchId)); } @Override public void onNothingSelected(AdapterView<?> arg0) { selectedValue = advanceSearchOptionValue.get(0); } }); txtValueMultiSelect.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { IjoomerUtilities.getMultiSelectionDialog("", advanceSearchConditionOptions.get(fieldPosition), "", new CustomClickListner() { @Override public void onClick(String value) { ((IjoomerEditText) v).setText(value); txtValueMultiSelect.setText(value); } }); } }); spOptions.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { selectedValue = advanceSearchOptionValue.get(arg2); } @Override public void onNothingSelected(AdapterView<?> arg0) { selectedValue = advanceSearchOptionValue.get(0); } }); spCondition.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { conditionPosition = arg2; try { if(advanceSearchConditionOptionRange.get(conditionPosition)!=null && advanceSearchConditionOptionRange.get(conditionPosition).equalsIgnoreCase("1")){ containsSingleValue.setVisibility(View.GONE); containsToValue.setVisibility(View.VISIBLE); isFromMultipleValue = true; }else{ isFromMultipleValue = false; containsSingleValue.setVisibility(View.VISIBLE); containsToValue.setVisibility(View.GONE); } } catch (Exception e) { e.printStackTrace(); } } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); btnAddCriteria.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { try { boolean isError =false; if(!isFromSelect){ if(isFromMultipleValue){ if(txtValueFrom!=null && txtValueFrom.getText().toString().trim().length()>0){ }else{ txtValueFrom.setError(getString(R.string.validation_value_required)); isError = true; } if(txtValueTo!=null && txtValueTo.getText().toString().trim().length()>0){ }else{ txtValueTo.setError(getString(R.string.validation_value_required)); isError = true; } }else{ if(txtValue!=null && txtValue.getText().toString().trim().length()>0){ }else{ txtValue.setError(getString(R.string.validation_value_required)); isError = true; } } } if(!isError){ selectedArray = makeHashMapFromSelected(); prepareList(selectedArray); spCondition.setSelection(0); spCriteria.setSelection(1); txtValue.setText(""); } } catch (Exception e) { e.printStackTrace(); } } }); btnSearch.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { selectedArray = makeHashMapFromSelected(); try { loadNew(JomAdvanceSearchDetailActivity.class, JomAdvanceSearchActivity.this, false, "IN_OPERATOR", operator, "IN_AVATARONLY", avatarOnly, "IN_SELECTEDARRAY", selectedArray); } catch (WronNumberOfArgumentsException e) { e.printStackTrace(); } catch (InvalidKeyFormatException e) { e.printStackTrace(); } catch (NullDataException e) { e.printStackTrace(); } } }); }catch (Throwable e) { } rgCriteria.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { int selectedId = rgCriteria.getCheckedRadioButtonId(); RadioButton checkedRadioButton = (RadioButton)rgCriteria.findViewById(selectedId); if(checkedRadioButton.getText().equals(getString(R.string.matchanycriteria))){ operator = "and"; }else{ operator = "or"; } } }); chbMemberWithAvatar.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (((CheckBox) v).isChecked()) { avatarOnly = "1"; }else{ avatarOnly = "0"; } } }); } /** * Class methods * @return */ /** * This method used to hash map data from selected. * @return represented {@link HashMap} list */ public ArrayList<HashMap<String, String>> makeHashMapFromSelected(){ ArrayList<HashMap<String, String>> hashArray = new ArrayList<HashMap<String,String>>(); try { selectedHash = new HashMap<String, String>(); if(selectedArray!=null){ selectedHash.put(NAME,formData.get(fieldPosition).get(NAME)); selectedHash.put(TMP_CRITERIA_ID,String.valueOf(fieldPosition)); selectedHash.put(TMP_CONDITION_ID,String.valueOf(conditionPosition)); selectedHash.put(FIELD_ID,formData.get(fieldPosition).get(ID)); selectedHash.put(FIELD,formData.get(fieldPosition).get(CONDITION_FIELD_CODE)); JSONArray ja = new JSONArray(advanceSearchCondition.get(fieldPosition)); JSONObject jo = null; jo = ja.getJSONObject(conditionPosition); selectedHash.put(CONDITION_NAME,jo.getString(NAME)); selectedHash.put(CONDITION,jo.getString(VALUE)); selectedHash.put(FIELD_TYPE,jo.getString(VALUE_TYPE)); if(isFromMultipleValue){ selectedValue = selectedValueFrom +","+selectedValueTo; selectedHash.put(VALUE,selectedValue); }else{ if(isFromSelect){ if(selectedValue!=null && selectedValue.length()>0){ }else{ selectedValue = advanceSearchOptionValue.get(0); } } selectedHash.put(VALUE,selectedValue); } selectedArray.add(selectedHash); selectedArray.size(); } try{ if(isListSelected){ selectedArray.remove(selectedListPosition); } }catch (Throwable e) { } if(selectedArray!=null) for(int i=selectedArray.size()-1;i>=0;i--){ HashMap<String, String> hashMap = selectedArray.get(i); hashArray.add(hashMap); } } catch (JSONException e) { e.printStackTrace(); } return hashArray; } /** * This method used to shown response message. * @param responseCode represented response code * @param finishActivityOnConnectionProblem represented finish activity on connection problem */ private void responseErrorMessageHandler(final int responseCode, final boolean finishActivityOnConnectionProblem) { IjoomerUtilities.getCustomOkDialog(getString(R.string.search), getString(getResources().getIdentifier("code" + responseCode, "string", getPackageName())), getString(R.string.ok), R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() { @Override public void NeutralMethod() { } }); } /** * This method used to prepare advance search data. * @param data represented data list */ public void prepareList(ArrayList<HashMap<String, String>> data){ if(listAdapterWithHolderSearch!=null){ listAdapterWithHolderSearch.clear(); }else{ listAdapterWithHolderSearch = getSearchListAdapter(); lstAdvanceSearch.setAdapter(listAdapterWithHolderSearch); } for (HashMap<String, String> hashMap : data) { SmartListItem item = new SmartListItem(); item.setItemLayout(R.layout.jom_advance_search_list_adapter); ArrayList<Object> obj = new ArrayList<Object>(); obj.add(hashMap); item.setValues(obj); listAdapterWithHolderSearch.add(item); } isListSelected = false; } /** * List adapter for search. * @return */ private SmartListAdapterWithHolder getSearchListAdapter() { SmartListAdapterWithHolder adapter = listAdapterWithHolderSearch = new SmartListAdapterWithHolder(JomAdvanceSearchActivity.this, R.layout.jom_advance_search_list_adapter, listData, new ItemView() { @SuppressWarnings({ "unchecked", "deprecation" }) @Override public View setItemView(final int position, View v, SmartListItem item, final ViewHolder holder) { holder.txtCriteriaName = (IjoomerTextView) v.findViewById(R.id.tvCriteriaName); holder.tvCondition = (IjoomerTextView) v.findViewById(R.id.tvCondition); holder.tvValue = (IjoomerTextView) v.findViewById(R.id.tvValue); holder.btnAddCriteria = (ImageView) v.findViewById(R.id.btnAddCriteria); holder.rvTitleRow = (RelativeLayout)v.findViewById(R.id.rvTitleRow); final HashMap<String, String> search = (HashMap<String, String>) item.getValues().get(0); holder.txtCriteriaName.setText(search.get(NAME)); holder.tvCondition.setText(search.get(CONDITION_NAME)); holder.tvValue.setText(search.get(VALUE)); holder.rvTitleRow.setBackgroundDrawable(getResources().getDrawable(R.drawable.jom_advance_search_list_bg)); holder.btnAddCriteria.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { selectedArray.remove(position); prepareList(selectedArray); } }); holder.rvTitleRow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { selectedListPosition = position; isListSelected = true; selectedListCount++; if(selectedListCount>1){ prepareList(selectedArray); spCriteria.setSelection(Integer.valueOf(search.get(TMP_CRITERIA_ID))); spCondition.setSelection(Integer.valueOf(search.get(TMP_CONDITION_ID))); txtValue.setText(search.get(VALUE)); selectedListCount = 0; isListSelected = true; }else{ holder.rvTitleRow.setBackgroundColor(Color.WHITE); spCriteria.setSelection(Integer.valueOf(search.get(TMP_CRITERIA_ID))); spCondition.setSelection(Integer.valueOf(search.get(TMP_CONDITION_ID))); txtValue.setText(search.get(VALUE)); } } }); return v; } @Override public View setItemView(int position, View v, SmartListItem item) { return null; } }); return adapter; } }