package net.osmand.plus.dashboard.tools; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; import net.osmand.PlatformUtil; import net.osmand.plus.R; public class NumberPickerDialogFragment extends DialogFragment { public static final String TAG = "NumberPickerDialogFragment"; private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(NumberPickerDialogFragment.class); private static final String NUMBER_TAG = "number_tag"; private static final String HEADER_TEXT = "header_text"; private static final String SUBHEADER_TEXT = "subheader_text"; private static final String NUMBER_OF_ITEMS = "number_of_items"; private static final String CURRENT_NUMBER = "current_number"; @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { if (!(getParentFragment() instanceof CanAcceptNumber)) { throw new RuntimeException("Parent fragment must implement CanAcceptNumber"); } Bundle args = getArguments(); final String numberTag = args.getString(NUMBER_TAG); String headerText = args.getString(HEADER_TEXT); String subHeaderText = args.getString(SUBHEADER_TEXT); int numberOfItems = args.getInt(NUMBER_OF_ITEMS); int currentNumber = args.getInt(CURRENT_NUMBER); String[] items = new String[numberOfItems]; for (int i = 0; i < numberOfItems; i++) { items[i] = String.valueOf(i + 1); } AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setSingleChoiceItems(items, Math.max(0, currentNumber - 1), null) .setPositiveButton(R.string.shared_string_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { final int userChoice = ((AlertDialog) dialog).getListView().getCheckedItemPosition() + 1; ((CanAcceptNumber) getParentFragment()).acceptNumber(numberTag, userChoice); } }) .setNegativeButton(R.string.shared_string_cancel, null); if (subHeaderText != null) { View titleView = LayoutInflater.from(getActivity()) .inflate(R.layout.number_picker_dialog_title, null); TextView titleTextView = (TextView) titleView.findViewById(R.id.titleTextView); titleTextView.setText(headerText); TextView subtitleTextView = (TextView) titleView.findViewById(R.id.subtitleTextView); subtitleTextView.setText(subHeaderText); builder.setCustomTitle(titleView); } else { builder.setTitle(headerText); } return builder.create(); } public static NumberPickerDialogFragment createInstance(String header, String subheader, String tag, int currentRow, int maxNumber) { Bundle args = new Bundle(); args.putString(HEADER_TEXT, header); args.putString(SUBHEADER_TEXT, subheader); args.putString(NUMBER_TAG, tag); args.putInt(CURRENT_NUMBER, currentRow); args.putInt(NUMBER_OF_ITEMS, maxNumber); NumberPickerDialogFragment fragment = new NumberPickerDialogFragment(); fragment.setArguments(args); return fragment; } public interface CanAcceptNumber { void acceptNumber(String tag, int number); } }