quick actions some bug fixes
This commit is contained in:
parent
43dec2b43b
commit
dd888e73b0
3 changed files with 246 additions and 73 deletions
|
@ -1,7 +1,6 @@
|
||||||
package net.osmand.plus.quickaction;
|
package net.osmand.plus.quickaction;
|
||||||
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
|
@ -21,8 +20,6 @@ import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import net.osmand.data.FavouritePoint;
|
|
||||||
import net.osmand.plus.FavouritesDbHelper;
|
|
||||||
import net.osmand.plus.IconsCache;
|
import net.osmand.plus.IconsCache;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
@ -191,7 +188,7 @@ public class CreateEditActionDialog extends DialogFragment {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
name.setEnabled(!action.autogeneratedTitle);
|
name.setEnabled(action.isActionEditable());
|
||||||
action.setAutoGeneratedTitle(name);
|
action.setAutoGeneratedTitle(name);
|
||||||
|
|
||||||
if (savedInstanceState == null) name.setText(action.getName(getContext()));
|
if (savedInstanceState == null) name.setText(action.getName(getContext()));
|
||||||
|
|
|
@ -2,26 +2,17 @@ package net.osmand.plus.quickaction;
|
||||||
|
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
import android.os.Parcel;
|
|
||||||
import android.os.Parcelable;
|
|
||||||
import android.support.annotation.DrawableRes;
|
import android.support.annotation.DrawableRes;
|
||||||
import android.support.annotation.StringRes;
|
import android.support.annotation.StringRes;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.annotations.Expose;
|
|
||||||
import com.google.gson.reflect.TypeToken;
|
|
||||||
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class QuickAction {
|
public class QuickAction {
|
||||||
|
|
||||||
|
@ -33,10 +24,9 @@ public class QuickAction {
|
||||||
protected int type;
|
protected int type;
|
||||||
protected long id;
|
protected long id;
|
||||||
|
|
||||||
private @StringRes int nameRes;
|
private @StringRes int nameRes;
|
||||||
private @DrawableRes int iconRes;
|
private @DrawableRes int iconRes;
|
||||||
|
private boolean isActionEditable;
|
||||||
protected boolean autogeneratedTitle;
|
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
private HashMap<String, String> params;
|
private HashMap<String, String> params;
|
||||||
|
@ -56,16 +46,18 @@ public class QuickAction {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.nameRes = QuickActionFactory.getActionName(type);
|
this.nameRes = QuickActionFactory.getActionName(type);
|
||||||
this.iconRes = QuickActionFactory.getActionIcon(type);
|
this.iconRes = QuickActionFactory.getActionIcon(type);
|
||||||
|
this.isActionEditable = QuickActionFactory.isActionEditable(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public QuickAction(QuickAction quickAction) {
|
public QuickAction(QuickAction quickAction) {
|
||||||
this.type = quickAction.type;
|
this.type = quickAction.type;
|
||||||
this.id = quickAction.id;
|
this.id = quickAction.id;
|
||||||
this.nameRes = quickAction.nameRes;
|
|
||||||
this.iconRes = quickAction.iconRes;
|
|
||||||
this.name = quickAction.name;
|
this.name = quickAction.name;
|
||||||
this.params = quickAction.params;
|
this.params = quickAction.params;
|
||||||
this.autogeneratedTitle = quickAction.autogeneratedTitle;
|
|
||||||
|
this.nameRes = QuickActionFactory.getActionName(type);
|
||||||
|
this.iconRes = QuickActionFactory.getActionIcon(type);
|
||||||
|
this.isActionEditable = QuickActionFactory.isActionEditable(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNameRes() {
|
public int getNameRes() {
|
||||||
|
@ -80,6 +72,10 @@ public class QuickAction {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isActionEditable() {
|
||||||
|
return isActionEditable;
|
||||||
|
}
|
||||||
|
|
||||||
public String getName(Context context) {
|
public String getName(Context context) {
|
||||||
return name == null || name.isEmpty() ? nameRes > 0 ? context.getString(nameRes) : "" : name;
|
return name == null || name.isEmpty() ? nameRes > 0 ? context.getString(nameRes) : "" : name;
|
||||||
}
|
}
|
||||||
|
@ -126,14 +122,18 @@ public class QuickAction {
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null) return false;
|
||||||
|
|
||||||
QuickAction action = (QuickAction) o;
|
if (o instanceof QuickAction) {
|
||||||
|
|
||||||
if (type != action.type) return false;
|
QuickAction action = (QuickAction) o;
|
||||||
if (id != action.id) return false;
|
|
||||||
|
|
||||||
return true;
|
if (type != action.type) return false;
|
||||||
|
if (id != action.id) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} else return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.content.DialogInterface;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.support.annotation.DrawableRes;
|
import android.support.annotation.DrawableRes;
|
||||||
import android.support.annotation.StringRes;
|
import android.support.annotation.StringRes;
|
||||||
|
import android.support.v4.util.Pair;
|
||||||
import android.support.v4.view.MotionEventCompat;
|
import android.support.v4.view.MotionEventCompat;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
@ -46,6 +47,7 @@ import net.osmand.plus.FavouritesDbHelper;
|
||||||
import net.osmand.plus.GeocodingLookupService;
|
import net.osmand.plus.GeocodingLookupService;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
|
import net.osmand.plus.OsmandSettings;
|
||||||
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.audionotes.AudioVideoNotesPlugin;
|
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
|
||||||
|
@ -59,6 +61,7 @@ import net.osmand.plus.osmedit.OsmEditingPlugin;
|
||||||
import net.osmand.plus.parkingpoint.ParkingPositionPlugin;
|
import net.osmand.plus.parkingpoint.ParkingPositionPlugin;
|
||||||
import net.osmand.plus.poi.PoiFiltersHelper;
|
import net.osmand.plus.poi.PoiFiltersHelper;
|
||||||
import net.osmand.plus.poi.PoiUIFilter;
|
import net.osmand.plus.poi.PoiUIFilter;
|
||||||
|
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
|
||||||
import net.osmand.plus.render.RendererRegistry;
|
import net.osmand.plus.render.RendererRegistry;
|
||||||
import net.osmand.plus.render.RenderingIcons;
|
import net.osmand.plus.render.RenderingIcons;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
|
@ -146,6 +149,11 @@ public class QuickActionFactory {
|
||||||
quickActions.add(new QuickAction(0, R.string.quick_action_add_configure_map));
|
quickActions.add(new QuickAction(0, R.string.quick_action_add_configure_map));
|
||||||
quickActions.add(new MapStyleAction());
|
quickActions.add(new MapStyleAction());
|
||||||
|
|
||||||
|
if (OsmandPlugin.getEnabledPlugin(OsmandRasterMapsPlugin.class) != null) {
|
||||||
|
|
||||||
|
quickActions.add(new MapSourceAction());
|
||||||
|
}
|
||||||
|
|
||||||
QuickAction favorites = new ShowHideFavoritesAction();
|
QuickAction favorites = new ShowHideFavoritesAction();
|
||||||
|
|
||||||
if (!favorites.hasInstanceInList(active)) {
|
if (!favorites.hasInstanceInList(active)) {
|
||||||
|
@ -211,6 +219,9 @@ public class QuickActionFactory {
|
||||||
case MapStyleAction.TYPE:
|
case MapStyleAction.TYPE:
|
||||||
return new MapStyleAction();
|
return new MapStyleAction();
|
||||||
|
|
||||||
|
case MapSourceAction.TYPE:
|
||||||
|
return new MapSourceAction();
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return new QuickAction();
|
return new QuickAction();
|
||||||
}
|
}
|
||||||
|
@ -262,6 +273,9 @@ public class QuickActionFactory {
|
||||||
case MapStyleAction.TYPE:
|
case MapStyleAction.TYPE:
|
||||||
return new MapStyleAction(quickAction);
|
return new MapStyleAction(quickAction);
|
||||||
|
|
||||||
|
case MapSourceAction.TYPE:
|
||||||
|
return new MapSourceAction(quickAction);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return quickAction;
|
return quickAction;
|
||||||
}
|
}
|
||||||
|
@ -314,7 +328,7 @@ public class QuickActionFactory {
|
||||||
return R.drawable.ic_map;
|
return R.drawable.ic_map;
|
||||||
|
|
||||||
case MapSourceAction.TYPE:
|
case MapSourceAction.TYPE:
|
||||||
return R.drawable.ic_map;
|
return R.drawable.ic_world_globe_dark;
|
||||||
|
|
||||||
case MapOverlayAction.TYPE:
|
case MapOverlayAction.TYPE:
|
||||||
return R.drawable.ic_layer_top_dark;
|
return R.drawable.ic_layer_top_dark;
|
||||||
|
@ -385,6 +399,25 @@ public class QuickActionFactory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isActionEditable(int type) {
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
|
||||||
|
case NewAction.TYPE:
|
||||||
|
case MarkerAction.TYPE:
|
||||||
|
case ShowHideFavoritesAction.TYPE:
|
||||||
|
case ShowHidePoiAction.TYPE:
|
||||||
|
case ParkingAction.TYPE:
|
||||||
|
case TakeAudioNoteAction.TYPE:
|
||||||
|
case TakePhotoNoteAction.TYPE:
|
||||||
|
case TakeVideoNoteAction.TYPE:
|
||||||
|
case NavigationVoiceAction.TYPE:
|
||||||
|
return false;
|
||||||
|
|
||||||
|
default: return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class NewAction extends QuickAction {
|
public static class NewAction extends QuickAction {
|
||||||
|
|
||||||
public static final int TYPE = 1;
|
public static final int TYPE = 1;
|
||||||
|
@ -647,7 +680,6 @@ public class QuickActionFactory {
|
||||||
|
|
||||||
protected ShowHideFavoritesAction() {
|
protected ShowHideFavoritesAction() {
|
||||||
super(TYPE);
|
super(TYPE);
|
||||||
autogeneratedTitle = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ShowHideFavoritesAction(QuickAction quickAction) {
|
public ShowHideFavoritesAction(QuickAction quickAction) {
|
||||||
|
@ -700,7 +732,6 @@ public class QuickActionFactory {
|
||||||
|
|
||||||
protected ShowHidePoiAction() {
|
protected ShowHidePoiAction() {
|
||||||
super(TYPE);
|
super(TYPE);
|
||||||
autogeneratedTitle = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ShowHidePoiAction(QuickAction quickAction) {
|
public ShowHidePoiAction(QuickAction quickAction) {
|
||||||
|
@ -1598,7 +1629,7 @@ public class QuickActionFactory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MapStyleAction extends SwitchableAction {
|
public static class MapStyleAction extends SwitchableAction<String> {
|
||||||
|
|
||||||
public static final int TYPE = 14;
|
public static final int TYPE = 14;
|
||||||
|
|
||||||
|
@ -1649,10 +1680,10 @@ public class QuickActionFactory {
|
||||||
List<String> filtered = new ArrayList<>();
|
List<String> filtered = new ArrayList<>();
|
||||||
boolean enabled = OsmandPlugin.getEnabledPlugin(NauticalMapsPlugin.class) != null;
|
boolean enabled = OsmandPlugin.getEnabledPlugin(NauticalMapsPlugin.class) != null;
|
||||||
|
|
||||||
if (enabled) return loadMapStyles();
|
if (enabled) return loadListFromParams();
|
||||||
else {
|
else {
|
||||||
|
|
||||||
for (String style : loadMapStyles()) {
|
for (String style : loadListFromParams()) {
|
||||||
|
|
||||||
if (!style.equals(RendererRegistry.NAUTICAL_RENDER)){
|
if (!style.equals(RendererRegistry.NAUTICAL_RENDER)){
|
||||||
filtered.add(style);
|
filtered.add(style);
|
||||||
|
@ -1732,9 +1763,40 @@ public class QuickActionFactory {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override protected void saveListToParams(List<String> styles) {
|
||||||
|
getParams().put(getListKey(), TextUtils.join(",", styles));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override protected List<String> loadListFromParams() {
|
||||||
|
|
||||||
|
List<String> styles = new ArrayList<>();
|
||||||
|
|
||||||
|
String filtersId = getParams().get(getListKey());
|
||||||
|
|
||||||
|
if (filtersId != null && !filtersId.trim().isEmpty()) {
|
||||||
|
Collections.addAll(styles, filtersId.split(","));
|
||||||
|
}
|
||||||
|
|
||||||
|
return styles;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getItemName(String item) {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override protected String getTitle(List<String> filters) {
|
||||||
|
|
||||||
|
if (filters.isEmpty()) return "";
|
||||||
|
|
||||||
|
return filters.size() > 1
|
||||||
|
? filters.get(0) + " +" + (filters.size() - 1)
|
||||||
|
: filters.get(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MapOverlayAction extends SwitchableAction {
|
public static class MapOverlayAction extends SwitchableAction<Pair<String, String>> {
|
||||||
|
|
||||||
public static final int TYPE = 15;
|
public static final int TYPE = 15;
|
||||||
|
|
||||||
|
@ -1748,6 +1810,26 @@ public class QuickActionFactory {
|
||||||
super(quickAction);
|
super(quickAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getTitle(List<Pair<String, String>> filters) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void saveListToParams(List<Pair<String, String>> list) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<Pair<String, String>> loadListFromParams() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getItemName(Pair<String, String> item) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(MapActivity activity) {
|
public void execute(MapActivity activity) {
|
||||||
|
|
||||||
|
@ -1785,7 +1867,7 @@ public class QuickActionFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class MapUnderlayAction extends SwitchableAction {
|
public static class MapUnderlayAction extends SwitchableAction<Pair<String, String>> {
|
||||||
|
|
||||||
public static final int TYPE = 16;
|
public static final int TYPE = 16;
|
||||||
|
|
||||||
|
@ -1799,6 +1881,26 @@ public class QuickActionFactory {
|
||||||
super(quickAction);
|
super(quickAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getTitle(List<Pair<String, String>> filters) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void saveListToParams(List<Pair<String, String>> list) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<Pair<String, String>> loadListFromParams() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getItemName(Pair<String, String> item) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(MapActivity activity) {
|
public void execute(MapActivity activity) {
|
||||||
|
|
||||||
|
@ -1835,7 +1937,7 @@ public class QuickActionFactory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MapSourceAction extends SwitchableAction {
|
public static class MapSourceAction extends SwitchableAction<Pair<String, String>> {
|
||||||
|
|
||||||
public static final int TYPE = 17;
|
public static final int TYPE = 17;
|
||||||
|
|
||||||
|
@ -1849,6 +1951,34 @@ public class QuickActionFactory {
|
||||||
super(quickAction);
|
super(quickAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getTitle(List<Pair<String, String>> filters) {
|
||||||
|
|
||||||
|
if (filters.isEmpty()) return "";
|
||||||
|
|
||||||
|
return filters.size() > 1
|
||||||
|
? filters.get(0).second + " +" + (filters.size() - 1)
|
||||||
|
: filters.get(0).second;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void saveListToParams(List<Pair<String, String>> list) {
|
||||||
|
|
||||||
|
getParams().put(getListKey(), new Gson().toJson(list));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<Pair<String, String>> loadListFromParams() {
|
||||||
|
|
||||||
|
String json = getParams().get(getListKey());
|
||||||
|
|
||||||
|
if (json == null || json.isEmpty()) return new ArrayList<>();
|
||||||
|
|
||||||
|
Type listType = new TypeToken<ArrayList<Pair<String, String>>>(){}.getType();
|
||||||
|
|
||||||
|
return new Gson().fromJson(json, listType);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(MapActivity activity) {
|
public void execute(MapActivity activity) {
|
||||||
|
|
||||||
|
@ -1880,12 +2010,76 @@ public class QuickActionFactory {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|
||||||
|
final OsmandSettings settings = activity.getMyApplication().getSettings();
|
||||||
|
final LinkedHashMap<String, String> entriesMap = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
final String layerOsmVector = "LAYER_OSM_VECTOR";
|
||||||
|
|
||||||
|
entriesMap.put(layerOsmVector, activity.getString(R.string.vector_data));
|
||||||
|
entriesMap.putAll(settings.getTileSourceEntries());
|
||||||
|
|
||||||
|
final List<Entry<String, String>> entriesMapList = new ArrayList<>(entriesMap.entrySet());
|
||||||
|
|
||||||
|
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
|
||||||
|
|
||||||
|
String selectedTileSourceKey = settings.MAP_TILE_SOURCES.get();
|
||||||
|
|
||||||
|
int selectedItem = -1;
|
||||||
|
|
||||||
|
if (!settings.MAP_ONLINE_DATA.get()) {
|
||||||
|
|
||||||
|
selectedItem = 0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
Entry<String, String> selectedEntry = null;
|
||||||
|
for (Entry<String, String> entry : entriesMap.entrySet()) {
|
||||||
|
if (entry.getKey().equals(selectedTileSourceKey)) {
|
||||||
|
selectedEntry = entry;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (selectedEntry != null) {
|
||||||
|
selectedItem = 0;
|
||||||
|
entriesMapList.remove(selectedEntry);
|
||||||
|
entriesMapList.add(0, selectedEntry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final String[] items = new String[entriesMapList.size()];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for (Entry<String, String> entry : entriesMapList) {
|
||||||
|
items[i++] = entry.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.setSingleChoiceItems(items, selectedItem, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
|
||||||
|
Pair<String, String> layer = new Pair<String, String>(
|
||||||
|
entriesMapList.get(which).getKey(),
|
||||||
|
entriesMapList.get(which).getValue());
|
||||||
|
|
||||||
|
adapter.addItem(layer, activity);
|
||||||
|
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
builder.setNegativeButton(R.string.shared_string_dismiss, null);
|
||||||
|
builder.show();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getItemName(Pair<String, String> item) {
|
||||||
|
return item.second;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static abstract class SwitchableAction extends QuickAction{
|
protected static abstract class SwitchableAction<T> extends QuickAction{
|
||||||
|
|
||||||
private transient EditText title;
|
private transient EditText title;
|
||||||
|
|
||||||
|
@ -1902,15 +2096,6 @@ public class QuickActionFactory {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getTitle(List<String> filters) {
|
|
||||||
|
|
||||||
if (filters.isEmpty()) return "";
|
|
||||||
|
|
||||||
return filters.size() > 1
|
|
||||||
? filters.get(0) + " +" + (filters.size() - 1)
|
|
||||||
: filters.get(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawUI(ViewGroup parent, final MapActivity activity) {
|
public void drawUI(ViewGroup parent, final MapActivity activity) {
|
||||||
|
|
||||||
|
@ -1933,7 +2118,7 @@ public class QuickActionFactory {
|
||||||
touchHelper.attachToRecyclerView(list);
|
touchHelper.attachToRecyclerView(list);
|
||||||
|
|
||||||
if (!getParams().isEmpty()){
|
if (!getParams().isEmpty()){
|
||||||
adapter.addItems(loadMapStyles());
|
adapter.addItems(loadListFromParams());
|
||||||
}
|
}
|
||||||
|
|
||||||
list.setAdapter(adapter);
|
list.setAdapter(adapter);
|
||||||
|
@ -1957,7 +2142,7 @@ public class QuickActionFactory {
|
||||||
|
|
||||||
protected class Adapter extends RecyclerView.Adapter<Adapter.ItemHolder> implements QuickActionItemTouchHelperCallback.OnItemMoveCallback {
|
protected class Adapter extends RecyclerView.Adapter<Adapter.ItemHolder> implements QuickActionItemTouchHelperCallback.OnItemMoveCallback {
|
||||||
|
|
||||||
private List<String> itemsList = new ArrayList<>();
|
private List<T> itemsList = new ArrayList<>();
|
||||||
private final QuickActionListFragment.OnStartDragListener onStartDragListener;
|
private final QuickActionListFragment.OnStartDragListener onStartDragListener;
|
||||||
|
|
||||||
public Adapter(QuickActionListFragment.OnStartDragListener onStartDragListener) {
|
public Adapter(QuickActionListFragment.OnStartDragListener onStartDragListener) {
|
||||||
|
@ -1973,9 +2158,9 @@ public class QuickActionFactory {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(final Adapter.ItemHolder holder, final int position) {
|
public void onBindViewHolder(final Adapter.ItemHolder holder, final int position) {
|
||||||
final String item = itemsList.get(position);
|
final T item = itemsList.get(position);
|
||||||
|
|
||||||
holder.title.setText(item);
|
holder.title.setText(getItemName(item));
|
||||||
|
|
||||||
holder.handleView.setOnTouchListener(new View.OnTouchListener() {
|
holder.handleView.setOnTouchListener(new View.OnTouchListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -1993,10 +2178,11 @@ public class QuickActionFactory {
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
|
||||||
String oldTitle = getTitle(itemsList);
|
String oldTitle = getTitle(itemsList);
|
||||||
|
String defaultName = holder.handleView.getContext().getString(getNameRes());
|
||||||
|
|
||||||
deleteItem(position);
|
deleteItem(position);
|
||||||
|
|
||||||
if (oldTitle.equals(title.getText().toString()) || title.getText().toString().equals(getName(holder.handleView.getContext()))) {
|
if (oldTitle.equals(title.getText().toString()) || title.getText().toString().equals(defaultName)) {
|
||||||
|
|
||||||
String newTitle = getTitle(itemsList);
|
String newTitle = getTitle(itemsList);
|
||||||
title.setText(newTitle);
|
title.setText(newTitle);
|
||||||
|
@ -2017,34 +2203,35 @@ public class QuickActionFactory {
|
||||||
|
|
||||||
itemsList.remove(position);
|
itemsList.remove(position);
|
||||||
|
|
||||||
saveMapStyles(itemsList);
|
saveListToParams(itemsList);
|
||||||
notifyItemRemoved(position);
|
notifyItemRemoved(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addItems(List<String> data) {
|
public void addItems(List<T> data) {
|
||||||
|
|
||||||
if (!itemsList.containsAll(data)) {
|
if (!itemsList.containsAll(data)) {
|
||||||
|
|
||||||
itemsList.addAll(data);
|
itemsList.addAll(data);
|
||||||
|
|
||||||
saveMapStyles(itemsList);
|
saveListToParams(itemsList);
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addItem(String item, Context context) {
|
public void addItem(T item, Context context) {
|
||||||
|
|
||||||
if (!itemsList.contains(item)) {
|
if (!itemsList.contains(item)) {
|
||||||
|
|
||||||
String oldTitle = getTitle(itemsList);
|
String oldTitle = getTitle(itemsList);
|
||||||
|
String defaultName = context.getString(getNameRes());
|
||||||
|
|
||||||
int oldSize = itemsList.size();
|
int oldSize = itemsList.size();
|
||||||
itemsList.add(item);
|
itemsList.add(item);
|
||||||
|
|
||||||
saveMapStyles(itemsList);
|
saveListToParams(itemsList);
|
||||||
notifyItemRangeInserted(oldSize, itemsList.size() - oldSize);
|
notifyItemRangeInserted(oldSize, itemsList.size() - oldSize);
|
||||||
|
|
||||||
if (oldTitle.equals(title.getText().toString()) || title.getText().toString().equals(getName(context))) {
|
if (oldTitle.equals(title.getText().toString()) || title.getText().toString().equals(defaultName)) {
|
||||||
|
|
||||||
String newTitle = getTitle(itemsList);
|
String newTitle = getTitle(itemsList);
|
||||||
title.setText(newTitle);
|
title.setText(newTitle);
|
||||||
|
@ -2063,6 +2250,7 @@ public class QuickActionFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
String oldTitle = getTitle(itemsList);
|
String oldTitle = getTitle(itemsList);
|
||||||
|
String defaultName = recyclerView.getContext().getString(getNameRes());
|
||||||
|
|
||||||
Collections.swap(itemsList, selectedPosition, targetPosition);
|
Collections.swap(itemsList, selectedPosition, targetPosition);
|
||||||
if (selectedPosition - targetPosition < -1) {
|
if (selectedPosition - targetPosition < -1) {
|
||||||
|
@ -2083,7 +2271,7 @@ public class QuickActionFactory {
|
||||||
notifyItemChanged(selectedPosition);
|
notifyItemChanged(selectedPosition);
|
||||||
notifyItemChanged(targetPosition);
|
notifyItemChanged(targetPosition);
|
||||||
|
|
||||||
if (oldTitle.equals(title.getText().toString()) || title.getText().toString().equals(getName(recyclerView.getContext()))) {
|
if (oldTitle.equals(title.getText().toString()) || title.getText().toString().equals(defaultName)) {
|
||||||
|
|
||||||
String newTitle = getTitle(itemsList);
|
String newTitle = getTitle(itemsList);
|
||||||
title.setText(newTitle);
|
title.setText(newTitle);
|
||||||
|
@ -2094,7 +2282,7 @@ public class QuickActionFactory {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewDropped(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
|
public void onViewDropped(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
|
||||||
saveMapStyles(itemsList);
|
saveListToParams(itemsList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ItemHolder extends RecyclerView.ViewHolder {
|
public class ItemHolder extends RecyclerView.ViewHolder {
|
||||||
|
@ -2112,22 +2300,10 @@ public class QuickActionFactory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void saveMapStyles(List<String> styles) {
|
protected abstract String getTitle(List<T> filters);
|
||||||
getParams().put(getListKey(), TextUtils.join(",", styles));
|
protected abstract void saveListToParams(List<T> list);
|
||||||
}
|
protected abstract List<T> loadListFromParams();
|
||||||
|
protected abstract String getItemName(T item);
|
||||||
protected List<String> loadMapStyles() {
|
|
||||||
|
|
||||||
List<String> styles = new ArrayList<>();
|
|
||||||
|
|
||||||
String filtersId = getParams().get(getListKey());
|
|
||||||
|
|
||||||
if (filtersId != null && !filtersId.trim().isEmpty()) {
|
|
||||||
Collections.addAll(styles, filtersId.split(","));
|
|
||||||
}
|
|
||||||
|
|
||||||
return styles;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract @StringRes int getAddBtnText();
|
protected abstract @StringRes int getAddBtnText();
|
||||||
protected abstract @StringRes int getDiscrHint();
|
protected abstract @StringRes int getDiscrHint();
|
||||||
|
|
Loading…
Reference in a new issue