package net.osmand.plus.mapcontextmenu.editors; 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.View; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import net.osmand.plus.FavouritesDbHelper; import net.osmand.plus.FavouritesDbHelper.FavoriteGroup; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.helpers.ColorDialogs; import net.osmand.util.Algorithms; import gnu.trove.list.array.TIntArrayList; public class EditCategoryDialogFragment extends DialogFragment { public static final String TAG = "EditCategoryDialogFragment"; private static final String KEY_CTX_EDIT_CAT_EDITOR_TAG = "key_ctx_edit_cat_editor_tag"; private static final String KEY_CTX_EDIT_CAT_NEW = "key_ctx_edit_cat_new"; private static final String KEY_CTX_EDIT_CAT_NAME = "key_ctx_edit_cat_name"; private static final String KEY_CTX_EDIT_CAT_COLOR = "key_ctx_edit_cat_color"; private String editorTag; private boolean isNew = true; private String name = ""; private int color; private EditText nameEdit; private Spinner colorSpinner; FavouritesDbHelper helper; private SelectCategoryDialogFragment.CategorySelectionListener selectionListener; @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { helper = ((OsmandApplication) getActivity().getApplication()).getFavorites(); color = ColorDialogs.pallette[0]; if (savedInstanceState != null) { restoreState(savedInstanceState); } else if (getArguments() != null) { restoreState(getArguments()); } AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.favorite_category_add_new_title); final View v = getActivity().getLayoutInflater().inflate(R.layout.favorite_category_edit_dialog, null, false); nameEdit = (EditText)v.findViewById(R.id.edit_name); nameEdit.setText(name); colorSpinner = (Spinner)v.findViewById(R.id.edit_color); final TIntArrayList colors = new TIntArrayList(); final int intColor = color; ColorDialogs.setupColorSpinnerEx(getActivity(), intColor, colorSpinner, colors, new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { color = colors.get(position); colorSpinner.invalidate(); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); builder.setView(v); builder.setPositiveButton(R.string.shared_string_save, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.setNegativeButton(R.string.shared_string_cancel, null); return builder.create(); } public void setSelectionListener(SelectCategoryDialogFragment.CategorySelectionListener selectionListener) { this.selectionListener = selectionListener; } @Override public void onStart() { super.onStart(); final AlertDialog d = (AlertDialog)getDialog(); if(d != null) { Button positiveButton = d.getButton(Dialog.BUTTON_POSITIVE); positiveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { name = nameEdit.getText().toString().trim(); if (!helper.groupExists(name)) { helper.addEmptyCategory(name, color); PointEditor editor = ((MapActivity) getActivity()).getContextMenu().getPointEditor(editorTag); if (editor != null) { editor.setCategory(name); } if (selectionListener != null){ selectionListener.onCategorySelected(name, color); } d.dismiss(); } else { AlertDialog.Builder b = new AlertDialog.Builder(getActivity()); b.setMessage(getString(R.string.favorite_category_dublicate_message)); b.setNegativeButton(R.string.shared_string_ok, null); b.show(); } } }); } } @Override public void onSaveInstanceState(Bundle outState) { saveState(outState); super.onSaveInstanceState(outState); } public static EditCategoryDialogFragment createInstance(String editorTag) { EditCategoryDialogFragment fragment = new EditCategoryDialogFragment(); Bundle bundle = new Bundle(); bundle.putString(KEY_CTX_EDIT_CAT_EDITOR_TAG, editorTag); fragment.setArguments(bundle); return fragment; } public static EditCategoryDialogFragment createInstance(String editorTag, FavoriteGroup group) { EditCategoryDialogFragment fragment = new EditCategoryDialogFragment(); Bundle bundle = new Bundle(); bundle.putString(KEY_CTX_EDIT_CAT_EDITOR_TAG, editorTag); bundle.putString(KEY_CTX_EDIT_CAT_NEW, Boolean.valueOf(false).toString()); bundle.putString(KEY_CTX_EDIT_CAT_NAME, group.name); bundle.putString(KEY_CTX_EDIT_CAT_COLOR, "" + group.color); fragment.setArguments(bundle); return fragment; } public void saveState(Bundle bundle) { bundle.putString(KEY_CTX_EDIT_CAT_EDITOR_TAG, editorTag); bundle.putString(KEY_CTX_EDIT_CAT_NEW, Boolean.valueOf(isNew).toString()); bundle.putString(KEY_CTX_EDIT_CAT_NAME, nameEdit.getText().toString().trim()); bundle.putString(KEY_CTX_EDIT_CAT_COLOR, "" + color); } public void restoreState(Bundle bundle) { editorTag = bundle.getString(KEY_CTX_EDIT_CAT_EDITOR_TAG); String isNewStr = bundle.getString(KEY_CTX_EDIT_CAT_NEW); if (isNewStr != null) { isNew = Boolean.valueOf(isNewStr); } name = bundle.getString(KEY_CTX_EDIT_CAT_NAME); if (name == null) { name = ""; } String colorStr = bundle.getString(KEY_CTX_EDIT_CAT_COLOR); if (!Algorithms.isEmpty(colorStr)) { color = Integer.parseInt(colorStr); } } }