Added Android code
[wl-app.git] / Android / app / src / main / java / com / moiseum / wolnelektury / view / search / filter / FilterFragment.java
diff --git a/Android/app/src/main/java/com/moiseum/wolnelektury/view/search/filter/FilterFragment.java b/Android/app/src/main/java/com/moiseum/wolnelektury/view/search/filter/FilterFragment.java
new file mode 100644 (file)
index 0000000..4ae7718
--- /dev/null
@@ -0,0 +1,154 @@
+package com.moiseum.wolnelektury.view.search.filter;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v7.widget.SwitchCompat;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.Toast;
+
+import com.moiseum.wolnelektury.R;
+import com.moiseum.wolnelektury.base.mvp.PresenterFragment;
+import com.moiseum.wolnelektury.connection.models.CategoryModel;
+import com.moiseum.wolnelektury.view.search.components.FiltersProgressFlowLayout;
+import com.moiseum.wolnelektury.view.search.dto.FilterDto;
+
+import org.parceler.Parcels;
+
+import java.util.List;
+
+import butterknife.BindView;
+
+import static com.moiseum.wolnelektury.view.search.filter.FilterActivity.FILTERS_KEY;
+import static com.moiseum.wolnelektury.view.search.filter.FilterActivity.RESULT_FILTERS_KEY;
+
+/**
+ * Created by piotrostrowski on 25.11.2017.
+ */
+
+public class FilterFragment extends PresenterFragment<FilterPresenter> implements FilterView {
+
+       @BindView(R.id.swLecturesOnly)
+       SwitchCompat swLecturesOnly;
+       @BindView(R.id.swHasAudiobook)
+       SwitchCompat swHasAudiobook;
+       @BindView(R.id.pflEpochs)
+       FiltersProgressFlowLayout pflEpochs;
+       @BindView(R.id.pflGenres)
+       FiltersProgressFlowLayout pflGenres;
+       @BindView(R.id.pflKinds)
+       FiltersProgressFlowLayout pflKinds;
+
+       public static FilterFragment newInstance(FilterDto filters) {
+               FilterFragment fragment = new FilterFragment();
+               Bundle args = new Bundle();
+               args.putParcelable(FILTERS_KEY, Parcels.wrap(filters));
+               fragment.setArguments(args);
+               return fragment;
+       }
+
+       @Override
+       protected FilterPresenter createPresenter() {
+               FilterDto filters = Parcels.unwrap(getArguments().getParcelable(FILTERS_KEY));
+               return new FilterPresenter(this, filters);
+       }
+
+       @Override
+       public int getLayoutResourceId() {
+               return R.layout.fragment_filter;
+       }
+
+       @Override
+       public void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setHasOptionsMenu(true);
+       }
+
+       @Override
+       public void prepareView(View view, Bundle savedInstanceState) {
+               FilterDto filters = Parcels.unwrap(getArguments().getParcelable(FILTERS_KEY));
+               swLecturesOnly.setChecked(filters.isLecture());
+               swHasAudiobook.setChecked(filters.isAudiobook());
+       }
+
+       @Override
+       public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+               super.onCreateOptionsMenu(menu, inflater);
+               inflater.inflate(R.menu.menu_filter, menu);
+       }
+
+       @Override
+       public boolean onOptionsItemSelected(MenuItem item) {
+               if (item.getItemId() == R.id.action_accept) {
+                       getPresenter().updateFilters(swLecturesOnly.isChecked(),
+                                       swHasAudiobook.isChecked(),
+                                       pflEpochs.getSelectedCategories(),
+                                       pflGenres.getSelectedCategories(),
+                                       pflKinds.getSelectedCategories());
+                       return true;
+               }
+               return super.onOptionsItemSelected(item);
+       }
+
+       @Override
+       public void displayEpochs(List<CategoryModel> data) {
+               pflEpochs.addCategories(data);
+       }
+
+       @Override
+       public void displayGenres(List<CategoryModel> data) {
+               pflGenres.addCategories(data);
+       }
+
+       @Override
+       public void displayKinds(List<CategoryModel> data) {
+               pflKinds.addCategories(data);
+       }
+
+       @Override
+       public void applyFilters(FilterDto filterDto) {
+               if (getActivity() != null) {
+                       Intent intent = new Intent();
+                       intent.putExtra(RESULT_FILTERS_KEY, Parcels.wrap(filterDto));
+
+                       getActivity().setResult(Activity.RESULT_OK, intent);
+                       getActivity().finish();
+               }
+       }
+
+       @Override
+       public void showEpochsError() {
+               Toast.makeText(getContext(), R.string.load_epochs_failed, Toast.LENGTH_SHORT).show();
+               pflEpochs.showRetryButton(new FiltersProgressFlowLayout.FiltersProgressFlowLayoutRetryListener() {
+                       @Override
+                       public void onRetryClicked() {
+                               getPresenter().loadEpochs();
+                       }
+               });
+       }
+
+       @Override
+       public void showGenresError() {
+               Toast.makeText(getContext(), R.string.load_genres_failed, Toast.LENGTH_SHORT).show();
+               pflGenres.showRetryButton(new FiltersProgressFlowLayout.FiltersProgressFlowLayoutRetryListener() {
+                       @Override
+                       public void onRetryClicked() {
+                               getPresenter().loadGenres();
+                       }
+               });
+       }
+
+       @Override
+       public void showKindsError() {
+               Toast.makeText(getContext(), R.string.load_kinds_failed, Toast.LENGTH_SHORT).show();
+               pflKinds.showRetryButton(new FiltersProgressFlowLayout.FiltersProgressFlowLayoutRetryListener() {
+                       @Override
+                       public void onRetryClicked() {
+                               getPresenter().loadKinds();
+                       }
+               });
+       }
+}