package net.osmand.plus.activities; import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v7.app.AlertDialog; import android.support.v7.widget.ListPopupWindow; import android.support.v7.widget.SwitchCompat; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import net.osmand.AndroidUtils; import net.osmand.data.FavouritePoint; import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.plus.FavouritesDbHelper; import net.osmand.plus.FavouritesDbHelper.FavoriteGroup; import net.osmand.plus.IconsCache; import net.osmand.plus.MapMarkersHelper; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.base.BottomSheetDialogFragment; import net.osmand.plus.helpers.ColorDialogs; import net.osmand.util.Algorithms; import java.util.ArrayList; import java.util.List; public class EditFavoriteGroupDialogFragment extends BottomSheetDialogFragment { public static final String TAG = "EditFavoriteGroupDialogFragment"; private static final String GROUP_NAME_KEY = "group_name_key"; private OsmandApplication app; private FavoriteGroup group; private FavouritesDbHelper helper; @Override public void onStart() { super.onStart(); final Window window = getDialog().getWindow(); WindowManager.LayoutParams params = window.getAttributes(); params.height = ViewGroup.LayoutParams.WRAP_CONTENT; params.gravity = Gravity.BOTTOM; params.width = ViewGroup.LayoutParams.MATCH_PARENT; window.setAttributes(params); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final Activity activity = getActivity(); app = (OsmandApplication) activity.getApplicationContext(); helper = app.getFavorites(); Bundle args = null; if (savedInstanceState != null) { args = savedInstanceState; } else if (getArguments() != null) { args = getArguments(); } if (args != null) { String groupName = args.getString(GROUP_NAME_KEY); if (groupName != null) { group = helper.getGroup(groupName); } } final View view = inflater.inflate(R.layout.edit_fav_fragment, container, false); if (group == null) { return view; } IconsCache ic = app.getIconsCache(); final TextView title = (TextView) view.findViewById(R.id.title); title.setText(Algorithms.isEmpty(group.name) ? app.getString(R.string.shared_string_favorites) : group.name); View editNameView = view.findViewById(R.id.edit_name_view); ((ImageView) view.findViewById(R.id.edit_name_icon)) .setImageDrawable(ic.getThemedIcon(R.drawable.ic_action_edit_dark)); editNameView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder b = new AlertDialog.Builder(activity); b.setTitle(R.string.favorite_group_name); final EditText nameEditText = new EditText(activity); nameEditText.setText(group.name); int leftPadding = AndroidUtils.dpToPx(activity, 24f); int topPadding = AndroidUtils.dpToPx(activity, 4f); b.setView(nameEditText, leftPadding, topPadding, leftPadding, topPadding); b.setNegativeButton(R.string.shared_string_cancel, null); b.setPositiveButton(R.string.shared_string_save, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String name = nameEditText.getText().toString(); boolean nameChanged = !Algorithms.objectEquals(group.name, name); if (nameChanged) { getMyApplication().getFavorites() .editFavouriteGroup(group, name, group.color, group.visible); updateParentFragment(); } dismiss(); } }); b.show(); } }); final View changeColorView = view.findViewById(R.id.change_color_view); ((ImageView) view.findViewById(R.id.change_color_icon)) .setImageDrawable(ic.getThemedIcon(R.drawable.ic_action_appearance)); updateColorView(changeColorView); changeColorView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final ListPopupWindow popup = new ListPopupWindow(getActivity()); popup.setAnchorView(changeColorView); popup.setContentWidth(AndroidUtils.dpToPx(app, 200f)); popup.setModal(true); popup.setDropDownGravity(Gravity.RIGHT | Gravity.TOP); popup.setVerticalOffset(AndroidUtils.dpToPx(app, -48f)); popup.setHorizontalOffset(AndroidUtils.dpToPx(app, -6f)); final FavoriteColorAdapter colorAdapter = new FavoriteColorAdapter(getActivity()); popup.setAdapter(colorAdapter); popup.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Integer color = colorAdapter.getItem(position); if (color != null) { if (color != group.color) { getMyApplication().getFavorites() .editFavouriteGroup(group, group.name, color, group.visible); updateParentFragment(); } } popup.dismiss(); dismiss(); } }); popup.show(); } }); View showOnMapView = view.findViewById(R.id.show_on_map_view); ((ImageView) view.findViewById(R.id.show_on_map_icon)) .setImageDrawable(ic.getThemedIcon(R.drawable.ic_map)); final SwitchCompat checkbox = (SwitchCompat) view.findViewById(R.id.show_on_map_switch); checkbox.setChecked(group.visible); showOnMapView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean visible = !group.visible; checkbox.setChecked(visible); getMyApplication().getFavorites() .editFavouriteGroup(group, group.name, group.color, visible); updateParentFragment(); dismiss(); } }); View addToMarkersView = view.findViewById(R.id.add_to_markers_view); if (app.getSettings().USE_MAP_MARKERS.get() && group.points.size() > 0) { ((ImageView) view.findViewById(R.id.add_to_markers_icon)) .setImageDrawable(ic.getThemedIcon(R.drawable.ic_action_flag_dark)); addToMarkersView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MapMarkersHelper markersHelper = getMyApplication().getMapMarkersHelper(); List<LatLon> points = new ArrayList<>(group.points.size()); List<PointDescription> names = new ArrayList<>(group.points.size()); for (FavouritePoint fp : group.points) { points.add(new LatLon(fp.getLatitude(), fp.getLongitude())); names.add(new PointDescription(PointDescription.POINT_TYPE_MAP_MARKER, fp.getName())); } markersHelper.addMapMarkers(points, names); dismiss(); MapActivity.launchMapActivityMoveToTop(getActivity()); } }); } else { addToMarkersView.setVisibility(View.GONE); } View shareView = view.findViewById(R.id.share_view); if (group.points.size() > 0) { ((ImageView) view.findViewById(R.id.share_icon)) .setImageDrawable(ic.getThemedIcon(R.drawable.ic_action_gshare_dark)); shareView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FavoritesTreeFragment fragment = getFavoritesTreeFragment(); if (fragment != null) { fragment.shareFavorites(group); } dismiss(); } }); } else { shareView.setVisibility(View.GONE); } if (group.points.size() == 0) { view.findViewById(R.id.divider).setVisibility(View.GONE); } return view; } @Override public void onResume() { super.onResume(); if (group == null) { dismiss(); } } private FavoritesTreeFragment getFavoritesTreeFragment() { Fragment fragment = getParentFragment(); if (fragment instanceof FavoritesTreeFragment) { return (FavoritesTreeFragment) fragment; } return null; } private void updateParentFragment() { FavoritesTreeFragment fragment = getFavoritesTreeFragment(); if (fragment != null) { fragment.reloadData(); } } private void updateColorView(View colorView) { ImageView colorImageView = (ImageView) colorView.findViewById(R.id.colorImage); int color = group.color == 0 ? getResources().getColor(R.color.color_favorite) : group.color; if (color == 0) { colorImageView.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_circle)); } else { colorImageView.setImageDrawable(app.getIconsCache().getPaintedIcon(R.drawable.ic_action_circle, color)); } } public static void showInstance(FragmentManager fragmentManager, String groupName) { EditFavoriteGroupDialogFragment f = new EditFavoriteGroupDialogFragment(); Bundle args = new Bundle(); args.putString(GROUP_NAME_KEY, groupName); f.setArguments(args); f.show(fragmentManager, EditFavoriteGroupDialogFragment.TAG); } public static class FavoriteColorAdapter extends ArrayAdapter<Integer> { private OsmandApplication app; public FavoriteColorAdapter(Context context) { super(context, R.layout.rendering_prop_menu_item); this.app = (OsmandApplication) getContext().getApplicationContext(); init(); } public void init() { for (int color : ColorDialogs.pallette) { add(color); } } @NonNull @Override public View getView(int position, View convertView, @NonNull ViewGroup parent) { Integer color = getItem(position); View v = convertView; if (v == null) { v = LayoutInflater.from(getContext()).inflate(R.layout.rendering_prop_menu_item, null); } if (color != null) { TextView textView = (TextView) v.findViewById(R.id.text1); textView.setText(app.getString(ColorDialogs.paletteColors[position])); textView.setCompoundDrawablesWithIntrinsicBounds(null, null, app.getIconsCache().getPaintedIcon(R.drawable.ic_action_circle, color), null); textView.setCompoundDrawablePadding(AndroidUtils.dpToPx(getContext(), 10f)); v.findViewById(R.id.divider).setVisibility(View.GONE); } return v; } } }