This commit is contained in:
PavelRatushny 2017-12-12 12:32:34 +02:00
parent 62bbf68ed4
commit abd756ba8e
2 changed files with 81 additions and 60 deletions

View file

@ -681,18 +681,70 @@ public class MenuBuilder {
return new CollapsableView(textView, collapsed); return new CollapsableView(textView, collapsed);
} }
protected CollapsableView getCollapsableWikiView(Context context, boolean collapsed) { protected CollapsableView getCollapsableFavouritesView(Context context, boolean collapsed, List<FavouritePoint> points, FavouritePoint selectedPoint) {
return getCollapsableItemsView(context, collapsed, nearestWiki, null); LinearLayout view = (LinearLayout) buildCollapsableContentView(context, collapsed);
for (final FavouritePoint point : points) {
boolean selected = selectedPoint != null && selectedPoint.equals(point);
TextViewEx button = buildButtonInCollapsableView(context, selected);
String name = point.getName();
button.setText(name);
button.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
button.setSingleLine(true);
button.setEllipsize(TextUtils.TruncateAt.END);
if (!selected) {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LatLon latLon = new LatLon(point.getLatitude(), point.getLongitude());
PointDescription pointDescription = new PointDescription(PointDescription.POINT_TYPE_FAVORITE, point.getName());
mapActivity.getContextMenu().show(latLon, pointDescription, point);
}
});
}
view.addView(button);
}
return new CollapsableView(view, collapsed);
} }
protected CollapsableView getCollapsableItemsView(Context context, boolean collapsed, final List items, Object selectedObject) { protected CollapsableView getCollapsableWikiView(Context context, boolean collapsed) {
LinearLayout view = (LinearLayout) buildCollapsableContentView(context, collapsed);
for (final Amenity wiki : nearestWiki) {
TextViewEx button = buildButtonInCollapsableView(context, false);
String name = wiki.getName(preferredMapAppLang, transliterateNames);
button.setText(name);
button.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
button.setSingleLine(true);
button.setEllipsize(TextUtils.TruncateAt.END);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LatLon latLon = new LatLon(wiki.getLocation().getLatitude(), wiki.getLocation().getLongitude());
PointDescription pointDescription = mapActivity.getMapLayers().getPoiMapLayer().getObjectName(wiki);
mapActivity.getContextMenu().show(latLon, pointDescription, wiki);
}
});
view.addView(button);
}
return new CollapsableView(view, collapsed);
}
protected LinearLayout buildCollapsableContentView(Context context, boolean collapsed) {
final LinearLayout view = new LinearLayout(context); final LinearLayout view = new LinearLayout(context);
view.setOrientation(LinearLayout.VERTICAL); view.setOrientation(LinearLayout.VERTICAL);
view.setVisibility(collapsed ? View.GONE : View.VISIBLE); view.setVisibility(collapsed ? View.GONE : View.VISIBLE);
LinearLayout.LayoutParams llParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); LinearLayout.LayoutParams llParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
llParams.setMargins(dpToPx(64f), 0, dpToPx(12f), 0); llParams.setMargins(dpToPx(64f), 0, dpToPx(12f), 0);
view.setLayoutParams(llParams); view.setLayoutParams(llParams);
return view;
}
protected TextViewEx buildButtonInCollapsableView(Context context, boolean selected) {
ColorStateList buttonColorStateList = new ColorStateList( ColorStateList buttonColorStateList = new ColorStateList(
new int[][] { new int[][] {
new int[]{android.R.attr.state_pressed}, new int[]{android.R.attr.state_pressed},
@ -703,60 +755,24 @@ public class MenuBuilder {
context.getResources().getColor(light ? R.color.ctx_menu_controller_button_text_color_light_n : R.color.ctx_menu_controller_button_text_color_dark_n) context.getResources().getColor(light ? R.color.ctx_menu_controller_button_text_color_light_n : R.color.ctx_menu_controller_button_text_color_dark_n)
} }
); );
for (final Object item : items) {
TextViewEx button = new TextViewEx(new ContextThemeWrapper(view.getContext(), light ? R.style.OsmandLightTheme : R.style.OsmandDarkTheme));
LinearLayout.LayoutParams llWikiButtonParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) context.getResources().getDimension(R.dimen.context_menu_controller_height));
llWikiButtonParams.setMargins(0, 0, 0, dpToPx(8f));
button.setLayoutParams(llWikiButtonParams);
button.setTypeface(FontCache.getRobotoMedium(context));
boolean selected = selectedObject != null && selectedObject.equals(item); TextViewEx button = new TextViewEx(new ContextThemeWrapper(context, light ? R.style.OsmandLightTheme : R.style.OsmandDarkTheme));
int bg; LinearLayout.LayoutParams llWikiButtonParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) context.getResources().getDimension(R.dimen.context_menu_controller_height));
if (selected) { llWikiButtonParams.setMargins(0, 0, 0, dpToPx(8f));
bg = light ? R.drawable.context_menu_controller_bg_light_selected: R.drawable.context_menu_controller_bg_dark_selected; button.setLayoutParams(llWikiButtonParams);
} else { button.setTypeface(FontCache.getRobotoMedium(context));
bg = light ? R.drawable.context_menu_controller_bg_light : R.drawable.context_menu_controller_bg_dark; int bg;
} if (selected) {
button.setBackgroundResource(bg); bg = light ? R.drawable.context_menu_controller_bg_light_selected: R.drawable.context_menu_controller_bg_dark_selected;
int paddingSides = (int) context.getResources().getDimension(R.dimen.context_menu_button_padding_x); } else {
button.setPadding(paddingSides, 0, paddingSides, 0); bg = light ? R.drawable.context_menu_controller_bg_light : R.drawable.context_menu_controller_bg_dark;
button.setTextColor(buttonColorStateList);
String name = "";
if (item instanceof Amenity) {
name = ((Amenity) item).getName(preferredMapAppLang, transliterateNames);
} else if (item instanceof FavouritePoint) {
name = ((FavouritePoint) item).getName();
}
button.setText(name);
button.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
button.setSingleLine(true);
button.setEllipsize(TextUtils.TruncateAt.END);
if (!selected) {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LatLon latLon = null;
PointDescription pointDescription = null;
if (item instanceof Amenity) {
Amenity amenity = (Amenity) item;
latLon = new LatLon(amenity.getLocation().getLatitude(), amenity.getLocation().getLongitude());
pointDescription = mapActivity.getMapLayers().getPoiMapLayer().getObjectName(amenity);
} else if (item instanceof FavouritePoint) {
FavouritePoint fav = (FavouritePoint) item;
latLon = new LatLon(fav.getLatitude(), fav.getLongitude());
pointDescription = new PointDescription(PointDescription.POINT_TYPE_FAVORITE, fav.getName());
}
if (latLon != null && pointDescription != null) {
mapActivity.getContextMenu().show(latLon, pointDescription, item);
}
}
});
}
view.addView(button);
} }
button.setBackgroundResource(bg);
int paddingSides = (int) context.getResources().getDimension(R.dimen.context_menu_button_padding_x);
button.setPadding(paddingSides, 0, paddingSides, 0);
button.setTextColor(buttonColorStateList);
return new CollapsableView(view, collapsed); return button;
} }
protected boolean processNearstWiki() { protected boolean processNearstWiki() {

View file

@ -1,12 +1,17 @@
package net.osmand.plus.mapcontextmenu.builders; package net.osmand.plus.mapcontextmenu.builders;
import android.graphics.Color; import android.graphics.Color;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View; import android.view.View;
import android.widget.LinearLayout;
import net.osmand.ResultMatcher; import net.osmand.ResultMatcher;
import net.osmand.binary.BinaryMapIndexReader; import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.data.Amenity; import net.osmand.data.Amenity;
import net.osmand.data.FavouritePoint; import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect; import net.osmand.data.QuadRect;
import net.osmand.data.TransportStop; import net.osmand.data.TransportStop;
import net.osmand.osm.PoiCategory; import net.osmand.osm.PoiCategory;
@ -14,7 +19,7 @@ import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.mapcontextmenu.MenuBuilder; import net.osmand.plus.mapcontextmenu.MenuBuilder;
import net.osmand.util.Algorithms; import net.osmand.plus.widgets.TextViewEx;
import net.osmand.util.MapUtils; import net.osmand.util.MapUtils;
import java.util.List; import java.util.List;
@ -62,19 +67,19 @@ public class FavouritePointMenuBuilder extends MenuBuilder {
builder.setLight(light); builder.setLight(light);
builder.buildInternal(view); builder.buildInternal(view);
} }
buildGroupFavsView(view); buildGroupFavouritesView(view);
} }
private void buildGroupFavsView(View view) { private void buildGroupFavouritesView(View view) {
FavoriteGroup favoriteGroup = app.getFavorites().getGroup(fav); FavoriteGroup favoriteGroup = app.getFavorites().getGroup(fav);
List<FavouritePoint> groupFavs = favoriteGroup.points; List<FavouritePoint> groupFavourites = favoriteGroup.points;
if (groupFavs.size() > 0) { if (groupFavourites.size() > 0) {
int color = favoriteGroup.color == 0 || favoriteGroup.color == Color.BLACK ? view.getResources().getColor(R.color.color_favorite) : favoriteGroup.color; int color = favoriteGroup.color == 0 || favoriteGroup.color == Color.BLACK ? view.getResources().getColor(R.color.color_favorite) : favoriteGroup.color;
int disabledColor = light ? R.color.secondary_text_light : R.color.secondary_text_dark; int disabledColor = light ? R.color.secondary_text_light : R.color.secondary_text_dark;
color = favoriteGroup.visible ? (color | 0xff000000) : view.getResources().getColor(disabledColor); color = favoriteGroup.visible ? (color | 0xff000000) : view.getResources().getColor(disabledColor);
String name = view.getContext().getString(R.string.context_menu_points_of_group); String name = view.getContext().getString(R.string.context_menu_points_of_group);
buildRow(view, app.getIconsCache().getPaintedIcon(R.drawable.ic_action_folder, color), name, 0, buildRow(view, app.getIconsCache().getPaintedIcon(R.drawable.ic_action_folder, color), name, 0,
true, getCollapsableItemsView(view.getContext(), true, groupFavs, fav), true, getCollapsableFavouritesView(view.getContext(), true, groupFavourites, fav),
false, 0, false, null); false, 0, false, null);
} }
} }