package com.boardgamegeek.ui.dialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog.Builder; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.Spinner; import com.boardgamegeek.R; 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; public class CollectionStatusDialogFragment extends DialogFragment { public interface CollectionStatusDialogListener { void onSelectStatuses(List<String> selectedStatuses, int wishlistPriority); } @StringRes private int titleResId = R.string.menu_collection_status; private ViewGroup root; private Unbinder unbinder; @BindViews({ R.id.own, R.id.previously_owned, R.id.for_trade, R.id.want_to_play, R.id.want, R.id.want_to_buy, R.id.preordered, R.id.wishlist }) List<CheckBox> statusViews; @BindView(R.id.wishlist) CheckBox wishlistView; @BindView(R.id.wishlist_priority) Spinner wishlistPriorityView; private CollectionStatusDialogListener listener; @Nullable private List<String> selectedStatuses; private int wishlistPriority; @NonNull public static CollectionStatusDialogFragment newInstance(@Nullable ViewGroup root, CollectionStatusDialogListener listener) { CollectionStatusDialogFragment fragment = new CollectionStatusDialogFragment(); fragment.root = root; fragment.listener = listener; return fragment; } public void setTitle(int titleResId) { this.titleResId = titleResId; } @DebugLog public void setSelectedStatuses(@Nullable List<String> selectedStatuses) { this.selectedStatuses = selectedStatuses; } @DebugLog public void setWishlistPriority(int wishlistPriority) { this.wishlistPriority = wishlistPriority; } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); View rootView = layoutInflater.inflate(R.layout.dialog_collection_status, root, false); unbinder = ButterKnife.bind(this, rootView); initUi(); AlertDialog.Builder builder = new Builder(getContext(), R.style.Theme_bgglight_Dialog_Alert) .setTitle(titleResId) .setView(rootView) .setPositiveButton(R.string.ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (listener != null) { List<String> statuses = new ArrayList<>(); int wishlistPriority = 0; for (CheckBox checkBox : statusViews) { if (checkBox.isChecked()) { String status = (String) checkBox.getTag(); statuses.add(status); } } if (wishlistView.isChecked()) { statuses.add("wishlist"); wishlistPriority = wishlistPriorityView.getSelectedItemPosition() + 1; } listener.onSelectStatuses(statuses, wishlistPriority); } } }) .setNegativeButton(R.string.cancel, null); return builder.create(); } @Override public void onDestroyView() { super.onDestroyView(); if (unbinder != null) unbinder.unbind(); } @OnClick(R.id.wishlist) public void onWishlistClick() { wishlistPriorityView.setEnabled(wishlistView.isChecked()); } private void initUi() { for (CheckBox checkBox : statusViews) { String status = (String) checkBox.getTag(); checkBox.setChecked(selectedStatuses != null && selectedStatuses.contains(status)); } wishlistPriorityView.setAdapter(new WishlistPriorityAdapter(getContext())); wishlistPriorityView.setSelection(wishlistPriority - 1); wishlistPriorityView.setEnabled(wishlistView.isChecked()); } private static class WishlistPriorityAdapter extends ArrayAdapter<String> { public WishlistPriorityAdapter(Context context) { super(context, R.layout.spinner_textview, context.getResources().getStringArray(R.array.wishlist_priority_finite)); setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); } } }