Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2015
550
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.45 KB | None | 0 0
  1. import android.content.Context;
  2. import android.os.Bundle;
  3. import android.support.v4.app.DialogFragment;
  4. import android.support.v4.app.FragmentManager;
  5. import android.support.v7.widget.GridLayoutManager;
  6. import android.support.v7.widget.RecyclerView;
  7. import android.util.Log;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.view.ViewGroup;
  12. import android.view.Window;
  13. import android.widget.Button;
  14. import android.widget.CompoundButton;
  15. import android.widget.CompoundButton.OnCheckedChangeListener;
  16. import android.widget.Spinner;
  17. import android.widget.ToggleButton;
  18.  
  19. import com.X.MyApp;
  20. import com.X.R;
  21. import com.X.adapter.FilterAdapter;
  22. import com.X.adapter.FilterSubtypesAdapter;
  23. import com.X.fragments.content.menus.SimpleDividerItemDecorator;
  24. import com.X.interfaces.I_FilterEventListener;
  25. import com.X.itemwrappers.FilterTypeActive;
  26. import com.X.itemwrappers.FilterTypeActive.Subtype_type;
  27. import com.X.itemwrappers.enums.configs.E_FilterDates;
  28. import com.X.itemwrappers.enums.configs.E_FilterDistance;
  29.  
  30. import java.util.ArrayList;
  31.  
  32. public class FilterDialog extends DialogFragment implements OnClickListener, OnCheckedChangeListener {
  33. private static final int TOTAL_CELLS_PER_ROW = 2;
  34.  
  35. private static final String KEY_FILTERACTIVE = "filterActive";
  36. private static final String KEY_FILTER_DATA = "data";
  37. private static final String KEY_FILTER_DATE = "date";
  38. private static final String KEY_FILTER_DISTANCE = "distance";
  39.  
  40. protected MyApp myApp;
  41. protected Context context;
  42. //views
  43. protected ToggleButton v_filterActive;
  44. protected View v_filterContent;
  45. protected Spinner v_dates;
  46. protected Spinner v_distances;
  47. protected RecyclerView v_subtypes;
  48. protected FilterSubtypesAdapter adapterSubtype;
  49.  
  50. //buttons
  51. protected Button b_accept;
  52. //data
  53. protected ArrayList<FilterTypeActive> data;
  54.  
  55. public FilterDialog init(Context context) {
  56. this.context = context;
  57. return this;
  58. }
  59.  
  60. public void show(FragmentManager manager, String tag) {
  61. super.show(manager, tag);
  62. }
  63.  
  64. @Override
  65. public void onSaveInstanceState(Bundle outState) {
  66. outState.putBoolean(KEY_FILTERACTIVE, v_filterActive.isChecked());
  67. outState.putInt(KEY_FILTER_DATE, v_dates.getSelectedItemPosition());
  68. outState.putInt(KEY_FILTER_DISTANCE, v_distances.getSelectedItemPosition());
  69. outState.putParcelableArrayList(KEY_FILTER_DATA, data);
  70. }
  71.  
  72. @Override
  73. public View onCreateView(LayoutInflater inflater, ViewGroup view, Bundle savedInstanceState) {
  74. super.onCreateView(inflater, view, savedInstanceState);
  75. getDialog().setCanceledOnTouchOutside(true);
  76. getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
  77. //getDialog().setTitle(R.string.filter_title);
  78.  
  79. return inflater.inflate(R.layout.content_filter, view, false);
  80. }
  81.  
  82. @Override
  83. public void onViewCreated(View view, Bundle savedInstanceState) {
  84. super.onViewCreated(view, savedInstanceState);
  85.  
  86. if (this.getActivity()!=null) {
  87. myApp = (MyApp)this.getActivity().getApplicationContext();
  88. } else {
  89. myApp = (MyApp)context.getApplicationContext();
  90. }
  91. //views
  92. v_filterActive = (ToggleButton)view.findViewById(R.id.filter_active);
  93. v_filterActive.setOnCheckedChangeListener(this);
  94. v_filterContent = view.findViewById(R.id.filter_content); v_filterContent.bringToFront();
  95. v_dates = (Spinner)view.findViewById(R.id.filter_date);
  96. v_distances = (Spinner)view.findViewById(R.id.filter_distance);
  97. v_subtypes = (RecyclerView)view.findViewById(R.id.filter_subtypes);
  98.  
  99. //butons
  100. b_accept = (Button)view.findViewById(R.id.filter_accept);
  101. b_accept.setOnClickListener(this);
  102.  
  103. fillView(savedInstanceState);
  104. }
  105.  
  106. private void fillView(Bundle savedInstanceState) {
  107. boolean filterActive;
  108. int datePos, distancePos;
  109. if (savedInstanceState!=null && savedInstanceState.containsKey(KEY_FILTER_DATA)) {
  110. filterActive = savedInstanceState.getBoolean(KEY_FILTERACTIVE);
  111. data = savedInstanceState.getParcelableArrayList(KEY_FILTER_DATA);
  112. datePos = savedInstanceState.getInt(KEY_FILTER_DATE);
  113. distancePos = savedInstanceState.getInt(KEY_FILTER_DISTANCE);
  114. } else {
  115. filterActive = myApp.getFilterActive();
  116. data = myApp.getDB().getListTypeAndSubtypesSort();
  117. datePos = E_FilterDates.valueOf(myApp.getFilterDate()).ordinal();
  118. distancePos = E_FilterDistance.valueOf(myApp.getFilterDistance()).ordinal();
  119. }
  120. v_filterActive.setChecked(filterActive);
  121. v_filterContent.setVisibility(v_filterActive.isChecked()?View.GONE:View.VISIBLE);
  122. //dates
  123. v_dates.setAdapter( new FilterAdapter<E_FilterDates>(this.getActivity(), E_FilterDates.values()) );
  124. v_dates.setSelection(datePos);
  125.  
  126. //distance
  127. v_distances.setAdapter(new FilterAdapter<E_FilterDistance>(this.getActivity(), E_FilterDistance.values()) );
  128. v_distances.setSelection(distancePos);
  129.  
  130. //divider
  131. v_subtypes.addItemDecoration( new SimpleDividerItemDecorator(this.getActivity()) );
  132. //if(adapterSubtype==null) {
  133. adapterSubtype = new FilterSubtypesAdapter(this.getActivity(), data);
  134. v_subtypes.setAdapter(adapterSubtype);
  135. /*} else {
  136. //adapterSubtype.notifyDataSetChanged();
  137. }*/
  138.  
  139. //types - subtypes
  140. final GridLayoutManager mng_layout = new GridLayoutManager(this.getActivity(), TOTAL_CELLS_PER_ROW);
  141. mng_layout.setSpanSizeLookup( new GridLayoutManager.SpanSizeLookup() {
  142. @Override
  143. public int getSpanSize(int position) {
  144. switch( adapterSubtype.getItemViewType(position) ) {
  145. case FilterSubtypesAdapter.TYPE_HEADER:
  146. return TOTAL_CELLS_PER_ROW;
  147. case FilterSubtypesAdapter.TYPE_ROW:
  148. return 1;
  149. default:
  150. return -1;
  151. }
  152. }
  153. });
  154. v_subtypes.setLayoutManager(mng_layout);
  155. }
  156.  
  157. //APPLY
  158. @Override
  159. public void onClick(View v) {
  160. if (v.getId()==R.id.filter_accept) {
  161. final E_FilterDates filterDate = (E_FilterDates)v_dates.getSelectedItem();
  162. final E_FilterDistance filterDistance = (E_FilterDistance)v_distances.getSelectedItem();
  163.  
  164. //save only childs
  165. final ArrayList<FilterTypeActive> childsData = filterData(data);
  166.  
  167. //save on filter
  168. myApp.saveFilter( v_filterActive.isChecked(), filterDate, filterDistance, childsData);
  169.  
  170. //apply filter
  171. final I_FilterEventListener filterListener = (I_FilterEventListener)this.getActivity();
  172. if (filterListener!=null) {
  173. filterListener.filterListener(v_filterActive.isChecked(), filterDate, filterDistance, childsData);
  174. } else {
  175. Log.e("Filter","Filter is not going to apply, because not listener passed");
  176. }
  177. dismiss();
  178. }
  179. }
  180.  
  181. private ArrayList<FilterTypeActive> filterData(ArrayList<FilterTypeActive> data) {
  182. final ArrayList<FilterTypeActive> cleanData = new ArrayList<FilterTypeActive>();
  183. for(FilterTypeActive element : data) {
  184. if (element!=null && element.getType()==Subtype_type.ROW ) {
  185. cleanData.add(element);
  186. }
  187. }
  188. return cleanData;
  189. }
  190.  
  191.  
  192. @Override
  193. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  194. //if (buttonView.isPressed()) {
  195. //Enable/Disable filterContent
  196. v_filterContent.setVisibility(isChecked?View.GONE:View.VISIBLE);
  197. //Toast.makeText(context, R.string.filter_disabled, Toast.LENGTH_SHORT).show();
  198. //}
  199. }
  200.  
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement