package de.vanmar.android.yarrn.components;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.ViewAnimator;
import org.acra.ACRA;
import java.util.LinkedList;
import java.util.List;
import de.vanmar.android.yarrn.R;
import de.vanmar.android.yarrn.YarrnPrefs_;
/**
* Created by Kolja on 22.01.14.
*/
public class SearchCriteriaDialog extends Dialog implements CompoundButton.OnCheckedChangeListener {
private SearchCriteria searchCriteria = null;
private YarrnPrefs_ prefs;
private RadioButton searchByUser;
private RadioButton searchBySelf;
private RadioButton searchByFriends;
private RadioButton searchByAnyone;
private SearchCriteria.SearchContext searchContext;
private Spinner searchCriteriaType;
private ViewAnimator viewAnimator;
private RadioGroup craft;
public SearchCriteriaDialog(Context context, SearchCriteria.SearchContext searchContext, YarrnPrefs_ prefs) {
super(context);
this.searchContext = searchContext;
this.prefs = prefs;
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_criteria_dialog);
searchCriteriaType = (Spinner) findViewById(R.id.search_criteria_type);
List<String> searchCriteriaTypes = getSearchCriteriaTypes();
ArrayAdapter<String> adapter = new ArrayAdapter(getContext(),
android.R.layout.simple_spinner_item, searchCriteriaTypes);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
searchCriteriaType.setAdapter(adapter);
searchCriteriaType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String selected = getSearchCriteriaType(position);
for (int i = 0; i < viewAnimator.getChildCount(); i++) {
View v = viewAnimator.getChildAt(i);
if (selected.equals(v.getTag())) {
viewAnimator.setDisplayedChild(i);
return;
}
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
//
}
});
viewAnimator = (ViewAnimator) findViewById(R.id.view_animator);
searchByUser = (RadioButton) findViewById(R.id.search_by_user);
searchBySelf = (RadioButton) findViewById(R.id.search_by_self);
searchByFriends = (RadioButton) findViewById(R.id.search_by_friends);
searchByAnyone = (RadioButton) findViewById(R.id.search_by_anyone);
craft = (RadioGroup) findViewById(R.id.craft);
searchByUser.setOnCheckedChangeListener(this);
searchBySelf.setOnCheckedChangeListener(this);
searchByFriends.setOnCheckedChangeListener(this);
searchByAnyone.setOnCheckedChangeListener(this);
final EditText searchBy = (EditText) findViewById(R.id.search_by);
searchBy.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
searchByUser.setChecked(true);
}
});
findViewById(R.id.add_search_by).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (searchByUser.isChecked()) {
if (searchBy.getText().length() > 0) {
// by=<user>
String user = searchBy.getText().toString();
SearchCriteriaDialog.this.searchCriteria = SearchCriteria.byUser(user, searchContext, getContext().getString(R.string.search_by_user_title) + " " + user);
dismiss();
}
} else if (searchByFriends.isChecked()) {
// friends=yes
SearchCriteriaDialog.this.searchCriteria = SearchCriteria.byFriends(getContext().getString(R.string.search_by_friends_title));
dismiss();
} else if (searchBySelf.isChecked()) {
// by:<self>
SearchCriteriaDialog.this.searchCriteria = SearchCriteria.byUser(prefs.username().get(), searchContext, getContext().getString(R.string.search_by_self_title));
dismiss();
} else {
// <nothing>
SearchCriteriaDialog.this.searchCriteria = null;
dismiss();
}
}
});
findViewById(R.id.add_search_craft).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (craft.getCheckedRadioButtonId()) {
case R.id.search_craft_knitting:
SearchCriteriaDialog.this.searchCriteria = SearchCriteria.byCraft("knitting", getContext().getString(R.string.search_craft_knitting));
dismiss();
break;
case R.id.search_craft_crochet:
SearchCriteriaDialog.this.searchCriteria = SearchCriteria.byCraft("crochet", getContext().getString(R.string.search_craft_crochet));
dismiss();
break;
case R.id.search_craft_weaving:
SearchCriteriaDialog.this.searchCriteria = SearchCriteria.byCraft("weaving", getContext().getString(R.string.search_craft_weaving));
dismiss();
break;
}
}
});
}
private String getSearchCriteriaType(int position) {
return searchCriteriaType.getItemAtPosition(position).toString();
}
private List<String> getSearchCriteriaTypes() {
LinkedList<String> searchCriteriaTypes = new LinkedList<String>();
if (searchContext == SearchCriteria.SearchContext.PROJECT || searchContext == SearchCriteria.SearchContext.STASH) {
searchCriteriaTypes.add(getContext().getText(R.string.search_criteria_name).toString());
}
if (searchContext == SearchCriteria.SearchContext.PROJECT || searchContext == SearchCriteria.SearchContext.PATTERN) {
searchCriteriaTypes.add(getContext().getText(R.string.search_criteria_craft).toString());
}
return searchCriteriaTypes;
}
public SearchCriteria getSearchCriteria() {
return this.searchCriteria;
}
public SearchCriteria.SearchType getSearchCriteriaType() {
String type = getSearchCriteriaType(searchCriteriaType.getSelectedItemPosition());
if (getContext().getString(R.string.search_criteria_name).equals(type)) {
return SearchCriteria.SearchType.USER;
} else if (getContext().getString(R.string.search_criteria_craft).equals(type)) {
return SearchCriteria.SearchType.CRAFT;
} else {
ACRA.getErrorReporter().handleSilentException(new IllegalArgumentException("Unknown SearchCriteriaType: " + type));
return SearchCriteria.SearchType.USER;
}
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if (buttonView != searchByUser) {
searchByUser.setChecked(false);
}
if (buttonView != searchBySelf) {
searchBySelf.setChecked(false);
}
if (buttonView != searchByFriends) {
searchByFriends.setChecked(false);
}
if (buttonView != searchByAnyone) {
searchByAnyone.setChecked(false);
}
}
}
}