Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import android.content.Context;
- import android.os.Bundle;
- import android.support.v4.app.DialogFragment;
- import android.support.v4.app.FragmentManager;
- import android.support.v7.widget.GridLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.ViewGroup;
- import android.view.Window;
- import android.widget.Button;
- import android.widget.CompoundButton;
- import android.widget.CompoundButton.OnCheckedChangeListener;
- import android.widget.Spinner;
- import android.widget.ToggleButton;
- import com.X.MyApp;
- import com.X.R;
- import com.X.adapter.FilterAdapter;
- import com.X.adapter.FilterSubtypesAdapter;
- import com.X.fragments.content.menus.SimpleDividerItemDecorator;
- import com.X.interfaces.I_FilterEventListener;
- import com.X.itemwrappers.FilterTypeActive;
- import com.X.itemwrappers.FilterTypeActive.Subtype_type;
- import com.X.itemwrappers.enums.configs.E_FilterDates;
- import com.X.itemwrappers.enums.configs.E_FilterDistance;
- import java.util.ArrayList;
- public class FilterDialog extends DialogFragment implements OnClickListener, OnCheckedChangeListener {
- private static final int TOTAL_CELLS_PER_ROW = 2;
- private static final String KEY_FILTERACTIVE = "filterActive";
- private static final String KEY_FILTER_DATA = "data";
- private static final String KEY_FILTER_DATE = "date";
- private static final String KEY_FILTER_DISTANCE = "distance";
- protected MyApp myApp;
- protected Context context;
- //views
- protected ToggleButton v_filterActive;
- protected View v_filterContent;
- protected Spinner v_dates;
- protected Spinner v_distances;
- protected RecyclerView v_subtypes;
- protected FilterSubtypesAdapter adapterSubtype;
- //buttons
- protected Button b_accept;
- //data
- protected ArrayList<FilterTypeActive> data;
- public FilterDialog init(Context context) {
- this.context = context;
- return this;
- }
- public void show(FragmentManager manager, String tag) {
- super.show(manager, tag);
- }
- @Override
- public void onSaveInstanceState(Bundle outState) {
- outState.putBoolean(KEY_FILTERACTIVE, v_filterActive.isChecked());
- outState.putInt(KEY_FILTER_DATE, v_dates.getSelectedItemPosition());
- outState.putInt(KEY_FILTER_DISTANCE, v_distances.getSelectedItemPosition());
- outState.putParcelableArrayList(KEY_FILTER_DATA, data);
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup view, Bundle savedInstanceState) {
- super.onCreateView(inflater, view, savedInstanceState);
- getDialog().setCanceledOnTouchOutside(true);
- getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
- //getDialog().setTitle(R.string.filter_title);
- return inflater.inflate(R.layout.content_filter, view, false);
- }
- @Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- if (this.getActivity()!=null) {
- myApp = (MyApp)this.getActivity().getApplicationContext();
- } else {
- myApp = (MyApp)context.getApplicationContext();
- }
- //views
- v_filterActive = (ToggleButton)view.findViewById(R.id.filter_active);
- v_filterActive.setOnCheckedChangeListener(this);
- v_filterContent = view.findViewById(R.id.filter_content); v_filterContent.bringToFront();
- v_dates = (Spinner)view.findViewById(R.id.filter_date);
- v_distances = (Spinner)view.findViewById(R.id.filter_distance);
- v_subtypes = (RecyclerView)view.findViewById(R.id.filter_subtypes);
- //butons
- b_accept = (Button)view.findViewById(R.id.filter_accept);
- b_accept.setOnClickListener(this);
- fillView(savedInstanceState);
- }
- private void fillView(Bundle savedInstanceState) {
- boolean filterActive;
- int datePos, distancePos;
- if (savedInstanceState!=null && savedInstanceState.containsKey(KEY_FILTER_DATA)) {
- filterActive = savedInstanceState.getBoolean(KEY_FILTERACTIVE);
- data = savedInstanceState.getParcelableArrayList(KEY_FILTER_DATA);
- datePos = savedInstanceState.getInt(KEY_FILTER_DATE);
- distancePos = savedInstanceState.getInt(KEY_FILTER_DISTANCE);
- } else {
- filterActive = myApp.getFilterActive();
- data = myApp.getDB().getListTypeAndSubtypesSort();
- datePos = E_FilterDates.valueOf(myApp.getFilterDate()).ordinal();
- distancePos = E_FilterDistance.valueOf(myApp.getFilterDistance()).ordinal();
- }
- v_filterActive.setChecked(filterActive);
- v_filterContent.setVisibility(v_filterActive.isChecked()?View.GONE:View.VISIBLE);
- //dates
- v_dates.setAdapter( new FilterAdapter<E_FilterDates>(this.getActivity(), E_FilterDates.values()) );
- v_dates.setSelection(datePos);
- //distance
- v_distances.setAdapter(new FilterAdapter<E_FilterDistance>(this.getActivity(), E_FilterDistance.values()) );
- v_distances.setSelection(distancePos);
- //divider
- v_subtypes.addItemDecoration( new SimpleDividerItemDecorator(this.getActivity()) );
- //if(adapterSubtype==null) {
- adapterSubtype = new FilterSubtypesAdapter(this.getActivity(), data);
- v_subtypes.setAdapter(adapterSubtype);
- /*} else {
- //adapterSubtype.notifyDataSetChanged();
- }*/
- //types - subtypes
- final GridLayoutManager mng_layout = new GridLayoutManager(this.getActivity(), TOTAL_CELLS_PER_ROW);
- mng_layout.setSpanSizeLookup( new GridLayoutManager.SpanSizeLookup() {
- @Override
- public int getSpanSize(int position) {
- switch( adapterSubtype.getItemViewType(position) ) {
- case FilterSubtypesAdapter.TYPE_HEADER:
- return TOTAL_CELLS_PER_ROW;
- case FilterSubtypesAdapter.TYPE_ROW:
- return 1;
- default:
- return -1;
- }
- }
- });
- v_subtypes.setLayoutManager(mng_layout);
- }
- //APPLY
- @Override
- public void onClick(View v) {
- if (v.getId()==R.id.filter_accept) {
- final E_FilterDates filterDate = (E_FilterDates)v_dates.getSelectedItem();
- final E_FilterDistance filterDistance = (E_FilterDistance)v_distances.getSelectedItem();
- //save only childs
- final ArrayList<FilterTypeActive> childsData = filterData(data);
- //save on filter
- myApp.saveFilter( v_filterActive.isChecked(), filterDate, filterDistance, childsData);
- //apply filter
- final I_FilterEventListener filterListener = (I_FilterEventListener)this.getActivity();
- if (filterListener!=null) {
- filterListener.filterListener(v_filterActive.isChecked(), filterDate, filterDistance, childsData);
- } else {
- Log.e("Filter","Filter is not going to apply, because not listener passed");
- }
- dismiss();
- }
- }
- private ArrayList<FilterTypeActive> filterData(ArrayList<FilterTypeActive> data) {
- final ArrayList<FilterTypeActive> cleanData = new ArrayList<FilterTypeActive>();
- for(FilterTypeActive element : data) {
- if (element!=null && element.getType()==Subtype_type.ROW ) {
- cleanData.add(element);
- }
- }
- return cleanData;
- }
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- //if (buttonView.isPressed()) {
- //Enable/Disable filterContent
- v_filterContent.setVisibility(isChecked?View.GONE:View.VISIBLE);
- //Toast.makeText(context, R.string.filter_disabled, Toast.LENGTH_SHORT).show();
- //}
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement