Added Android code
[wl-app.git] / Android / app / src / main / java / com / moiseum / wolnelektury / view / search / filter / FilterFragment.java
1 package com.moiseum.wolnelektury.view.search.filter;
2
3 import android.app.Activity;
4 import android.content.Intent;
5 import android.os.Bundle;
6 import android.support.v7.widget.SwitchCompat;
7 import android.view.Menu;
8 import android.view.MenuInflater;
9 import android.view.MenuItem;
10 import android.view.View;
11 import android.widget.Toast;
12
13 import com.moiseum.wolnelektury.R;
14 import com.moiseum.wolnelektury.base.mvp.PresenterFragment;
15 import com.moiseum.wolnelektury.connection.models.CategoryModel;
16 import com.moiseum.wolnelektury.view.search.components.FiltersProgressFlowLayout;
17 import com.moiseum.wolnelektury.view.search.dto.FilterDto;
18
19 import org.parceler.Parcels;
20
21 import java.util.List;
22
23 import butterknife.BindView;
24
25 import static com.moiseum.wolnelektury.view.search.filter.FilterActivity.FILTERS_KEY;
26 import static com.moiseum.wolnelektury.view.search.filter.FilterActivity.RESULT_FILTERS_KEY;
27
28 /**
29  * Created by piotrostrowski on 25.11.2017.
30  */
31
32 public class FilterFragment extends PresenterFragment<FilterPresenter> implements FilterView {
33
34         @BindView(R.id.swLecturesOnly)
35         SwitchCompat swLecturesOnly;
36         @BindView(R.id.swHasAudiobook)
37         SwitchCompat swHasAudiobook;
38         @BindView(R.id.pflEpochs)
39         FiltersProgressFlowLayout pflEpochs;
40         @BindView(R.id.pflGenres)
41         FiltersProgressFlowLayout pflGenres;
42         @BindView(R.id.pflKinds)
43         FiltersProgressFlowLayout pflKinds;
44
45         public static FilterFragment newInstance(FilterDto filters) {
46                 FilterFragment fragment = new FilterFragment();
47                 Bundle args = new Bundle();
48                 args.putParcelable(FILTERS_KEY, Parcels.wrap(filters));
49                 fragment.setArguments(args);
50                 return fragment;
51         }
52
53         @Override
54         protected FilterPresenter createPresenter() {
55                 FilterDto filters = Parcels.unwrap(getArguments().getParcelable(FILTERS_KEY));
56                 return new FilterPresenter(this, filters);
57         }
58
59         @Override
60         public int getLayoutResourceId() {
61                 return R.layout.fragment_filter;
62         }
63
64         @Override
65         public void onCreate(Bundle savedInstanceState) {
66                 super.onCreate(savedInstanceState);
67                 setHasOptionsMenu(true);
68         }
69
70         @Override
71         public void prepareView(View view, Bundle savedInstanceState) {
72                 FilterDto filters = Parcels.unwrap(getArguments().getParcelable(FILTERS_KEY));
73                 swLecturesOnly.setChecked(filters.isLecture());
74                 swHasAudiobook.setChecked(filters.isAudiobook());
75         }
76
77         @Override
78         public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
79                 super.onCreateOptionsMenu(menu, inflater);
80                 inflater.inflate(R.menu.menu_filter, menu);
81         }
82
83         @Override
84         public boolean onOptionsItemSelected(MenuItem item) {
85                 if (item.getItemId() == R.id.action_accept) {
86                         getPresenter().updateFilters(swLecturesOnly.isChecked(),
87                                         swHasAudiobook.isChecked(),
88                                         pflEpochs.getSelectedCategories(),
89                                         pflGenres.getSelectedCategories(),
90                                         pflKinds.getSelectedCategories());
91                         return true;
92                 }
93                 return super.onOptionsItemSelected(item);
94         }
95
96         @Override
97         public void displayEpochs(List<CategoryModel> data) {
98                 pflEpochs.addCategories(data);
99         }
100
101         @Override
102         public void displayGenres(List<CategoryModel> data) {
103                 pflGenres.addCategories(data);
104         }
105
106         @Override
107         public void displayKinds(List<CategoryModel> data) {
108                 pflKinds.addCategories(data);
109         }
110
111         @Override
112         public void applyFilters(FilterDto filterDto) {
113                 if (getActivity() != null) {
114                         Intent intent = new Intent();
115                         intent.putExtra(RESULT_FILTERS_KEY, Parcels.wrap(filterDto));
116
117                         getActivity().setResult(Activity.RESULT_OK, intent);
118                         getActivity().finish();
119                 }
120         }
121
122         @Override
123         public void showEpochsError() {
124                 Toast.makeText(getContext(), R.string.load_epochs_failed, Toast.LENGTH_SHORT).show();
125                 pflEpochs.showRetryButton(new FiltersProgressFlowLayout.FiltersProgressFlowLayoutRetryListener() {
126                         @Override
127                         public void onRetryClicked() {
128                                 getPresenter().loadEpochs();
129                         }
130                 });
131         }
132
133         @Override
134         public void showGenresError() {
135                 Toast.makeText(getContext(), R.string.load_genres_failed, Toast.LENGTH_SHORT).show();
136                 pflGenres.showRetryButton(new FiltersProgressFlowLayout.FiltersProgressFlowLayoutRetryListener() {
137                         @Override
138                         public void onRetryClicked() {
139                                 getPresenter().loadGenres();
140                         }
141                 });
142         }
143
144         @Override
145         public void showKindsError() {
146                 Toast.makeText(getContext(), R.string.load_kinds_failed, Toast.LENGTH_SHORT).show();
147                 pflKinds.showRetryButton(new FiltersProgressFlowLayout.FiltersProgressFlowLayoutRetryListener() {
148                         @Override
149                         public void onRetryClicked() {
150                                 getPresenter().loadKinds();
151                         }
152                 });
153         }
154 }