From 225895f8654e249be0c3673c5716ef2ee44c3cb0 Mon Sep 17 00:00:00 2001 From: Neelam Purswani Date: Sun, 4 Feb 2018 16:56:58 -0800 Subject: [PATCH 1/5] MVP Push --- app/build.gradle | 10 +- .../streetcomplete/MainActivity.java | 3 +- .../data/osm/SimpleOverpassQuestType.java | 3 + .../data/osm/tql/FiltersParser.java | 2 +- .../streetcomplete/quests/QuestModule.java | 24 +++-- .../quests/RangeQuestAnswerFragment.java | 64 +++++++++++ .../quests/bus_stop_lit/AddBusStopLit.java | 42 +++++--- .../bus_stop_lit/AddBusStopLitForm.java | 23 ++++ .../AddBusStopShelterForm.java | 27 +++++ .../AddCrossingMarkings.java | 44 ++++++++ .../AddCrossingMarkingsForm.java | 16 +++ .../CheckCurbRamps_TactilePavings.java | 48 +++++++++ .../quests/sidewalk_lit/SidewalkLit.java | 54 ++++++++++ .../quests/sidewalk_lit/SidewalkLitForm.java | 21 ++++ .../sidewalk_surface/AddSideWalkSurface.java | 64 +++++++++++ .../AddSideWalkSurfaceForm.java | 101 ++++++++++++++++++ .../res/drawable/ic_launcher_background.xml | 74 +++++++++++++ app/src/main/res/layout/answer_range.xml | 30 ++++++ app/src/main/res/layout/busstop_shelter.xml | 15 +++ app/src/main/res/layout/sidewalk_lit.xml | 15 +++ app/src/main/res/values/strings.xml | 13 ++- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 23 files changed, 667 insertions(+), 32 deletions(-) create mode 100644 app/src/main/java/de/westnordost/streetcomplete/quests/RangeQuestAnswerFragment.java create mode 100644 app/src/main/java/de/westnordost/streetcomplete/quests/bus_stop_lit/AddBusStopLitForm.java create mode 100644 app/src/main/java/de/westnordost/streetcomplete/quests/bus_stop_shelter/AddBusStopShelterForm.java create mode 100644 app/src/main/java/de/westnordost/streetcomplete/quests/crossing_markings/AddCrossingMarkings.java create mode 100644 app/src/main/java/de/westnordost/streetcomplete/quests/crossing_markings/AddCrossingMarkingsForm.java create mode 100644 app/src/main/java/de/westnordost/streetcomplete/quests/curb_ramps_tactile_pavings/CheckCurbRamps_TactilePavings.java create mode 100644 app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_lit/SidewalkLit.java create mode 100644 app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_lit/SidewalkLitForm.java create mode 100644 app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddSideWalkSurface.java create mode 100644 app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddSideWalkSurfaceForm.java create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/layout/answer_range.xml create mode 100644 app/src/main/res/layout/busstop_shelter.xml create mode 100644 app/src/main/res/layout/sidewalk_lit.xml diff --git a/app/build.gradle b/app/build.gradle index 7794edb5..3919be26 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' -apply plugin: 'com.neenbedankt.android-apt' +//apply plugin: 'com.neenbedankt.android-apt' +//apply plugin: 'kotlin-kapt' def MAPZEN_API_KEY = hasProperty('mapzenApiKey') ? '"' + mapzenApiKey + '"' : "null"; @@ -7,8 +8,9 @@ android { signingConfigs { release } + compileSdkVersion 26 - buildToolsVersion '26.0.1' + buildToolsVersion '26.0.2' testOptions { unitTests.returnDefaultValues = true } @@ -67,8 +69,12 @@ dependencies { androidTestCompile "com.crittercism.dexmaker:dexmaker-mockito:1.4" // dependency injection + compile 'com.google.dagger:dagger:2.6' + annotationProcessor "com.google.dagger:dagger-compiler:2.6" + /* compile 'com.google.dagger:dagger:2.5' apt 'com.google.dagger:dagger-compiler:2.5' + *///kapt 'com.google.dagger:dagger-compiler:2.11' // Android stuff compile 'com.android.support:appcompat-v7:26.0.1' diff --git a/app/src/main/java/de/westnordost/streetcomplete/MainActivity.java b/app/src/main/java/de/westnordost/streetcomplete/MainActivity.java index e7bb5622..d5b902c8 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/MainActivity.java +++ b/app/src/main/java/de/westnordost/streetcomplete/MainActivity.java @@ -85,7 +85,7 @@ 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 +110,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..7328a481 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; @@ -21,6 +23,7 @@ public SimpleOverpassQuestType(OverpassMapDataDao overpassServer) { this.overpassServer = overpassServer; filter = new FiltersParser().parse(getTagFilters()); + Log.d("Nodes and ways", filter.toString()); } /** @return a query string that is accepted by Overpass and does not exceed the given bbox */ 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..c24d93f6 100644 --- a/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/QuestModule.java @@ -1,5 +1,7 @@ package de.westnordost.streetcomplete.quests; +import android.util.Log; + import java.util.Arrays; import javax.inject.Singleton; @@ -11,16 +13,20 @@ 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_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.crossing_type.AddCrossingType; +import de.westnordost.streetcomplete.quests.curb_ramps_tactile_pavings.CheckCurbRamps_TactilePavings; import de.westnordost.streetcomplete.quests.passenger_information_display.AddPassengerInformationDisplay; import de.westnordost.streetcomplete.quests.road_name.data.PutRoadNameSuggestionsHandler; import de.westnordost.streetcomplete.quests.road_name.data.RoadNameSuggestionsDao; +import de.westnordost.streetcomplete.quests.sidewalk_lit.SidewalkLit; +import de.westnordost.streetcomplete.quests.sidewalk_surface.AddSideWalkSurface; import de.westnordost.streetcomplete.quests.tactile_paving.AddTactilePavingBusStop; import de.westnordost.streetcomplete.quests.bin.AddBin; @@ -32,17 +38,23 @@ public class QuestModule RoadNameSuggestionsDao roadNameSuggestionsDao, PutRoadNameSuggestionsHandler putRoadNameSuggestionsHandler) { - QuestType[] questTypesOrderedByImportance = { + QuestType[] questTypesOrderedByImportance = new QuestType[]{ // ↓ notes osmNoteQuestType, - + new AddCrossingType(o), + new SidewalkLit(o), + new AddSideWalkSurface(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) }; + //new AddPassengerInformationDisplay(o), + //new AddTactilePavingBusStop(o) + + //new SidewalkLit(o) + return new QuestTypes(Arrays.asList(questTypesOrderedByImportance)); } diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/RangeQuestAnswerFragment.java b/app/src/main/java/de/westnordost/streetcomplete/quests/RangeQuestAnswerFragment.java new file mode 100644 index 00000000..8308d8ae --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/RangeQuestAnswerFragment.java @@ -0,0 +1,64 @@ +package de.westnordost.streetcomplete.quests; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import de.westnordost.streetcomplete.R; + +/** + * Created by Neelam Purswani on 26-01-2018. + */ + +public class RangeQuestAnswerFragment extends AbstractQuestAnswerFragment { + + /** Abstract base class for dialogs in which the user answers a yes/no quest */ + public static final String ANSWER = "answer"; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) + { + View view = super.onCreateView(inflater, container, savedInstanceState); + View buttonPanel = setButtonsView(R.layout.answer_range); + + buttonPanel.findViewById(R.id.range1).setOnClickListener(new View.OnClickListener() + { + @Override public void onClick(View v) + { + onClickgetRange("0"); + } + }); + buttonPanel.findViewById(R.id.range2).setOnClickListener(new View.OnClickListener() + { + @Override public void onClick(View v) + { + onClickgetRange("1-3"); + } + }); + buttonPanel.findViewById(R.id.range3).setOnClickListener(new View.OnClickListener() + { + @Override public void onClick(View v) + { + onClickgetRange("4-7"); + } + }); + return view; + } + + @Override public boolean hasChanges() + { + return false; + } + + protected void onClickgetRange(String answer) + { + Bundle bundle = new Bundle(); + bundle.putString(ANSWER, answer); + applyImmediateAnswer(bundle); + } + + + +} 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/bus_stop_lit/AddBusStopLitForm.java b/app/src/main/java/de/westnordost/streetcomplete/quests/bus_stop_lit/AddBusStopLitForm.java new file mode 100644 index 00000000..c389b461 --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/bus_stop_lit/AddBusStopLitForm.java @@ -0,0 +1,23 @@ +package de.westnordost.streetcomplete.quests.bus_stop_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; + +/** + * Created by Neelam Purswani on 27-01-2018. + */ + +public class AddBusStopLitForm 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/bus_stop_shelter/AddBusStopShelterForm.java b/app/src/main/java/de/westnordost/streetcomplete/quests/bus_stop_shelter/AddBusStopShelterForm.java new file mode 100644 index 00000000..0ac30feb --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/bus_stop_shelter/AddBusStopShelterForm.java @@ -0,0 +1,27 @@ +/* +package de.westnordost.streetcomplete.quests.bus_stop_shelter; + +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; + +*/ +/** + * Created by Neelam Purswani on 27-01-2018. + *//* + + +public class AddBusStopShelterForm 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/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..9e0ced18 --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/curb_ramps_tactile_pavings/CheckCurbRamps_TactilePavings.java @@ -0,0 +1,48 @@ +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, ways with (" + + "((footway=crossing) and (kerb=lowered))" + + "and (tactile_paving= No))"; + } + + 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_label; } + @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..3716e6cf --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_lit/SidewalkLit.java @@ -0,0 +1,54 @@ +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 "nodes with (public_transport=platform or (highway=bus_stop and public_transport!=stop_position)) and !bench"; + // return "nodes with way[foot=yes][!lit]"; + //return "ways with [highway="footway"] or way[foot="yes"] and !lit]"; + + return "nodes, ways with (" + + "((highway=footway))" + + " or way=foot" + + ") and !lit"; + } + + + public AbstractQuestAnswerFragment createForm() + { + return new RangeQuestAnswerFragment(); + } + + 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/AddSideWalkSurface.java b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddSideWalkSurface.java new file mode 100644 index 00000000..754a3624 --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddSideWalkSurface.java @@ -0,0 +1,64 @@ +package de.westnordost.streetcomplete.quests.sidewalk_surface; + +import android.os.Bundle; +import android.text.TextUtils; + +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.road_surface.AddRoadSurfaceForm; + +/** + * Created by Neelam Purswani on 12-01-2018. + */ + +public class AddSideWalkSurface extends SimpleOverpassQuestType +{ + // well, all roads have surfaces, what I mean is that not all ways with highway key are + // "something with a surface" + /* private static final String[] ROADS_WITH_SURFACES = { + // "trunk","trunk_link","motorway","motorway_link", // too much, motorways are almost by definition asphalt (or concrete) + "primary", "primary_link", + "secondary", "secondary_link", "tertiary", "tertiary_link", + "unclassified", "residential", "living_street", "pedestrian", + "track", "road", + *//*"service", *//* // this is too much, and the information value is very low + };*/ + + @Inject + public AddSideWalkSurface(OverpassMapDataDao overpassServer) { super(overpassServer); } + + @Override protected String getTagFilters() + { + return "nodes, ways with (" + + "((highway=footway) and (footway=sidewalk)" + + " or way=foot and foot=sidewalk" + + ") and !surface)"; + } + + public AbstractQuestAnswerFragment createForm() + { + return new AddSideWalkSurfaceForm(); + } + + public void applyAnswerTo(Bundle answer, StringMapChangesBuilder changes) + { + changes.add("surface", answer.getString(AddSideWalkSurfaceForm.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_name_title; + else return R.string.quest_sideWalk_title; + } +} + diff --git a/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddSideWalkSurfaceForm.java b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddSideWalkSurfaceForm.java new file mode 100644 index 00000000..19914723 --- /dev/null +++ b/app/src/main/java/de/westnordost/streetcomplete/quests/sidewalk_surface/AddSideWalkSurfaceForm.java @@ -0,0 +1,101 @@ +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.quests.AbstractQuestFormAnswerFragment; +import de.westnordost.streetcomplete.quests.road_surface.AddRoadSurface; +import de.westnordost.streetcomplete.view.GroupedImageSelectAdapter; + +/** + * Created by Neelam Purswani on 14-01-2018. + */ + +public class AddSideWalkSurfaceForm extends AbstractQuestFormAnswerFragment { + public static final String SURFACE = "surface"; + + private final AddSideWalkSurfaceForm.Surface[] SURFACES = new AddSideWalkSurfaceForm.Surface[] { + new AddSideWalkSurfaceForm.Surface("paved", R.drawable.panorama_surface_paved, R.string.quest_surface_value_paved, new AddSideWalkSurfaceForm.Surface[]{ + new AddSideWalkSurfaceForm.Surface("asphalt", R.drawable.surface_asphalt, R.string.quest_surface_value_asphalt), + new AddSideWalkSurfaceForm.Surface("concrete", R.drawable.surface_concrete, R.string.quest_surface_value_concrete), + new AddSideWalkSurfaceForm.Surface("sett", R.drawable.surface_sett, R.string.quest_surface_value_sett), + new AddSideWalkSurfaceForm.Surface("paving_stones", R.drawable.surface_paving_stones, R.string.quest_surface_value_paving_stones), + new AddSideWalkSurfaceForm.Surface("cobblestone", R.drawable.surface_cobblestone, R.string.quest_surface_value_cobblestone), + new AddSideWalkSurfaceForm.Surface("wood", R.drawable.surface_wood, R.string.quest_surface_value_wood), + }), + new AddSideWalkSurfaceForm.Surface("unpaved", R.drawable.panorama_surface_unpaved, R.string.quest_surface_value_unpaved, new AddSideWalkSurfaceForm.Surface[]{ + new AddSideWalkSurfaceForm.Surface("compacted", R.drawable.surface_compacted, R.string.quest_surface_value_compacted), + new AddSideWalkSurfaceForm.Surface("gravel", R.drawable.surface_gravel, R.string.quest_surface_value_gravel), + new AddSideWalkSurfaceForm.Surface("fine_gravel", R.drawable.surface_fine_gravel, R.string.quest_surface_value_fine_gravel), + new AddSideWalkSurfaceForm.Surface("pebblestone", R.drawable.surface_pebblestone, R.string.quest_surface_value_pebblestone), + new AddSideWalkSurfaceForm.Surface("grass_paver", R.drawable.surface_grass_paver, R.string.quest_surface_value_grass_paver), + }), + new AddSideWalkSurfaceForm.Surface("ground", R.drawable.panorama_surface_ground, R.string.quest_surface_value_ground, new AddSideWalkSurfaceForm.Surface[]{ + new AddSideWalkSurfaceForm.Surface("dirt", R.drawable.surface_dirt, R.string.quest_surface_value_dirt), + new AddSideWalkSurfaceForm.Surface("grass", R.drawable.surface_grass, R.string.quest_surface_value_grass), + new AddSideWalkSurfaceForm.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 AddSideWalkSurfaceForm.Surface getSelectedSurface() + { + return (AddSideWalkSurfaceForm.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/answer_range.xml b/app/src/main/res/layout/answer_range.xml new file mode 100644 index 00000000..fa3e922d --- /dev/null +++ b/app/src/main/res/layout/answer_range.xml @@ -0,0 +1,30 @@ + + + +