diff --git a/app/build.gradle b/app/build.gradle index 7794edb5..782cfd85 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,4 @@ apply plugin: 'com.android.application' -apply plugin: 'com.neenbedankt.android-apt' def MAPZEN_API_KEY = hasProperty('mapzenApiKey') ? '"' + mapzenApiKey + '"' : "null"; @@ -7,8 +6,9 @@ android { signingConfigs { release } + compileSdkVersion 26 - buildToolsVersion '26.0.1' + buildToolsVersion '26.0.2' testOptions { unitTests.returnDefaultValues = true } @@ -67,8 +67,8 @@ dependencies { androidTestCompile "com.crittercism.dexmaker:dexmaker-mockito:1.4" // dependency injection - compile 'com.google.dagger:dagger:2.5' - apt 'com.google.dagger:dagger-compiler:2.5' + compile 'com.google.dagger:dagger:2.6' + annotationProcessor "com.google.dagger:dagger-compiler:2.6" // Android stuff compile 'com.android.support:appcompat-v7:26.0.1' diff --git a/app/src/main/assets/cinnabar-style-7.0.1.yaml b/app/src/main/assets/cinnabar-style-7.0.1.yaml index a5c682d4..dae583c7 100644 --- a/app/src/main/assets/cinnabar-style-7.0.1.yaml +++ b/app/src/main/assets/cinnabar-style-7.0.1.yaml @@ -12,7 +12,7 @@ global: # Sign up for a Mapzen API key to enjoy higher rate limits # https://mapzen.com/documentation/overview/#developer-accounts-and-api-keys - sdk_mapzen_api_key: '' # set this value to your Mapzen API key + sdk_mapzen_api_key: 'zFdp5U-JTXuK-RJBybOCVQ' # set this value to your Mapzen API key #ux/ui ux_language: false # l10n language code, trusting OSM in v0.10 tiles, fixed in v1.0 tiles @@ -722,9 +722,12 @@ sources: #binary MVT format is used in StreetComplete as it is recommended for mobile #https://mapzen.com/documentation/vector-tiles/) # https has been causing problems for certain Android devices - https://github.com/westnordost/StreetComplete/issues/175 - url: http://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.mvt + # url: http://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.mvt + url: https://tile.nextzen.org/tilezen/vector/v1/256/all/{z}/{x}/{y}.mvt #url: '//tile.dev.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson' #url: //localhost:8080/vector/all/{z}/{x}/{y}.json + url_params: + api_key: zFdp5U-JTXuK-RJBybOCVQ max_zoom: 16 # # Only enable this for local debug, should not be enabled for prod (app inserts these at runtime) diff --git a/app/src/main/java/de/westnordost/streetcomplete/MainActivity.java b/app/src/main/java/de/westnordost/streetcomplete/MainActivity.java index e7bb5622..c1a05208 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/MainActivity.java +++ b/app/src/main/java/de/westnordost/streetcomplete/MainActivity.java @@ -85,7 +85,9 @@ public class MainActivity extends AppCompatActivity implements OsmQuestAnswerListener, VisibleQuestListener, QuestsMapFragment.Listener, MapFragment.Listener { - @Inject CrashReportExceptionHandler crashReportExceptionHandler; + Queue questsToDo; + + @Inject CrashReportExceptionHandler crashReportExceptionHandler; @Inject LocationRequestFragment locationRequestFragment; @Inject QuestAutoSyncer questAutoSyncer; @@ -110,7 +112,6 @@ public class MainActivity extends AppCompatActivity implements private ProgressBar progressBar; private AnswersCounter answersCounter; - private Queue questsToDo; private boolean downloadServiceIsBound; private QuestDownloadService.Interface downloadService; diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/osm/SimpleOverpassQuestType.java b/app/src/main/java/de/westnordost/streetcomplete/data/osm/SimpleOverpassQuestType.java index ed1a927d..9ed95989 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/data/osm/SimpleOverpassQuestType.java +++ b/app/src/main/java/de/westnordost/streetcomplete/data/osm/SimpleOverpassQuestType.java @@ -1,5 +1,7 @@ package de.westnordost.streetcomplete.data.osm; +import android.util.Log; + import java.util.Collections; import de.westnordost.osmapi.map.data.Element; diff --git a/app/src/main/java/de/westnordost/streetcomplete/data/osm/tql/FiltersParser.java b/app/src/main/java/de/westnordost/streetcomplete/data/osm/tql/FiltersParser.java index cda5f562..8c5e4ae9 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/data/osm/tql/FiltersParser.java +++ b/app/src/main/java/de/westnordost/streetcomplete/data/osm/tql/FiltersParser.java @@ -43,7 +43,7 @@ public TagFilterExpression parse(String input) } } - private int expectAnyNumberOfSpaces() + private int expectAnyNumberOfSpaces() throws ParseException { int count = 0; while(input.nextIsAndAdvance(' ')) count++; diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java b/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java index 088e5afe..bc10f7bf 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java @@ -10,18 +10,16 @@ import de.westnordost.streetcomplete.data.QuestTypes; import de.westnordost.streetcomplete.data.osm.download.OverpassMapDataDao; import de.westnordost.streetcomplete.data.osmnotes.OsmNoteQuestType; -import de.westnordost.streetcomplete.quests.baby_changing_table.AddBabyChangingTable; -import de.westnordost.streetcomplete.quests.bike_parking_capacity.AddBikeParkingCapacity; -import de.westnordost.streetcomplete.quests.bike_parking_cover.AddBikeParkingCover; -import de.westnordost.streetcomplete.quests.building_levels.AddBuildingLevels; import de.westnordost.streetcomplete.quests.bus_stop_lit.AddBusStopLit; import de.westnordost.streetcomplete.quests.bus_stop_bench.AddBusStopBench; import de.westnordost.streetcomplete.quests.bus_stop_shelter.AddBusStopShelter; -import de.westnordost.streetcomplete.quests.passenger_information_display.AddPassengerInformationDisplay; +import de.westnordost.streetcomplete.quests.crossing_type.AddCrossingType; +import de.westnordost.streetcomplete.quests.curb_ramps_tactile_pavings.CheckCurbRamps_TactilePavings; import de.westnordost.streetcomplete.quests.road_name.data.PutRoadNameSuggestionsHandler; import de.westnordost.streetcomplete.quests.road_name.data.RoadNameSuggestionsDao; -import de.westnordost.streetcomplete.quests.tactile_paving.AddTactilePavingBusStop; +import de.westnordost.streetcomplete.quests.sidewalk_lit.SidewalkLit; +import de.westnordost.streetcomplete.quests.sidewalk_surface.AddFootwaySurface; import de.westnordost.streetcomplete.quests.bin.AddBin; @Module @@ -32,18 +30,17 @@ public class QuestModule RoadNameSuggestionsDao roadNameSuggestionsDao, PutRoadNameSuggestionsHandler putRoadNameSuggestionsHandler) { - QuestType[] questTypesOrderedByImportance = { + QuestType[] questTypesOrderedByImportance = new QuestType[]{ // ↓ notes osmNoteQuestType, - + new SidewalkLit(o), + new AddFootwaySurface(o), + new CheckCurbRamps_TactilePavings(o), new AddBusStopBench(o), new AddBusStopShelter(o), new AddBusStopLit(o), - new AddBin(o), - new AddPassengerInformationDisplay(o), - new AddTactilePavingBusStop(o) + new AddBin(o) }; - return new QuestTypes(Arrays.asList(questTypesOrderedByImportance)); } diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/bus_stop_lit/AddBusStopLit.java b/app/src/main/java/de/westnordost/streetcomplete/quests/bus_stop_lit/AddBusStopLit.java index 35179256..3599338b 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/bus_stop_lit/AddBusStopLit.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/bus_stop_lit/AddBusStopLit.java @@ -13,32 +13,42 @@ import de.westnordost.streetcomplete.quests.AbstractQuestAnswerFragment; import de.westnordost.streetcomplete.quests.YesNoQuestAnswerFragment; -public class AddBusStopLit extends SimpleOverpassQuestType -{ - @Inject public AddBusStopLit(OverpassMapDataDao overpassServer) { super(overpassServer); } +public class AddBusStopLit extends SimpleOverpassQuestType { + @Inject + public AddBusStopLit(OverpassMapDataDao overpassServer) { + super(overpassServer); + } - @Override protected String getTagFilters() - { + @Override + protected String getTagFilters() { return "nodes with (public_transport=platform or (highway=bus_stop and public_transport!=stop_position)) and !lit"; } - public AbstractQuestAnswerFragment createForm() - { + public AbstractQuestAnswerFragment createForm() { return new YesNoQuestAnswerFragment(); } - public void applyAnswerTo(Bundle answer, StringMapChangesBuilder changes) - { + public void applyAnswerTo(Bundle answer, StringMapChangesBuilder changes) { String yesno = answer.getBoolean(YesNoQuestAnswerFragment.ANSWER) ? "yes" : "no"; changes.add("lit", yesno); } - @Override public String getCommitMessage() { return "Add bus stop lit"; } - @Override public int getIcon() { return R.drawable.ic_quest_bus; } - @Override public int getTitle(Map tags) - { + @Override + public String getCommitMessage() { + return "Add bus stop lit"; + } + + @Override + public int getIcon() { + return R.drawable.ic_quest_bus; + } + + @Override + public int getTitle(Map tags) { boolean hasName = tags.containsKey("name"); - if(hasName) return R.string.quest_busStopLit_name_title; - else return R.string.quest_busStopLit_title; + if (hasName) return R.string.quest_busStopLit_question2; + else return R.string.quest_busStopLit_question2; + } -} + +} \ No newline at end of file diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/crossing_markings/AddCrossingMarkings.java b/app/src/main/java/de/westnordost/streetcomplete/quests/crossing_markings/AddCrossingMarkings.java new file mode 100644 index 00000000..bf17d5f2 --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/crossing_markings/AddCrossingMarkings.java @@ -0,0 +1,44 @@ +package de.westnordost.streetcomplete.quests.crossing_markings; + +import android.os.Bundle; + +import java.util.List; +import java.util.Map; + +import javax.inject.Inject; + +import de.westnordost.streetcomplete.R; +import de.westnordost.streetcomplete.data.osm.SimpleOverpassQuestType; +import de.westnordost.streetcomplete.data.osm.changes.StringMapChangesBuilder; +import de.westnordost.streetcomplete.data.osm.download.OverpassMapDataDao; +import de.westnordost.streetcomplete.quests.AbstractQuestAnswerFragment; + +public class AddCrossingMarkings extends SimpleOverpassQuestType +{ + @Inject public AddCrossingMarkings(OverpassMapDataDao overpassServer) { super(overpassServer); } + + @Override + protected String getTagFilters() { return "nodes with highway=crossing and !crossing"; } + + public AbstractQuestAnswerFragment createForm() + { + return new AddCrossingMarkingsForm(); + } + + public void applyAnswerTo(Bundle answer, StringMapChangesBuilder changes) + { + List values = answer.getStringArrayList(AddCrossingMarkingsForm.OSM_VALUES); + if(values != null && values.size() == 1) + { + + changes.add("crossing", values.get(0)); + } + } + + @Override public String getCommitMessage() { return "Add crossing type"; } + @Override public int getIcon() { return R.drawable.ic_quest_pedestrian_crossing; } + @Override public int getTitle(Map tags) + { + return R.string.quest_crossing_type_title; + } +} diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/crossing_markings/AddCrossingMarkingsForm.java b/app/src/main/java/de/westnordost/streetcomplete/quests/crossing_markings/AddCrossingMarkingsForm.java new file mode 100644 index 00000000..61c452eb --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/crossing_markings/AddCrossingMarkingsForm.java @@ -0,0 +1,16 @@ +package de.westnordost.streetcomplete.quests.crossing_markings; + +import de.westnordost.streetcomplete.R; +import de.westnordost.streetcomplete.quests.ImageListQuestAnswerFragment; + +public class AddCrossingMarkingsForm extends ImageListQuestAnswerFragment +{ + private final OsmItem[] TYPES = new OsmItem[] { + new OsmItem("traffic_signals", R.drawable.crossing_type_signals, R.string.quest_crossing_type_signals), + new OsmItem("uncontrolled", R.drawable.crossing_type_zebra, R.string.quest_crossing_type_uncontrolled), + new OsmItem("unmarked", R.drawable.crossing_type_unmarked, R.string.quest_crossing_type_unmarked) + }; + + @Override protected OsmItem[] getItems() { return TYPES; } + @Override protected int getItemsPerRow() { return 3; } +} diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/curb_ramps_tactile_pavings/CheckCurbRamps_TactilePavings.java b/app/src/main/java/de/westnordost/streetcomplete/quests/curb_ramps_tactile_pavings/CheckCurbRamps_TactilePavings.java new file mode 100644 index 00000000..4541fa30 --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/curb_ramps_tactile_pavings/CheckCurbRamps_TactilePavings.java @@ -0,0 +1,49 @@ +package de.westnordost.streetcomplete.quests.curb_ramps_tactile_pavings; + +import android.os.Bundle; + +import java.util.Map; + +import javax.inject.Inject; + +import de.westnordost.streetcomplete.R; +import de.westnordost.streetcomplete.data.osm.SimpleOverpassQuestType; +import de.westnordost.streetcomplete.data.osm.changes.StringMapChangesBuilder; +import de.westnordost.streetcomplete.data.osm.download.OverpassMapDataDao; +import de.westnordost.streetcomplete.quests.AbstractQuestAnswerFragment; +import de.westnordost.streetcomplete.quests.YesNoQuestAnswerFragment; + +public class CheckCurbRamps_TactilePavings extends SimpleOverpassQuestType +{ + @Inject public CheckCurbRamps_TactilePavings(OverpassMapDataDao overpassServer) + { super(overpassServer); } + + @Override protected String getTagFilters() + { + //return "nodes, ways with "(("footway"="crossing") "and" ("kerb"="lowered"))"; + + return "nodes with (" + + "(kerb=lowered)" + + "and (!tactile_paving))"; + } + + public AbstractQuestAnswerFragment createForm() + { + return new YesNoQuestAnswerFragment(); + } + + public void applyAnswerTo(Bundle answer, StringMapChangesBuilder changes) + { + String yesno = answer.getBoolean(YesNoQuestAnswerFragment.ANSWER) ? "yes" : "no"; + changes.add("curb_ramps", yesno); + } + + @Override public String getCommitMessage() { return "Add curb ramps"; } + @Override public int getIcon() { return R.drawable.ic_quest_street_surface_paved_detail; } + @Override public int getTitle(Map tags) + { + boolean hasName = tags.containsKey("name"); + if(hasName) return R.string.quest_curb_ramps; + else return R.string.quest_curb_ramps; + } +} diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_lit/SidewalkLit.java b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_lit/SidewalkLit.java new file mode 100644 index 00000000..61fc8e7c --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_lit/SidewalkLit.java @@ -0,0 +1,50 @@ +package de.westnordost.streetcomplete.quests.sidewalk_lit; +import android.os.Bundle; +import android.util.Log; + +import java.util.Map; + +import javax.inject.Inject; + +import de.westnordost.streetcomplete.R; +import de.westnordost.streetcomplete.data.osm.SimpleOverpassQuestType; +import de.westnordost.streetcomplete.data.osm.changes.StringMapChangesBuilder; +import de.westnordost.streetcomplete.data.osm.download.OverpassMapDataDao; +import de.westnordost.streetcomplete.quests.AbstractQuestAnswerFragment; +//import de.westnordost.streetcomplete.quests.RangeQuestAnswerFragment; +//import de.westnordost.streetcomplete.quests.TwoLevelQuestAnswerFragment; +import de.westnordost.streetcomplete.quests.YesNoQuestAnswerFragment; + +public class SidewalkLit extends SimpleOverpassQuestType +{ + @Inject public SidewalkLit(OverpassMapDataDao overpassServer) { super(overpassServer); } + + @Override protected String getTagFilters() + { + return "ways with (" + + "((highway=footway) and (footway=sidewalk)" + + " or foot=yes" + + ") and !lit)"; + } + + + public AbstractQuestAnswerFragment createForm() + { + return new YesNoQuestAnswerFragment(); + } + + public void applyAnswerTo(Bundle answer, StringMapChangesBuilder changes) + { + String yesno = answer.getBoolean(SidewalkLitForm.ANSWER) ? "yes" : "no"; + changes.add("lit", yesno); + } + + @Override public String getCommitMessage() { return "Add sidewalk lit"; } + @Override public int getIcon() { return R.drawable.ic_quest_lantern; } + @Override public int getTitle(Map tags) + { + boolean hasName = tags.containsKey("name"); + if(hasName) return R.string.quest_SidewalkLit_title; + else return R.string.quest_SidewalkLit_title; + } +} diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_lit/SidewalkLitForm.java b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_lit/SidewalkLitForm.java new file mode 100644 index 00000000..6866ae69 --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_lit/SidewalkLitForm.java @@ -0,0 +1,21 @@ +package de.westnordost.streetcomplete.quests.sidewalk_lit; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import de.westnordost.streetcomplete.R; +import de.westnordost.streetcomplete.quests.YesNoQuestAnswerFragment; + +public class SidewalkLitForm extends YesNoQuestAnswerFragment +{ + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) + { + View view = super.onCreateView(inflater, container, savedInstanceState); + setContentView(R.layout.sidewalk_lit); + + + return view; + } +} diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddFootwaySurface.java b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddFootwaySurface.java new file mode 100644 index 00000000..e7e43ed8 --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddFootwaySurface.java @@ -0,0 +1,52 @@ +package de.westnordost.streetcomplete.quests.sidewalk_surface; + +import android.os.Bundle; + +import java.util.Map; + +import javax.inject.Inject; + +import de.westnordost.streetcomplete.R; +import de.westnordost.streetcomplete.data.osm.SimpleOverpassQuestType; +import de.westnordost.streetcomplete.data.osm.changes.StringMapChangesBuilder; +import de.westnordost.streetcomplete.data.osm.download.OverpassMapDataDao; +import de.westnordost.streetcomplete.quests.AbstractQuestAnswerFragment; + +/** + * Created by Neelam Purswani on 12-01-2018. + */ + +public class AddFootwaySurface extends SimpleOverpassQuestType +{ + // well, all roads have surfaces, what I mean is that not all ways with highway key are + // "something with a surface" + @Inject + public AddFootwaySurface(OverpassMapDataDao overpassServer) { super(overpassServer); } + + @Override protected String getTagFilters() + { + return "ways with (" + + "((highway=footway)" + + " or (foot=yes) and !surface))"; + } + + public AbstractQuestAnswerFragment createForm() + { + return new AddFootwaySurfaceForm(); + } + + public void applyAnswerTo(Bundle answer, StringMapChangesBuilder changes) + { + changes.add("surface", answer.getString(AddFootwaySurfaceForm.SURFACE)); + } + + @Override public String getCommitMessage() { return "Add sidewalk surfaces"; } + @Override public int getIcon() { return R.drawable.ic_quest_street_surface; } + @Override public int getTitle(Map tags) + { + boolean hasName = tags.containsKey("name"); + if(hasName) return R.string.quest_sideWalk_title; + else return R.string.quest_sideWalk_title; + } +} + diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddFootwaySurfaceForm.java b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddFootwaySurfaceForm.java new file mode 100644 index 00000000..a86a373c --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddFootwaySurfaceForm.java @@ -0,0 +1,99 @@ +package de.westnordost.streetcomplete.quests.sidewalk_surface; + +import de.westnordost.streetcomplete.quests.AbstractQuestFormAnswerFragment; + +import android.os.Bundle; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import java.util.Arrays; + +import de.westnordost.streetcomplete.R; +import de.westnordost.streetcomplete.view.GroupedImageSelectAdapter; + +/** + * Created by Neelam Purswani on 14-01-2018. + */ + +public class AddFootwaySurfaceForm extends AbstractQuestFormAnswerFragment { + public static final String SURFACE = "surface"; + + private final AddFootwaySurfaceForm.Surface[] SURFACES = new AddFootwaySurfaceForm.Surface[] { + new AddFootwaySurfaceForm.Surface("paved", R.drawable.panorama_surface_paved, R.string.quest_surface_value_paved, new AddFootwaySurfaceForm.Surface[]{ + new AddFootwaySurfaceForm.Surface("asphalt", R.drawable.surface_asphalt, R.string.quest_surface_value_asphalt), + new AddFootwaySurfaceForm.Surface("concrete", R.drawable.surface_concrete, R.string.quest_surface_value_concrete), + new AddFootwaySurfaceForm.Surface("sett", R.drawable.surface_sett, R.string.quest_surface_value_sett), + new AddFootwaySurfaceForm.Surface("paving_stones", R.drawable.surface_paving_stones, R.string.quest_surface_value_paving_stones), + new AddFootwaySurfaceForm.Surface("cobblestone", R.drawable.surface_cobblestone, R.string.quest_surface_value_cobblestone), + new AddFootwaySurfaceForm.Surface("wood", R.drawable.surface_wood, R.string.quest_surface_value_wood), + }), + new AddFootwaySurfaceForm.Surface("unpaved", R.drawable.panorama_surface_unpaved, R.string.quest_surface_value_unpaved, new AddFootwaySurfaceForm.Surface[]{ + new AddFootwaySurfaceForm.Surface("compacted", R.drawable.surface_compacted, R.string.quest_surface_value_compacted), + new AddFootwaySurfaceForm.Surface("gravel", R.drawable.surface_gravel, R.string.quest_surface_value_gravel), + new AddFootwaySurfaceForm.Surface("fine_gravel", R.drawable.surface_fine_gravel, R.string.quest_surface_value_fine_gravel), + new AddFootwaySurfaceForm.Surface("pebblestone", R.drawable.surface_pebblestone, R.string.quest_surface_value_pebblestone), + new AddFootwaySurfaceForm.Surface("grass_paver", R.drawable.surface_grass_paver, R.string.quest_surface_value_grass_paver), + }), + new AddFootwaySurfaceForm.Surface("ground", R.drawable.panorama_surface_ground, R.string.quest_surface_value_ground, new AddFootwaySurfaceForm.Surface[]{ + new AddFootwaySurfaceForm.Surface("dirt", R.drawable.surface_dirt, R.string.quest_surface_value_dirt), + new AddFootwaySurfaceForm.Surface("grass", R.drawable.surface_grass, R.string.quest_surface_value_grass), + new AddFootwaySurfaceForm.Surface("sand", R.drawable.surface_sand, R.string.quest_surface_value_sand), + }), + }; + + private GroupedImageSelectAdapter imageSelector; + + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) + { + View view = super.onCreateView(inflater, container, savedInstanceState); + + View contentView = setContentView(R.layout.quest_street_surface); + + RecyclerView surfaceSelect = contentView.findViewById(R.id.surfaceSelect); + imageSelector = new GroupedImageSelectAdapter(Arrays.asList(SURFACES)); + surfaceSelect.setAdapter(imageSelector); + surfaceSelect.setNestedScrollingEnabled(false); + + return view; + } + + @Override protected void onClickOk() + { + Bundle answer = new Bundle(); + if(getSelectedSurface() != null) + { + answer.putString(SURFACE, getSelectedSurface().value); + } + applyFormAnswer(answer); + } + + @Override public boolean hasChanges() + { + return getSelectedSurface() != null; + } + + private AddFootwaySurfaceForm.Surface getSelectedSurface() + { + return (AddFootwaySurfaceForm.Surface) imageSelector.getSelectedItem(); + } + + private static class Surface extends GroupedImageSelectAdapter.Item + { + public final String value; + + public Surface(String value, int drawableId, int titleId) + { + super(drawableId, titleId); + this.value = value; + } + + public Surface(String value, int drawableId, int titleId, GroupedImageSelectAdapter.Item[] items) + { + super(drawableId, titleId, items); + this.value = value; + } + } +} diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..01f0af0a --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/sidewalk_lit.xml b/app/src/main/res/layout/sidewalk_lit.xml new file mode 100644 index 00000000..2c2852aa --- /dev/null +++ b/app/src/main/res/layout/sidewalk_lit.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6ea8fdf6..280693bc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -173,7 +173,10 @@ To display the map, vector tiles are retrieved from the <a href=\"https://map "Off" "What surface does this piece of road have?" "What surface does the road \"%s\" have here?" + "What surface does this footpath have here?" + "Are there lowered curb ramps here?" "Select the most specific one that fits:" + "Paved (generic)" "Unpaved (generic)" "Ground (generic)" @@ -247,8 +250,9 @@ The info you enter is then directly added to the OpenStreetMap in your name, wit "No" "Does this bus stop have a shelter?" "Does this bus stop have a waste bin?" - "Is this bus stop well lit?" + "Is there lighting at this Bus stop at night?" "Does this bus stop have a bench?" + "Is there lighting along this sidewalk at night?" "How many bikes can be parked here?" "Does this bus stop have an electronic information display?" "Note that most normal stands can be used from both sides to park each one bike." @@ -261,7 +265,8 @@ The info you enter is then directly added to the OpenStreetMap in your name, wit "Does the bus stop \"%s\" have a shelter?" "Does the bus stop \"%s\" have a waste bin?" "Does the bus stop \"%s\" have an electronic information display?" - "Is the bus stop \"%s\" well lit?" + "Is there lighting at the \"%s\" Bus stop?" + "Are there one or more street lamps within 10 feet of this Bus stop?" "Does the bus stop \"%s\" have a bench?" "Do these toilets require a fee?" "Does this toilet have a baby changing table?" @@ -403,4 +408,7 @@ Otherwise, you can download another keyboard in the app store. Popular keyboards House name: levels in the roof regular levels (not counting the roof) + 0 + 1 - 3 + 4 - 7 diff --git a/build.gradle b/build.gradle index 62cfacc3..04de19b1 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e9bb55c5..f342df73 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Mar 08 18:52:20 CET 2017 +#Sat Jan 06 23:13:05 PST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip