diff --git a/.gitignore b/.gitignore index a109316ba..902c5a6bf 100644 --- a/.gitignore +++ b/.gitignore @@ -11,5 +11,8 @@ license.properties .idea *~ */keystore +*/signature.asc +*/*.p12 +*/play-api-key.json custom-versions/* -api.key +cyclestreets-api.key diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..6bb09fc56 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,46 @@ +language: android +sudo: false +dist: focal +jdk: openjdk17 + +branches: + only: + - master + +# Get the full commit history (required to derive our version code, see the root build.gradle) +git: + depth: false + +env: + global: + # Remember to keep these four values in sync with values in the root build.gradle file + - compileSdkVersion=34 + - minSdkVersion=33 + - targetSdkVersion=34 + # For the decryption of secrets needed to sign and publish our artifacts + - secure: "LipL0wPv0uQrKitaeGxCpoQsx5sl/Pg/DtQv4S7Bi52DxfArgvD2hPB0TWgkgYGJPfENHLEyqg+H+/v2nON3IXY+cnsd+TW+P1T03/52D56ieSKGVtVtSYUOZUgoyxIIvRZWFh/UNg+AmZIjOCTJDLitBTUxD8kWux8NjhIqZow=" + +android: + components: + - tools # to download the latest listing of what's available to download + - platform-tools + - tools # to install up-to-date Android SDK tools + - build-tools + + # SDK versions + - android-${compileSdkVersion} + +before_install: + - ./ciLicense.sh + - sudo pip install requests + - touch $HOME/.android/repositories.cfg + - yes | sdkmanager "platforms;android-34" + - yes | sdkmanager "build-tools;34.0.0" + +install: + - ls -l /usr/lib/jvm/ + - ./checkPoiTypeIcons.sh + - ./gradlew build -x lint + +script: + - ./ciPublish.sh diff --git a/.tx/config b/.tx/config new file mode 100644 index 000000000..3c73c9d16 --- /dev/null +++ b/.tx/config @@ -0,0 +1,41 @@ +### N.B. Currently this file needs to be included with our TXGH deployment. +### See https://github.com/transifex/txgh/issues/65 for more details. + +[main] +host = https://www.transifex.com + +[cyclestreets-android.app-strings] +source_file = cyclestreets.vNext/src/main/res/values/strings.xml +source_lang = en +type = ANDROID +file_filter = cyclestreets.vNext/src/main/res/values-/strings.xml + +[cyclestreets-android.lib-core-strings] +source_file = libraries/cyclestreets-core/src/main/res/values/strings.xml +source_lang = en +type = ANDROID +file_filter = cyclestreets.vNext/src/main/res/values-/strings.xml + +[cyclestreets-android.lib-core-arrays] +source_file = libraries/cyclestreets-core/src/main/res/values/arrays.xml +source_lang = en +type = ANDROID +file_filter = cyclestreets.vNext/src/main/res/values-/arrays.xml + +[cyclestreets-android.lib-fragments-strings] +source_file = libraries/cyclestreets-fragments/src/main/res/values/strings.xml +source_lang = en +type = ANDROID +file_filter = cyclestreets.vNext/src/main/res/values-/strings.xml + +[cyclestreets-android.lib-track-strings] +source_file = libraries/cyclestreets-track/src/main/res/values/strings.xml +source_lang = en +type = ANDROID +file_filter = cyclestreets.vNext/src/main/res/values-/strings.xml + +[cyclestreets-android.lib-view-strings] +source_file = libraries/cyclestreets-view/src/main/res/values/strings.xml +source_lang = en +type = ANDROID +file_filter = cyclestreets.vNext/src/main/res/values-/strings.xml diff --git a/README.md b/README.md index 025995157..e344e20db 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ -Cyclestreets Android App -======================== +[![Build Status](https://app.travis-ci.com/cyclestreets/android.svg?branch=master)](https://app.travis-ci.com/cyclestreets/android) -What is it? ------------ +# Cyclestreets Android App + +## What is it? CycleStreets is a UK-wide cycle journey planner system, which lets you plan routes from A to B to C by bike. It is designed by cyclists, for cyclists, and -caters for the needs of both confident and less confident cyclists. +caters to the needs of both confident and less confident cyclists. - Point-to-point tap-to-route cycle routing - Point-to-point cycle routing by address or postcode @@ -18,28 +18,24 @@ caters for the needs of both confident and less confident cyclists. - Save your preferred cycling speed, map type etc - Downloadable off-line maps available -The Latest Version ------------------- +## The latest version - Latest version https://play.google.com/store/apps/details?id=net.cyclestreets -- Source at http://www.cyclestreets.net/mobile/android/ -Contribute! ------------ +## Contribute! Code contributions are welcome! -You should fork the repo as described here: http://help.github.com/fork-a-repo/ +You should fork the repo as described here: https://help.github.com/en/github/getting-started-with-github/fork-a-repo See the Issues list for bug reports: https://github.com/cyclestreets/android/issues -Before adding new features, please contact the CycleStreets Mobile mailing list: -mobile@lists.cyclestreets.net +Before adding new features, please create an issue, or contact us: +https://www.cyclestreets.org/contacts/ -License -------- +## License -CycleStreets Android App Copyright 2010-2016 CycleStreets Ltd. +CycleStreets Android App Copyright 2010-2025 CycleStreets Ltd. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -52,15 +48,14 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program. If not, see http://www.gnu.org/licenses - -Contacts --------- +along with this program. If not, see https://www.gnu.org/licenses/ -Written by Jez Higgins, with contributions from Oliver Lockwood, Theodore Hong, Christopher Fraser, Jonathan Gray, Farid Kurbanov, kyegupov, Shaun McDonald, Simon Nuttall, John Singleton, Colin Watson. +## Contacts -Part of the development of this App has been funded by Cycling Scotland. +Android App written by Jez Higgins and Oliver Lockwood, with contributions +from Christopher Fraser, Jonathan Gray, Theodore Hong, Farid Kurbanov, +kyegupov, Shaun McDonald, Hilary Newmark, Simon Nuttall, John Singleton, +Colin Watson. -CycleStreets is CycleStreets Ltd, 80b York Street, Cambridge, CB1 2PY. -Registered, in England and Wales, number 06948959. -Email info@cyclestreets.net +CycleStreets contacts details: +https://www.cyclestreets.org/contacts/ diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 000000000..e593d043a --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,11 @@ +## Releasing - notes for project maintainers + +1. Ensure that What's New (`whatsnew.html`, plus `beta.txt` and `production.txt`) is all up-to-date + (don't forget to remove "Beta" from the latest whatsnew.html entry!) +2. Ensure that the latest code built successfully on Travis and was published to the Beta track +3. Tag the latest commit - convention is e.g. release/3.9 for version 3.9 +4. In the Google Play developer console, promote the beta build to production + +### Post-release +1. Bump `versionName` in cyclestreets.app/build.gradle to the next release candidate +2. Clear the contents of `beta.txt`; add a new section in `whatsnew.html` for the next round of development. diff --git a/assets/README.md b/assets/README.md new file mode 100644 index 000000000..87098d786 --- /dev/null +++ b/assets/README.md @@ -0,0 +1,3 @@ +## Assets + +Things we want to keep in version control, but which we don't want to bloat the app with. diff --git a/assets/artwork.xcf b/assets/artwork.xcf new file mode 100644 index 000000000..911a9e872 Binary files /dev/null and b/assets/artwork.xcf differ diff --git a/assets/directions/README.md b/assets/directions/README.md new file mode 100644 index 000000000..c091c2c9e --- /dev/null +++ b/assets/directions/README.md @@ -0,0 +1,4 @@ +This folder contains the liveride compass icons in their original SVG format. + +They have all been imported into Android XML vector graphics as-is, using their default output +height, as are always drawn within a bounded context in the app. diff --git a/assets/directions/bear_left.svg b/assets/directions/bear_left.svg new file mode 100644 index 000000000..8812b5dfd --- /dev/null +++ b/assets/directions/bear_left.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/directions/bear_left_then_right.svg b/assets/directions/bear_left_then_right.svg new file mode 100644 index 000000000..bd337b367 --- /dev/null +++ b/assets/directions/bear_left_then_right.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/directions/bear_right.svg b/assets/directions/bear_right.svg new file mode 100644 index 000000000..1915ed397 --- /dev/null +++ b/assets/directions/bear_right.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/directions/bear_right_then_left.svg b/assets/directions/bear_right_then_left.svg new file mode 100644 index 000000000..ff082bba2 --- /dev/null +++ b/assets/directions/bear_right_then_left.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/directions/double_back_left.svg b/assets/directions/double_back_left.svg new file mode 100644 index 000000000..895c526e6 --- /dev/null +++ b/assets/directions/double_back_left.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/directions/double_back_right.svg b/assets/directions/double_back_right.svg new file mode 100644 index 000000000..4366ac783 --- /dev/null +++ b/assets/directions/double_back_right.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/directions/first_exit.svg b/assets/directions/first_exit.svg new file mode 100644 index 000000000..5f8853eaa --- /dev/null +++ b/assets/directions/first_exit.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + diff --git a/assets/directions/first_exit_anticlockwise.svg b/assets/directions/first_exit_anticlockwise.svg new file mode 100644 index 000000000..662f9dd2b --- /dev/null +++ b/assets/directions/first_exit_anticlockwise.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + diff --git a/assets/directions/second_exit.svg b/assets/directions/second_exit.svg new file mode 100644 index 000000000..6190a8004 --- /dev/null +++ b/assets/directions/second_exit.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + diff --git a/assets/directions/second_exit_anticlockwise.svg b/assets/directions/second_exit_anticlockwise.svg new file mode 100644 index 000000000..be51eb33a --- /dev/null +++ b/assets/directions/second_exit_anticlockwise.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + diff --git a/assets/directions/sharp_left.svg b/assets/directions/sharp_left.svg new file mode 100644 index 000000000..eade97afc --- /dev/null +++ b/assets/directions/sharp_left.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/directions/sharp_right.svg b/assets/directions/sharp_right.svg new file mode 100644 index 000000000..fd73b538c --- /dev/null +++ b/assets/directions/sharp_right.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/directions/straight_on.svg b/assets/directions/straight_on.svg new file mode 100644 index 000000000..e9876a81c --- /dev/null +++ b/assets/directions/straight_on.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/directions/third_exit.svg b/assets/directions/third_exit.svg new file mode 100644 index 000000000..bb333053d --- /dev/null +++ b/assets/directions/third_exit.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + diff --git a/assets/directions/third_exit_anticlockwise.svg b/assets/directions/third_exit_anticlockwise.svg new file mode 100644 index 000000000..5f25201f7 --- /dev/null +++ b/assets/directions/third_exit_anticlockwise.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + diff --git a/assets/directions/turn_left.svg b/assets/directions/turn_left.svg new file mode 100644 index 000000000..a165d8952 --- /dev/null +++ b/assets/directions/turn_left.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/directions/turn_left_then_right.svg b/assets/directions/turn_left_then_right.svg new file mode 100644 index 000000000..1595ba235 --- /dev/null +++ b/assets/directions/turn_left_then_right.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/directions/turn_right.svg b/assets/directions/turn_right.svg new file mode 100644 index 000000000..d853b3640 --- /dev/null +++ b/assets/directions/turn_right.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/directions/turn_right_then_left.svg b/assets/directions/turn_right_then_left.svg new file mode 100644 index 000000000..d4a4278b9 --- /dev/null +++ b/assets/directions/turn_right_then_left.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/assets/liveride/README.md b/assets/liveride/README.md new file mode 100644 index 000000000..ed4c67ff8 --- /dev/null +++ b/assets/liveride/README.md @@ -0,0 +1,10 @@ +This folder contains the navigation direction icons in their original SVG format. + +They make use of SVG functionality unsupported by android, and therefore have been converted via +`svg2png` with the config.json file present in this folder, to give 24dp FAB icons. For example: + +``` +java -jar svg2png-0.2.3.jar -c config.json -f compass.svg +``` + +`svg2png` itself can be found at https://github.com/sterlp/svg2png/releases diff --git a/assets/liveride/compass.svg b/assets/liveride/compass.svg new file mode 100644 index 000000000..095759b8a --- /dev/null +++ b/assets/liveride/compass.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/assets/liveride/compass_off.svg b/assets/liveride/compass_off.svg new file mode 100644 index 000000000..40a88f3e7 --- /dev/null +++ b/assets/liveride/compass_off.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/assets/liveride/config.json b/assets/liveride/config.json new file mode 100644 index 000000000..7518782e3 --- /dev/null +++ b/assets/liveride/config.json @@ -0,0 +1,30 @@ +{ + "files": [ + { + "directory": "drawable-xxxhdpi", + "nameSuffix": "", + "height": 96, + "width": 96 + },{ + "directory": "drawable-xxhdpi", + "nameSuffix": "", + "height": 72, + "width": 72 + },{ + "directory": "drawable-xhdpi", + "nameSuffix": "", + "height": 48, + "width": 48 + },{ + "directory": "drawable-hdpi", + "nameSuffix": "", + "height": 36, + "width": 36 + },{ + "directory": "drawable-mdpi", + "nameSuffix": "", + "height": 24, + "width": 24 + } + ] +} diff --git a/assets/photomap/README.md b/assets/photomap/README.md new file mode 100644 index 000000000..b684cdaa1 --- /dev/null +++ b/assets/photomap/README.md @@ -0,0 +1,24 @@ +## Icons + +These icons are (c) CycleStreets Ltd. + +They have been created by Jamie Watson - www.jamiewatsondesign.com +who naturally retains the moral right to be identified as the creator of the work. + +Permission is not granted to modify them, +since this would undermine the integrity of the designer's work. + +## Usage in this project + +This folder contains the photomap icons in their original SVG format. + +Most have been imported into Android XML vector graphics as-is with an output height of 17dp. + +Those which use SVG functionality unsupported by android, have been converted via `svg2png` with +the config.json file present in this folder. For example: + +``` +java -jar svg2png-0.2.3.jar -c config.json -f pm_closure_bad.svg +``` + +`svg2png` itself can be found at https://github.com/sterlp/svg2png/releases diff --git a/assets/photomap/bicycles_bad.svg b/assets/photomap/bicycles_bad.svg new file mode 100644 index 000000000..c462088b9 --- /dev/null +++ b/assets/photomap/bicycles_bad.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/bicycles_good.svg b/assets/photomap/bicycles_good.svg new file mode 100644 index 000000000..ac998132e --- /dev/null +++ b/assets/photomap/bicycles_good.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/bicycles_neutral.svg b/assets/photomap/bicycles_neutral.svg new file mode 100644 index 000000000..c0ac5b144 --- /dev/null +++ b/assets/photomap/bicycles_neutral.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/bikeshare_bad.svg b/assets/photomap/bikeshare_bad.svg new file mode 100644 index 000000000..c462088b9 --- /dev/null +++ b/assets/photomap/bikeshare_bad.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/bikeshare_good.svg b/assets/photomap/bikeshare_good.svg new file mode 100644 index 000000000..ac998132e --- /dev/null +++ b/assets/photomap/bikeshare_good.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/bikeshare_neutral.svg b/assets/photomap/bikeshare_neutral.svg new file mode 100644 index 000000000..c0ac5b144 --- /dev/null +++ b/assets/photomap/bikeshare_neutral.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/bikeshops_bad.svg b/assets/photomap/bikeshops_bad.svg new file mode 100644 index 000000000..9aa4227aa --- /dev/null +++ b/assets/photomap/bikeshops_bad.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/bikeshops_good.svg b/assets/photomap/bikeshops_good.svg new file mode 100644 index 000000000..d9aa3e9f9 --- /dev/null +++ b/assets/photomap/bikeshops_good.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/bikeshops_neutral.svg b/assets/photomap/bikeshops_neutral.svg new file mode 100644 index 000000000..1cc27ab37 --- /dev/null +++ b/assets/photomap/bikeshops_neutral.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/carstorage_bad.svg b/assets/photomap/carstorage_bad.svg new file mode 100644 index 000000000..24ea5c24e --- /dev/null +++ b/assets/photomap/carstorage_bad.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/carstorage_good.svg b/assets/photomap/carstorage_good.svg new file mode 100644 index 000000000..4a74f1208 --- /dev/null +++ b/assets/photomap/carstorage_good.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/carstorage_neutral.svg b/assets/photomap/carstorage_neutral.svg new file mode 100644 index 000000000..4e4f2cde7 --- /dev/null +++ b/assets/photomap/carstorage_neutral.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/closure_bad.svg b/assets/photomap/closure_bad.svg new file mode 100644 index 000000000..5c91ddecd --- /dev/null +++ b/assets/photomap/closure_bad.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/closure_good.svg b/assets/photomap/closure_good.svg new file mode 100644 index 000000000..0d4a2fc03 --- /dev/null +++ b/assets/photomap/closure_good.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/closure_neutral.svg b/assets/photomap/closure_neutral.svg new file mode 100644 index 000000000..0e21966c3 --- /dev/null +++ b/assets/photomap/closure_neutral.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/config.json b/assets/photomap/config.json new file mode 100644 index 000000000..2d00bcc84 --- /dev/null +++ b/assets/photomap/config.json @@ -0,0 +1,30 @@ +{ + "files": [ + { + "directory": "drawable-xxxhdpi", + "nameSuffix": "", + "height": 68, + "width": 62 + },{ + "directory": "drawable-xxhdpi", + "nameSuffix": "", + "height": 51, + "width": 46 + },{ + "directory": "drawable-xhdpi", + "nameSuffix": "", + "height": 34, + "width": 31 + },{ + "directory": "drawable-hdpi", + "nameSuffix": "", + "height": 26, + "width": 23 + },{ + "directory": "drawable-mdpi", + "nameSuffix": "", + "height": 17, + "width": 15 + } + ] +} diff --git a/assets/photomap/congestion_bad.svg b/assets/photomap/congestion_bad.svg new file mode 100644 index 000000000..7a0dc7ebe --- /dev/null +++ b/assets/photomap/congestion_bad.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/congestion_good.svg b/assets/photomap/congestion_good.svg new file mode 100644 index 000000000..4d58c025e --- /dev/null +++ b/assets/photomap/congestion_good.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/congestion_neutral.svg b/assets/photomap/congestion_neutral.svg new file mode 100644 index 000000000..414f99f2f --- /dev/null +++ b/assets/photomap/congestion_neutral.svg @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/cycleparking_bad.svg b/assets/photomap/cycleparking_bad.svg new file mode 100644 index 000000000..8442da8a9 --- /dev/null +++ b/assets/photomap/cycleparking_bad.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/cycleparking_good.svg b/assets/photomap/cycleparking_good.svg new file mode 100644 index 000000000..97633c50f --- /dev/null +++ b/assets/photomap/cycleparking_good.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/cycleparking_neutral.svg b/assets/photomap/cycleparking_neutral.svg new file mode 100644 index 000000000..688165705 --- /dev/null +++ b/assets/photomap/cycleparking_neutral.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/cycleways_bad.svg b/assets/photomap/cycleways_bad.svg new file mode 100644 index 000000000..6cb683da7 --- /dev/null +++ b/assets/photomap/cycleways_bad.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/cycleways_good.svg b/assets/photomap/cycleways_good.svg new file mode 100644 index 000000000..65e2fb5f6 --- /dev/null +++ b/assets/photomap/cycleways_good.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/cycleways_neutral.svg b/assets/photomap/cycleways_neutral.svg new file mode 100644 index 000000000..6b5e118f5 --- /dev/null +++ b/assets/photomap/cycleways_neutral.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/destinations_bad.svg b/assets/photomap/destinations_bad.svg new file mode 100644 index 000000000..c9c6937f8 --- /dev/null +++ b/assets/photomap/destinations_bad.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/destinations_good.svg b/assets/photomap/destinations_good.svg new file mode 100644 index 000000000..e70e29559 --- /dev/null +++ b/assets/photomap/destinations_good.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/destinations_neutral.svg b/assets/photomap/destinations_neutral.svg new file mode 100644 index 000000000..09977e72a --- /dev/null +++ b/assets/photomap/destinations_neutral.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/dutchcycleways_bad.svg b/assets/photomap/dutchcycleways_bad.svg new file mode 100644 index 000000000..3d933c2af --- /dev/null +++ b/assets/photomap/dutchcycleways_bad.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/dutchcycleways_good.svg b/assets/photomap/dutchcycleways_good.svg new file mode 100644 index 000000000..323915a29 --- /dev/null +++ b/assets/photomap/dutchcycleways_good.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/dutchcycleways_neutral.svg b/assets/photomap/dutchcycleways_neutral.svg new file mode 100644 index 000000000..8ccfe28fa --- /dev/null +++ b/assets/photomap/dutchcycleways_neutral.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/enforcement_bad.svg b/assets/photomap/enforcement_bad.svg new file mode 100644 index 000000000..7d28863be --- /dev/null +++ b/assets/photomap/enforcement_bad.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/enforcement_good.svg b/assets/photomap/enforcement_good.svg new file mode 100644 index 000000000..3e3824428 --- /dev/null +++ b/assets/photomap/enforcement_good.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/enforcement_neutral.svg b/assets/photomap/enforcement_neutral.svg new file mode 100644 index 000000000..df4276528 --- /dev/null +++ b/assets/photomap/enforcement_neutral.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/general_bad.svg b/assets/photomap/general_bad.svg new file mode 100644 index 000000000..ecbc94f72 --- /dev/null +++ b/assets/photomap/general_bad.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/general_good.svg b/assets/photomap/general_good.svg new file mode 100644 index 000000000..7ec3ed2cf --- /dev/null +++ b/assets/photomap/general_good.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/general_neutral.svg b/assets/photomap/general_neutral.svg new file mode 100644 index 000000000..342557235 --- /dev/null +++ b/assets/photomap/general_neutral.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/obstructions_bad.svg b/assets/photomap/obstructions_bad.svg new file mode 100644 index 000000000..81f2d72eb --- /dev/null +++ b/assets/photomap/obstructions_bad.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/obstructions_good.svg b/assets/photomap/obstructions_good.svg new file mode 100644 index 000000000..bab6e33b5 --- /dev/null +++ b/assets/photomap/obstructions_good.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/obstructions_neutral.svg b/assets/photomap/obstructions_neutral.svg new file mode 100644 index 000000000..0f8b83f58 --- /dev/null +++ b/assets/photomap/obstructions_neutral.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/potholes_bad.svg b/assets/photomap/potholes_bad.svg new file mode 100644 index 000000000..749787bb2 --- /dev/null +++ b/assets/photomap/potholes_bad.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/potholes_good.svg b/assets/photomap/potholes_good.svg new file mode 100644 index 000000000..454e15026 --- /dev/null +++ b/assets/photomap/potholes_good.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/potholes_neutral.svg b/assets/photomap/potholes_neutral.svg new file mode 100644 index 000000000..dc8ccfeca --- /dev/null +++ b/assets/photomap/potholes_neutral.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/road_bad.svg b/assets/photomap/road_bad.svg new file mode 100644 index 000000000..0eb3021b3 --- /dev/null +++ b/assets/photomap/road_bad.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/road_good.svg b/assets/photomap/road_good.svg new file mode 100644 index 000000000..1fc4abecb --- /dev/null +++ b/assets/photomap/road_good.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/road_neutral.svg b/assets/photomap/road_neutral.svg new file mode 100644 index 000000000..392b1755e --- /dev/null +++ b/assets/photomap/road_neutral.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/roadworks_bad.svg b/assets/photomap/roadworks_bad.svg new file mode 100644 index 000000000..69763dc2f --- /dev/null +++ b/assets/photomap/roadworks_bad.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/roadworks_good.svg b/assets/photomap/roadworks_good.svg new file mode 100644 index 000000000..22269cad4 --- /dev/null +++ b/assets/photomap/roadworks_good.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/roadworks_neutral.svg b/assets/photomap/roadworks_neutral.svg new file mode 100644 index 000000000..b585d9eea --- /dev/null +++ b/assets/photomap/roadworks_neutral.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/routesigns_bad.svg b/assets/photomap/routesigns_bad.svg new file mode 100644 index 000000000..993682367 --- /dev/null +++ b/assets/photomap/routesigns_bad.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/routesigns_good.svg b/assets/photomap/routesigns_good.svg new file mode 100644 index 000000000..f54e3fde6 --- /dev/null +++ b/assets/photomap/routesigns_good.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/routesigns_neutral.svg b/assets/photomap/routesigns_neutral.svg new file mode 100644 index 000000000..528eaec72 --- /dev/null +++ b/assets/photomap/routesigns_neutral.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/shadow.svg b/assets/photomap/shadow.svg new file mode 100644 index 000000000..7cf0e7d61 --- /dev/null +++ b/assets/photomap/shadow.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/assets/photomap/signs_bad.svg b/assets/photomap/signs_bad.svg new file mode 100644 index 000000000..a790a4eca --- /dev/null +++ b/assets/photomap/signs_bad.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/signs_good.svg b/assets/photomap/signs_good.svg new file mode 100644 index 000000000..0ff224cf5 --- /dev/null +++ b/assets/photomap/signs_good.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/signs_neutral.svg b/assets/photomap/signs_neutral.svg new file mode 100644 index 000000000..bc84bea8f --- /dev/null +++ b/assets/photomap/signs_neutral.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/track_bad.svg b/assets/photomap/track_bad.svg new file mode 100644 index 000000000..5501a1075 --- /dev/null +++ b/assets/photomap/track_bad.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/track_good.svg b/assets/photomap/track_good.svg new file mode 100644 index 000000000..dbe67920e --- /dev/null +++ b/assets/photomap/track_good.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/assets/photomap/track_neutral.svg b/assets/photomap/track_neutral.svg new file mode 100644 index 000000000..3e93fc7fb --- /dev/null +++ b/assets/photomap/track_neutral.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/assets/pois/getPoiTypeIcons.py b/assets/pois/getPoiTypeIcons.py new file mode 100755 index 000000000..478e4653f --- /dev/null +++ b/assets/pois/getPoiTypeIcons.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python2 + +# Retrieve POI type icons and save them to the 'drawable' folder. +# +# This gets done as part of the Travis build, to verify no changes have been made. +# When changes are made, this should be run manually and the checked-in files updated. +# +# Can target the API like https://api.cyclestreets.net/v2/pois.types?key=redacted&icons=64 +# with a number of icon sizes for different densities, to achieve 16dp, as follows. +# +# 64 = xxxhdpi +# 48 = xxhdpi +# 32 = xhdpi +# 24 = hdpi +# 16 = mdpi +# +# However, testing showed that Android does a better job of dynamic downscaling than the static +# 48px icons, so we don't store the xxhdpi ones. +# +# TODO: upgrade this back to Python 3 as soon as the Travis image can be upgraded from "trusty". + +import glob +import os +import requests +import base64 +import urllib3 +urllib3.disable_warnings() + +# Note that it's important to use our app's key, specifically. Other keys will return a different +# set of POI types. +apikey = 'b26a0d6b45e00612' +session = requests.Session() +session.params.update({'key': apikey}) + +host = 'https://api.cyclestreets.net/v2' +api = 'pois.types' + +iconSizes = { 64: 'xxxhdpi', 32: 'xhdpi', 24: 'hdpi', 16: 'mdpi'} + +# Clear out previously-downloaded icons +existingPoiIconFiles = glob.glob('../../libraries/cyclestreets-core/src/main/res/drawable-*/poi_*.png') +for file in existingPoiIconFiles: + os.remove(file) + +# Get the icons +for size, density in iconSizes.items(): + print('Processing size {} ({}):'.format(size, density)), + r = session.get(url='{}/{}'.format(host, api), params={ 'icons': size }, verify=False) + r.raise_for_status() + data = r.json() + types = data['types'] + + for id, type in types.items(): + # Remove base64 encoding + decoded_img = base64.b64decode(type['icon']) + with open('../../libraries/cyclestreets-core/src/main/res/drawable-{}/poi_{}.png'.format(density, id), 'wb') as fh: + fh.write(decoded_img) + print('.'), + + print(' done') diff --git a/libraries/cyclestreets-fragments/src/main/assets/balanced.svg b/assets/unused/balanced.svg similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/balanced.svg rename to assets/unused/balanced.svg diff --git a/libraries/cyclestreets-fragments/src/main/assets/balanced_icon.svg b/assets/unused/balanced_icon.svg similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/balanced_icon.svg rename to assets/unused/balanced_icon.svg diff --git a/libraries/cyclestreets-fragments/src/main/assets/car.svg b/assets/unused/car.svg similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/car.svg rename to assets/unused/car.svg diff --git a/assets/unused/compass_pointy.svg b/assets/unused/compass_pointy.svg new file mode 100644 index 000000000..4a6b5b5d9 --- /dev/null +++ b/assets/unused/compass_pointy.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/libraries/cyclestreets-fragments/src/main/assets/fast.svg b/assets/unused/fast.svg similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/fast.svg rename to assets/unused/fast.svg diff --git a/libraries/cyclestreets-fragments/src/main/assets/fast_icon.svg b/assets/unused/fast_icon.svg similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/fast_icon.svg rename to assets/unused/fast_icon.svg diff --git a/libraries/cyclestreets-fragments/src/main/assets/ic_bicycle.svg b/assets/unused/ic_bicycle.svg similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/ic_bicycle.svg rename to assets/unused/ic_bicycle.svg diff --git a/libraries/cyclestreets-fragments/src/main/assets/logo.svg b/assets/unused/logo.svg similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/logo.svg rename to assets/unused/logo.svg diff --git a/libraries/cyclestreets-fragments/src/main/assets/logo.xcf b/assets/unused/logo.xcf similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/logo.xcf rename to assets/unused/logo.xcf diff --git a/libraries/cyclestreets-fragments/src/main/assets/quiet.svg b/assets/unused/quiet.svg similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/quiet.svg rename to assets/unused/quiet.svg diff --git a/libraries/cyclestreets-fragments/src/main/assets/quiet2.svg b/assets/unused/quiet2.svg similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/quiet2.svg rename to assets/unused/quiet2.svg diff --git a/libraries/cyclestreets-fragments/src/main/assets/quiet_icon.svg b/assets/unused/quiet_icon.svg similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/quiet_icon.svg rename to assets/unused/quiet_icon.svg diff --git a/libraries/cyclestreets-fragments/src/main/assets/route_bg.svg b/assets/unused/route_bg.svg similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/route_bg.svg rename to assets/unused/route_bg.svg diff --git a/libraries/cyclestreets-fragments/src/main/assets/routes.9.xcf b/assets/unused/routes.9.xcf similarity index 100% rename from libraries/cyclestreets-fragments/src/main/assets/routes.9.xcf rename to assets/unused/routes.9.xcf diff --git a/assets/unused/selected.svg b/assets/unused/selected.svg new file mode 100644 index 000000000..8d95b0017 --- /dev/null +++ b/assets/unused/selected.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/assets/unused/temporary.svg b/assets/unused/temporary.svg new file mode 100644 index 000000000..8d48b2bb1 --- /dev/null +++ b/assets/unused/temporary.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/assets/unused/wisp.svg b/assets/unused/wisp.svg new file mode 100644 index 000000000..2ad44f775 --- /dev/null +++ b/assets/unused/wisp.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/assets/unused/wisp_shadow.svg b/assets/unused/wisp_shadow.svg new file mode 100644 index 000000000..3fd78969e --- /dev/null +++ b/assets/unused/wisp_shadow.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/assets/waypoints/README.md b/assets/waypoints/README.md new file mode 100644 index 000000000..9103cf242 --- /dev/null +++ b/assets/waypoints/README.md @@ -0,0 +1,14 @@ +This folder contains the waypoint icons that we use in their original SVG format. + +For placement of waypoints on the map, we use the PNG export of the XCF files (which were created +by GIMP). These have the 'point' of the wisp centred on the icon, so that matches wherever the +userhas clicked. + +For the 'waymark' icon in LiveRide, the `waypoint.svg` file has been converted via `svg2png` with +the config.json file present in this folder. For example: + +``` +java -jar svg2png-0.2.3.jar -c config.json -f lr_waymark.svg +``` + +`svg2png` itself can be found at https://github.com/sterlp/svg2png/releases diff --git a/assets/waypoints/config.json b/assets/waypoints/config.json new file mode 100644 index 000000000..1a25a6770 --- /dev/null +++ b/assets/waypoints/config.json @@ -0,0 +1,30 @@ +{ + "files": [ + { + "directory": "drawable-xxxhdpi", + "nameSuffix": "", + "height": 256, + "width": 256 + },{ + "directory": "drawable-xxhdpi", + "nameSuffix": "", + "height": 192, + "width": 192 + },{ + "directory": "drawable-xhdpi", + "nameSuffix": "", + "height": 128, + "width": 128 + },{ + "directory": "drawable-hdpi", + "nameSuffix": "", + "height": 96, + "width": 96 + },{ + "directory": "drawable-mdpi", + "nameSuffix": "", + "height": 64, + "width": 64 + } + ] +} diff --git a/assets/waypoints/finish.svg b/assets/waypoints/finish.svg new file mode 100644 index 000000000..9ac426b1b --- /dev/null +++ b/assets/waypoints/finish.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/assets/waypoints/green-wisp-200.xcf b/assets/waypoints/green-wisp-200.xcf new file mode 100644 index 000000000..be3628f1f Binary files /dev/null and b/assets/waypoints/green-wisp-200.xcf differ diff --git a/assets/waypoints/orange-wisp-200.xcf b/assets/waypoints/orange-wisp-200.xcf new file mode 100644 index 000000000..f865193b0 Binary files /dev/null and b/assets/waypoints/orange-wisp-200.xcf differ diff --git a/assets/waypoints/red-wisp-200.xcf b/assets/waypoints/red-wisp-200.xcf new file mode 100644 index 000000000..a1ef5a5b2 Binary files /dev/null and b/assets/waypoints/red-wisp-200.xcf differ diff --git a/assets/waypoints/start.svg b/assets/waypoints/start.svg new file mode 100644 index 000000000..9fb9f2e55 --- /dev/null +++ b/assets/waypoints/start.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/assets/waypoints/waypoint.svg b/assets/waypoints/waypoint.svg new file mode 100644 index 000000000..bd2e33cce --- /dev/null +++ b/assets/waypoints/waypoint.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/build.gradle b/build.gradle index 11cb59ee5..8e800f780 100644 --- a/build.gradle +++ b/build.gradle @@ -1,134 +1,122 @@ buildscript { + ext.kotlinVersion = '2.1.20' repositories { + google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.2' - classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+' + classpath 'com.android.tools.build:gradle:8.10.1' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } } -configure(subprojects.findAll { it.path.startsWith(':custom-versions:') || - it.path.startsWith(':cyclestreets') }) { - if (!file("${projectDir}/build.gradle").exists()) - return - - //apply plugin: 'android-sdk-manager' - apply plugin: 'com.android.application' - - signingKey(it) - manifestProperties(it) - versionProperties(it) -} // configure apks +ext { + // From e.g. https://source.android.com/setup/start/build-numbers + // Android 14 34 Android14 + // Android 13 33 Android13 + // Android 12L 32 Android12L + // Android 12 31 Android12 + // Android 11 30 Android11 + // Android 10 29 Android10 + // Android 9.0 28 PIE + // Android 8.1 27 OREO_MR1 + // Android 8.0 26 OREO + // Android 7.1.1, 7.1 25 NOUGAT_MR1 + // Android 7.0 24 NOUGAT + // Android 6.0 23 MARSHMALLOW + // Android 5.1 22 LOLLIPOP_MR1 + // Android 5.0 21 LOLLIPOP + // Android 4.4W 20 KITKAT_WATCH + // Android 4.4 19 KITKAT + // Android 4.3 18 JELLY_BEAN_MR2 + // Android 4.2, 4.2.2 17 JELLY_BEAN_MR1 + + // Remember to keep these values in sync with .travis.yml + compileSdkVersion=34 + minSdkVersion=33 + targetSdkVersion=34 + + // java version + javaVersion = JavaVersion.VERSION_11 + + // centrally manage some other dependencies + mapsforgeVersion = '0.20.0' + osmdroidVersion = '6.1.18' + + // test dependencies + assertjVersion = '3.25.3' + junitVersion = '4.13.2' + mockitoVersion = '5.11.0' + robolectricVersion = '4.14.1' +} -configure(subprojects.findAll { it.path.startsWith(':libraries:') }) { +// Configure common settings in all projects +subprojects { if (!file("${projectDir}/build.gradle").exists()) return - //apply plugin: 'android-sdk-manager' - apply plugin: 'com.android.library' -} // configure libraries + gradle.projectsEvaluated { + tasks.withType(JavaCompile).configureEach { + options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" + } + tasks.withType(Test).tap { + configureEach { + testLogging { + exceptionFormat 'full' + showCauses true + showExceptions true + showStackTraces true + events = ['passed', 'failed', 'skipped'] + } + } + } + } -subprojects { - if (!file("${projectDir}/build.gradle").exists()) - return + buildscript { + repositories { + mavenCentral() + google() // required for Android plugins + } + } repositories { mavenCentral() + google() // required for Android libraries + maven { url "https://jitpack.io" } // required for https://github.com/smart-fun/XmlToJson } - android { - Properties appConfig = loadProperties("${rootDir}/config.properties") + if (projectDir.getName() == 'cyclestreets.app') { + apply plugin: 'com.android.application' + } else { + apply plugin: 'com.android.library' + } - compileSdkVersion appConfig['compileSdkVersion'].toInteger() - buildToolsVersion appConfig['toolsVersion'] + apply plugin: 'kotlin-android' + + android { + compileSdkVersion rootProject.ext.compileSdkVersion compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility rootProject.ext.javaVersion + targetCompatibility rootProject.ext.javaVersion + } + kotlinOptions { + jvmTarget = '11' } defaultConfig { - minSdkVersion appConfig['minSdkVersion'].toInteger() - targetSdkVersion appConfig['targetSdkVersion'].toInteger() + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion } - packagingOptions { - exclude 'META-INF/LICENSE' - exclude 'META-INF/LICENSE.txt' - exclude 'META-INF/DEPENDENCIES' - exclude 'META-INF/NOTICE' - exclude 'META-INF/NOTICE.txt' - } // packagingOptions - - // Required due to strictness of the Android developer tools. See lint.xml for full details. lintOptions { + // Required due to strictness of the Android developer tools. See lint.xml for full details. lintConfig rootProject.file('gradle/lint.xml') + + // Kotlin (nullability) interop check - potentially useful but quite noisy + // check 'Interoperability' } - } // android -} // subprojects - -def loadProperties(fileName) { - Properties props = new Properties() - props.load(new FileInputStream(file(fileName))) - return props; -} // loadProperties - -def manifestProperties(project) { - def cyclestreetsDetails = project.file("cyclestreets.properties") - if (!cyclestreetsDetails.exists()) { - println ":${project.name}:No cyclestreets.properties" - return; - } // no cyclestreets props - - project.android { - buildTypes { - all { - manifestPlaceholders = loadProperties(cyclestreetsDetails) - } - } // buildType - } // android -} // manifestProperties - -def versionProperties(project) { - def versionDetails = project.file("version.properties") - def versionConfig = [ versionCode: "-1", versionName: "unknown" ] - if (versionDetails.exists()) - versionConfig = loadProperties(versionDetails) - else - println ":${project.name}:No version.properties, using placeholder defaults" - - project.android { - defaultConfig { - versionCode versionConfig['versionCode'].toInteger() - versionName versionConfig['versionName'] - } - } // android -} // versionProperties - -def signingKey(project) { - def licenseDetails = project.file("license.properties"); - if (!licenseDetails.exists()) { - println ":${project.name}:No license.properties" - return; - } // licenseDetails.exists - - Properties props = loadProperties(licenseDetails) - - project.android { - signingConfigs { - release { - storeFile project.file(props['key.store']) - storePassword props['key.password'] - keyAlias props['key.alias'] - keyPassword props['key.password'] - } - } // signingConfigs - buildTypes { - release { - signingConfig signingConfigs.release - } - } // buildTypes - } // android -} // signingKey + buildFeatures.viewBinding = true + } +} diff --git a/checkPoiTypeIcons.sh b/checkPoiTypeIcons.sh new file mode 100755 index 000000000..d44c8b125 --- /dev/null +++ b/checkPoiTypeIcons.sh @@ -0,0 +1,25 @@ +#!/bin/bash +set -ev + +if [ "$TRAVIS_REPO_SLUG" == "cyclestreets/android" ] &&[ "$CI" == "true" ] && [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then + echo "Running a non-PR build on master - check whether POI type icons are up-to-date" + pushd assets/pois + python --version + pip3 install requests + python getPoiTypeIcons.py + if [[ $? -ne 0 ]] + then + echo 'An error occurred while trying to check whether POI type icons need updating.' + exit 1 + fi + popd +fi + +if [[ -n $(git status -s) ]] +then + echo 'POI type icons need updating. Look at the documentation of getPoiTypeIcons.py for details.' + git status + exit 1 +else + echo 'POI type icons are all up to date, continuing with build.' +fi diff --git a/ciLicense.sh b/ciLicense.sh new file mode 100755 index 000000000..c45684dd9 --- /dev/null +++ b/ciLicense.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -ev + +if [ "$TRAVIS_REPO_SLUG" == "cyclestreets/android" ] &&[ "$CI" == "true" ] && [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then + echo "Running a non-PR build on master - set up signing info" + openssl aes-256-cbc -k $openssl_file_encryption_key -md md5 -in cyclestreets.app/license.properties.enc -out cyclestreets.app/license.properties -d + openssl aes-256-cbc -k $openssl_file_encryption_key -md md5 -in cyclestreets.app/signature.asc.enc -out cyclestreets.app/signature.asc -d + openssl aes-256-cbc -k $openssl_file_encryption_key -md md5 -in cyclestreets.app/keystore.enc -out cyclestreets.app/keystore -d + openssl aes-256-cbc -k $openssl_file_encryption_key -md md5 -in cyclestreets.app/play-api-key.json.enc -out cyclestreets.app/play-api-key.json -d + openssl aes-256-cbc -k $openssl_file_encryption_key -md md5 -in libraries/cyclestreets-core/src/test/resources/cyclestreets-api.key.enc -out libraries/cyclestreets-core/src/test/resources/cyclestreets-api.key -d +else + echo "Running a PR or branch build - the compiled artifact will have a dummy signature" +fi diff --git a/ciPublish.sh b/ciPublish.sh new file mode 100755 index 000000000..45af080e9 --- /dev/null +++ b/ciPublish.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -ev + +if [ "$CI" == "true" ] && [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then + echo "Running a non-PR build on master - publish artifact" + ./gradlew publishReleaseApk -x lint +else + echo "The artifact will not be published" +fi diff --git a/config.properties b/config.properties deleted file mode 100644 index cf7411436..000000000 --- a/config.properties +++ /dev/null @@ -1,18 +0,0 @@ -# Android 2.2 is 8 -# Android 4.0.3 is 15 -# Android 4.3.1 is 18 -# Android 4.4 is 19 -# Android 5.0 is 21 -# Android 5.1 is 22 -# Android 6.0 is 23 - -# sdkVersion=16 - -compileSdkVersion=19 -# minSdkVersion=8 -minSdkVersion=14 -# targetSdkVersion=23 -targetSdkVersion=19 - -# toolsVersion=21.1.2 -toolsVersion=23.0.2 diff --git a/cyclestreets.app/build.gradle b/cyclestreets.app/build.gradle new file mode 100644 index 000000000..ded485f30 --- /dev/null +++ b/cyclestreets.app/build.gradle @@ -0,0 +1,96 @@ +buildscript { + dependencies { + classpath 'me.moallemi.gradle:advanced-build-version:2.0.2' + } +} + +plugins { + id 'com.github.triplet.play' version '3.6.0' +} + +// Use a plugin to derive a version name (e.g. 3.7) and monotonically increasing version code (e.g. 1372) +apply plugin: 'me.moallemi.advanced-build-version' +advancedVersioning { + nameOptions { + versionMajor 3 + versionMinor 14 + versionPatch 0 + } + codeOptions { + versionCodeType 'GIT_COMMIT_COUNT' + } +} + +evaluationDependsOn(':libraries:cyclestreets-fragments') + +// derive signing config from license.properties (decrypted from license.properties.enc by ciLicense.sh) +def keystorePropertiesFile = file('license.properties') +if (!keystorePropertiesFile.exists()) { + logger.warn('NOTE: license.properties file not found: falling back to license.properties.dummy; the compiled artifact will have a dummy signature') + keystorePropertiesFile = file('license.properties.dummy') +} +def keystoreProperties = new Properties() +keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) + +android { + defaultConfig { + applicationId 'net.cyclestreets' + versionName advancedVersioning.versionName + versionCode advancedVersioning.versionCode + + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' + } + packagingOptions { + resources { + excludes += [ + 'META-INF/LICENSE', + 'META-INF/LICENSE.txt', + 'META-INF/DEPENDENCIES', + 'META-INF/NOTICE', + 'META-INF/NOTICE.txt' + ] + } + } + + + signingConfigs { + release { + keyAlias keystoreProperties['key.alias'] + keyPassword keystoreProperties['key.password'] + storeFile file(keystoreProperties['key.store']) + storePassword keystoreProperties['key.password'] + } + } + + buildTypes { +// If you have the decrypted keys locally, and need to use them to sign the debug variant so you can install it onto +// a real device for testing in advance of a beta build coming out, uncomment the following lines. +// debug { +// signingConfig signingConfigs.release +// } + release { + signingConfig signingConfigs.release + } + } + namespace 'net.cyclestreets' +} + +play { + // credentials file decrypted from play-api-key.json.enc by ciLicense.sh + serviceAccountCredentials.set(file('play-api-key.json')) + + track.set('beta') + + // If you want to update screenshots etc, check what 'publish' tasks are available by running + // `./gradlew tasks`, and refer to the documentation at https://github.com/Triple-T/gradle-play-publisher +} + +dependencies { + api project(':libraries:cyclestreets-fragments') + implementation 'androidx.startup:startup-runtime:1.2.0' + + androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' + androidTestImplementation 'androidx.test.ext:junit:1.2.1' + androidTestImplementation 'androidx.test:rules:1.6.1' + androidTestImplementation "org.assertj:assertj-core:${rootProject.ext.assertjVersion}" +} diff --git a/cyclestreets.app/keystore.dummy b/cyclestreets.app/keystore.dummy new file mode 100644 index 000000000..e5c24a8b4 Binary files /dev/null and b/cyclestreets.app/keystore.dummy differ diff --git a/cyclestreets.app/keystore.enc b/cyclestreets.app/keystore.enc new file mode 100644 index 000000000..c1006200c Binary files /dev/null and b/cyclestreets.app/keystore.enc differ diff --git a/cyclestreets.app/license.properties.dummy b/cyclestreets.app/license.properties.dummy new file mode 100644 index 000000000..f5146fb5d --- /dev/null +++ b/cyclestreets.app/license.properties.dummy @@ -0,0 +1,3 @@ +key.store=keystore.dummy +key.alias=dummy +key.password=dummy123 diff --git a/cyclestreets.app/license.properties.enc b/cyclestreets.app/license.properties.enc new file mode 100644 index 000000000..93e3fd52b --- /dev/null +++ b/cyclestreets.app/license.properties.enc @@ -0,0 +1 @@ +Salted__üÅÇë—TÒÏZßþz¸Þ)†Lk@ô27±O݈1× ný“-Êøßy¦ihN›·”þÂQe˜Ð=4½N6džM/¾æF•(”-A0íÚKÎù \ No newline at end of file diff --git a/cyclestreets.app/play-api-key.json.enc b/cyclestreets.app/play-api-key.json.enc new file mode 100644 index 000000000..ecb7ce21f Binary files /dev/null and b/cyclestreets.app/play-api-key.json.enc differ diff --git a/cyclestreets.app/signature.asc.enc b/cyclestreets.app/signature.asc.enc new file mode 100644 index 000000000..aeb944a89 Binary files /dev/null and b/cyclestreets.app/signature.asc.enc differ diff --git a/cyclestreets.app/src/androidTest/assets/cyclestreets_v3.db b/cyclestreets.app/src/androidTest/assets/cyclestreets_v3.db new file mode 100644 index 000000000..93d5f3fa8 Binary files /dev/null and b/cyclestreets.app/src/androidTest/assets/cyclestreets_v3.db differ diff --git a/cyclestreets.app/src/androidTest/java/net/cyclestreets/AppStartupTest.java b/cyclestreets.app/src/androidTest/java/net/cyclestreets/AppStartupTest.java new file mode 100644 index 000000000..7e0032494 --- /dev/null +++ b/cyclestreets.app/src/androidTest/java/net/cyclestreets/AppStartupTest.java @@ -0,0 +1,26 @@ +package net.cyclestreets; + +import androidx.test.filters.LargeTest; +import androidx.test.rule.ActivityTestRule; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + + +@Ignore("Needs an emulator running - not practical in Travis CI at the moment") +@RunWith(AndroidJUnit4.class) +@LargeTest +public class AppStartupTest { + + @Rule + public ActivityTestRule mActivityRule = new ActivityTestRule<>(CycleStreets.class); + + @Test + public void testAppStartup() throws Exception { + System.out.println("I've started up without crashing."); + Thread.sleep(240000L); + } +} diff --git a/cyclestreets.app/src/androidTest/java/net/cyclestreets/content/DatabaseUpgradeTest.java b/cyclestreets.app/src/androidTest/java/net/cyclestreets/content/DatabaseUpgradeTest.java new file mode 100644 index 000000000..f77781659 --- /dev/null +++ b/cyclestreets.app/src/androidTest/java/net/cyclestreets/content/DatabaseUpgradeTest.java @@ -0,0 +1,81 @@ +package net.cyclestreets.content; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.filters.LargeTest; +import androidx.test.rule.ActivityTestRule; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import android.util.Log; +import net.cyclestreets.CycleStreets; +import net.cyclestreets.util.Logging; +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.*; + +import static net.cyclestreets.content.DatabaseHelper.*; +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(AndroidJUnit4.class) +@LargeTest +public class DatabaseUpgradeTest { + private static final String TAG = Logging.getTag(DatabaseUpgradeTest.class); + + @Rule + public ActivityTestRule mActivityRule = new ActivityTestRule<>(CycleStreets.class); + + /** + * This test runs through all the database versions from the /androidTest/assets/ folder. It copies the old database to the file path of the application. + * It tests that the database upgrades to the correct version. + * If there is an issue with the upgrade, generally a SQLiteException will be thrown and the test will fail. + * for example: + * android.database.sqlite.SQLiteException: duplicate column name: calculated_pages_times_rating (code 1): , while compiling: ALTER TABLE book_information ADD COLUMN calculated_pages_times_rating INTEGER; + * + * @throws IOException if the database cannot be copied. + */ + @Test + public void testDatabaseUpgrades() throws IOException, InterruptedException { + for (int i = 3; i < DatabaseHelper.DATABASE_VERSION; i++) { + Log.d(TAG, "Testing upgrade from version:" + i); + copyDatabase(i); + + DatabaseHelper databaseHelper = new DatabaseHelper(InstrumentationRegistry.getInstrumentation().getTargetContext()); + Log.d(TAG, " New Database Version:" + databaseHelper.getWritableDatabase().getVersion()); + Assert.assertEquals(DatabaseHelper.DATABASE_VERSION, databaseHelper.getWritableDatabase().getVersion()); + logTableContents(databaseHelper.getReadableDatabase(), ROUTE_TABLE_OLD); + logTableContents(databaseHelper.getReadableDatabase(), ROUTE_TABLE); + logTableContents(databaseHelper.getReadableDatabase(), LOCATION_TABLE_OLD); + logTableContents(databaseHelper.getReadableDatabase(), LOCATION_TABLE); + } + + // After upgrading the DB, uncomment these lines and grab the next version so future testing can be perfornmed! + Log.i(TAG, "Sleeping to give a chance to run: ./adb pull /data/data/net.cyclestreets/databases/cyclestreets.db"); + Thread.sleep(240000L); + } + + private void copyDatabase(int version) throws IOException { + String dbPath = InstrumentationRegistry.getInstrumentation().getTargetContext().getDatabasePath(DatabaseHelper.DATABASE_NAME).getAbsolutePath(); + + String dbName = String.format("cyclestreets_v%d.db", version); + InputStream mInput = InstrumentationRegistry.getInstrumentation().getContext().getAssets().open(dbName); + + File db = new File(dbPath); + if (db.exists()) { + Log.i(TAG, "DB file " + dbPath + " already exists and is of size " + db.length() + " bytes"); + } else { + assertThat(db.getParentFile().mkdirs()).isTrue(); + assertThat(db.createNewFile()).isTrue(); + } + OutputStream mOutput = new FileOutputStream(dbPath); + byte[] mBuffer = new byte[1024]; + int mLength; + while ((mLength = mInput.read(mBuffer)) > 0) { + mOutput.write(mBuffer, 0, mLength); + } + mOutput.flush(); + mOutput.close(); + mInput.close(); + Log.i(TAG, "DB file " + dbPath + " now has size " + db.length() + " bytes"); + } +} diff --git a/cyclestreets.app/src/main/AndroidManifest.xml b/cyclestreets.app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..53ca4939d --- /dev/null +++ b/cyclestreets.app/src/main/AndroidManifest.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cyclestreets.app/src/main/assets/credits.html b/cyclestreets.app/src/main/assets/credits.html new file mode 100644 index 000000000..61a09e222 --- /dev/null +++ b/cyclestreets.app/src/main/assets/credits.html @@ -0,0 +1,107 @@ + + + + + + + + + + + +
+ CycleStreets +
UK-wide cycle journey planner +
Cycle navigation for cyclists, by cyclists +
+

Mapping Data

+

+ Mapping data courtesy of OpenStreetMap. Without OSM mappers + on the ground collecting great data, CycleStreets would not be possible. OpenStreetMap is open data, + licensed under the Open Data Commons Open Database License (ODbL). +

+

+ OpenStreetMap is the Wiki of maps. + You can help improve the routing and location data by going to + www.cyclestreets.net/edit and contributing your local knowledge! +

+

+ Map tiles thanks to:

+
OpenStreetMap
+
Tile cartography licensed under the Creative Commons Attribution-ShareAlike + 2.0 license and are © OpenStreetMap contributors
+
OpenCycleMap
+
Maps © Thunderforest, data © OpenStreetMap contributors
+
Ordnance Survey Open Data
+
Contains Ordnance Survey Data © Crown copyright and database right 2010
+
+

+
+

Routing

+

+ Routing by ourselves! - CycleStreets +

+

+ Feedback on planned routes is very welcome, by using the Comment on this route menu item + or our general feedback form. + User feedback helps us improve our algorithms and data. +

+
+

Android App

+

+ Android App written by Jez Higgins and Oliver Lockwood, with contributions from Christopher Fraser, Jonathan Gray, + Theodore Hong, Farid Kurbanov, kyegupov, Shaun McDonald, Hilary Newmark, Simon Nuttall, John Singleton, Colin Watson. +

+

+ The App uses, with thanks, the following libraries: +

+
OSMDroid
+
OpenStreetMap tools for Android
+
Mapsforge
+
The Mapsforge project provides free and open software for rendering + of maps based on OpenStreetMap data. It offers a library for ad-hoc map + rendering on Android devices and in Java stand-alone applications.
+
GraphView
+
Open source graph plotting library for Android
+
Android-Iconics
+
Use any icon font, or vector (.svg) as drawable in your application
+
Android-Iconics
+
Kotlin extensions for Android-Iconics Library
+
Retrofit
+
A type-safe HTTP client for Android and Java
+
Jackson
+
JSON for Java
+
GeoJson-Jackson
+
GeoJson POJOs for Jackson - serialize and deserialize objects with ease
+
XmlToJson
+
Android Library for converting XML to JSON and JSON to XML
+
Jolt
+
JSON to JSON transformation library written in Java
+
+

+

+ Part of the development of this App was funded by Cycling Scotland. +

+
+

Copyright and License

+

+ CycleStreets Android App Copyright 2010-2025 CycleStreets Ltd. +

+

+ This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. +
+ This program is distributed in the hope it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +

+

The source code is available at http://github.com/cyclestreets/android + and your contributions are welcome.

+ + diff --git a/cyclestreets.app/src/main/assets/cyclestreets.png b/cyclestreets.app/src/main/assets/cyclestreets.png new file mode 100644 index 000000000..fb22c3f5b Binary files /dev/null and b/cyclestreets.app/src/main/assets/cyclestreets.png differ diff --git a/cyclestreets.app/src/main/assets/donate.html b/cyclestreets.app/src/main/assets/donate.html new file mode 100644 index 000000000..584151d27 --- /dev/null +++ b/cyclestreets.app/src/main/assets/donate.html @@ -0,0 +1,22 @@ + + + + + + +

CycleStreets is a community project run on a not-for-profit basis.

+ +

If you would like to support our work, please consider donating!

+ +

Donate!

+ +

https://www.cyclestreets.org/donate/

+ +

Thank you for your support!

+ + + \ No newline at end of file diff --git a/cyclestreets.vNext/src/main/assets/welcome.html b/cyclestreets.app/src/main/assets/welcome.html similarity index 84% rename from cyclestreets.vNext/src/main/assets/welcome.html rename to cyclestreets.app/src/main/assets/welcome.html index fad858bfb..576fdd527 100644 --- a/cyclestreets.vNext/src/main/assets/welcome.html +++ b/cyclestreets.app/src/main/assets/welcome.html @@ -3,4 +3,4 @@ for cyclists, and caters for the needs of both confident and less confident cyclists.

- + diff --git a/cyclestreets.app/src/main/assets/whatsnew.html b/cyclestreets.app/src/main/assets/whatsnew.html new file mode 100644 index 000000000..c2d0d8a17 --- /dev/null +++ b/cyclestreets.app/src/main/assets/whatsnew.html @@ -0,0 +1,255 @@ + + + + +

Release 3.14

+Corrected a problem saving the account details. You may need to sign in again to upload photos to the Photomap. +Using the Saved Locations setting no longer causes a crash. +We have updated some of our dependencies. + + diff --git a/cyclestreets.app/src/main/ic_launcher-web.png b/cyclestreets.app/src/main/ic_launcher-web.png new file mode 100644 index 000000000..33c5cc0db Binary files /dev/null and b/cyclestreets.app/src/main/ic_launcher-web.png differ diff --git a/cyclestreets.app/src/main/java/net/cyclestreets/AboutActivity.java b/cyclestreets.app/src/main/java/net/cyclestreets/AboutActivity.java new file mode 100644 index 000000000..141a43603 --- /dev/null +++ b/cyclestreets.app/src/main/java/net/cyclestreets/AboutActivity.java @@ -0,0 +1,7 @@ +package net.cyclestreets; + +import androidx.fragment.app.Fragment; + +public class AboutActivity extends FragmentHolder { + protected Fragment fragment() { return new AboutFragment(); } +} diff --git a/cyclestreets.app/src/main/java/net/cyclestreets/CycleStreets.kt b/cyclestreets.app/src/main/java/net/cyclestreets/CycleStreets.kt new file mode 100644 index 000000000..6a4800426 --- /dev/null +++ b/cyclestreets.app/src/main/java/net/cyclestreets/CycleStreets.kt @@ -0,0 +1,37 @@ +package net.cyclestreets + +import android.content.Intent +import android.os.Bundle + +class CycleStreets : MainNavDrawerActivity(), RouteMapActivity, PhotoMapActivity { + public override fun onCreate(savedInstanceState: Bundle?) { + MainSupport.switchMapFile(intent, this) + + super.onCreate(savedInstanceState) + + MainSupport.handleLaunchIntent(intent, this) + } + + override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + intent?.let { + MainSupport.handleLaunchIntent(it, this) + } + } + + override fun onFirstRun() { + Welcome.welcome(this) + } + + override fun onNewVersion() { + Welcome.whatsNew(this) + } + + override fun showRouteMap() { + showPage(R.id.nav_journey_planner) + } + + override fun showPhotoMap() { + showPage(R.id.nav_photomap) + } +} diff --git a/cyclestreets.app/src/main/java/net/cyclestreets/CycleStreetsApp.java b/cyclestreets.app/src/main/java/net/cyclestreets/CycleStreetsApp.java new file mode 100644 index 000000000..889ea0df7 --- /dev/null +++ b/cyclestreets.app/src/main/java/net/cyclestreets/CycleStreetsApp.java @@ -0,0 +1,12 @@ +package net.cyclestreets; + +import android.app.Application; + +public class CycleStreetsApp extends Application { + @Override + public void onCreate() { + super.onCreate(); + + CycleStreetsAppSupport.initialise(this, R.xml.prefs); + } +} diff --git a/cyclestreets.app/src/main/java/net/cyclestreets/LocationsActivity.java b/cyclestreets.app/src/main/java/net/cyclestreets/LocationsActivity.java new file mode 100644 index 000000000..70c848d4d --- /dev/null +++ b/cyclestreets.app/src/main/java/net/cyclestreets/LocationsActivity.java @@ -0,0 +1,7 @@ +package net.cyclestreets; + +import androidx.fragment.app.Fragment; + +public class LocationsActivity extends FragmentHolder { + protected Fragment fragment() { return new LocationsFragment(); } +} diff --git a/cyclestreets.vNext/src/main/java/net/cyclestreets/Welcome.java b/cyclestreets.app/src/main/java/net/cyclestreets/Welcome.java similarity index 90% rename from cyclestreets.vNext/src/main/java/net/cyclestreets/Welcome.java rename to cyclestreets.app/src/main/java/net/cyclestreets/Welcome.java index 2c3b77679..9fa6f3958 100644 --- a/cyclestreets.vNext/src/main/java/net/cyclestreets/Welcome.java +++ b/cyclestreets.app/src/main/java/net/cyclestreets/Welcome.java @@ -11,13 +11,13 @@ public static void welcome(final Context context) { launch(context, "CycleStreets", "file:///android_asset/welcome.html"); - } // welcome + } public static void whatsNew(final Context context) { launch(context, "CycleStreets - What's New", "file:///android_asset/whatsnew.html"); - } // whatsNew + } private static void launch( final Context context, @@ -33,6 +33,6 @@ private static void launch( final AlertDialog ad = builder.create(); ad.show(); - ad.getButton(AlertDialog.BUTTON_POSITIVE).setTextAppearance(context, android.R.style.TextAppearance_Large); - } // launch -} // Welcome + ad.getButton(AlertDialog.BUTTON_POSITIVE).setTextAppearance(android.R.style.TextAppearance_Large); + } +} diff --git a/cyclestreets.app/src/main/play/contact-email.txt b/cyclestreets.app/src/main/play/contact-email.txt new file mode 100644 index 000000000..720b2d64a --- /dev/null +++ b/cyclestreets.app/src/main/play/contact-email.txt @@ -0,0 +1 @@ +info@cyclestreets.net diff --git a/cyclestreets.app/src/main/play/contact-website.txt b/cyclestreets.app/src/main/play/contact-website.txt new file mode 100644 index 000000000..affeb6ebd --- /dev/null +++ b/cyclestreets.app/src/main/play/contact-website.txt @@ -0,0 +1 @@ +https://www.cyclestreets.net diff --git a/cyclestreets.app/src/main/play/default-language.txt b/cyclestreets.app/src/main/play/default-language.txt new file mode 100644 index 000000000..d6e549e65 --- /dev/null +++ b/cyclestreets.app/src/main/play/default-language.txt @@ -0,0 +1 @@ +en-GB diff --git a/cyclestreets.app/src/main/play/listings/en-GB/full-description.txt b/cyclestreets.app/src/main/play/listings/en-GB/full-description.txt new file mode 100644 index 000000000..c3b76304b --- /dev/null +++ b/cyclestreets.app/src/main/play/listings/en-GB/full-description.txt @@ -0,0 +1,31 @@ +Plan routes from A to B anywhere in the UK, with a choice of routing modes to suit a range of cyclists from beginner through regular commuter to enthusiast. The Photomap lets you submit photos of infrastructure problems or good practice around the UK. + +PLAN BIKE NAVIGATION FROM A TO B TO C + +Select a start and finish point, plus intermediate waypoints, by tapping on the map, by searching for names/places/postcodes, or by using your current location, and tap to obtain the route. Uses the general street network, plus Sustrans and other routes. + +CHOICE OF FOUR ROUTING MODES + +The app produces routes that will suit most cyclists. It can optionally can find faster or quieter routes for different types of rider. Routes are fetched from the CycleStreets website. + +HILLS? NO PROBLEM! + +The journey planner knows about hills, and finds routes that take advantage of the descents and avoids the ascents where possible. It balances these against the available road types. The route can be displayed on a map with contours using the OpenCycleMap option. + +STAGE-BY-STAGE ITINERARY + +As well as the main map view, planned routes are loaded into an itinerary view, so you can follow each part of the journey. The street name, time and length are all shown, as is a detailed map for each individual stage of the journey. Routes are saved so you can also follow them again later. + +PHOTOMAP + +The Photomap is a cycling advocacy tool used by campaign groups around the country. Use it to browse examples of problems or good practice, and add your own pictures. Need more cycle parking in your favourite spot in town? Sign in with a free account and add a photo of it to the Photomap. + +OPENSTREETMAP + +Routing makes use of OpenStreetMap data, the brilliant 'geo-wiki' to which you can contribute. Note that, at present, some areas of the country have better coverage than others. Streets and paths of all kinds, including Sustrans routes and Local Authority network, are included. Routing quality is being developed all the time, with new types of cycling and street data being added and interpreted by the route planner. + +THANKS + +Android App written by our great volunteers: Jez Higgins and Oliver Lockwood, with contributions from Christopher Fraser, Jonathan Gray, Theodore Hong, Farid Kurbanov, kyegupov, Shaun McDonald, Hilary Newmark, Simon Nuttall, John Singleton, Colin Watson. + +Part of the development of this App has been funded by Cycling Scotland. diff --git a/cyclestreets.app/src/main/play/listings/en-GB/graphics/feature-graphic/1.png b/cyclestreets.app/src/main/play/listings/en-GB/graphics/feature-graphic/1.png new file mode 100644 index 000000000..d18a1420e Binary files /dev/null and b/cyclestreets.app/src/main/play/listings/en-GB/graphics/feature-graphic/1.png differ diff --git a/cyclestreets.app/src/main/play/listings/en-GB/graphics/icon/1.png b/cyclestreets.app/src/main/play/listings/en-GB/graphics/icon/1.png new file mode 100644 index 000000000..a2c5bde5d Binary files /dev/null and b/cyclestreets.app/src/main/play/listings/en-GB/graphics/icon/1.png differ diff --git a/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/1.png b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/1.png new file mode 100644 index 000000000..fadfa0c5d Binary files /dev/null and b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/1.png differ diff --git a/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/2.png b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/2.png new file mode 100644 index 000000000..763dac311 Binary files /dev/null and b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/2.png differ diff --git a/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/3.png b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/3.png new file mode 100644 index 000000000..17a0dfecb Binary files /dev/null and b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/3.png differ diff --git a/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/4.png b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/4.png new file mode 100644 index 000000000..3d5c94e8b Binary files /dev/null and b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/4.png differ diff --git a/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/5.png b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/5.png new file mode 100644 index 000000000..04785229b Binary files /dev/null and b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/5.png differ diff --git a/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/6.png b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/6.png new file mode 100644 index 000000000..1ab659a09 Binary files /dev/null and b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/6.png differ diff --git a/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/7.png b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/7.png new file mode 100644 index 000000000..4d773cdbd Binary files /dev/null and b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/7.png differ diff --git a/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/8.png b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/8.png new file mode 100644 index 000000000..b0fa7929f Binary files /dev/null and b/cyclestreets.app/src/main/play/listings/en-GB/graphics/phone-screenshots/8.png differ diff --git a/cyclestreets.app/src/main/play/listings/en-GB/short-description.txt b/cyclestreets.app/src/main/play/listings/en-GB/short-description.txt new file mode 100644 index 000000000..4974b9544 --- /dev/null +++ b/cyclestreets.app/src/main/play/listings/en-GB/short-description.txt @@ -0,0 +1 @@ +UK-wide cycle journey planner - cycle navigation for cyclists, by cyclists. diff --git a/cyclestreets.app/src/main/play/listings/en-GB/title.txt b/cyclestreets.app/src/main/play/listings/en-GB/title.txt new file mode 100644 index 000000000..9b95a64ab --- /dev/null +++ b/cyclestreets.app/src/main/play/listings/en-GB/title.txt @@ -0,0 +1 @@ +CycleStreets journey planner diff --git a/cyclestreets.app/src/main/play/release-notes/en-GB/beta.txt b/cyclestreets.app/src/main/play/release-notes/en-GB/beta.txt new file mode 100644 index 000000000..500f42891 --- /dev/null +++ b/cyclestreets.app/src/main/play/release-notes/en-GB/beta.txt @@ -0,0 +1,6 @@ +Corrected a problem saving the account details. You may need +to sign in again to upload photos to the Photomap. + +Using the Saved Locations setting no longer causes a crash. + +We have updated some of our dependencies. diff --git a/cyclestreets.app/src/main/play/release-notes/en-GB/production.txt b/cyclestreets.app/src/main/play/release-notes/en-GB/production.txt new file mode 100644 index 000000000..e6a51fa98 --- /dev/null +++ b/cyclestreets.app/src/main/play/release-notes/en-GB/production.txt @@ -0,0 +1,6 @@ +Corrected a problem saving the account details. You may need +to sign in again to upload photos to the Photomap. + +Using the Saved Locations setting no longer causes a crash. + +We have updated some of our dependencies. \ No newline at end of file diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_off_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_off_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_off_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_off_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_off_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_off_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_off_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_off_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_off_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_off_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_off_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_off_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_off_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_off_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_off_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_off_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_off_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_off_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_off_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_off_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_on_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_on_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_on_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_on_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_on_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_on_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_on_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_on_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_on_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_on_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_on_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_on_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_on_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_on_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_on_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_on_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_on_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_on_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_check_on_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_check_on_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_default_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_default_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_default_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_default_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_default_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_default_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_default_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_default_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_default_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_default_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_default_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_default_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_default_normal_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_default_normal_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_default_normal_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_default_normal_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_default_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_default_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_default_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_default_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_off_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_off_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_off_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_off_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_off_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_off_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_off_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_off_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_off_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_off_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_off_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_off_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_off_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_off_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_off_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_off_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_on_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_on_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_on_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_on_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_on_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_on_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_on_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_on_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_on_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_on_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_on_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_on_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_on_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_on_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_radio_on_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_radio_on_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_normal_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_normal_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_normal_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_normal_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_normal_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_normal_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_normal_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_normal_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_default_holo.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_default_holo.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_default_holo.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_default_holo.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_pressed_holo.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_pressed_holo.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_pressed_holo.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_fastscroll_thumb_pressed_holo.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_list_activated_holo.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_list_activated_holo.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_list_activated_holo.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_list_activated_holo.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_list_focused_holo.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_list_focused_holo.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_list_focused_holo.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_list_focused_holo.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_list_longpressed_holo.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_list_longpressed_holo.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_list_longpressed_holo.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_list_longpressed_holo.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_list_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_list_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_list_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_list_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_list_selector_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_list_selector_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_list_selector_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_list_selector_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progress_bg_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progress_bg_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progress_bg_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progress_bg_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progress_primary_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progress_primary_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progress_primary_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progress_primary_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progress_secondary_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progress_secondary_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progress_secondary_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progress_secondary_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo1.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo1.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo1.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo1.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo2.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo2.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo2.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo2.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo3.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo3.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo3.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo3.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo4.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo4.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo4.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo4.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo5.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo5.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo5.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo5.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo6.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo6.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo6.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo6.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo7.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo7.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo7.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo7.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo8.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo8.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo8.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_progressbar_indeterminate_holo8.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_spinner_default_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_spinner_default_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_spinner_default_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_spinner_default_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_spinner_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_spinner_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_spinner_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_spinner_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_spinner_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_spinner_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_spinner_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_spinner_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_spinner_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_spinner_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_spinner_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_spinner_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_text_select_handle_left.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_text_select_handle_left.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_text_select_handle_left.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_text_select_handle_left.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_text_select_handle_middle.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_text_select_handle_middle.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_text_select_handle_middle.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_text_select_handle_middle.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_text_select_handle_right.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_text_select_handle_right.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_text_select_handle_right.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_text_select_handle_right.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_textfield_activated_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_textfield_activated_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_textfield_activated_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_textfield_activated_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_textfield_default_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_textfield_default_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_textfield_default_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_textfield_default_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_textfield_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_textfield_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_textfield_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_textfield_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_textfield_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_textfield_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_textfield_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_textfield_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_textfield_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-hdpi/apptheme_textfield_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_textfield_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-hdpi/apptheme_textfield_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_off_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_off_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_off_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_off_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_off_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_off_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_off_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_off_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_off_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_off_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_off_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_off_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_off_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_off_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_off_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_off_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_off_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_off_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_off_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_off_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_on_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_on_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_on_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_on_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_on_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_on_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_on_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_on_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_on_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_on_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_on_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_on_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_on_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_on_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_on_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_on_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_on_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_on_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_check_on_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_check_on_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_default_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_default_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_default_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_default_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_default_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_default_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_default_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_default_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_default_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_default_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_default_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_default_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_default_normal_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_default_normal_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_default_normal_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_default_normal_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_default_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_default_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_default_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_default_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_off_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_off_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_off_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_off_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_off_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_off_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_off_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_off_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_off_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_off_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_off_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_off_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_off_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_off_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_off_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_off_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_on_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_on_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_on_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_on_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_on_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_on_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_on_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_on_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_on_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_on_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_on_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_on_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_on_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_on_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_radio_on_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_radio_on_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_normal_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_normal_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_normal_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_normal_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_normal_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_normal_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_normal_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_normal_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_default_holo.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_default_holo.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_default_holo.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_default_holo.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_pressed_holo.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_pressed_holo.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_pressed_holo.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_fastscroll_thumb_pressed_holo.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_list_activated_holo.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_list_activated_holo.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_list_activated_holo.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_list_activated_holo.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_list_focused_holo.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_list_focused_holo.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_list_focused_holo.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_list_focused_holo.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_list_longpressed_holo.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_list_longpressed_holo.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_list_longpressed_holo.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_list_longpressed_holo.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_list_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_list_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_list_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_list_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_list_selector_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_list_selector_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_list_selector_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_list_selector_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progress_bg_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progress_bg_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progress_bg_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progress_bg_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progress_primary_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progress_primary_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progress_primary_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progress_primary_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progress_secondary_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progress_secondary_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progress_secondary_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progress_secondary_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo1.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo1.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo1.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo1.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo2.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo2.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo2.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo2.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo3.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo3.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo3.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo3.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo4.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo4.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo4.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo4.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo5.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo5.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo5.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo5.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo6.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo6.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo6.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo6.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo7.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo7.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo7.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo7.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo8.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo8.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo8.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_progressbar_indeterminate_holo8.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_spinner_default_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_spinner_default_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_spinner_default_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_spinner_default_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_spinner_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_spinner_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_spinner_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_spinner_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_spinner_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_spinner_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_spinner_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_spinner_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_spinner_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_spinner_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_spinner_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_spinner_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_text_select_handle_left.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_text_select_handle_left.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_text_select_handle_left.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_text_select_handle_left.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_text_select_handle_middle.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_text_select_handle_middle.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_text_select_handle_middle.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_text_select_handle_middle.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_text_select_handle_right.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_text_select_handle_right.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_text_select_handle_right.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_text_select_handle_right.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_textfield_activated_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_textfield_activated_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_textfield_activated_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_textfield_activated_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_textfield_default_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_textfield_default_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_textfield_default_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_textfield_default_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_textfield_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_textfield_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_textfield_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_textfield_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_textfield_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_textfield_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_textfield_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_textfield_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_textfield_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-mdpi/apptheme_textfield_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_textfield_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-mdpi/apptheme_textfield_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_off_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_off_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_off_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_off_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_off_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_off_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_off_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_off_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_off_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_off_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_off_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_off_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_off_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_off_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_off_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_off_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_off_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_off_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_off_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_off_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_on_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_on_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_on_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_on_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_on_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_on_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_on_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_on_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_on_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_on_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_on_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_on_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_on_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_on_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_on_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_on_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_on_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_on_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_check_on_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_check_on_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_default_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_default_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_default_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_default_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_default_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_default_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_default_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_default_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_default_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_default_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_default_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_default_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_default_normal_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_default_normal_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_default_normal_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_default_normal_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_default_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_default_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_default_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_default_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_off_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_radio_on_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_normal_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_normal_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_normal_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_normal_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_normal_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_normal_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_normal_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_normal_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_default_holo.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_default_holo.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_default_holo.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_default_holo.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_pressed_holo.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_pressed_holo.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_pressed_holo.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_fastscroll_thumb_pressed_holo.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_list_activated_holo.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_list_activated_holo.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_list_activated_holo.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_list_activated_holo.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_list_focused_holo.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_list_focused_holo.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_list_focused_holo.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_list_focused_holo.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_list_longpressed_holo.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_list_longpressed_holo.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_list_longpressed_holo.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_list_longpressed_holo.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_list_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_list_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_list_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_list_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_list_selector_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_list_selector_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_list_selector_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_list_selector_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progress_bg_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progress_bg_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progress_bg_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progress_bg_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progress_primary_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progress_primary_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progress_primary_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progress_primary_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progress_secondary_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progress_secondary_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progress_secondary_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progress_secondary_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo1.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo1.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo1.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo1.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo2.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo2.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo2.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo2.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo3.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo3.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo3.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo3.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo4.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo4.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo4.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo4.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo5.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo5.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo5.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo5.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo6.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo6.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo6.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo6.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo7.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo7.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo7.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo7.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo8.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo8.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo8.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_progressbar_indeterminate_holo8.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_spinner_default_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_spinner_default_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_spinner_default_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_spinner_default_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_spinner_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_spinner_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_spinner_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_spinner_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_spinner_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_spinner_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_spinner_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_spinner_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_spinner_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_spinner_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_spinner_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_spinner_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_text_select_handle_left.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_text_select_handle_left.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_text_select_handle_left.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_text_select_handle_left.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_text_select_handle_middle.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_text_select_handle_middle.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_text_select_handle_middle.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_text_select_handle_middle.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_text_select_handle_right.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_text_select_handle_right.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_text_select_handle_right.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_text_select_handle_right.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_textfield_activated_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_textfield_activated_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_textfield_activated_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_textfield_activated_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_textfield_default_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_textfield_default_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_textfield_default_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_textfield_default_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_textfield_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_textfield_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_textfield_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_textfield_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_textfield_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_textfield_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_textfield_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_textfield_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_textfield_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_textfield_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_textfield_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xhdpi/apptheme_textfield_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_off_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_check_on_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_default_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_default_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_default_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_default_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_default_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_default_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_default_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_default_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_default_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_default_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_default_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_default_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_default_normal_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_default_normal_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_default_normal_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_default_normal_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_default_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_default_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_default_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_default_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_off_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_disabled_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_disabled_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_disabled_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_disabled_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_disabled_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_focused_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_focused_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_focused_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_focused_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_pressed_holo_light.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_pressed_holo_light.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_pressed_holo_light.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_radio_on_pressed_holo_light.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_normal_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_normal_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_normal_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_normal_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_off_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_normal_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_normal_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_normal_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_normal_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_btn_toggle_on_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_default_holo.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_default_holo.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_default_holo.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_default_holo.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_pressed_holo.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_pressed_holo.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_pressed_holo.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_fastscroll_thumb_pressed_holo.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_list_activated_holo.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_list_activated_holo.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_list_activated_holo.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_list_activated_holo.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_list_focused_holo.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_list_focused_holo.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_list_focused_holo.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_list_focused_holo.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_list_longpressed_holo.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_list_longpressed_holo.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_list_longpressed_holo.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_list_longpressed_holo.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_list_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_list_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_list_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_list_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_list_selector_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_list_selector_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_list_selector_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_list_selector_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progress_bg_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progress_bg_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progress_bg_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progress_bg_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progress_primary_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progress_primary_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progress_primary_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progress_primary_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progress_secondary_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progress_secondary_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progress_secondary_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progress_secondary_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo1.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo1.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo1.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo1.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo2.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo2.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo2.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo2.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo3.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo3.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo3.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo3.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo4.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo4.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo4.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo4.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo5.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo5.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo5.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo5.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo6.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo6.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo6.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo6.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo7.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo7.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo7.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo7.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo8.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo8.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo8.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_progressbar_indeterminate_holo8.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_spinner_default_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_spinner_default_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_spinner_default_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_spinner_default_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_spinner_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_spinner_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_spinner_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_spinner_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_spinner_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_spinner_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_spinner_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_spinner_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_spinner_pressed_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_spinner_pressed_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_spinner_pressed_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_spinner_pressed_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_text_select_handle_left.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_text_select_handle_left.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_text_select_handle_left.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_text_select_handle_left.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_text_select_handle_middle.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_text_select_handle_middle.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_text_select_handle_middle.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_text_select_handle_middle.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_text_select_handle_right.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_text_select_handle_right.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_text_select_handle_right.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_text_select_handle_right.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_textfield_activated_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_textfield_activated_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_textfield_activated_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_textfield_activated_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_textfield_default_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_textfield_default_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_textfield_default_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_textfield_default_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_textfield_disabled_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_textfield_disabled_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_textfield_disabled_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_textfield_disabled_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_textfield_disabled_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_textfield_disabled_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_textfield_disabled_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_textfield_disabled_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_textfield_focused_holo_light.9.png b/cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_textfield_focused_holo_light.9.png similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_textfield_focused_holo_light.9.png rename to cyclestreets.app/src/main/res/drawable-xxhdpi/apptheme_textfield_focused_holo_light.9.png diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_activated_background_holo_light.xml b/cyclestreets.app/src/main/res/drawable/apptheme_activated_background_holo_light.xml similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable/apptheme_activated_background_holo_light.xml rename to cyclestreets.app/src/main/res/drawable/apptheme_activated_background_holo_light.xml diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_btn_check_holo_light.xml b/cyclestreets.app/src/main/res/drawable/apptheme_btn_check_holo_light.xml similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable/apptheme_btn_check_holo_light.xml rename to cyclestreets.app/src/main/res/drawable/apptheme_btn_check_holo_light.xml diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_btn_default_holo_light.xml b/cyclestreets.app/src/main/res/drawable/apptheme_btn_default_holo_light.xml similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable/apptheme_btn_default_holo_light.xml rename to cyclestreets.app/src/main/res/drawable/apptheme_btn_default_holo_light.xml diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_btn_radio_holo_light.xml b/cyclestreets.app/src/main/res/drawable/apptheme_btn_radio_holo_light.xml similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable/apptheme_btn_radio_holo_light.xml rename to cyclestreets.app/src/main/res/drawable/apptheme_btn_radio_holo_light.xml diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_btn_toggle_holo_light.xml b/cyclestreets.app/src/main/res/drawable/apptheme_btn_toggle_holo_light.xml similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable/apptheme_btn_toggle_holo_light.xml rename to cyclestreets.app/src/main/res/drawable/apptheme_btn_toggle_holo_light.xml diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_edit_text_holo_light.xml b/cyclestreets.app/src/main/res/drawable/apptheme_edit_text_holo_light.xml similarity index 98% rename from cyclestreets.vNext/src/main/res/drawable/apptheme_edit_text_holo_light.xml rename to cyclestreets.app/src/main/res/drawable/apptheme_edit_text_holo_light.xml index 26e8fbe9b..92add23d7 100755 --- a/cyclestreets.vNext/src/main/res/drawable/apptheme_edit_text_holo_light.xml +++ b/cyclestreets.app/src/main/res/drawable/apptheme_edit_text_holo_light.xml @@ -4,9 +4,9 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -22,4 +22,4 @@ - \ No newline at end of file + diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_fastscroll_thumb_holo.xml b/cyclestreets.app/src/main/res/drawable/apptheme_fastscroll_thumb_holo.xml similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable/apptheme_fastscroll_thumb_holo.xml rename to cyclestreets.app/src/main/res/drawable/apptheme_fastscroll_thumb_holo.xml diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_list_selector_background_transition_holo_light.xml b/cyclestreets.app/src/main/res/drawable/apptheme_list_selector_background_transition_holo_light.xml similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable/apptheme_list_selector_background_transition_holo_light.xml rename to cyclestreets.app/src/main/res/drawable/apptheme_list_selector_background_transition_holo_light.xml diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_list_selector_holo_light.xml b/cyclestreets.app/src/main/res/drawable/apptheme_list_selector_holo_light.xml similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable/apptheme_list_selector_holo_light.xml rename to cyclestreets.app/src/main/res/drawable/apptheme_list_selector_holo_light.xml diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_progress_horizontal_holo_light.xml b/cyclestreets.app/src/main/res/drawable/apptheme_progress_horizontal_holo_light.xml similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable/apptheme_progress_horizontal_holo_light.xml rename to cyclestreets.app/src/main/res/drawable/apptheme_progress_horizontal_holo_light.xml diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_progress_indeterminate_horizontal_holo_light.xml b/cyclestreets.app/src/main/res/drawable/apptheme_progress_indeterminate_horizontal_holo_light.xml similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable/apptheme_progress_indeterminate_horizontal_holo_light.xml rename to cyclestreets.app/src/main/res/drawable/apptheme_progress_indeterminate_horizontal_holo_light.xml diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_spinner_background_holo_light.xml b/cyclestreets.app/src/main/res/drawable/apptheme_spinner_background_holo_light.xml similarity index 100% rename from cyclestreets.vNext/src/main/res/drawable/apptheme_spinner_background_holo_light.xml rename to cyclestreets.app/src/main/res/drawable/apptheme_spinner_background_holo_light.xml diff --git a/cyclestreets.app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/cyclestreets.app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 000000000..036d09bc5 --- /dev/null +++ b/cyclestreets.app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/cyclestreets.app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/cyclestreets.app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 000000000..036d09bc5 --- /dev/null +++ b/cyclestreets.app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/cyclestreets.app/src/main/res/mipmap-hdpi/ic_launcher.png b/cyclestreets.app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..26756ec07 Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/cyclestreets.app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 000000000..1f7ffbe9b Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/cyclestreets.app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 000000000..d04ee7882 Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-mdpi/ic_launcher.png b/cyclestreets.app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..c02e20ea4 Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/cyclestreets.app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 000000000..66f3d4166 Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/cyclestreets.app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 000000000..3b08a8aba Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-xhdpi/ic_launcher.png b/cyclestreets.app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..c52f7f007 Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/cyclestreets.app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 000000000..d99ebde99 Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/cyclestreets.app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 000000000..25bfb0890 Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/cyclestreets.app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..054ade130 Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/cyclestreets.app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 000000000..1b688731e Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/cyclestreets.app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 000000000..5b69d79ae Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/cyclestreets.app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..c81fef019 Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/cyclestreets.app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 000000000..3a6c4ca0a Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/cyclestreets.app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/cyclestreets.app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 000000000..f6d4d0885 Binary files /dev/null and b/cyclestreets.app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/cyclestreets.app/src/main/res/values-de/strings.xml b/cyclestreets.app/src/main/res/values-de/strings.xml new file mode 100644 index 000000000..d781ec5f1 --- /dev/null +++ b/cyclestreets.app/src/main/res/values-de/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/cyclestreets.app/src/main/res/values-es/strings.xml b/cyclestreets.app/src/main/res/values-es/strings.xml new file mode 100644 index 000000000..d781ec5f1 --- /dev/null +++ b/cyclestreets.app/src/main/res/values-es/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/cyclestreets.app/src/main/res/values-fr/strings.xml b/cyclestreets.app/src/main/res/values-fr/strings.xml new file mode 100644 index 000000000..d781ec5f1 --- /dev/null +++ b/cyclestreets.app/src/main/res/values-fr/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/cyclestreets.app/src/main/res/values-it/strings.xml b/cyclestreets.app/src/main/res/values-it/strings.xml new file mode 100644 index 000000000..d781ec5f1 --- /dev/null +++ b/cyclestreets.app/src/main/res/values-it/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/cyclestreets.app/src/main/res/values-pt/strings.xml b/cyclestreets.app/src/main/res/values-pt/strings.xml new file mode 100644 index 000000000..d781ec5f1 --- /dev/null +++ b/cyclestreets.app/src/main/res/values-pt/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/cyclestreets.app/src/main/res/values-ru/strings.xml b/cyclestreets.app/src/main/res/values-ru/strings.xml new file mode 100644 index 000000000..d781ec5f1 --- /dev/null +++ b/cyclestreets.app/src/main/res/values-ru/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/cyclestreets.app/src/main/res/values-tr/strings.xml b/cyclestreets.app/src/main/res/values-tr/strings.xml new file mode 100644 index 000000000..d781ec5f1 --- /dev/null +++ b/cyclestreets.app/src/main/res/values-tr/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/cyclestreets.app/src/main/res/values/ic_launcher_background.xml b/cyclestreets.app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 000000000..bc0c76b00 --- /dev/null +++ b/cyclestreets.app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #F9F7EB + \ No newline at end of file diff --git a/cyclestreets.app/src/main/res/values/strings.xml b/cyclestreets.app/src/main/res/values/strings.xml new file mode 100644 index 000000000..d781ec5f1 --- /dev/null +++ b/cyclestreets.app/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/cyclestreets.app/src/main/res/values/styles_apptheme.xml b/cyclestreets.app/src/main/res/values/styles_apptheme.xml new file mode 100755 index 000000000..34c71c700 --- /dev/null +++ b/cyclestreets.app/src/main/res/values/styles_apptheme.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cyclestreets.app/src/main/res/values/themes_apptheme.xml b/cyclestreets.app/src/main/res/values/themes_apptheme.xml new file mode 100755 index 000000000..69c2d9e17 --- /dev/null +++ b/cyclestreets.app/src/main/res/values/themes_apptheme.xml @@ -0,0 +1,45 @@ + + + + + + + + diff --git a/cyclestreets.vNext/build.gradle b/cyclestreets.vNext/build.gradle deleted file mode 100644 index b117ef270..000000000 --- a/cyclestreets.vNext/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -evaluationDependsOn(':libraries:cyclestreets-fragments') - -dependencies { - compile project(':libraries:cyclestreets-fragments') - compile 'ch.acra:acra:4.9.0' - - androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support:support-annotations:23.4.0' -} - -android { - defaultConfig { - applicationId 'net.cyclestreets' - - testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' - } -} diff --git a/cyclestreets.vNext/gradle/wrapper/gradle-wrapper.jar b/cyclestreets.vNext/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index c97a8bdb9..000000000 Binary files a/cyclestreets.vNext/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/cyclestreets.vNext/gradle/wrapper/gradle-wrapper.properties b/cyclestreets.vNext/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 46a9213ec..000000000 --- a/cyclestreets.vNext/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Sat May 14 10:07:49 BST 2016 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-bin.zip diff --git a/cyclestreets.vNext/gradlew b/cyclestreets.vNext/gradlew deleted file mode 100755 index 91a7e269e..000000000 --- a/cyclestreets.vNext/gradlew +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/cyclestreets.vNext/gradlew.bat b/cyclestreets.vNext/gradlew.bat deleted file mode 100644 index aec99730b..000000000 --- a/cyclestreets.vNext/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/cyclestreets.vNext/src/androidTest/java/net/cyclestreets/AppStartupTest.java b/cyclestreets.vNext/src/androidTest/java/net/cyclestreets/AppStartupTest.java deleted file mode 100644 index 7550b8337..000000000 --- a/cyclestreets.vNext/src/androidTest/java/net/cyclestreets/AppStartupTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package net.cyclestreets; - -import android.support.test.rule.ActivityTestRule; -import android.support.test.runner.AndroidJUnit4; -import android.test.suitebuilder.annotation.LargeTest; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -@RunWith(AndroidJUnit4.class) -@LargeTest -public class AppStartupTest { - - @Rule - public ActivityTestRule mActivityRule = new ActivityTestRule<>(CycleStreets.class); - - @Test - public void testAppStartup() { - System.out.println("I've started up without crashing."); - } -} diff --git a/cyclestreets.vNext/src/main/AndroidManifest.xml b/cyclestreets.vNext/src/main/AndroidManifest.xml deleted file mode 100644 index b094afd27..000000000 --- a/cyclestreets.vNext/src/main/AndroidManifest.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cyclestreets.vNext/src/main/assets/credits.html b/cyclestreets.vNext/src/main/assets/credits.html deleted file mode 100644 index 410942fc5..000000000 --- a/cyclestreets.vNext/src/main/assets/credits.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - -
- CycleStreets -
UK-wide cycle journey planner -
Cycle navigation for cyclists, by cyclists -
-

Mapping Data

-

- Mapping data courtesy of OpenStreetMap. Without OSM mappers - on the ground collecting great data, CycleStreets would not be possible. OpenStreetMap is open data, - licensed under the Open Data Commons Open Database License (ODbL). -

-

- OpenStreetMap is the Wiki of maps. - You can help improve the routing and location data by going to - www.cyclestreets.net/edit and contributing your local knowledge! -

-

- Map tiles thanks to :

-
OpenStreetMap
-
Tile cartography licensed under the Creative Commons Attribution-ShareAlike - 2.0 license and are © OpenStreetMap contributors
-
OpenCycleMap
-
Maps © Thunderforest, data © OpenStreetMap contributors
-
Ordnance Survey Open Data
-
Contains Ordnance Survey Data © Crown copyright and database right 2010
-
-

-
-

Routing

-

- Routing by ourselves! - CycleStreets -

-

- Feedback on planned routes is very welcome, by using the Comment on this route menu item - or our general feedback form. - User feedback helps us improve our algorithms and data. -

-
-

Android App

-

- Android App written by Jez Higgins with contributions by Christopher Fraser, Jonathan - Gray, Theodore Hong, Farid Kurbanov, kyegupov, Shaun McDonald, Simon Nuttall, John Singleton, Colin Watson. -

-

- The App uses, with thanks, the following libraries : -

-
OSMDroid
-
OpenStreetMap tools for Android
-
Mapsforge
-
The Mapsforge project provides free and open software for rendering - of maps based on OpenStreetMap data. It offers a library for ad-hoc map - rendering on Android devices and in Java stand-alone applications.
-
ACRA
-
Application crash reporting for Android
-
-

-

- Part of the development of this App was funded by Cycling Scotland. -

-
-

Copyright and License

-

- CycleStreets Android App Copyright 2010-2016 CycleStreets Ltd. -

-

- This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. -
- This program is distributed in the hope it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. -

-

The source code is available at http://github.com/cyclestreets/android - and your contributions are welcome.

- - diff --git a/cyclestreets.vNext/src/main/assets/cyclestreets.jpg b/cyclestreets.vNext/src/main/assets/cyclestreets.jpg deleted file mode 100644 index 196697f47..000000000 Binary files a/cyclestreets.vNext/src/main/assets/cyclestreets.jpg and /dev/null differ diff --git a/cyclestreets.vNext/src/main/assets/donate.html b/cyclestreets.vNext/src/main/assets/donate.html deleted file mode 100644 index d679887b4..000000000 --- a/cyclestreets.vNext/src/main/assets/donate.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -

CycleStreets is a community project run on a not-for-profit basis.

- -

If you would like to support our work, please consider donating!

- -

Donate!

- -

http://www.cyclestreets.net/donate

- -

Thank you for your support!

- - - \ No newline at end of file diff --git a/cyclestreets.vNext/src/main/assets/whatsnew.html b/cyclestreets.vNext/src/main/assets/whatsnew.html deleted file mode 100644 index 61eacb7e3..000000000 --- a/cyclestreets.vNext/src/main/assets/whatsnew.html +++ /dev/null @@ -1,109 +0,0 @@ -

Release 3.4

-
    -
  • Voice navigation bug fixes - LiveRide speaks again
  • -
-

Release 3.3

-
    -
  • Fix start-up crash on some version of Android
  • -
  • Pebble integration fixes
  • -
- -

Release 3.2

-
    -
  • Get directions on your wrist - LiveRide integration with Pebble
  • -
  • LiveRide map bug fix
  • -
-

Release 3.1

-
    -
  • Bug fixes to menus, points of interest selection, and vector map rendering
  • -
-

Release 3.0

-
    -
  • Redesigned with a fresh look and feel
  • -
  • Clearer maps on high density screens
  • -
  • Performance improvements
  • -
- \ No newline at end of file diff --git a/cyclestreets.vNext/src/main/java/net/cyclestreets/AboutActivity.java b/cyclestreets.vNext/src/main/java/net/cyclestreets/AboutActivity.java deleted file mode 100644 index 2d42b3bc9..000000000 --- a/cyclestreets.vNext/src/main/java/net/cyclestreets/AboutActivity.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.cyclestreets; - -import android.support.v4.app.Fragment; - -public class AboutActivity extends FragmentHolder { - protected Fragment fragment() { return new AboutFragment(); } -} // AboutActivity diff --git a/cyclestreets.vNext/src/main/java/net/cyclestreets/BlogFragment.java b/cyclestreets.vNext/src/main/java/net/cyclestreets/BlogFragment.java deleted file mode 100644 index 07eba8a2b..000000000 --- a/cyclestreets.vNext/src/main/java/net/cyclestreets/BlogFragment.java +++ /dev/null @@ -1,121 +0,0 @@ -package net.cyclestreets; - -import android.content.Context; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import net.cyclestreets.api.Blog; - -import java.util.Timer; -import java.util.TimerTask; - -public class BlogFragment - extends WebPageFragment { - private static final String CycleStreetsBlogUrl = "https://www.cyclestreets.net/blog/"; - - public BlogFragment() { - super(CycleStreetsBlogUrl); - } // BlogFragment - - public View onCreateView( - final LayoutInflater inflater, - final ViewGroup container, - final Bundle saved) { - readUpdate(getActivity()); - return super.onCreateView(inflater, container, saved); - } // onCreateView - - ////////////////////////////////////////////////////////////////////////////////// - public static MainNavDrawerActivity.PageTitle blogTitle( - final Context context) { - final Context appContext = context.getApplicationContext(); - start(appContext); - - final String blogTitle = appContext.getString(R.string.cyclestreets_blog); - final String updateBlogTitle = appContext.getString(R.string.cyclestreets_blog_updates); - - return new MainNavDrawerActivity.PageTitle() { - @Override - public String title() { - return updateAvailable(appContext) ? updateBlogTitle : blogTitle; - } // title - }; - } // blogTitle - - ////////////////////////////////////////////////////////////////////////////////// - private final static long oneMinute = 1000*60; - private final static long aDay = 1000*60*60*24; // in milliseconds - private final static long initialDelay = oneMinute; - private final static long repeatPeriod = aDay; - - private static Timer updater_; - - private static void start( - final Context context) { - if (updater_ != null) - return; - updater_ = new Timer(); - updater_.schedule(new CheckBlogTask(context.getApplicationContext()), initialDelay, repeatPeriod); - } // schedule - - private static boolean updateAvailable( - final Context context) { - return prefs(context).getBoolean(UPDATE_AVAILABLE, false); - } // updateAvailable - - private static void readUpdate( - final Context context) { - final SharedPreferences.Editor edit = prefs(context).edit(); - edit.putBoolean(UPDATE_AVAILABLE, false); - edit.commit(); - } // readUpdate - - private static final String LAST_DATE = "lastDate"; - private static final String UPDATE_AVAILABLE = "updateAvailable"; - - private static String lastBlogUpdate( - final Context context) { - final SharedPreferences prefs = prefs(context); - return prefs.getString(LAST_DATE, null); - } // lastBlogUpdate - - private static void setLastBlogUpdate( - final Context context, - final String update) { - final SharedPreferences.Editor edit = prefs(context).edit(); - edit.putString(LAST_DATE, update); - edit.putBoolean(UPDATE_AVAILABLE, true); - edit.commit(); - } // setLastBlogUpdate - - private static SharedPreferences prefs( - final Context context) { - return context.getSharedPreferences("net.cyclestreets.blog", Context.MODE_PRIVATE); - } // prefs - - //////////////////////////////////////////////// - private static class CheckBlogTask extends TimerTask { - private final Context context_; - - private CheckBlogTask( - final Context context) { - context_ = context; - } // CheckBlogTask - - public void run() { - final Blog blog = Blog.load(); - - // check for new blog entries - if(blog.isNull()) - return; - - if(blog.mostRecent().equals(lastBlogUpdate(context_))) - return; - - setLastBlogUpdate(context_, blog.mostRecent()); - } // run - } // class CheckBlogTask -} // BlogFragment diff --git a/cyclestreets.vNext/src/main/java/net/cyclestreets/CycleStreets.java b/cyclestreets.vNext/src/main/java/net/cyclestreets/CycleStreets.java deleted file mode 100644 index 77a648cab..000000000 --- a/cyclestreets.vNext/src/main/java/net/cyclestreets/CycleStreets.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.cyclestreets; - -import android.os.Bundle; - -public class CycleStreets extends MainNavDrawerActivity - implements RouteMapActivity { - @Override - public void onCreate(final Bundle savedInstanceState) { - MainSupport.switchMapFile(getIntent()); - - super.onCreate(savedInstanceState); - - MainSupport.loadRoute(getIntent(), this); - } // onCreate - - @Override - protected void onFirstRun() { - Welcome.welcome(this); - } - - @Override - protected void onNewVersion() { - Welcome.whatsNew(this); - } // onFirstRun - - @Override - public void showMap() { - showPage(0); - } // showMap - - @Override - protected void addDrawerItems() { - addDrawerFragment(R.string.route_map, - R.drawable.ic_menu_mapmode, - RouteMapFragment.class); - addDrawerFragment(R.string.itinerary, - R.drawable.ic_menu_agenda, - ItineraryAndElevationFragment.class, - new RouteAvailablePageStatus()); - addDrawerFragment(R.string.photomap, - R.drawable.ic_menu_gallery, - PhotoMapFragment.class); - addDrawerFragment(R.string.photo_upload, - R.drawable.ic_menu_camera, - PhotoUploadFragment.class); - addDrawerFragment(BlogFragment.blogTitle(this), - -1, - BlogFragment.class); - addDrawerActivity(R.string.settings, - android.R.drawable.ic_menu_preferences, - SettingsActivity.class); - } // addDrawerItems -} // CycleStreets diff --git a/cyclestreets.vNext/src/main/java/net/cyclestreets/CycleStreetsApp.java b/cyclestreets.vNext/src/main/java/net/cyclestreets/CycleStreetsApp.java deleted file mode 100644 index 2e2f10a01..000000000 --- a/cyclestreets.vNext/src/main/java/net/cyclestreets/CycleStreetsApp.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.cyclestreets; - -import android.app.Application; - -import org.acra.ACRA; -import org.acra.ReportingInteractionMode; -import org.acra.annotation.ReportsCrashes; - -@ReportsCrashes( - mode = ReportingInteractionMode.NOTIFICATION, - resNotifTickerText = R.string.crash_notif_ticker_text, - resNotifTitle = R.string.crash_notif_title, - resNotifText = R.string.crash_notif_text, - resNotifIcon = android.R.drawable.stat_notify_error, // optional. default is a warning sign - resDialogText = R.string.crash_dialog_text, - resDialogIcon = android.R.drawable.ic_dialog_info, //optional. default is a warning sign - resDialogTitle = R.string.crash_dialog_title, // optional. default is your application name - resDialogCommentPrompt = R.string.crash_dialog_comment_prompt, // optional. when defined, adds a user text field input with this text resource as a label - resDialogOkToast = R.string.crash_dialog_ok_toast // optional. displays a Toast message when the user accepts to send a report. -) -public class CycleStreetsApp extends Application { - @Override - public void onCreate() { - ACRA.init(this); - super.onCreate(); - - CycleStreetsAppSupport.initialise(this, R.xml.prefs); - } // onCreate -} // CycleStreetsApp diff --git a/cyclestreets.vNext/src/main/java/net/cyclestreets/LocationsActivity.java b/cyclestreets.vNext/src/main/java/net/cyclestreets/LocationsActivity.java deleted file mode 100644 index 80e749b4a..000000000 --- a/cyclestreets.vNext/src/main/java/net/cyclestreets/LocationsActivity.java +++ /dev/null @@ -1,7 +0,0 @@ -package net.cyclestreets; - -import android.support.v4.app.Fragment; - -public class LocationsActivity extends FragmentHolder { - protected Fragment fragment() { return new LocationsFragment(); } -} // AboutActivity diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_ic_navigation_drawer.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_ic_navigation_drawer.png deleted file mode 100755 index 47432f384..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_ic_navigation_drawer.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_bg_disabled_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_bg_disabled_holo_light.9.png deleted file mode 100755 index f111d823f..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_bg_disabled_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_bg_focused_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_bg_focused_holo_light.9.png deleted file mode 100755 index 422397f3c..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_bg_focused_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_bg_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_bg_holo_light.9.png deleted file mode 100755 index 7abe99a5f..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_bg_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_thumb_activated_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_thumb_activated_holo_light.9.png deleted file mode 100755 index eb0f25af4..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_thumb_activated_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_thumb_disabled_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_thumb_disabled_holo_light.9.png deleted file mode 100755 index a257e26dd..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_thumb_disabled_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_thumb_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_thumb_holo_light.9.png deleted file mode 100755 index dd999d6de..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_thumb_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_thumb_pressed_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_thumb_pressed_holo_light.9.png deleted file mode 100755 index f8d7a3aba..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_switch_thumb_pressed_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_selected_focused_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_selected_focused_holo.9.png deleted file mode 100755 index 7473322e6..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_selected_focused_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_selected_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_selected_holo.9.png deleted file mode 100755 index a37090996..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_selected_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_selected_pressed_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_selected_pressed_holo.9.png deleted file mode 100755 index ecee18ef8..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_selected_pressed_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_unselected_focused_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_unselected_focused_holo.9.png deleted file mode 100755 index 9ee33398e..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_unselected_focused_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_unselected_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_unselected_holo.9.png deleted file mode 100755 index 8587c407b..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_unselected_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_unselected_pressed_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_unselected_pressed_holo.9.png deleted file mode 100755 index 840802a0c..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/apptheme_tab_unselected_pressed_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-hdpi/ic_launcher.png b/cyclestreets.vNext/src/main/res/drawable-hdpi/ic_launcher.png deleted file mode 100644 index 3f121013f..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-hdpi/ic_launcher.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_ic_navigation_drawer.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_ic_navigation_drawer.png deleted file mode 100755 index aa7bde00a..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_ic_navigation_drawer.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_bg_disabled_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_bg_disabled_holo_light.9.png deleted file mode 100755 index 1e56c3253..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_bg_disabled_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_bg_focused_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_bg_focused_holo_light.9.png deleted file mode 100755 index 6a192125c..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_bg_focused_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_bg_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_bg_holo_light.9.png deleted file mode 100755 index a2af2b5e2..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_bg_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_thumb_activated_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_thumb_activated_holo_light.9.png deleted file mode 100755 index ead772144..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_thumb_activated_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_thumb_disabled_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_thumb_disabled_holo_light.9.png deleted file mode 100755 index 82f05d623..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_thumb_disabled_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_thumb_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_thumb_holo_light.9.png deleted file mode 100755 index 9bc7a68e9..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_thumb_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_thumb_pressed_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_thumb_pressed_holo_light.9.png deleted file mode 100755 index c588d6f6d..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_switch_thumb_pressed_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_selected_focused_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_selected_focused_holo.9.png deleted file mode 100755 index 916c58bb8..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_selected_focused_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_selected_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_selected_holo.9.png deleted file mode 100755 index f6c6a2128..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_selected_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_selected_pressed_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_selected_pressed_holo.9.png deleted file mode 100755 index b62aecce3..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_selected_pressed_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_unselected_focused_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_unselected_focused_holo.9.png deleted file mode 100755 index 78a5449d4..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_unselected_focused_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_unselected_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_unselected_holo.9.png deleted file mode 100755 index ff063d758..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_unselected_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_unselected_pressed_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_unselected_pressed_holo.9.png deleted file mode 100755 index 5f56235da..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/apptheme_tab_unselected_pressed_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-mdpi/ic_launcher.png b/cyclestreets.vNext/src/main/res/drawable-mdpi/ic_launcher.png deleted file mode 100644 index 80ea5a971..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-mdpi/ic_launcher.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_ic_navigation_drawer.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_ic_navigation_drawer.png deleted file mode 100755 index 1787c68f4..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_ic_navigation_drawer.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_bg_disabled_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_bg_disabled_holo_light.9.png deleted file mode 100755 index 29f177a45..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_bg_disabled_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_bg_focused_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_bg_focused_holo_light.9.png deleted file mode 100755 index 8386af9b6..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_bg_focused_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_bg_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_bg_holo_light.9.png deleted file mode 100755 index aec616eaf..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_bg_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_thumb_activated_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_thumb_activated_holo_light.9.png deleted file mode 100755 index 6f9491057..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_thumb_activated_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_thumb_disabled_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_thumb_disabled_holo_light.9.png deleted file mode 100755 index c3d80f0eb..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_thumb_disabled_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_thumb_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_thumb_holo_light.9.png deleted file mode 100755 index df236df82..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_thumb_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_thumb_pressed_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_thumb_pressed_holo_light.9.png deleted file mode 100755 index 855dff302..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_switch_thumb_pressed_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_selected_focused_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_selected_focused_holo.9.png deleted file mode 100755 index 4db23a347..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_selected_focused_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_selected_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_selected_holo.9.png deleted file mode 100755 index 3a7211583..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_selected_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_selected_pressed_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_selected_pressed_holo.9.png deleted file mode 100755 index f576f98dc..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_selected_pressed_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_unselected_focused_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_unselected_focused_holo.9.png deleted file mode 100755 index 826a3193b..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_unselected_focused_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_unselected_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_unselected_holo.9.png deleted file mode 100755 index 933a8ae44..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_unselected_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_unselected_pressed_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_unselected_pressed_holo.9.png deleted file mode 100755 index 05b6edc5b..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/apptheme_tab_unselected_pressed_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xhdpi/ic_launcher.png b/cyclestreets.vNext/src/main/res/drawable-xhdpi/ic_launcher.png deleted file mode 100644 index c3a1dcf70..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xhdpi/ic_launcher.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_ic_navigation_drawer.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_ic_navigation_drawer.png deleted file mode 100755 index 6c86b6c64..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_ic_navigation_drawer.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_bg_disabled_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_bg_disabled_holo_light.9.png deleted file mode 100755 index 0ec08eea8..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_bg_disabled_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_bg_focused_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_bg_focused_holo_light.9.png deleted file mode 100755 index 8d5baff61..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_bg_focused_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_bg_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_bg_holo_light.9.png deleted file mode 100755 index 4532035e5..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_bg_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_thumb_activated_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_thumb_activated_holo_light.9.png deleted file mode 100755 index c63fea6f5..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_thumb_activated_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_thumb_disabled_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_thumb_disabled_holo_light.9.png deleted file mode 100755 index 7c164632c..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_thumb_disabled_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_thumb_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_thumb_holo_light.9.png deleted file mode 100755 index 9920f5476..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_thumb_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_thumb_pressed_holo_light.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_thumb_pressed_holo_light.9.png deleted file mode 100755 index 8bbaef092..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_switch_thumb_pressed_holo_light.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_selected_focused_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_selected_focused_holo.9.png deleted file mode 100755 index e266674c0..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_selected_focused_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_selected_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_selected_holo.9.png deleted file mode 100755 index a625de534..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_selected_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_selected_pressed_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_selected_pressed_holo.9.png deleted file mode 100755 index 091fab8f7..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_selected_pressed_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_unselected_focused_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_unselected_focused_holo.9.png deleted file mode 100755 index 22b5e2a49..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_unselected_focused_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_unselected_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_unselected_holo.9.png deleted file mode 100755 index ee1901381..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_unselected_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_unselected_pressed_holo.9.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_unselected_pressed_holo.9.png deleted file mode 100755 index 352defcf9..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/apptheme_tab_unselected_pressed_holo.9.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/ic_launcher.png b/cyclestreets.vNext/src/main/res/drawable-xxhdpi/ic_launcher.png deleted file mode 100644 index 063f0d274..000000000 Binary files a/cyclestreets.vNext/src/main/res/drawable-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_item_background_holo_light.xml b/cyclestreets.vNext/src/main/res/drawable/apptheme_item_background_holo_light.xml deleted file mode 100755 index 77dd4ba5e..000000000 --- a/cyclestreets.vNext/src/main/res/drawable/apptheme_item_background_holo_light.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_switch_inner_holo_light.xml b/cyclestreets.vNext/src/main/res/drawable/apptheme_switch_inner_holo_light.xml deleted file mode 100755 index 25ed86daf..000000000 --- a/cyclestreets.vNext/src/main/res/drawable/apptheme_switch_inner_holo_light.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_switch_track_holo_light.xml b/cyclestreets.vNext/src/main/res/drawable/apptheme_switch_track_holo_light.xml deleted file mode 100755 index a1b18c9d7..000000000 --- a/cyclestreets.vNext/src/main/res/drawable/apptheme_switch_track_holo_light.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - diff --git a/cyclestreets.vNext/src/main/res/drawable/apptheme_tab_indicator_holo.xml b/cyclestreets.vNext/src/main/res/drawable/apptheme_tab_indicator_holo.xml deleted file mode 100755 index 8a33b6a8f..000000000 --- a/cyclestreets.vNext/src/main/res/drawable/apptheme_tab_indicator_holo.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/cyclestreets.vNext/src/main/res/layout/apptheme_tab_indicator_holo.xml b/cyclestreets.vNext/src/main/res/layout/apptheme_tab_indicator_holo.xml deleted file mode 100755 index 386405ed4..000000000 --- a/cyclestreets.vNext/src/main/res/layout/apptheme_tab_indicator_holo.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - diff --git a/cyclestreets.vNext/src/main/res/values-v11/styles_apptheme.xml b/cyclestreets.vNext/src/main/res/values-v11/styles_apptheme.xml deleted file mode 100755 index 773f6c01e..000000000 --- a/cyclestreets.vNext/src/main/res/values-v11/styles_apptheme.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cyclestreets.vNext/src/main/res/values-v11/themes_apptheme.xml b/cyclestreets.vNext/src/main/res/values-v11/themes_apptheme.xml deleted file mode 100755 index bcb9f3bd8..000000000 --- a/cyclestreets.vNext/src/main/res/values-v11/themes_apptheme.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/cyclestreets.vNext/src/main/res/values-v9/themes_apptheme.xml b/cyclestreets.vNext/src/main/res/values-v9/themes_apptheme.xml deleted file mode 100755 index 1370cd1fb..000000000 --- a/cyclestreets.vNext/src/main/res/values-v9/themes_apptheme.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/cyclestreets.vNext/src/main/res/values/colors_apptheme.xml b/cyclestreets.vNext/src/main/res/values/colors_apptheme.xml deleted file mode 100755 index febda29ca..000000000 --- a/cyclestreets.vNext/src/main/res/values/colors_apptheme.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #009800 - diff --git a/cyclestreets.vNext/src/main/res/values/dimens_apptheme.xml b/cyclestreets.vNext/src/main/res/values/dimens_apptheme.xml deleted file mode 100755 index 5a0fa8d05..000000000 --- a/cyclestreets.vNext/src/main/res/values/dimens_apptheme.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - 48dp - \ No newline at end of file diff --git a/cyclestreets.vNext/src/main/res/values/strings.xml b/cyclestreets.vNext/src/main/res/values/strings.xml deleted file mode 100644 index 4db2c2a5e..000000000 --- a/cyclestreets.vNext/src/main/res/values/strings.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - CycleStreets - Journey planner - Itinerary - Elevation - Photomap - Add photo - Blog - Blog - updated - - Unexpected error, please send a report … - CycleStreets has crashed … - Please click here to help fix the issue. - CycleStreets has crashed - An unexpected error occurred forcing the - application to stop. Please help us fix this by sending us error data, - all you have to do is click \'OK\'. - You might add your comments about the problem below: - Thank you ! - - diff --git a/cyclestreets.vNext/src/main/res/values/styles_apptheme.xml b/cyclestreets.vNext/src/main/res/values/styles_apptheme.xml deleted file mode 100755 index b9970cdd8..000000000 --- a/cyclestreets.vNext/src/main/res/values/styles_apptheme.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cyclestreets.vNext/src/main/res/values/themes_apptheme.xml b/cyclestreets.vNext/src/main/res/values/themes_apptheme.xml deleted file mode 100755 index 0e8f4d961..000000000 --- a/cyclestreets.vNext/src/main/res/values/themes_apptheme.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/cyclestreets.vNext/src/main/res/xml/prefs.xml b/cyclestreets.vNext/src/main/res/xml/prefs.xml deleted file mode 100644 index bd1c202c3..000000000 --- a/cyclestreets.vNext/src/main/res/xml/prefs.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cyclestreets.vNext/version.properties b/cyclestreets.vNext/version.properties deleted file mode 100644 index 075c318b9..000000000 --- a/cyclestreets.vNext/version.properties +++ /dev/null @@ -1,3 +0,0 @@ -# app version -versionCode=24 -versionName=3.4 diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 000000000..e6ce2389e --- /dev/null +++ b/gradle.properties @@ -0,0 +1,6 @@ +android.enableJetifier=true +android.nonFinalResIds=false +android.nonTransitiveRClass=false +android.useAndroidX=true +kotlin.setJvmTargetFromAndroidCompileOptions=true +org.gradle.jvmargs=-Xmx1536M diff --git a/gradle/lint.xml b/gradle/lint.xml index 540a5ac5b..98b41a6bd 100644 --- a/gradle/lint.xml +++ b/gradle/lint.xml @@ -9,4 +9,9 @@ + + + + + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 05ef575b0..0d4a95168 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7af6ba51a..4d4df2f54 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat May 14 10:45:18 BST 2016 +#Thu Jun 04 14:59:04 BST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip diff --git a/gradlew b/gradlew index 9d82f7891..cccdd3d51 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -6,20 +6,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +48,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,26 +59,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -85,7 +89,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -150,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index aec99730b..e95643d6a 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +46,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/libraries/cyclestreets-core/build.gradle b/libraries/cyclestreets-core/build.gradle index 69b8039ea..cb2db3eb7 100644 --- a/libraries/cyclestreets-core/build.gradle +++ b/libraries/cyclestreets-core/build.gradle @@ -1,34 +1,48 @@ +android { + testOptions { + unitTests { + includeAndroidResources = true + } + } + namespace 'net.cyclestreets.core' +} + configurations { compile.exclude module: 'commons-logging' compile.exclude module: 'httpclient' } dependencies { - compile 'org.osmdroid:osmdroid-android:5.2' - compile 'org.slf4j:slf4j-android:1.7.21' + api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" + + implementation 'androidx.core:core:1.13.1' + implementation 'androidx.preference:preference:1.2.1' + + api "org.osmdroid:osmdroid-android:${rootProject.ext.osmdroidVersion}" + api 'org.slf4j:slf4j-android:1.7.30' // Retrofit for HTTP Client activities - compile 'com.squareup.retrofit2:retrofit:2.1.0' - compile 'com.squareup.retrofit2:converter-scalars:2.1.0' - compile('com.squareup.retrofit2:converter-simplexml:2.1.0') { + api 'com.squareup.retrofit2:retrofit:2.11.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.9.0' + implementation('com.squareup.retrofit2:converter-simplexml:2.9.0') { // Exclusions required as per https://github.com/square/retrofit/issues/1796 exclude group: 'xpp3', module: 'xpp3' exclude group: 'stax', module: 'stax-api' exclude group: 'stax', module: 'stax' } - compile 'com.squareup.retrofit2:converter-jackson:2.1.0' - compile 'de.grundid.opendatalab:geojson-jackson:1.6' + implementation 'com.squareup.retrofit2:converter-jackson:2.9.0' + implementation 'de.grundid.opendatalab:geojson-jackson:1.14' - // Jackson is already included transitively from multiple sources; we specify explicit versions - // to ensure consistency across these artifacts. - compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.7' - compile 'com.fasterxml.jackson.core:jackson-core:2.7.7' - compile 'com.fasterxml.jackson.core:jackson-databind:2.7.7' + // XML / JSON conversion utilities + implementation 'com.github.smart-fun:XmlToJson:1.5.0' + implementation 'com.bazaarvoice.jolt:jolt-core:0.1.8' + implementation 'com.bazaarvoice.jolt:json-utils:0.1.8' - testCompile 'com.github.tomakehurst:wiremock-standalone:2.1.12' - testCompile 'junit:junit:4.12' - testCompile 'org.hamcrest:hamcrest-all:1.3' - testCompile 'org.mockito:mockito-core:1.10.19' - testCompile 'org.robolectric:robolectric:3.0' - testCompile 'commons-io:commons-io:2.4' + testImplementation 'com.github.tomakehurst:wiremock-standalone:2.27.2' + testImplementation "junit:junit:${rootProject.ext.junitVersion}" + testImplementation "org.assertj:assertj-core:${rootProject.ext.assertjVersion}" + testImplementation 'org.skyscreamer:jsonassert:1.5.1' + testImplementation "org.mockito:mockito-core:${rootProject.ext.mockitoVersion}" + testImplementation "org.robolectric:robolectric:${rootProject.ext.robolectricVersion}" + testImplementation 'commons-io:commons-io:2.16.1' } diff --git a/libraries/cyclestreets-core/gradle/wrapper/gradle-wrapper.jar b/libraries/cyclestreets-core/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index c97a8bdb9..000000000 Binary files a/libraries/cyclestreets-core/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/libraries/cyclestreets-core/gradle/wrapper/gradle-wrapper.properties b/libraries/cyclestreets-core/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 46a9213ec..000000000 --- a/libraries/cyclestreets-core/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Sat May 14 10:07:49 BST 2016 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-bin.zip diff --git a/libraries/cyclestreets-core/gradlew b/libraries/cyclestreets-core/gradlew deleted file mode 100755 index 91a7e269e..000000000 --- a/libraries/cyclestreets-core/gradlew +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/libraries/cyclestreets-core/gradlew.bat b/libraries/cyclestreets-core/gradlew.bat deleted file mode 100644 index aec99730b..000000000 --- a/libraries/cyclestreets-core/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/libraries/cyclestreets-core/src/main/AndroidManifest.xml b/libraries/cyclestreets-core/src/main/AndroidManifest.xml index 797997a82..90b7b2db8 100644 --- a/libraries/cyclestreets-core/src/main/AndroidManifest.xml +++ b/libraries/cyclestreets-core/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ - - - - - + + + + + + + diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_bad.png deleted file mode 100644 index 7e83739e7..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_bad@2x.png deleted file mode 100644 index 432710ecb..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_good.png deleted file mode 100644 index 6fd046332..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_good@2x.png deleted file mode 100644 index 2e1a0f6fd..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_neutral.png deleted file mode 100644 index 62d48b623..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_neutral@2x.png deleted file mode 100644 index 8a6197378..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/bicycles_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_bad.png deleted file mode 100644 index 271040a06..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_bad@2x.png deleted file mode 100644 index 8f27cb7d7..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_good.png deleted file mode 100644 index 289114da3..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_good@2x.png deleted file mode 100644 index 31e52d82b..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_neutral.png deleted file mode 100644 index 0358362b3..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_neutral@2x.png deleted file mode 100644 index a30a98538..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/bikeshops_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_bad.png deleted file mode 100644 index 6ceeaeee2..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_bad@2x.png deleted file mode 100644 index 2934deb54..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_good.png deleted file mode 100644 index d6c5e1768..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_good@2x.png deleted file mode 100644 index b3fb97c8c..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_neutral.png deleted file mode 100644 index e9421d320..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_neutral@2x.png deleted file mode 100644 index ab59bca62..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/carstorage_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_bad.png deleted file mode 100644 index a6f5f5d56..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_bad@2x.png deleted file mode 100644 index ad70a4a15..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_good.png deleted file mode 100644 index 5e4b79fa5..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_good@2x.png deleted file mode 100644 index 210542b71..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_neutral.png deleted file mode 100644 index 00e227e76..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_neutral@2x.png deleted file mode 100644 index d1e55e74a..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/closure_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_bad.png deleted file mode 100644 index 336463dd9..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_bad@2x.png deleted file mode 100644 index db2e8d422..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_good.png deleted file mode 100644 index 8971fb4ee..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_good@2x.png deleted file mode 100644 index 0fac689e9..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_neutral.png deleted file mode 100644 index 55e31440b..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_neutral@2x.png deleted file mode 100644 index 9dd8e9cb5..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/congestion_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_bad.png deleted file mode 100644 index ce025dc33..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_bad@2x.png deleted file mode 100644 index 59877fa81..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_good.png deleted file mode 100644 index a43c6025b..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_good@2x.png deleted file mode 100644 index 4b089128a..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_neutral.png deleted file mode 100644 index e099e2e9d..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_neutral@2x.png deleted file mode 100644 index f3bcfdf4c..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleparking_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_bad.png deleted file mode 100644 index 4b90b13a1..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_bad@2x.png deleted file mode 100644 index 4b34e88d1..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_good.png deleted file mode 100644 index d3595a96a..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_good@2x.png deleted file mode 100644 index 949498104..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_neutral.png deleted file mode 100644 index e182a7631..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_neutral@2x.png deleted file mode 100644 index 6e3e78488..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/cycleways_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_bad.png deleted file mode 100644 index 2a53109cd..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_bad@2x.png deleted file mode 100644 index e3b1659b8..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_good.png deleted file mode 100644 index bbe2ae935..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_good@2x.png deleted file mode 100644 index 790bb877e..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_neutral.png deleted file mode 100644 index 8cc197cd0..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_neutral@2x.png deleted file mode 100644 index 93066b000..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/destinations_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_bad.png deleted file mode 100644 index 2fe6f30a5..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_bad@2x.png deleted file mode 100644 index 4872f9147..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_good.png deleted file mode 100644 index 74bd415dd..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_good@2x.png deleted file mode 100644 index c14fcec3b..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_neutral.png deleted file mode 100644 index d991f3bec..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_neutral@2x.png deleted file mode 100644 index aa3956091..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/dutchcycleways_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_bad.png deleted file mode 100644 index 92d4edd9c..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_bad@2x.png deleted file mode 100644 index c5d58d44d..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_good.png deleted file mode 100644 index 48c618db7..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_good@2x.png deleted file mode 100644 index dbfb34397..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_neutral.png deleted file mode 100644 index b2a08f86f..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_neutral@2x.png deleted file mode 100644 index d0b9232fb..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/enforcement_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/general_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/general_bad.png deleted file mode 100644 index a781cd2e4..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/general_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/general_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/general_bad@2x.png deleted file mode 100644 index d556f7ec5..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/general_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/general_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/general_good.png deleted file mode 100644 index d320f1c84..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/general_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/general_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/general_good@2x.png deleted file mode 100644 index 77a24990f..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/general_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/general_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/general_neutral.png deleted file mode 100644 index 2551fec80..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/general_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/general_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/general_neutral@2x.png deleted file mode 100644 index 63c0f7ac7..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/general_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_bad.png deleted file mode 100644 index 4755df43b..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_bad@2x.png deleted file mode 100644 index db748c4fd..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_good.png deleted file mode 100644 index 03a383812..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_good@2x.png deleted file mode 100644 index 0147e462c..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_neutral.png deleted file mode 100644 index f1c93cf6b..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_neutral@2x.png deleted file mode 100644 index 19def9091..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/obstructions_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_bad.png deleted file mode 100644 index 216dc0e66..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_bad@2x.png deleted file mode 100644 index b2b1e9834..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_good.png deleted file mode 100644 index 2b3ac5c10..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_good@2x.png deleted file mode 100644 index 0bc8beb81..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_neutral.png deleted file mode 100644 index 60eaa9bb3..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_neutral@2x.png deleted file mode 100644 index b32ab5efb..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/potholes_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/road_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/road_bad.png deleted file mode 100644 index bb01c2ea8..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/road_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/road_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/road_bad@2x.png deleted file mode 100644 index 5556a67cf..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/road_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/road_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/road_good.png deleted file mode 100644 index ec3ab971f..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/road_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/road_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/road_good@2x.png deleted file mode 100644 index a4870521c..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/road_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/road_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/road_neutral.png deleted file mode 100644 index d6ddc0d88..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/road_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/road_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/road_neutral@2x.png deleted file mode 100644 index b892d59ff..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/road_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_bad.png deleted file mode 100644 index 1c24fb208..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_bad@2x.png deleted file mode 100644 index a74e5e681..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_good.png deleted file mode 100644 index cdaa098d8..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_good@2x.png deleted file mode 100644 index cedf14745..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_neutral.png deleted file mode 100644 index 6d8cba005..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_neutral@2x.png deleted file mode 100644 index 6cfcb9947..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/roadworks_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_bad.png deleted file mode 100644 index 1a31cc612..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_bad@2x.png deleted file mode 100644 index c6376d3f6..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_good.png deleted file mode 100644 index 3a8d88c0c..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_good@2x.png deleted file mode 100644 index 9f521ff06..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_neutral.png deleted file mode 100644 index db501eed5..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_neutral@2x.png deleted file mode 100644 index d5b81ff63..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/routesigns_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/shadow.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/shadow.png deleted file mode 100644 index 64b06241d..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/shadow.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/shadow@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/shadow@2x.png deleted file mode 100644 index 6687615c1..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/shadow@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_bad.png deleted file mode 100644 index a3e3e7bef..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_bad@2x.png deleted file mode 100644 index 5e44316ba..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_good.png deleted file mode 100644 index 4f1c575a1..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_good@2x.png deleted file mode 100644 index e1c4bd9d5..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_neutral.png deleted file mode 100644 index 69ce0dfc8..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_neutral@2x.png deleted file mode 100644 index 7ccd3b5de..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/signs_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/track_bad.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/track_bad.png deleted file mode 100644 index dfc747dde..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/track_bad.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/track_bad@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/track_bad@2x.png deleted file mode 100644 index 1b214aae9..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/track_bad@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/track_good.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/track_good.png deleted file mode 100644 index b8e054e5e..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/track_good.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/track_good@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/track_good@2x.png deleted file mode 100644 index b7f20bc5a..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/track_good@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/track_neutral.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/track_neutral.png deleted file mode 100644 index 4064e2044..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/track_neutral.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/assets/photomarkers/track_neutral@2x.png b/libraries/cyclestreets-core/src/main/assets/photomarkers/track_neutral@2x.png deleted file mode 100644 index 28fae5aa5..000000000 Binary files a/libraries/cyclestreets-core/src/main/assets/photomarkers/track_neutral@2x.png and /dev/null differ diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/AppInfo.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/AppInfo.java deleted file mode 100644 index 061d02ab0..000000000 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/AppInfo.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.cyclestreets; - -import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; - -public class AppInfo { - private static String version_ = null; - - public static String version(final Context context) { - if (version_ == null) - version_ = String.format("%s/%s", context.getPackageName(), versionName(context)); - return version_; - } // version - - private static String versionName(final Context context) { - try { - final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); - return info.versionName; - } // try - catch (PackageManager.NameNotFoundException nnfe) { - // like this is going to happen - return UNKNOWN; - } // catch - } // versionName - - private static final String UNKNOWN = "unknown"; -} // versionName} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/AppInfo.kt b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/AppInfo.kt new file mode 100644 index 000000000..e6d7e64a9 --- /dev/null +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/AppInfo.kt @@ -0,0 +1,39 @@ +package net.cyclestreets + +import android.annotation.SuppressLint +import android.content.Context +import android.content.pm.PackageInfo +import android.content.pm.PackageManager +import android.os.Build + +private const val UNKNOWN = "unknown" + +object AppInfo { + private var version: String? = null + + fun version(context: Context): String { + if (version == null) + version = String.format("%s/%s", context.packageName, versionNameAndCode(context)) + return version!! + } + + private fun versionNameAndCode(context: Context): String { + return try { + val info = context.packageManager.getPackageInfo(context.packageName, 0) + String.format("%s/%s", info.versionName, getVersionCode(info)) + } catch (e: PackageManager.NameNotFoundException) { + // like this is going to happen + UNKNOWN + } + } + + @SuppressLint("NewApi") + @Suppress("deprecation") + private fun getVersionCode(info: PackageInfo): String { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + info.longVersionCode.toString() + } else { + info.versionCode.toString() + } + } +} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/CycleStreetsNotifications.kt b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/CycleStreetsNotifications.kt new file mode 100644 index 000000000..e2cf8569c --- /dev/null +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/CycleStreetsNotifications.kt @@ -0,0 +1,71 @@ +package net.cyclestreets + +import android.app.Notification +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import android.os.Build + +import net.cyclestreets.core.R + +object CycleStreetsNotifications { + const val CHANNEL_LIVERIDE_ID = "liveride_v2" + const val CHANNEL_TRACK_ID = "track" + private val DEPRECATED_CHANNELS = listOf("liveride") + + fun initialise(context: Context) { + createNotificationChannel(context, + R.string.channel_liveride_name, + R.string.channel_liveride_description, + CHANNEL_LIVERIDE_ID) + // When cyclestreets-track is integrated, we'll need to create this channel. + // createNotificationChannel(context, + // R.string.channel_track_name, + // R.string.channel_track_description, + // CHANNEL_TRACK_ID); + deletedDeprecatedChannels(context, DEPRECATED_CHANNELS); + } + + fun getBuilder(context: Context, channelId: String): Notification.Builder { + return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + Notification.Builder(context, channelId) + } else { + getBuilderPreOreo(context) + } + } + + // see https://developer.android.com/training/notify-user/channels + private fun createNotificationChannel(context: Context, + nameResourceId: Int, + descriptionResourceId: Int, + channelId: String) { + // Create the NotificationChannel, but only on API 26+ because + // the NotificationChannel class is new and not in the support library + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val name = context.getString(nameResourceId) + val description = context.getString(descriptionResourceId) + val importance = NotificationManager.IMPORTANCE_LOW + val channel = NotificationChannel(channelId, name, importance) + channel.description = description + + // Register the channel with the system; you can't change the importance + // or other notification behaviors after this + val notificationManager = context.getSystemService(NotificationManager::class.java) + notificationManager!!.createNotificationChannel(channel) + } + } + + private fun deletedDeprecatedChannels(context: Context, channelIds: List) { + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + for (channelId in channelIds) { + val nm = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + nm.deleteNotificationChannel(channelId) + } + } + } + + @Suppress("deprecation") + private fun getBuilderPreOreo(context: Context): Notification.Builder { + return Notification.Builder(context) + } +} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/CycleStreetsPreferences.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/CycleStreetsPreferences.java index fe98f1c03..8454ddf89 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/CycleStreetsPreferences.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/CycleStreetsPreferences.java @@ -4,10 +4,13 @@ import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.net.ConnectivityManager; -import android.net.NetworkInfo; -import android.preference.PreferenceManager; +import android.net.NetworkCapabilities; +import android.os.Build; +import androidx.preference.PreferenceManager; import android.telephony.TelephonyManager; +import java.util.Objects; + public class CycleStreetsPreferences { private static Context context_; @@ -22,6 +25,7 @@ public class CycleStreetsPreferences public final static String PREF_CONFIRM_NEW_ROUTE = "confirm-new-route"; public final static String PREF_USERNAME_KEY = "username"; public final static String PREF_PASSWORD_KEY = "password"; + public final static String PREF_CONFIRM_PASSWORD_KEY = "confirm_password"; public final static String PREF_EMAIL_KEY = "email"; public final static String PREF_NAME_KEY = "name"; public final static String PREF_VALIDATED_KEY = "signed-in"; @@ -33,180 +37,237 @@ public class CycleStreetsPreferences public final static String PREF_NEARING_TURN = "nearing-turn-distance"; public final static String PREF_OFFTRACK_DISTANCE = "offtrack-distance"; public final static String PREF_REPLAN_DISTANCE = "replan-distance"; - public final static String PREF_PEBBLE_VOICE = "pebble-voice"; + + public final static String PREF_SHOW_REMAINING_TIME = "show-remaining-time"; + public final static String PREF_SHOW_ETA = "show-ETA"; + + public static final String PREF_PERMISSION_REQUESTED_PREFIX = "permission-requested-"; + public static final String PREF_SETTINGS_LAST_TIME_PREFIX = "settings-last-time-"; public final static String MAPSTYLE_OCM = "CycleStreets"; public final static String MAPSTYLE_OSM = "CycleStreets-OSM"; public final static String MAPSTYLE_OS = "CycleStreets-OS"; public final static String MAPSTYLE_MAPSFORGE = "CycleStreets-Mapsforge"; - static public void initialise(final Context context, final int defaults) { + public static void initialise(final Context context, final int defaults) { context_ = context; if (defaults != -1) PreferenceManager.setDefaultValues(context_, defaults, false); // upgrades - if(uploadSize().equals("320px")) + if (uploadSize().equals("320px")) putString(PREF_UPLOAD_SIZE, "640px"); - } // initialise + } - static public String routeType() { + public static String routeType() { return getString(PREF_ROUTE_TYPE_KEY, RoutePlans.PLAN_BALANCED); } - static public String units() { + public static String units() { return getString(PREF_UNITS_KEY, "km"); - } // units + } - static public int speed() { + public static int speed() { return Integer.parseInt(getString(PREF_SPEED_KEY, "20")); } - static public String mapstyle() { + public static String mapstyle() { return getString(PREF_MAPSTYLE_KEY, NOT_SET); } - static public void setMapstyle(final String name) { + public static void setMapstyle(final String name) { putString(PREF_MAPSTYLE_KEY, name); } - static public void resetMapstyle() { + public static void resetMapstyle() { setMapstyle(NOT_SET); } - static public String mapfile() { + public static String mapfile() { return getString(PREF_MAPFILE_KEY, NOT_SET); } - static public String username() { + public static String username() { return getString(PREF_USERNAME_KEY, ""); } - static public String password() { + public static String password() { return getString(PREF_PASSWORD_KEY, ""); - } // password + } - static public String name() { + public static String name() { return getString(PREF_NAME_KEY, ""); - } // name + } - static public String email() { + public static String email() { return getString(PREF_EMAIL_KEY, ""); - } // email + } - static public boolean accountOK() { - return getBoolean(PREF_VALIDATED_KEY, false); - } // accountOK + public static boolean accountOK() { + return getBoolean(PREF_VALIDATED_KEY, false) && + (!Objects.equals(password(), "")); + } - static public boolean accountPending() { + public static boolean accountPending() { return getBoolean(PREF_PENDING_KEY, false); - } // accountPending + } - static public boolean confirmNewRoute() { + public static boolean confirmNewRoute() { return getBoolean(PREF_CONFIRM_NEW_ROUTE, true); - } // confirmNewRoute + } - static public String uploadSize() { + public static String uploadSize() { return getString(PREF_UPLOAD_SIZE, "bigIfWifi"); - } // uploadSize + } - static public boolean blogNotifications() { + public static boolean blogNotifications() { return getBoolean(PREF_BLOG_NOTIFICATIONS, true); - } // blogNotifications + } - static public void setBlogNotifications(final boolean active) { + public static void setBlogNotifications(final boolean active) { putBoolean(PREF_BLOG_NOTIFICATIONS, active); - } // setBlogNotifications + } - static public int turnNowDistance() { + public static int turnNowDistance() { return Integer.parseInt(getString(PREF_TURN_NOW, "15")); } - static public int nearingTurnDistance() { + public static int nearingTurnDistance() { return Integer.parseInt(getString(PREF_NEARING_TURN, "50")); } - static public int offtrackDistance() { + public static int offtrackDistance() { return Integer.parseInt(getString(PREF_OFFTRACK_DISTANCE, "30")); } - static public int replanDistance() { + public static int replanDistance() { return Integer.parseInt(getString(PREF_REPLAN_DISTANCE, "50")); } - static public boolean pebbleVoice() { - return getBoolean(PREF_PEBBLE_VOICE, true); + public static boolean showRemainingTime() { + return getBoolean(PREF_SHOW_REMAINING_TIME, true); + } + + public static boolean showEta() { + return getBoolean(PREF_SHOW_ETA, true); + } + + public static boolean permissionPreviouslyRequested(String permission) { + return getBoolean(PREF_PERMISSION_REQUESTED_PREFIX + permission, false); + } + + public static void logPermissionAsRequested(String permission) { + putBoolean(PREF_PERMISSION_REQUESTED_PREFIX + permission, true); + } + + public static void clearPermissionRequested(String permission) { + final Editor editor = editor(); + editor.remove(PREF_PERMISSION_REQUESTED_PREFIX + permission); + editor.apply(); } - static public boolean uploadSmallImages() { - final String resize = uploadSize(); - if("640px".equals(resize)) - return true; - if("big".equals(resize)) - return false; + public static boolean settingsLastTime(String permission) { + return getBoolean(PREF_SETTINGS_LAST_TIME_PREFIX + permission, false); + } + public static void logSettingsLastTime(String permission) { + putBoolean(PREF_SETTINGS_LAST_TIME_PREFIX + permission, true); + } + + public static void clearSettingsLastTime(String permission) { + final Editor editor = editor(); + editor.remove(PREF_SETTINGS_LAST_TIME_PREFIX + permission); + editor.apply(); + } + + private static boolean onFastConnection() { final ConnectivityManager connMgr = (ConnectivityManager)context_.getSystemService(Context.CONNECTIVITY_SERVICE); - final NetworkInfo ni = connMgr.getActiveNetworkInfo(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + return onFastConnection28OrHigher(connMgr); + } else { + return onFastConnectionPre28(connMgr); + } + } - final int type = ni.getType(); - if((type == ConnectivityManager.TYPE_WIFI) || (type == ConnectivityManager.TYPE_WIMAX)) - return false; + private static boolean onFastConnection28OrHigher(ConnectivityManager connMgr) { + NetworkCapabilities capabilities = connMgr.getNetworkCapabilities(connMgr.getActiveNetwork()); + return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) || + onQuickMobileConnection(connMgr); + } + + @SuppressWarnings("deprecation") + private static boolean onFastConnectionPre28(ConnectivityManager connMgr) { + final int type = connMgr.getActiveNetworkInfo().getType(); + return type == ConnectivityManager.TYPE_WIFI || + type == ConnectivityManager.TYPE_WIMAX || + onQuickMobileConnection(connMgr); + } + private static boolean onQuickMobileConnection(ConnectivityManager connMgr) { // so it's mobile, but is it still quick? - final int subtype = ni.getSubtype(); - return !((subtype == TelephonyManager.NETWORK_TYPE_HSDPA) || - (subtype == TelephonyManager.NETWORK_TYPE_HSPA) || - (subtype == TelephonyManager.NETWORK_TYPE_HSUPA)); - } // uploadSmallImages + final int subtype = connMgr.getActiveNetworkInfo().getSubtype(); + return ((subtype == TelephonyManager.NETWORK_TYPE_HSDPA) || + (subtype == TelephonyManager.NETWORK_TYPE_HSPA) || + (subtype == TelephonyManager.NETWORK_TYPE_HSUPA)); + } + + public static void clearOsmdroidCacheLocation() { + final Editor editor = editor(); + editor.remove("osmdroid.basePath"); + editor.remove("osmdroid.cachePath"); + editor.commit(); + } - static private String getString(final String key, final String defVal) { + private static String getString(final String key, final String defVal) { + if (context_ == null) { + // Protect against a potential race condition on resume + return defVal; + } final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context_); return prefs.getString(key, defVal); - } // getStirng + } - static private void putString(final String key, final String value) { + private static void putString(final String key, final String value) { final Editor editor = editor(); editor.putString(key, value); editor.commit(); - } // putString + } - static private boolean getBoolean(final String key, final boolean defVal) { + private static boolean getBoolean(final String key, final boolean defVal) { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context_); return prefs.getBoolean(key, defVal); - } // getBoolean + } - static private void putBoolean(final String key, final boolean value) { + private static void putBoolean(final String key, final boolean value) { final Editor editor = editor(); editor.putBoolean(key, value); editor.commit(); - } // putBoolean + } - static public void setUsernamePassword(final String username, + public static void setUsernamePassword(final String username, final String password, final String name, final String email, - final boolean signedin) - { + final boolean signedin) { final Editor editor = editor(); editor.putString(PREF_USERNAME_KEY, username); editor.putString(PREF_PASSWORD_KEY, password); editor.putBoolean(PREF_VALIDATED_KEY, signedin); - if(signedin) - { + if (signedin) { editor.putString(PREF_NAME_KEY, name); editor.putString(PREF_EMAIL_KEY, email); editor.putBoolean(PREF_PENDING_KEY, false); } editor.commit(); - } // setUsernamePassword + } - static public void setPendingUsernamePassword(final String username, + public static void setPendingUsernamePassword(final String username, final String password, final String name, final String email, - final boolean pending) - { + final boolean pending) { final Editor editor = editor(); editor.putString(PREF_USERNAME_KEY, username); editor.putString(PREF_PASSWORD_KEY, password); @@ -215,30 +276,29 @@ static public void setPendingUsernamePassword(final String username, editor.putBoolean(PREF_PENDING_KEY, pending); editor.putBoolean(PREF_VALIDATED_KEY, false); editor.commit(); - } // setPendingUsernamePassword + } - static public void clearUsernamePassword() - { + public static void clearUsernamePassword() { final Editor editor = editor(); editor.putString(PREF_USERNAME_KEY, ""); editor.putString(PREF_PASSWORD_KEY, ""); editor.putString(PREF_NAME_KEY, ""); editor.putString(PREF_EMAIL_KEY, ""); + editor.putString(PREF_CONFIRM_PASSWORD_KEY, ""); editor.putBoolean(PREF_PENDING_KEY, false); editor.putBoolean(PREF_VALIDATED_KEY, false); editor.commit(); - } // clearUsernamePassword + } - static public void enableMapFile(final String filename) - { + public static void enableMapFile(final String filename) { final Editor editor = editor(); editor.putString(PREF_MAPSTYLE_KEY, MAPSTYLE_MAPSFORGE); editor.putString(PREF_MAPFILE_KEY, filename); editor.commit(); - } // setMapFile + } - static private Editor editor() { + private static Editor editor() { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context_); return prefs.edit(); - } // editor -} // class CycleStreetsPreferences + } +} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/RoutePlans.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/RoutePlans.java index 94aa2333f..b60284bea 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/RoutePlans.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/RoutePlans.java @@ -6,6 +6,7 @@ public class RoutePlans { public final static String PLAN_FASTEST = "fastest"; public final static String PLAN_QUIETEST = "quietest"; public final static String PLAN_SHORTEST = "shortest"; + public final static String PLAN_LEISURE = "leisure"; private final static String[] Plans = new String[] { PLAN_QUIETEST, PLAN_BALANCED, PLAN_FASTEST, PLAN_SHORTEST @@ -13,5 +14,5 @@ public class RoutePlans { public static String[] allPlans() { return Plans; - } // plans -} // RoutePlans + } +} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/ApiClient.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/ApiClient.java deleted file mode 100644 index b0bfcfb73..000000000 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/ApiClient.java +++ /dev/null @@ -1,164 +0,0 @@ -package net.cyclestreets.api; - -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.os.Bundle; - -import net.cyclestreets.api.client.RetrofitApiClient; - -import java.io.IOException; -import java.util.List; - -public class ApiClient -{ - private final static String API_HOST = "https://www.cyclestreets.net"; - private final static String API_HOST_V2 = "https://api.cyclestreets.net"; - - private static ApiCustomiser customiser; - private static Context context; - - private static RetrofitApiClient retrofitApiClient; - - static Context context() { - if (context == null) - throw new RuntimeException("ApiClient.initialise(context) has not been called"); - return context; - } - - public static void initialise(final Context context) { - ApiClient.context = context; - - retrofitApiClient = new RetrofitApiClient.Builder() - .withContext(context()) - .withApiKey(findApiKey(context())) - .withV1Host(API_HOST) - .withV2Host(API_HOST_V2) - .build(); - - POICategories.backgroundLoad(); - PhotomapCategories.backgroundLoad(); - } - - public static void setCustomiser(ApiCustomiser customiser) { - ApiClient.customiser = customiser; - } - - private static String findApiKey(final Context context) { - try { - final ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); - final Bundle bundle = ai.metaData; - return bundle.getString("CycleStreetsAPIKey"); - } catch(final Exception e) { - throw new RuntimeException(e); - } - } - - ///////////////////////////////////////////////////////////////////////// - private ApiClient() {} - - static String getJourneyXml(final String plan, - final String leaving, - final String arriving, - final int speed, - final double[] lonLat) throws IOException { - final String points = itineraryPoints(lonLat); - return retrofitApiClient.getJourneyXml(plan, points, leaving, arriving, speed); - } - - static String getJourneyXml(final String plan, - final long itineraryId) throws IOException { - return retrofitApiClient.retrievePreviousJourneyXml(plan, itineraryId); - } - - static PhotomapCategories getPhotomapCategories() throws IOException { - return retrofitApiClient.getPhotomapCategories(); - } - - static Photos getPhotos(final double e, - final double w, - final double n, - final double s) throws IOException { - return retrofitApiClient.getPhotos(w, s, e, n); - } - - static UserJourneys getUserJournies(final String username) throws IOException { - return retrofitApiClient.getUserJourneys(username); - } - - static GeoPlaces geoCoder(final String search, - double n, - double s, - double e, - double w) throws IOException { - return retrofitApiClient.geoCoder(search, w, s, e, n); - } - - static Feedback.Result sendFeedback(final int itinerary, - final String comments, - final String name, - final String email) throws IOException { - return retrofitApiClient.sendFeedback(itinerary, comments, name, email); - } - - static Upload.Result uploadPhoto(final String filename, - final String username, - final String password, - final double lon, - final double lat, - final String metaCat, - final String category, - final String dateTime, - final String caption) throws IOException { - return retrofitApiClient.uploadPhoto(username, password, lon, lat, Long.valueOf(dateTime), - category, metaCat, caption, filename); - } - - static Signin.Result signin(final String username, - final String password) throws IOException { - return retrofitApiClient.authenticate(username, password); - } - - static Registration.Result register(final String username, - final String password, - final String name, - final String email) throws IOException { - return retrofitApiClient.register(username, password, name, email); - } - - static POICategories getPOICategories(final int iconSize) throws IOException { - return retrofitApiClient.getPOICategories(iconSize); - } - - static List getPOIs(final String key, - final double lonE, - final double lonW, - final double latN, - final double latS) throws IOException { - return retrofitApiClient.getPOIs(key, lonW, latS, lonE, latN); - } - - static List getPOIs(final String key, - final double lon, - final double lat, - final int radius) throws IOException { - return retrofitApiClient.getPOIs(key, lon, lat, radius); - } - - static Blog getBlogEntries() throws IOException { - return retrofitApiClient.getBlogEntries(); - } - - ///////////////////////////////////////////////////// - ///////////////////////////////////////////////////// - private static String itineraryPoints(final double... lonLat) - { - final StringBuilder sb = new StringBuilder(); - for(int i = 0; i != lonLat.length; i += 2) { - if (i != 0) - sb.append("|"); - sb.append(lonLat[i]).append(",").append(lonLat[i+1]); - } - return sb.toString(); - } -} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/ApiClient.kt b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/ApiClient.kt new file mode 100644 index 000000000..1ec4e12a9 --- /dev/null +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/ApiClient.kt @@ -0,0 +1,259 @@ +package net.cyclestreets.api + +import android.content.Context +import android.content.pm.PackageManager +import android.net.Uri +import net.cyclestreets.RoutePlans.PLAN_LEISURE + +import net.cyclestreets.api.client.RetrofitApiClient +import net.cyclestreets.core.R + +interface CycleStreetsApi { + fun getJourneyJson(plan: String, leaving: String?, arriving: String?, speed: Int, lonLat: DoubleArray): String + fun getCircularJourneyJson(lonLat: DoubleArray, distance: Int?, duration: Int?, poiTypes: String?): String + fun retrievePreviousJourneyJson(plan: String, itineraryId: Long): String + fun getPhotomapCategories(): PhotomapCategories + fun getPhoto(photoId: Long): Photos + fun getPhotos(lonW: Double, latS: Double, lonE: Double, latN: Double): Photos + fun getUserJourneys(username: String): UserJourneys + fun geoCoder(search: String, lonW: Double, latS: Double, lonE: Double, latN: Double): GeoPlaces + fun sendFeedback(itinerary: Int, comments: String, name: String, email: String): Result + fun uploadPhoto(photoUri: Uri, username: String, password: String, lon: Double, lat: Double, metaCat: String, category: String, dateTime: String, caption: String): Upload.Result + fun signin(username: String, password: String): Signin.Result + fun register(username: String, password: String, name: String, email: String): Result + fun getPOICategories(): POICategories + fun getPOIs(key: String, lonW: Double, latS: Double, lonE: Double, latN: Double): List + fun getPOIs(key: String, lon: Double, lat: Double, radius: Int): List + fun getBlogEntries(): Blog +} + +object ApiClient : CycleStreetsApi { + private const val API_HOST = "https://www.cyclestreets.net" + private const val API_HOST_V2 = "https://api.cyclestreets.net" + private const val BLOG_HOST = "https://www.cyclestreets.org" + + private lateinit var delegate: CycleStreetsApi + private lateinit var messages: Map + private var customiser: ApiCustomiser? = null + + fun initialise(context: Context) { + val retrofitApiClient = RetrofitApiClient.Builder() + .withContext(context) + .withApiKey(findApiKey(context)) + .withV1Host(API_HOST) + .withV2Host(API_HOST_V2) + .withBlogHost(BLOG_HOST) + .build() + delegate = ApiClientImpl(retrofitApiClient) + + POICategories.backgroundLoad() + PhotomapCategories.backgroundLoad() + initMessages(context) + } + + fun initialiseForTests(context: Context, delegate: CycleStreetsApi) { + this.delegate = delegate + initMessages(context) + } + + fun setCustomiser(customiser: ApiCustomiser) { + ApiClient.customiser = customiser + } + + fun getMessage(resId: Int): String { + return messages[resId]!! + } + + private fun findApiKey(context: Context): String? { + try { + val ai = context.packageManager.getApplicationInfo(context.packageName, PackageManager.GET_META_DATA) + val bundle = ai.metaData + return bundle.getString("CycleStreetsAPIKey") + } catch (e: Exception) { + throw RuntimeException(e) + } + } + + fun initMessages(context: Context) { + messages = setOf( + R.string.registration_ok, + R.string.registration_error_prefix, + R.string.feedback_ok, + R.string.feedback_error_prefix, + R.string.signin_ok, + R.string.signin_error_prefix, + R.string.signin_default_error, + R.string.upload_ok, + R.string.upload_error_prefix + ).map { resId -> (resId to context.getString(resId)) }.toMap() + } + + override fun getJourneyJson(plan: String, leaving: String?, arriving: String?, speed: Int, lonLat: DoubleArray): String { + return delegate.getJourneyJson(plan, leaving, arriving, speed, lonLat) + } + override fun getCircularJourneyJson(lonLat: DoubleArray, distance: Int?, duration: Int?, poiTypes: String?): String { + return delegate.getCircularJourneyJson(lonLat, distance, duration, poiTypes) + } + override fun retrievePreviousJourneyJson(plan: String, itineraryId: Long): String { + return delegate.retrievePreviousJourneyJson(plan, itineraryId) + } + override fun getPhotomapCategories(): PhotomapCategories { + return delegate.getPhotomapCategories() + } + override fun getPhoto(photoId: Long): Photos { + return delegate.getPhoto(photoId) + } + override fun getPhotos(lonW: Double, latS: Double, lonE: Double, latN: Double): Photos { + return delegate.getPhotos(lonW, latS, lonE, latN) + } + override fun getUserJourneys(username: String): UserJourneys { + return delegate.getUserJourneys(username) + } + override fun geoCoder(search: String, lonW: Double, latS: Double, lonE: Double, latN: Double): GeoPlaces { + return delegate.geoCoder(search, lonW, latS, lonE, latN) + } + override fun sendFeedback(itinerary: Int, comments: String, name: String, email: String): Result { + return delegate.sendFeedback(itinerary, comments, name, email) + } + override fun uploadPhoto(photoUri: Uri, username: String, password: String, lon: Double, lat: Double, metaCat: String, category: String, dateTime: String, caption: String): Upload.Result { + return delegate.uploadPhoto(photoUri, username, password, lon, lat, metaCat, category, dateTime, caption) + } + override fun signin(username: String, password: String): Signin.Result { + return delegate.signin(username, password) + } + override fun register(username: String, password: String, name: String, email: String): Result { + return delegate.register(username, password, name, email) + } + override fun getPOICategories(): POICategories { + return delegate.getPOICategories() + } + override fun getPOIs(key: String, lonW: Double, latS: Double, lonE: Double, latN: Double): List { + return delegate.getPOIs(key, lonW, latS, lonE, latN) + } + override fun getPOIs(key: String, lon: Double, lat: Double, radius: Int): List { + return delegate.getPOIs(key, lon, lat, radius) + } + override fun getBlogEntries(): Blog { + return delegate.getBlogEntries() + } + +} + +class ApiClientImpl(private val retrofitApiClient: RetrofitApiClient): CycleStreetsApi { + override fun getJourneyJson(plan: String, + leaving: String?, + arriving: String?, + speed: Int, + lonLat: DoubleArray): String { + val points = itineraryPoints(*lonLat) + return retrofitApiClient.getJourneyJson(plan, points, leaving, arriving, speed) + } + + override fun getCircularJourneyJson(lonLat: DoubleArray, + distance: Int?, + duration: Int?, + poiTypes: String?): String { + val point = itineraryPoints(*lonLat) + return retrofitApiClient.getCircularJourneyJson(point, distance, duration, poiTypes) + } + + override fun retrievePreviousJourneyJson(plan: String, + itineraryId: Long): String { + return retrofitApiClient.retrievePreviousJourneyJson(plan, itineraryId) + } + + override fun getPhotomapCategories(): PhotomapCategories { + return retrofitApiClient.photomapCategories + } + + override fun getPhoto(photoId: Long): Photos { + return retrofitApiClient.getPhoto(photoId) + } + + override fun getPhotos(lonW: Double, + latS: Double, + lonE: Double, + latN: Double): Photos { + return retrofitApiClient.getPhotos(lonW, latS, lonE, latN) + } + + override fun getUserJourneys(username: String): UserJourneys { + return retrofitApiClient.getUserJourneys(username) + } + + override fun geoCoder(search: String, + lonW: Double, + latS: Double, + lonE: Double, + latN: Double): GeoPlaces { + return retrofitApiClient.geoCoder(search, lonW, latS, lonE, latN) + } + + override fun sendFeedback(itinerary: Int, + comments: String, + name: String, + email: String): Result { + return retrofitApiClient.sendFeedback(itinerary, comments, name, email) + } + + override fun uploadPhoto(photoUri: Uri, + username: String, + password: String, + lon: Double, + lat: Double, + metaCat: String, + category: String, + dateTime: String, + caption: String): Upload.Result { + return retrofitApiClient.uploadPhoto(username, password, lon, lat, java.lang.Long.valueOf(dateTime), + category, metaCat, caption, photoUri) + } + + override fun signin(username: String, + password: String): Signin.Result { + return retrofitApiClient.authenticate(username, password) + } + + override fun register(username: String, + password: String, + name: String, + email: String): Result { + return retrofitApiClient.register(username, password, name, email) + } + + override fun getPOICategories(): POICategories { + return retrofitApiClient.getPOICategories() + } + + override fun getPOIs(key: String, + lonW: Double, + latS: Double, + lonE: Double, + latN: Double): List { + return retrofitApiClient.getPOIs(key, lonW, latS, lonE, latN) + } + + override fun getPOIs(key: String, + lon: Double, + lat: Double, + radius: Int): List { + return retrofitApiClient.getPOIs(key, lon, lat, radius) + } + + override fun getBlogEntries(): Blog { + return retrofitApiClient.blogEntries + } + + ///////////////////////////////////////////////////// + private fun itineraryPoints(vararg lonLat: Double): String { + val sb = StringBuilder() + var i = 0 + while (i != lonLat.size) { + if (i != 0) + sb.append("|") + sb.append(lonLat[i]).append(",").append(lonLat[i + 1]) + i += 2 + } + return sb.toString() + } +} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/Blog.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/Blog.java index f6ba87300..ab3e71568 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/Blog.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/Blog.java @@ -8,28 +8,28 @@ public class Blog private static final Blog NULL_BLOG; static { NULL_BLOG = new Blog(new ArrayList() {{ - add(new BlogEntry("ERROR", "http://www.cyclestreets.net/blog/", "Could not retrieve CycleStreets blog entries", "")); + add(new BlogEntry("ERROR", "https://www.cyclestreets.org/news/", "Could not retrieve CycleStreets blog entries", "")); }}); } private List entries = new ArrayList<>(); - + public Blog(List entries) { // Add up to the 5 most recent blog entries this.entries.addAll(entries.subList(0, Math.min(5, entries.size()))); } - + public boolean isNull() { return this == NULL_BLOG; } - + public String mostRecent() { return (entries.size() != 0) ? entries.get(0).date() : null; } - + public String mostRecentTitle() { return (entries.size() != 0) ? entries.get(0).title() : null; } - + public String toHtml() { final StringBuilder sb = new StringBuilder(); for (final BlogEntry be : entries) { @@ -42,9 +42,9 @@ public String toHtml() { public static Blog load() { try { - return ApiClient.getBlogEntries(); + return ApiClient.INSTANCE.getBlogEntries(); } - catch(Exception e) { + catch (Exception e) { // ah } return NULL_BLOG; diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/BlogEntry.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/BlogEntry.java index b6af437ec..af0050f74 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/BlogEntry.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/BlogEntry.java @@ -6,7 +6,7 @@ public class BlogEntry private final String link; private final String description; private final String date; - + public BlogEntry(final String title, final String link, final String description, @@ -16,10 +16,10 @@ public BlogEntry(final String title, this.description = description; this.date = date; } - + public String title() { return title; } public String date() { return date; } - + public String toHtml() { return String.format("

%s

%s

%s

", link, title, description, date); diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/DistanceFormatter.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/DistanceFormatter.java index 8513bf872..a517d264e 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/DistanceFormatter.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/DistanceFormatter.java @@ -1,55 +1,48 @@ package net.cyclestreets.api; -public abstract class DistanceFormatter +public abstract class DistanceFormatter { - public abstract String distance(int metres); - public abstract String total_distance(int metres); - - static public DistanceFormatter formatter(final String name) - { - if("miles".equals(name)) - return milesFormatter; - return kmFormatter; - } // formatter - - static private DistanceFormatter kmFormatter = new KmFormatter(); - static private DistanceFormatter milesFormatter = new MilesFormatter(); - - static private class KmFormatter extends DistanceFormatter - { - public String distance(int metres) - { - if(metres < 2000) - return String.format("%dm", metres); - return total_distance(metres); - } // distance - - public String total_distance(int metres) - { - int km = metres / 1000; - int frackm = (int)((metres % 1000) / 10.0); - return String.format("%d.%02dkm", km, frackm); - } // total_distance - } // class KmFormatter - - static private class MilesFormatter extends DistanceFormatter - { - private int metresToYards(int metres) { return (int)(metres * 1.0936133); } - - public String distance(int metres) - { - int yards = metresToYards(metres); - if(yards <= 750) - return String.format("%dyds", yards); - return total_distance(metres); - } // distance - - public String total_distance(int metres) - { - int yards = metresToYards(metres); - int miles = yards / 1760; - int frackm = (int)((yards % 1760) / 17.6); - return String.format("%d.%02d miles", miles, frackm); - } // total_distance - } // class MilesFormatter -} // DistanceFormatter + public abstract String distance(int metres); + public abstract String total_distance(int metres); + + public static DistanceFormatter formatter(final String name) { + if ("miles".equals(name)) + return milesFormatter; + return kmFormatter; + } + + private static DistanceFormatter kmFormatter = new KmFormatter(); + private static DistanceFormatter milesFormatter = new MilesFormatter(); + + private static class KmFormatter extends DistanceFormatter { + public String distance(int metres) { + if (metres < 2000) + return String.format("%dm", metres); + return total_distance(metres); + } + + public String total_distance(int metres) { + int km = metres / 1000; + int frackm = (int)((metres % 1000) / 10.0); + return String.format("%d.%02dkm", km, frackm); + } + } + + private static class MilesFormatter extends DistanceFormatter { + private int metresToYards(int metres) { return (int)(metres * 1.0936133); } + + public String distance(int metres) { + int yards = metresToYards(metres); + if (yards <= 750) + return String.format("%dyds", yards); + return total_distance(metres); + } + + public String total_distance(int metres) { + int yards = metresToYards(metres); + int miles = yards / 1760; + int frackm = (int)((yards % 1760) / 17.6); + return String.format("%d.%02d miles", miles, frackm); + } + } +} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/Feedback.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/Feedback.java index 41fb2d480..a9c1001b6 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/Feedback.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/Feedback.java @@ -1,35 +1,25 @@ package net.cyclestreets.api; -import java.io.IOException; +import net.cyclestreets.core.R; public class Feedback { - static public class Result { - private final boolean ok; - private final String message; - - public Result(String errorMessage) { - ok = false; - message = errorMessage; - } - - public Result() { - ok = true; - message = "Thank you for submitting this feedback. We will get back to you when we have checked this out."; - } - - public boolean ok() { - return ok; - } + public static Result ok() { + return new Result(ApiClient.INSTANCE.getMessage(R.string.feedback_ok)); + } - public String message() { - return message; - } + public static Result error(String errorMessage) { + return new Result(ApiClient.INSTANCE.getMessage(R.string.feedback_error_prefix), errorMessage); } - public static Feedback.Result send(final int itinerary, - final String comments, - final String name, - final String email) throws IOException { - return ApiClient.sendFeedback(itinerary, comments, name, email); + ////////////////////////////////////////////////////// + public static Result send(final int itinerary, + final String comments, + final String name, + final String email) { + try { + return ApiClient.INSTANCE.sendFeedback(itinerary, comments, name, email); + } catch (Exception e) { + return error(e.getMessage()); + } } } diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoAdapter.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoAdapter.java index 1d518200d..165045982 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoAdapter.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoAdapter.java @@ -9,27 +9,25 @@ import net.cyclestreets.core.R; -import org.osmdroid.util.BoundingBoxE6; +import org.osmdroid.util.BoundingBox; import java.util.List; public class GeoAdapter extends ArrayAdapter { - static private final int AdapterViewId = R.layout.geo_item_2line; + private static final int AdapterViewId = R.layout.geo_item_2line; private final LayoutInflater inflater; - protected GeoAdapter(final Context context) - { + protected GeoAdapter(final Context context) { super(context, AdapterViewId); inflater = LayoutInflater.from(context); - } // GeoAdapter + } @Override public View getView(int position, final View convertView, - final ViewGroup parent) - { + final ViewGroup parent) { final View row = inflater.inflate(AdapterViewId, parent, false); final GeoPlace p = getItem(position); @@ -37,27 +35,24 @@ public View getView(int position, setText(row, android.R.id.text2, p.near()); return row; - } // getView + } - private void setText(final View parent, final int id, final String text) - { + private void setText(final View parent, final int id, final String text) { ((TextView)parent.findViewById(id)).setText(text); - } // setText + } protected GeoPlaces geoCode(final String search, - final BoundingBoxE6 bounds) - { + final BoundingBox bounds) { try { return GeoPlaces.search(search, bounds); } - catch(Exception e) { + catch (Exception e) { return GeoPlaces.EMPTY; - } // catch - } // geoCode + } + } - protected void addAll(final List list) - { - for(final GeoPlace p : list) + protected void addAll(final List list) { + for (final GeoPlace p : list) add(p); - } // addAll -} // class GeoAdapter + } +} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoLiveAdapter.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoLiveAdapter.java index 078dfb674..b0c074ac5 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoLiveAdapter.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoLiveAdapter.java @@ -5,14 +5,14 @@ import android.content.SharedPreferences; import android.widget.Filter; -import org.osmdroid.util.BoundingBoxE6; +import org.osmdroid.util.BoundingBox; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.TreeSet; -public class GeoLiveAdapter extends GeoAdapter +public class GeoLiveAdapter extends GeoAdapter { private static final String PREFS_GEO_KEY = "net.cyclestreets.api.GeoLiveAdapter"; private static final String PREFS_GEO_NAME_PREFIX = "name/"; @@ -22,134 +22,121 @@ public class GeoLiveAdapter extends GeoAdapter // Magic string public static final String MY_LOCATION = "My Location"; - + private final GeocodeFilter filter; - private final BoundingBoxE6 bounds_; + private final BoundingBox bounds; private final SharedPreferences prefs; /* * Constructor when used with an AutoCompleteTextView */ public GeoLiveAdapter(final Context context, - final BoundingBoxE6 bounds) - { + final BoundingBox bounds) { super(context); - bounds_ = bounds; - + this.bounds = bounds; + prefs = context.getSharedPreferences(PREFS_GEO_KEY, Application.MODE_PRIVATE); filter = new GeocodeFilter(prefs); - } // GeoAdapter + } @Override - public Filter getFilter() - { + public Filter getFilter() { return filter; - } // getFilter - - public BoundingBoxE6 bounds() { return bounds_; } - - public GeoPlace exactMatch(final String p) - { - for(int i = 0; i != getCount(); ++i) - { + } + + public BoundingBox bounds() { return bounds; } + + public GeoPlace exactMatch(final String p) { + for (int i = 0; i != getCount(); ++i) { final GeoPlace gp = getItem(i); - if(p.equals(gp.toString())) + if (p.equals(gp.toString())) return gp; - } // for ... + } return null; - } // exactMatch - + } + /* * Add to geocoding history */ - public void addHistory(final GeoPlace p) - { + public void addHistory(final GeoPlace p) { if (p.name().equals(MY_LOCATION)) return; - + final String key = p.name().toLowerCase(); - + final SharedPreferences.Editor edit = prefs.edit(); edit.putString(PREFS_GEO_NAME_PREFIX + key, p.name()); edit.putString(PREFS_GEO_NEAR_PREFIX + key, p.near()); - edit.putInt(PREFS_GEO_LATITUDE_PREFIX + key, p.coord().getLatitudeE6()); - edit.putInt(PREFS_GEO_LONGITUDE_PREFIX + key, p.coord().getLongitudeE6()); - edit.commit(); - } // addHistory - + edit.putInt(PREFS_GEO_LATITUDE_PREFIX + key, (int)(p.coord().getLatitude() * 1e6)); + edit.putInt(PREFS_GEO_LONGITUDE_PREFIX + key, (int)(p.coord().getLongitude() * 1e6)); + edit.apply(); + } + ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// - private class GeocodeFilter extends Filter - { - private SharedPreferences prefs_; - - public GeocodeFilter(final SharedPreferences prefs) - { - prefs_ = prefs; - } // GeocodeFilter - + private class GeocodeFilter extends Filter { + private SharedPreferences prefs; + + public GeocodeFilter(final SharedPreferences prefs) { + this.prefs = prefs; + } + @Override - protected FilterResults performFiltering(CharSequence cs) - { + protected FilterResults performFiltering(CharSequence cs) { final List list = new ArrayList<>(); - - if (cs != null) - { + + if (cs != null) { // Add history hits first filterPrefs(list, cs); - + // Only geocode if more than two characters if (cs.length() > 2) - list.addAll(geoCode(cs.toString(), bounds_).asList()); + list.addAll(geoCode(cs.toString(), bounds).asList()); } - else - { + else { // Add all prefs filterPrefs(list, ""); } - + final FilterResults results = new FilterResults(); results.values = list; results.count = list.size(); return results; - } // performFiltering - + } + @SuppressWarnings("unchecked") @Override - protected void publishResults(CharSequence cs, FilterResults fr) - { + protected void publishResults(CharSequence cs, FilterResults fr) { clear(); if (fr != null && fr.values != null) addAll((List)fr.values); - + notifyDataSetChanged(); - } // publishResults - + } + /* * Add any matching entries from prefs */ - private void filterPrefs(final List list, - final CharSequence cs) - { - if (prefs_ == null) + private void filterPrefs(final List list, + final CharSequence cs) { + if (prefs == null) return; - + final String match = (PREFS_GEO_NAME_PREFIX + cs).toLowerCase(); final Set sortedKeys = new TreeSet<>(prefs.getAll().keySet()); - - for (final String s: sortedKeys) - { + + for (final String s: sortedKeys) { if (!s.startsWith(match)) continue; - + final String key = prefs.getString(s, "").toLowerCase(); - + list.add(new GeoPlace(prefs.getInt(PREFS_GEO_LATITUDE_PREFIX + key, 0), prefs.getInt(PREFS_GEO_LONGITUDE_PREFIX + key, 0), prefs.getString(PREFS_GEO_NAME_PREFIX + key, ""), prefs.getString(PREFS_GEO_NEAR_PREFIX + key, ""))); - } // for ... - } // filterPrefs - } // class GeocodeFilter -} // class GeoAdapter + } + } + } +} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoPlace.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoPlace.java index 4f2e3b905..e12cd892e 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoPlace.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoPlace.java @@ -7,21 +7,21 @@ public class GeoPlace { private String name_; private String near_; private IGeoPoint coord_; - + public GeoPlace(final int latE6, final int longE6, final String name, final String near) { this(new GeoPoint(latE6/1E6, longE6/1E6), name, near); - } // GeoPlace - + } + public GeoPlace(final IGeoPoint point, final String name, final String near) { coord_ = point; name_ = name; near_ = near; - } // GeoPlace + } public String name() { return name_; } public String near() { return near_; } public IGeoPoint coord() { return coord_; } - + @Override public String toString() { String result = name_; @@ -31,5 +31,5 @@ public String toString() { result += near_; } return result; - } // toString -} // class GeoPlace + } +} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoPlaces.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoPlaces.java index f298fcbcd..0b9a49a38 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoPlaces.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoPlaces.java @@ -1,8 +1,7 @@ package net.cyclestreets.api; -import org.osmdroid.util.BoundingBoxE6; +import org.osmdroid.util.BoundingBox; -import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -28,16 +27,15 @@ private GeoPlaces() {} public List asList() { return places; } - static public GeoPlaces EMPTY = new GeoPlaces(); + public static GeoPlaces EMPTY = new GeoPlaces(); /////////////////////////////////////////////// - static public GeoPlaces search(final String searchTerm, - final BoundingBoxE6 bounds) - throws IOException { - return ApiClient.geoCoder(searchTerm, - bounds.getLatNorthE6() / 1E6, - bounds.getLatSouthE6() / 1E6, - bounds.getLonEastE6() / 1E6, - bounds.getLonWestE6() / 1E6); + public static GeoPlaces search(final String searchTerm, + final BoundingBox bounds) { + return ApiClient.INSTANCE.geoCoder(searchTerm, + bounds.getLonWest(), + bounds.getLatSouth(), + bounds.getLonEast(), + bounds.getLatNorth()); } } diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoStaticAdapter.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoStaticAdapter.java index 37d50a2a5..56be747f1 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoStaticAdapter.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/GeoStaticAdapter.java @@ -3,65 +3,57 @@ import android.content.Context; import android.os.AsyncTask; -import org.osmdroid.util.BoundingBoxE6; +import org.osmdroid.util.BoundingBox; -public class GeoStaticAdapter extends GeoAdapter +public class GeoStaticAdapter extends GeoAdapter { - public interface OnPopulatedListener - { + public interface OnPopulatedListener { void onPopulated(); - } // interface OnPopulatedListener - + } + private final OnPopulatedListener listener_; public GeoStaticAdapter(final Context context, final String search, - final BoundingBoxE6 bounds, - final OnPopulatedListener listener) - { + final BoundingBox bounds, + final OnPopulatedListener listener) { super(context); - + listener_ = listener; - + asyncGeoCode(search, bounds); - } // GeoAdapter - - private void populate(final GeoPlaces places) - { + } + + private void populate(final GeoPlaces places) { addAll(places.asList()); - - if(listener_ != null) + + if (listener_ != null) listener_.onPopulated(); - } // addAll - + } + private void asyncGeoCode(final String search, - final BoundingBoxE6 bounds) - { + final BoundingBox bounds) { final AsyncGeoCoder coder = new AsyncGeoCoder(this); coder.execute(search, bounds); - } // asyncGeoCode - - static private class AsyncGeoCoder extends AsyncTask - { + } + + private static class AsyncGeoCoder extends AsyncTask { private GeoStaticAdapter owner_; - - public AsyncGeoCoder(final GeoStaticAdapter adapter) - { + + public AsyncGeoCoder(final GeoStaticAdapter adapter) { owner_ = adapter; - } // AsyncGeoCoder - + } + @Override - protected GeoPlaces doInBackground(Object... params) - { + protected GeoPlaces doInBackground(Object... params) { final String search = (String)params[0]; - final BoundingBoxE6 box = (BoundingBoxE6)params[1]; + final BoundingBox box = (BoundingBox)params[1]; return owner_.geoCode(search, box); - } // doInBackground - + } + @Override - protected void onPostExecute(final GeoPlaces photos) - { + protected void onPostExecute(final GeoPlaces photos) { owner_.populate(photos); - } // onPostExecute - } // AsyncGeoCoder -} // class GeoAdapter + } + } +} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/JourneyPlanner.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/JourneyPlanner.java index 17cd4521a..9e8321eaa 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/JourneyPlanner.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/JourneyPlanner.java @@ -2,37 +2,39 @@ import net.cyclestreets.routing.Waypoints; -import java.io.IOException; - public class JourneyPlanner { - private static final int DEFAULT_SPEED = 20; - - ///////////////////////////////////////////////////////////////// - public static String getJourneyXml(final String plan, - final Waypoints waypoints) throws IOException { - return getJourneyXml(plan, DEFAULT_SPEED, waypoints); + + public static String getJourneyJson(final String plan, + final int speed, + final Waypoints waypoints) { + return ApiClient.INSTANCE.getJourneyJson(plan, + null, + null, + speed, + lonLat(waypoints)); } - - public static String getJourneyXml(final String plan, - final int speed, - final Waypoints waypoints) throws IOException { - final double[] lonLat = new double[waypoints.count()*2]; + + public static String getCircularJourneyJson(final Waypoints waypoints, + final Integer distance, + final Integer duration, + final String poiTypes) { + return ApiClient.INSTANCE.getCircularJourneyJson(lonLat(waypoints), distance, duration, poiTypes); + } + + public static String retrievePreviousJourneyJson(final String plan, + final long itinerary) { + return ApiClient.INSTANCE.retrievePreviousJourneyJson(plan, itinerary); + } + + private static double[] lonLat(Waypoints waypoints) { + final double[] lonLat = new double[waypoints.count() * 2]; for (int i = 0; i != waypoints.count(); ++i) { - int l = i*2; - lonLat[l] = waypoints.get(i).getLongitudeE6() / 1E6; - lonLat[l+1] = waypoints.get(i).getLatitudeE6() / 1E6; + int l = i * 2; + lonLat[l] = waypoints.get(i).getLongitude(); + lonLat[l + 1] = waypoints.get(i).getLatitude(); } - return ApiClient.getJourneyXml(plan, - null, - null, - speed, - lonLat); + return lonLat; } - - public static String getJourneyXml(final String plan, - final long itinerary) throws IOException { - return ApiClient.getJourneyXml(plan, itinerary); - } - + private JourneyPlanner() {} } diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POI.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POI.java index fac98c7e1..6fb0d71b5 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POI.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POI.java @@ -6,40 +6,47 @@ public class POI { - private final int id_; - private final String name_; - private final String notes_; - private final String url_; - private final GeoPoint pos_; - - private POICategory category_; - - public POI(final int id, + private final String id; + private final String name; + private final String notes; + private final String url; + private final String phone; + private final String openingHours; + private final GeoPoint pos; + + private POICategory category; + + public POI(final String id, final String name, final String notes, final String url, + final String phone, + final String openingHours, final double lat, - final double lon) - { - id_ = id; - name_ = name; - notes_ = notes; - url_ = url; - pos_ = new GeoPoint(lat, lon); - } // POI - - void setCategory(final POICategory category) { category_ = category; } - - public int id() { return id_; } - public String name() { return sOrNull(name_); } - public String notes() { return sOrNull(notes_); } - public String url() { return sOrNull(url_); } - public GeoPoint position() { return pos_; } - - private String sOrNull(final String s) { + final double lon) { + this.id = id; + this.name = name; + this.notes = notes; + this.url = url; + this.phone = phone; + this.openingHours = openingHours; + pos = new GeoPoint(lat, lon); + } + + public void setCategory(final POICategory category) { this.category = category; } + + public String id() { return id; } + public String name() { return stringOrBlank(name); } + public String notes() { return stringOrBlank(notes); } + public String url() { return stringOrBlank(url); } + public String phone() { return stringOrBlank(phone); } + public String openingHours() { return stringOrBlank(openingHours); } + public GeoPoint position() { return pos; } + + private String stringOrBlank(final String s) { return s != null ? s : ""; - } // sOrNull - - public POICategory category() { return category_; } - public Drawable icon() { return category_.icon(); } -} // class POI + } + + public POICategory category() { return category; } + public Drawable icon() { return category.getIcon(); } +} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POICategories.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POICategories.java index 057d98241..bd9517ca2 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POICategories.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POICategories.java @@ -12,54 +12,53 @@ public class POICategories implements Iterable { private final List categories = new ArrayList<>(); private final Map categoryMap = new HashMap<>(); - + public POICategories(Collection categories) { this.categories.addAll(categories); for (POICategory category : categories) { - categoryMap.put(category.name(), category); + categoryMap.put(category.getName(), category); } } - + public int count() { return categories.size(); } public POICategory get(int index) { return categories.get(index); } public POICategory get(final String name) { return categoryMap.get(name); } public Iterator iterator() { return categories.iterator(); } - + ////////////////////////////////////////////// private static POICategories loaded_; - public static final int IconSize = 32; - + public static POICategories get() { if (loaded_ == null) loaded_ = load(); return loaded_; } - + public static POICategories load() { try { - return ApiClient.getPOICategories(IconSize); - } catch(Exception e) { + return ApiClient.INSTANCE.getPOICategories(); + } catch (Exception e) { // ah } return null; } - + public static boolean loaded() { return loaded_ != null; } public static void backgroundLoad() { new GetPOICategoriesTask().execute(); } - + private static class GetPOICategoriesTask extends AsyncTask { protected POICategories doInBackground(Void... params) { try { - return ApiClient.getPOICategories(POICategories.IconSize); + return ApiClient.INSTANCE.getPOICategories(); } catch (final Exception ex) { // never mind, eh? } return null; } - + @Override protected void onPostExecute(final POICategories cats) { POICategories.loaded_ = cats; diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POICategory.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POICategory.java deleted file mode 100644 index 2eff005de..000000000 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POICategory.java +++ /dev/null @@ -1,48 +0,0 @@ -package net.cyclestreets.api; - -import android.graphics.drawable.Drawable; - -import org.osmdroid.api.IGeoPoint; - -import java.util.Collections; -import java.util.List; - -public class POICategory { - private final String key_; - private final String name_; - private final Drawable icon_; - - public POICategory(final String key, - final String name, - final Drawable icon) { - key_ = key; - name_ = name; - icon_ = icon; - } // POICategory - - public String name() { return name_; } - public Drawable icon() { return icon_; } - - public boolean equals(final Object rhs) { - if(!(rhs instanceof POICategory)) - return false; - - return name_.equals(((POICategory)rhs).name_); - } // equals - - public List pois(final IGeoPoint centre, - final int radius) - throws Exception { - try { - final List pois = ApiClient.getPOIs(key_, - centre.getLongitudeE6() / 1E6, - centre.getLatitudeE6() / 1E6, - radius); - for(final POI poi : pois) - poi.setCategory(this); - return pois; - } catch(Exception e) { - return Collections.emptyList(); - } // catch - } // pois -} // class POICategory diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POICategory.kt b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POICategory.kt new file mode 100644 index 000000000..9df00f21f --- /dev/null +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/POICategory.kt @@ -0,0 +1,35 @@ +package net.cyclestreets.api + +import android.graphics.drawable.Drawable +import net.cyclestreets.api.ApiClient.getPOIs +import org.osmdroid.api.IGeoPoint + +class POICategory(val key: String, + val name: String, + val icon: Drawable) { + + fun pois(centre: IGeoPoint, radius: Int): List { + try { + val pois = getPOIs(key, centre.longitude, centre.latitude, radius) + for (poi in pois) + poi.setCategory(this) + return pois + } catch (e: Exception) { + return emptyList() + } + } + + override fun equals(other: Any?): Boolean { + if (other !is POICategory) return false + return (name == other.name) + } + + override fun hashCode(): Int { + return name.hashCode() + } + + override fun toString(): String { + return "POICategory(key='$key', name='$name')" + } + +} diff --git a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/Photo.java b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/Photo.java index aee41289e..a8f413f65 100644 --- a/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/Photo.java +++ b/libraries/cyclestreets-core/src/main/java/net/cyclestreets/api/Photo.java @@ -9,52 +9,57 @@ import java.util.List; public class Photo implements Parcelable { - private final int id_; - private final String category_; - private final String metaCategory_; - private final String caption_; - private final String url_; - private final String thumbnailUrl_; - private final GeoPoint position_; - private final List