package com.boardgamegeek.ui.dialog; import android.app.Dialog; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; import android.support.v7.widget.AppCompatCheckBox; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ScrollView; import com.boardgamegeek.R; import com.boardgamegeek.filterer.CollectionFiltererFactory; import com.boardgamegeek.util.StringUtils; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.BindViews; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.Unbinder; import hugo.weaving.DebugLog; import timber.log.Timber; public class CollectionFilterDialogFragment extends DialogFragment { public interface Listener { void onFilterSelected(int filterType); } private ViewGroup root; private Listener listener; private final List<Integer> enabledFilterTypes = new ArrayList<>(); private Unbinder unbinder; @BindView(R.id.scroll_container) ScrollView scrollContainer; @BindViews({ R.id.collection_name, R.id.collection_status, R.id.subtype, R.id.geek_ranking, R.id.geek_rating, R.id.average_rating, R.id.my_rating, R.id.number_of_players, R.id.play_count, R.id.year_published, R.id.play_time, R.id.suggested_age, R.id.average_weight }) List<AppCompatCheckBox> checkBoxes; @DebugLog public CollectionFilterDialogFragment() { } @DebugLog public static CollectionFilterDialogFragment newInstance(@Nullable ViewGroup root, @Nullable Listener listener) { final CollectionFilterDialogFragment fragment = new CollectionFilterDialogFragment(); fragment.initialize(root, listener); return fragment; } @DebugLog private void initialize(@Nullable ViewGroup root, @Nullable Listener listener) { this.root = root; this.listener = listener; } @DebugLog @Override @NonNull public Dialog onCreateDialog(Bundle savedInstanceState) { LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); View rootView = layoutInflater.inflate(R.layout.dialog_collection_filter, root, false); unbinder = ButterKnife.bind(this, rootView); setEnabledFilterTypes(); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.Theme_bgglight_Dialog_Alert).setView(rootView); builder.setTitle(R.string.title_filter); return builder.create(); } @Override public void onDestroyView() { super.onDestroyView(); if (unbinder != null) unbinder.unbind(); } @DebugLog public void addEnabledFilter(int type) { enabledFilterTypes.add(type); setEnabledFilterTypes(); } @DebugLog private void setEnabledFilterTypes() { if (checkBoxes == null) { Timber.d("Text views not initialized"); return; } for (Integer filterType : enabledFilterTypes) { for (AppCompatCheckBox textView : checkBoxes) { int type = getTypeFromView(textView); if (filterType == type) { textView.setChecked(true); break; } } } } @DebugLog private int getTypeFromView(View view) { return StringUtils.parseInt(view.getTag().toString(), CollectionFiltererFactory.TYPE_UNKNOWN); } @DebugLog @OnClick({ R.id.collection_name, R.id.collection_status, R.id.subtype, R.id.geek_ranking, R.id.geek_rating, R.id.average_rating, R.id.my_rating, R.id.number_of_players, R.id.play_count, R.id.year_published, R.id.play_time, R.id.suggested_age, R.id.average_weight }) void onClick(View view) { int type = StringUtils.parseInt(view.getTag().toString(), -1); if (type != -1) { Timber.d("Filter by %s", type); if (listener != null) { listener.onFilterSelected(type); } } else { Timber.w("Invalid filter type selected: %s", type); } dismiss(); } }