From 24ae18d7c29d9a5f4ee5f0de987ef4eb027ef71a Mon Sep 17 00:00:00 2001 From: Roman Tsisyk Date: Mon, 6 Jun 2022 10:37:22 +0300 Subject: [PATCH] Rehydrate Signed-off-by: Roman Tsisyk --- .gitignore | 17 +- README.md | 58 +++--- build.gradle | 9 + gradle.properties | 21 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 185 +++++++++++++++++ gradlew.bat | 89 ++++++++ lib/.gitignore | 1 + lib/AndroidManifest.xml | 8 - lib/build.gradle | 35 +++- lib/build.xml | 92 --------- lib/consumer-rules.pro | 0 lib/proguard-rules.pro | 21 ++ lib/project.properties | 15 -- lib/src/com/mapswithme/maps/api/Const.java | 55 ----- .../maps/api/DownloadMapsWithMeDialog.java | 64 ------ .../com/mapswithme/maps/api/MWMResponse.java | 77 ------- lib/src/main/AndroidManifest.xml | 8 + .../java/app/organicmaps/api/Api.java} | 85 ++++---- .../main/java/app/organicmaps/api/Const.java | 56 ++++++ .../app/organicmaps/api/DownloadDialog.java | 63 ++++++ .../java/app/organicmaps/api/Point.java} | 84 ++++---- .../java/app/organicmaps/api/Request.java} | 190 ++++++++++-------- .../java/app/organicmaps/api/Response.java | 78 +++++++ .../main}/res/drawable/background_pattern.xml | 0 .../main}/res/drawable/btn_back_gray.xml | 0 .../res/drawable/btn_back_gray_active.xml | 0 .../main}/res/drawable/btn_back_green.xml | 0 .../res/drawable/btn_back_green_active.xml | 0 .../main}/res/drawable/btn_gray_selector.xml | 0 .../main}/res/drawable/btn_green_selector.xml | 0 lib/{ => src/main}/res/drawable/gray.xml | 0 lib/{ => src/main}/res/drawable/green.xml | 0 lib/{ => src/main}/res/drawable/overflow.xml | 0 lib/{ => src/main}/res/drawable/pattern.png | Bin lib/{ => src/main}/res/drawable/shadow.xml | 0 .../main}/res/layout/dlg_install_mwm.xml | 5 +- lib/{ => src/main}/res/values/strings.xml | 0 lib/{ => src/main}/res/values/styles.xml | 0 sample-app-capitals/.gitignore | 1 + sample-app-capitals/build.gradle | 38 +++- sample-app-capitals/build.xml | 92 --------- sample-app-capitals/proguard-rules.pro | 21 ++ sample-app-capitals/project.properties | 15 -- .../res/drawable-hdpi/ic_launcher.png | Bin 8680 -> 0 bytes .../res/drawable-ldpi/ic_launcher.png | Bin 3169 -> 0 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 4740 -> 0 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 13312 -> 0 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 37471 -> 0 bytes .../{ => src/main}/AndroidManifest.xml | 50 ++--- .../capitals/CapitalsListActivity.java | 25 +-- .../api/sample}/capitals/City.java | 47 ++--- .../sample}/capitals/CityDetailsActivity.java | 62 +++--- .../res/drawable/ic_launcher_foreground.xml | 15 ++ .../res/layout/capitals_list_activity.xml | 2 +- .../res/layout/city_details_activity.xml | 4 +- .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1944 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3970 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1346 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2294 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2577 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 5460 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4229 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 9035 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5858 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 13088 bytes .../main}/res/values-sw720dp-land/dimens.xml | 0 .../{ => src/main}/res/values-v11/styles.xml | 0 .../{ => src/main}/res/values-v14/styles.xml | 0 .../{ => src/main}/res/values/dimens.xml | 0 .../res/values/ic_launcher_background.xml | 4 + .../{ => src/main}/res/values/strings.xml | 6 +- .../{ => src/main}/res/values/styles.xml | 0 settings.gradle | 17 ++ 77 files changed, 978 insertions(+), 753 deletions(-) create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 lib/.gitignore delete mode 100644 lib/AndroidManifest.xml delete mode 100644 lib/build.xml create mode 100644 lib/consumer-rules.pro create mode 100644 lib/proguard-rules.pro delete mode 100644 lib/project.properties delete mode 100644 lib/src/com/mapswithme/maps/api/Const.java delete mode 100644 lib/src/com/mapswithme/maps/api/DownloadMapsWithMeDialog.java delete mode 100644 lib/src/com/mapswithme/maps/api/MWMResponse.java create mode 100644 lib/src/main/AndroidManifest.xml rename lib/src/{com/mapswithme/maps/api/MapsWithMeApi.java => main/java/app/organicmaps/api/Api.java} (50%) create mode 100644 lib/src/main/java/app/organicmaps/api/Const.java create mode 100644 lib/src/main/java/app/organicmaps/api/DownloadDialog.java rename lib/src/{com/mapswithme/maps/api/MWMPoint.java => main/java/app/organicmaps/api/Point.java} (55%) rename lib/src/{com/mapswithme/maps/api/MwmRequest.java => main/java/app/organicmaps/api/Request.java} (55%) create mode 100644 lib/src/main/java/app/organicmaps/api/Response.java rename lib/{ => src/main}/res/drawable/background_pattern.xml (100%) rename lib/{ => src/main}/res/drawable/btn_back_gray.xml (100%) rename lib/{ => src/main}/res/drawable/btn_back_gray_active.xml (100%) rename lib/{ => src/main}/res/drawable/btn_back_green.xml (100%) rename lib/{ => src/main}/res/drawable/btn_back_green_active.xml (100%) rename lib/{ => src/main}/res/drawable/btn_gray_selector.xml (100%) rename lib/{ => src/main}/res/drawable/btn_green_selector.xml (100%) rename lib/{ => src/main}/res/drawable/gray.xml (100%) rename lib/{ => src/main}/res/drawable/green.xml (100%) rename lib/{ => src/main}/res/drawable/overflow.xml (100%) rename lib/{ => src/main}/res/drawable/pattern.png (100%) rename lib/{ => src/main}/res/drawable/shadow.xml (100%) rename lib/{ => src/main}/res/layout/dlg_install_mwm.xml (94%) rename lib/{ => src/main}/res/values/strings.xml (100%) rename lib/{ => src/main}/res/values/styles.xml (100%) create mode 100644 sample-app-capitals/.gitignore delete mode 100644 sample-app-capitals/build.xml create mode 100644 sample-app-capitals/proguard-rules.pro delete mode 100644 sample-app-capitals/project.properties delete mode 100644 sample-app-capitals/res/drawable-hdpi/ic_launcher.png delete mode 100644 sample-app-capitals/res/drawable-ldpi/ic_launcher.png delete mode 100644 sample-app-capitals/res/drawable-mdpi/ic_launcher.png delete mode 100644 sample-app-capitals/res/drawable-xhdpi/ic_launcher.png delete mode 100644 sample-app-capitals/res/drawable-xxhdpi/ic_launcher.png rename sample-app-capitals/{ => src/main}/AndroidManifest.xml (57%) rename sample-app-capitals/src/{com/mapswithme => main/java/app/organicmaps/api/sample}/capitals/CapitalsListActivity.java (80%) rename sample-app-capitals/src/{com/mapswithme => main/java/app/organicmaps/api/sample}/capitals/City.java (98%) rename sample-app-capitals/src/{com/mapswithme => main/java/app/organicmaps/api/sample}/capitals/CityDetailsActivity.java (53%) create mode 100644 sample-app-capitals/src/main/res/drawable/ic_launcher_foreground.xml rename sample-app-capitals/{ => src/main}/res/layout/capitals_list_activity.xml (97%) rename sample-app-capitals/{ => src/main}/res/layout/city_details_activity.xml (98%) create mode 100644 sample-app-capitals/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 sample-app-capitals/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 sample-app-capitals/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 sample-app-capitals/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 sample-app-capitals/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 sample-app-capitals/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 sample-app-capitals/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 sample-app-capitals/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 sample-app-capitals/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 sample-app-capitals/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 sample-app-capitals/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 sample-app-capitals/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename sample-app-capitals/{ => src/main}/res/values-sw720dp-land/dimens.xml (100%) rename sample-app-capitals/{ => src/main}/res/values-v11/styles.xml (100%) rename sample-app-capitals/{ => src/main}/res/values-v14/styles.xml (100%) rename sample-app-capitals/{ => src/main}/res/values/dimens.xml (100%) create mode 100644 sample-app-capitals/src/main/res/values/ic_launcher_background.xml rename sample-app-capitals/{ => src/main}/res/values/strings.xml (68%) rename sample-app-capitals/{ => src/main}/res/values/styles.xml (100%) create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore index dda549a..10cfdbf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,10 @@ -bin/ -gen/ -build/ -.settings/ - +*.iml +.gradle +/local.properties +/.idea .DS_Store -.classpath -.cproject -.project +/build +/captures +.externalNativeBuild +.cxx local.properties -lint.xml \ No newline at end of file diff --git a/README.md b/README.md index 7eaa260..8f357dd 100644 --- a/README.md +++ b/README.md @@ -25,14 +25,14 @@ Organic Maps works from *Android SDK version 21 (Android 5)* and above First step is to clone [repository][linkRepo] or download it as an archive. When your are done you find two folders: *lib* and *sample-app-capitals*. First one is a library project that you should add to your project. -You don't need any additional permissions in your AndroidManifest.xml to use API library, so you can write real code straight away, calling for different `OrganicMapsApi` methods (more details below). +You don't need any additional permissions in your AndroidManifest.xml to use API library, so you can write real code straight away, calling for different `Api` methods (more details below). ## Classes Overview and HOW TO Core classes you will work with are: -* [app.organicmaps.api.OrganicMapsApi][linkApiClass] - static class with methods such as `showPointOnMap(Activity, double, double, String)` etc. -* [app.organicmaps.api.OMPoint][linkPointClass] - model of POI, includes lat, lon, name, id, and style data. -* [app.organicmaps.api.OMResponse][linkRespClass] - helps you to extract response from Organic Maps by applying `OMResponse.extractFromIntent(Intent)` to Intent. Contains OMPoint data. +* [app.organicmaps.api.Api][linkApiClass] - static class with methods such as `showPointOnMap(Activity, double, double, String)` etc. +* [app.organicmaps.api.Point][linkPointClass] - model of POI, includes lat, lon, name, id, and style data. +* [app.organicmaps.api.Response][linkRespClass] - helps you to extract response from Organic Maps by applying `Response.extractFromIntent(Intent)` to Intent. Contains Point data. ### Show Points on the Map @@ -48,25 +48,25 @@ The simplest usage: final double lon = ...; final String name = ...; // Ask Organic Maps to show the point - OrganicMapsApi.showPointOnMap(this, lat, lon, name); + Api.showPointOnMap(this, lat, lon, name); } ... } -For multiple points use [OMPoint][linkPointClass] class: +For multiple points use [Point][linkPointClass] class: void showMultiplePoints(List list) { - // Convert objects to MMWPoints - final OMPoint[] points = new OMPoint[list.length]; + // Convert objects to OM Points + final Point[] points = new Point[list.length]; for (int i = 0; i < list.size; i++) { - // Get lat, lon, and name from object and assign it to new MMWPoint - points[i] = new OMPoint(lat, lon, name); + // Get lat, lon, and name from object and assign it to new Point + points[i] = new Point(lat, lon, name); } // Show all point on the map, you could also provide some title - OrganicMapsApi.showPointsOnMap(this, "Look at my points, my points are amazing!", points); + Api.showPointsOnMap(this, "Look at my points, my points are amazing!", points); } @@ -80,18 +80,18 @@ your application when user press "More Info" button : // Here is how to pass points with ID ant PendingIntent void showMultiplePointsWithPendingIntent(List list, PendingIntent pendingIntent) { - // Convert objects to OMPoints - final OMPoint[] points = new OMPoint[list.length]; + // Convert objects to Points + final Point[] points = new Point[list.length]; for (int i = 0; i < list.size; i++) { // || // || // \/ // Now you should specify string ID for each point - points[i] = new OMPoint(lat, lon, name, id); + points[i] = new Point(lat, lon, name, id); } // Show all points on the map, you could also provide some title - OrganicMapsApi.showPointsOnMap(this, "This title says that user should choose some point", pendingIntent, points); + Api.showPointsOnMap(this, "This title says that user should choose some point", pendingIntent, points); } //Code below shows general way to extract response data @@ -100,7 +100,7 @@ your application when user press "More Info" button : super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Handle intent you specified with PandingIntent - // Now it has additional information (OMPoint). + // Now it has additional information (Point). handleIntent(getIntent()); } @@ -114,10 +114,10 @@ your application when user press "More Info" button : void handleIntent(Intent intent) { - // Apply OMResponse extraction method to intent - final OMResponse mwmResponse = OMResponse.extractFromIntent(this, intent); + // Apply Response extraction method to intent + final Response mwmResponse = Response.extractFromIntent(this, intent); // Here is your point that user selected - final OMPoint point = mwmResponse.getPoint(); + final Point point = mwmResponse.getPoint(); // Now, for instance you can do some work depending on point id processUserInteraction(point.getId()); } @@ -125,24 +125,26 @@ your application when user press "More Info" button : ## FAQ #### How should I detect if user has Organic Maps installed? -`OrganicMapsApi.isOrganicMapsInstalled(Context)` will return `true` if user has *Lite* or *Pro* version that supports API call installed. +`Api.isOrganicMapsInstalled(Context)` will return `true` if user has *Lite* or *Pro* version that supports API call installed. #### Which versions of Organic Maps support API calls? All versions since 2.4.0 and above support API calls. -#### What will happen if I call for `OrganicMapsApi.showPoint()` but Organic Maps application is not installed? +#### What will happen if I call for `Api.showPoint()` but Organic Maps application is not installed? Nothing serious. API library will show simple dialog with gentle offer to download Organic Maps. You can see how it looks like below. ![Please install us](site/images/dlg.png) ## Sample Code and Application -* [Sample Application at Google Play][linkSampleGooglePlay] * [Sample Application Source Code][linkSampleSource] ------------------------------------------------------------------------------- ## API Code License + +Copyright (c) 2022, Organic Maps OÜ. Copyright (c) 2019, MY.COM B.V. +Copyright (c) 2013, MapsWithMe GmbH. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -154,12 +156,10 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND [linkOM]: https://organicmaps.app/ "Organic Maps" [linkPIntent]: http://developer.android.com/reference/android/app/PendingIntent.html "PendingIntent" -[linkRepo]: https://github.com/mapswithme/api-android "GitHub Repository" +[linkRepo]: https://github.com/organicmaps/api-android "GitHub Repository" [linkLibProj]: http://developer.android.com/tools/projects/index.html#LibraryProjects "Android Library Project" [linkIntents]: http://developer.android.com/guide/components/intents-filters.html "Intents and Intent Filters" -[linkApiClass]: lib/src/com/mapswithme/maps/api/OrganicMapsApi.java "OrganicMapsApi.java" -[linkPointClass]: lib/src/com/mapswithme/maps/api/OMPoint.java "OMPoint.java" -[linkRespClass]: lib/src/com/mapswithme/maps/api/OMResponse.java "OMResponse.java" -[linkSampleSource]: https://github.com/mapswithme/api-android/tree/master/sample-app-capitals "Api Source Code" -[linkSampleGooglePlay]: http://play.google.com/store/apps/details?id=com.mapswithme.capitals "Api Demo .apk" -[linkTravelGuides]: http://www.guidewithme.com +[linkApiClass]: lib/src/app/organicmaps/api/Api.java "Api.java" +[linkPointClass]: lib/src/app/organicmaps/api/Point.java "Point.java" +[linkRespClass]: lib/src/app/organicmaps/api/Response.java "Response.java" +[linkSampleSource]: https://github.com/organicmaps/api-android/tree/master/sample-app-capitals "Api Source Code" diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..6453cee --- /dev/null +++ b/build.gradle @@ -0,0 +1,9 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + id 'com.android.application' version '7.2.1' apply false + id 'com.android.library' version '7.2.1' apply false +} + +task clean(type: Delete) { + delete rootProject.buildDir +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..dab7c28 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,21 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app"s APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f GIT binary patch literal 59203 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

K7UpUK$>l@ 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 E2O(~oYXATM literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..7f5ecd9 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Mon Jun 06 09:48:49 TRT 2022 +distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..4f906e0 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# 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 +# +# https://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. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# 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='"-Xmx64m" "-Xms64m"' + +# 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 +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +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" -a "$nonstop" = "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 or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # 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=`expr $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 + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +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" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..ac1b06f --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@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 + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@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="-Xmx64m" "-Xms64m" + +@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 execute + +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 execute + +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 + +: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 %* + +: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/lib/.gitignore b/lib/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/lib/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/lib/AndroidManifest.xml b/lib/AndroidManifest.xml deleted file mode 100644 index 5c3706a..0000000 --- a/lib/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/lib/build.gradle b/lib/build.gradle index 94cd14f..55b6d8a 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -1,19 +1,32 @@ -apply plugin: 'android-library' +plugins { + id 'com.android.library' +} android { - - // Define these properties in the gradle.properties file in the root project folder - compileSdkVersion propTargetSdkVersion.toInteger() - buildToolsVersion propBuildToolsVersion + compileSdk 32 defaultConfig { - minSdkVersion propMinSdkVersion.toInteger() - targetSdkVersion propTargetSdkVersion.toInteger() + minSdk 21 + targetSdk 32 + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles "consumer-rules.pro" } - sourceSets.main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = ['src'] - res.srcDirs = ['res'] + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'com.google.android.material:material:1.6.1' +} \ No newline at end of file diff --git a/lib/build.xml b/lib/build.xml deleted file mode 100644 index dbb2595..0000000 --- a/lib/build.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/consumer-rules.pro b/lib/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/lib/proguard-rules.pro b/lib/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/lib/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/lib/project.properties b/lib/project.properties deleted file mode 100644 index 93c8c3c..0000000 --- a/lib/project.properties +++ /dev/null @@ -1,15 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system edit -# "ant.properties", and override values to adapt the script to your -# project structure. -# -# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt - -# Project target. -target=android-21 -android.library=true diff --git a/lib/src/com/mapswithme/maps/api/Const.java b/lib/src/com/mapswithme/maps/api/Const.java deleted file mode 100644 index a77ff98..0000000 --- a/lib/src/com/mapswithme/maps/api/Const.java +++ /dev/null @@ -1,55 +0,0 @@ -/****************************************************************************** - Copyright (c) 2022, Organic Maps OÜ. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, this list - of conditions and the following disclaimer. Redistributions in binary form must - reproduce the above copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided with the - distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - OF SUCH DAMAGE. -******************************************************************************/ -package app.organicmaps.api; - -public class Const -{ - - /* Request extras */ - static final String AUTHORITY = "app.organicmaps.api"; - public static final String EXTRA_URL = AUTHORITY + ".url"; - public static final String EXTRA_TITLE = AUTHORITY + ".title"; - public static final String EXTRA_API_VERSION = AUTHORITY + ".version"; - public static final String EXTRA_CALLER_APP_INFO = AUTHORITY + ".caller_app_info"; - public static final String EXTRA_HAS_PENDING_INTENT = AUTHORITY + ".has_pen_intent"; - public static final String EXTRA_CALLER_PENDING_INTENT = AUTHORITY + ".pending_intent"; - public static final String EXTRA_RETURN_ON_BALLOON_CLICK = AUTHORITY + ".return_on_balloon_click"; - public static final String EXTRA_PICK_POINT = AUTHORITY + ".pick_point"; - public static final String EXTRA_CUSTOM_BUTTON_NAME = AUTHORITY + ".custom_button_name"; - - - /* Response extras */ - /* Point part-by-part*/ - public static final String EXTRA_OM_RESPONSE_POINT_NAME = AUTHORITY + ".point_name"; - public static final String EXTRA_OM_RESPONSE_POINT_LAT = AUTHORITY + ".point_lat"; - public static final String EXTRA_OM_RESPONSE_POINT_LON = AUTHORITY + ".point_lon"; - public static final String EXTRA_OM_RESPONSE_POINT_ID = AUTHORITY + ".point_id"; - public static final String EXTRA_OM_RESPONSE_ZOOM = AUTHORITY + ".zoom_level"; - - - public static final String ACTION_OM_REQUEST = AUTHORITY + ".request"; - static final int API_VERSION = 2; - static final String CALLBACK_PREFIX = "mapswithme.client."; - - private Const() {} -} diff --git a/lib/src/com/mapswithme/maps/api/DownloadMapsWithMeDialog.java b/lib/src/com/mapswithme/maps/api/DownloadMapsWithMeDialog.java deleted file mode 100644 index 4f83f2a..0000000 --- a/lib/src/com/mapswithme/maps/api/DownloadMapsWithMeDialog.java +++ /dev/null @@ -1,64 +0,0 @@ -/****************************************************************************** - Copyright (c) 2022, Organic Maps OÜ. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, this list - of conditions and the following disclaimer. Redistributions in binary form must - reproduce the above copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided with the - distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - OF SUCH DAMAGE. -******************************************************************************/ -package app.organicmaps.api; - -import android.app.Activity; -import android.app.Dialog; -import android.content.Intent; -import android.net.Uri; -import android.view.View; -import android.view.Window; - -import app.organicmaps.api.R; - -public class DownloadOrganicMapsDialog extends Dialog implements android.view.View.OnClickListener -{ - - public DownloadOrganicMapsDialog(Activity activity) - { - super(activity); - - requestWindowFeature(Window.FEATURE_NO_TITLE); - setContentView(R.layout.dlg_install_mwm); - - findViewById(R.id.btn_pro).setOnClickListener(this); - - setOwnerActivity(activity); - } - - - public void onDownloadButtonClicked(String url) - { - Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - getContext().startActivity(i); - dismiss(); - } - - - @Override - public void onClick(View v) - { - String url = getContext().getString(R.string.url); - onDownloadButtonClicked(url); - } -} diff --git a/lib/src/com/mapswithme/maps/api/MWMResponse.java b/lib/src/com/mapswithme/maps/api/MWMResponse.java deleted file mode 100644 index acdeee6..0000000 --- a/lib/src/com/mapswithme/maps/api/MWMResponse.java +++ /dev/null @@ -1,77 +0,0 @@ -/****************************************************************************** - Copyright (c) 2022, Organic Maps OÜ. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, this list - of conditions and the following disclaimer. Redistributions in binary form must - reproduce the above copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided with the - distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - OF SUCH DAMAGE. -******************************************************************************/ -package app.organicmaps.api; - -import android.content.Context; -import android.content.Intent; - -public class OMResponse -{ - private OMPoint mPoint; - private double mZoomLevel; - - /** - * - * @return point, for which user requested more information in Organic Maps application. - */ - public OMPoint getPoint() { return mPoint; } - public boolean hasPoint() { return mPoint != null; } - public double getZoomLevel() { return mZoomLevel; } - - @Override - public String toString() - { - return "OMResponse [SelectedPoint=" + mPoint + "]"; - } - - /** - * Factory method to extract response data from intent. - * - * @param context - * @param intent - * @return - */ - public static OMResponse extractFromIntent(Context context, Intent intent) - { - final OMResponse response = new OMResponse(); - // parse point - final double lat = intent.getDoubleExtra(Const.EXTRA_OM_RESPONSE_POINT_LAT, INVALID_LL); - final double lon = intent.getDoubleExtra(Const.EXTRA_OM_RESPONSE_POINT_LON, INVALID_LL); - final String name = intent.getStringExtra(Const.EXTRA_OM_RESPONSE_POINT_NAME); - final String id = intent.getStringExtra(Const.EXTRA_OM_RESPONSE_POINT_ID); - - // parse additional info - response.mZoomLevel = intent.getDoubleExtra(Const.EXTRA_OM_RESPONSE_ZOOM, 9); - - if (lat != INVALID_LL && lon != INVALID_LL) - response.mPoint = new OMPoint(lat, lon, name, id); - else - response.mPoint = null; - - return response; - } - - private final static double INVALID_LL = Double.MIN_VALUE; - - private OMResponse() {} -} diff --git a/lib/src/main/AndroidManifest.xml b/lib/src/main/AndroidManifest.xml new file mode 100644 index 0000000..c38e16e --- /dev/null +++ b/lib/src/main/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/lib/src/com/mapswithme/maps/api/MapsWithMeApi.java b/lib/src/main/java/app/organicmaps/api/Api.java similarity index 50% rename from lib/src/com/mapswithme/maps/api/MapsWithMeApi.java rename to lib/src/main/java/app/organicmaps/api/Api.java index 4dd3ad3..6848378 100644 --- a/lib/src/com/mapswithme/maps/api/MapsWithMeApi.java +++ b/lib/src/main/java/app/organicmaps/api/Api.java @@ -1,24 +1,25 @@ /****************************************************************************** - Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2013, MapsWithMe GmbH. All rights reserved. - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list - of conditions and the following disclaimer. Redistributions in binary form must - reproduce the above copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided with the - distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - OF SUCH DAMAGE. + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. Redistributions in binary form must + reproduce the above copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided with the + distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. ******************************************************************************/ package app.organicmaps.api; @@ -26,11 +27,10 @@ import android.app.Activity; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; -import android.content.pm.ActivityInfo; import android.net.Uri; -public final class OrganicMapsApi +public final class Api { /** @@ -42,32 +42,28 @@ public final class OrganicMapsApi */ public static final double ZOOM_MIN = 1; - public static void showOrganicMapsUrl(Activity caller, PendingIntent pendingIntent, double zoomLevel, String url) { final Uri uri = Uri.parse(url); - final String latlon[] = uri.getQueryParameter("ll").split(","); + final String[] latlon = uri.getQueryParameter("ll").split(","); final double lat = Double.parseDouble(latlon[0]); final double lon = Double.parseDouble(latlon[1]); final String name = uri.getQueryParameter("n"); final String id = uri.getQueryParameter("id"); - showPointsOnMap(caller, name, zoomLevel, pendingIntent, new OMPoint(lat, lon, name, id)); + showPointsOnMap(caller, name, zoomLevel, pendingIntent, new Point(lat, lon, name, id)); } - public static void sendRequest(Activity caller, MwmRequest request) + public static void sendRequest(Activity caller, Request request) { final Intent mwmIntent = request.toIntent(caller); if (isOrganicMapsInstalled(caller)) { - // Match activity for intent - final ActivityInfo aInfo = caller.getPackageManager().resolveActivity(mwmIntent, 0).activityInfo; - mwmIntent.setClassName(aInfo.packageName, aInfo.name); caller.startActivity(mwmIntent); } else - (new DownloadOrganicMapsDialog(caller)).show(); + (new DownloadDialog(caller)).show(); } /** @@ -80,12 +76,12 @@ public final class OrganicMapsApi */ public static void showPointOnMap(Activity caller, double lat, double lon, String name) { - showPointsOnMap(caller, (String) null, (PendingIntent) null, new OMPoint(lat, lon, name)); + showPointsOnMap(caller, null, (PendingIntent) null, new Point(lat, lon, name)); } /** * Shows single point on the map using specified zoom level in range from - * {@link OrganicMapsApi#ZOOM_MIN} to {@link OrganicMapsApi#ZOOM_MAX}. + * {@link Api#ZOOM_MIN} to {@link Api#ZOOM_MAX}. * * @param caller * @param lat @@ -95,7 +91,7 @@ public final class OrganicMapsApi */ public static void showPointOnMap(Activity caller, double lat, double lon, String name, double zoomLevel) { - showPointsOnMap(caller, (String) null, zoomLevel, (PendingIntent) null, new OMPoint(lat, lon, name)); + showPointsOnMap(caller, null, zoomLevel, null, new Point(lat, lon, name)); } /** @@ -105,7 +101,7 @@ public final class OrganicMapsApi * @param title * @param points */ - public static void showPointsOnMap(Activity caller, String title, OMPoint... points) + public static void showPointsOnMap(Activity caller, String title, Point... points) { showPointsOnMap(caller, title, null, points); } @@ -119,34 +115,33 @@ public final class OrganicMapsApi * @param pendingIntent * @param points */ - public static void showPointsOnMap(Activity caller, String title, PendingIntent pendingIntent, OMPoint... points) + public static void showPointsOnMap(Activity caller, String title, PendingIntent pendingIntent, Point... points) { showPointsOnMap(caller, title, -1, pendingIntent, points); } private static void showPointsOnMap(Activity caller, String title, double zoomLevel, PendingIntent pendingIntent, - OMPoint... points) + Point... points) { - final MwmRequest request = new MwmRequest() - .setTitle(title) - .setZoomLevel(zoomLevel) - .setPendingIntent(pendingIntent) - .setPoints(points); + final Request request = new Request() + .setTitle(title) + .setZoomLevel(zoomLevel) + .setPendingIntent(pendingIntent) + .setPoints(points); sendRequest(caller, request); } public static void pickPoint(Activity caller, String title, PendingIntent pi) { - final MwmRequest request = new MwmRequest() - .setTitle(title) - .setPickPointMode(true) - .setPendingIntent(pi); + final Request request = new Request() + .setTitle(title) + .setPickPointMode(true) + .setPendingIntent(pi); sendRequest(caller, request); } /** - * Detects if any version (Lite, Pro) of Organic Maps, which supports API calls - * are installed on the device. + * Detects if Organic Maps is installed on the device. * * @param context * @return diff --git a/lib/src/main/java/app/organicmaps/api/Const.java b/lib/src/main/java/app/organicmaps/api/Const.java new file mode 100644 index 0000000..f11991b --- /dev/null +++ b/lib/src/main/java/app/organicmaps/api/Const.java @@ -0,0 +1,56 @@ +/****************************************************************************** + Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2013, MapsWithMe GmbH. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. Redistributions in binary form must + reproduce the above copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided with the + distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. + ******************************************************************************/ +package app.organicmaps.api; + +public class Const +{ + + /* Request extras */ + static final String AUTHORITY = "com.mapswithme.maps.api"; + public static final String EXTRA_URL = AUTHORITY + ".url"; + public static final String EXTRA_TITLE = AUTHORITY + ".title"; + public static final String EXTRA_API_VERSION = AUTHORITY + ".version"; + public static final String EXTRA_CALLER_APP_INFO = AUTHORITY + ".caller_app_info"; + public static final String EXTRA_HAS_PENDING_INTENT = AUTHORITY + ".has_pen_intent"; + public static final String EXTRA_CALLER_PENDING_INTENT = AUTHORITY + ".pending_intent"; + public static final String EXTRA_RETURN_ON_BALLOON_CLICK = AUTHORITY + ".return_on_balloon_click"; + public static final String EXTRA_PICK_POINT = AUTHORITY + ".pick_point"; + public static final String EXTRA_CUSTOM_BUTTON_NAME = AUTHORITY + ".custom_button_name"; + + + /* Response extras */ + /* Point part-by-part*/ + public static final String EXTRA_OM_RESPONSE_POINT_NAME = AUTHORITY + ".point_name"; + public static final String EXTRA_OM_RESPONSE_POINT_LAT = AUTHORITY + ".point_lat"; + public static final String EXTRA_OM_RESPONSE_POINT_LON = AUTHORITY + ".point_lon"; + public static final String EXTRA_OM_RESPONSE_POINT_ID = AUTHORITY + ".point_id"; + public static final String EXTRA_OM_RESPONSE_ZOOM = AUTHORITY + ".zoom_level"; + + + public static final String ACTION_OM_REQUEST = AUTHORITY + ".request"; + static final int API_VERSION = 2; + static final String CALLBACK_PREFIX = "mapswithme.client."; + + private Const() {} +} diff --git a/lib/src/main/java/app/organicmaps/api/DownloadDialog.java b/lib/src/main/java/app/organicmaps/api/DownloadDialog.java new file mode 100644 index 0000000..8e4fb5e --- /dev/null +++ b/lib/src/main/java/app/organicmaps/api/DownloadDialog.java @@ -0,0 +1,63 @@ +/****************************************************************************** + Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2013, MapsWithMe GmbH. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. Redistributions in binary form must + reproduce the above copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided with the + distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. + ******************************************************************************/ +package app.organicmaps.api; + +import android.app.Activity; +import android.app.Dialog; +import android.content.Intent; +import android.net.Uri; +import android.view.View; +import android.view.Window; + +public class DownloadDialog extends Dialog implements android.view.View.OnClickListener +{ + + public DownloadDialog(Activity activity) + { + super(activity); + + requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.dlg_install_mwm); + + findViewById(R.id.btn_pro).setOnClickListener(this); + + setOwnerActivity(activity); + } + + + public void onDownloadButtonClicked(String url) + { + Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + getContext().startActivity(i); + dismiss(); + } + + + @Override + public void onClick(View v) + { + String url = getContext().getString(R.string.url); + onDownloadButtonClicked(url); + } +} diff --git a/lib/src/com/mapswithme/maps/api/MWMPoint.java b/lib/src/main/java/app/organicmaps/api/Point.java similarity index 55% rename from lib/src/com/mapswithme/maps/api/MWMPoint.java rename to lib/src/main/java/app/organicmaps/api/Point.java index 52d18af..241a9f5 100644 --- a/lib/src/com/mapswithme/maps/api/MWMPoint.java +++ b/lib/src/main/java/app/organicmaps/api/Point.java @@ -1,25 +1,26 @@ /****************************************************************************** - Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2013, MapsWithMe GmbH. All rights reserved. - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list - of conditions and the following disclaimer. Redistributions in binary form must - reproduce the above copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided with the - distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - OF SUCH DAMAGE. -******************************************************************************/ + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. Redistributions in binary form must + reproduce the above copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided with the + distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. + ******************************************************************************/ package app.organicmaps.api; import java.io.Serializable; @@ -29,7 +30,7 @@ import java.io.Serializable; * Has its equals() and hashCode() methods overloaded * so could be used in Hash(Map/Set/etc) classes. */ -public final class OMPoint implements Serializable +public final class Point implements Serializable { private static final long serialVersionUID = 1L; @@ -39,12 +40,12 @@ public final class OMPoint implements Serializable private String mId; private Style mStyle; - public OMPoint(double lat, double lon, String name) + public Point(double lat, double lon, String name) { this(lat, lon, name, null); } - public OMPoint(double lat, double lon, String name, String id) + public Point(double lat, double lon, String name, String id) { this.mLat = lat; this.mLon = lon; @@ -52,7 +53,7 @@ public final class OMPoint implements Serializable this.mId = id; } - public OMPoint(double lat, double lon, String name, String id, Style style) + public Point(double lat, double lon, String name, String id, Style style) { this.mLat = lat; this.mLon = lon; @@ -61,20 +62,23 @@ public final class OMPoint implements Serializable this.mStyle = style; } - public double getLat() { return mLat; } - public double getLon() { return mLon; } - public String getName() { return mName; } - public String getId() { return mId; } - public Style getStyle() { return mStyle; } + public double getLat() {return mLat;} - public String getStyleForUrl() { return (mStyle == null) ? null : mStyle.getName(); } + public double getLon() {return mLon;} + + public String getName() {return mName;} + + public String getId() {return mId;} /** * Sets string ID for this point. Internally it is not used to distinguish point, * it's purpose to help clients code to associate point with domain objects of their application. + * * @param id */ - public void setId(String id) { mId = id; } + public void setId(String id) {mId = id;} + + public Style getStyle() {return mStyle;} /** * Sets the style (appearance) for this point. @@ -86,14 +90,16 @@ public final class OMPoint implements Serializable this.mStyle = style; } + public String getStyleForUrl() {return (mStyle == null) ? null : mStyle.getName();} + @Override public String toString() { return "OMPoint [lat=" + mLat + - ", lon=" + mLon + - ", name=" + mName + - ", id=" + mId + - ", style=" + mStyle + "]"; + ", lon=" + mLon + + ", name=" + mName + + ", id=" + mId + + ", style=" + mStyle + "]"; } @Override @@ -111,8 +117,8 @@ public final class OMPoint implements Serializable } /** - * Two point are considered - * equal if they have they lat, lon, and name attributes equal. + * Two point are considered + * equal if they have they lat, lon, and name attributes equal. */ @Override public boolean equals(Object obj) @@ -123,7 +129,7 @@ public final class OMPoint implements Serializable return false; if (getClass() != obj.getClass()) return false; - final OMPoint other = (OMPoint) obj; + final Point other = (Point) obj; if (Double.doubleToLongBits(mLat) != Double.doubleToLongBits(other.mLat)) return false; if (Double.doubleToLongBits(mLon) != Double.doubleToLongBits(other.mLon)) @@ -155,9 +161,9 @@ public final class OMPoint implements Serializable // placemark-lime // placemark-teal - private String name; + private final String name; - private Style(String name) + Style(String name) { this.name = name; } diff --git a/lib/src/com/mapswithme/maps/api/MwmRequest.java b/lib/src/main/java/app/organicmaps/api/Request.java similarity index 55% rename from lib/src/com/mapswithme/maps/api/MwmRequest.java rename to lib/src/main/java/app/organicmaps/api/Request.java index 5978edf..1a006f9 100644 --- a/lib/src/com/mapswithme/maps/api/MwmRequest.java +++ b/lib/src/main/java/app/organicmaps/api/Request.java @@ -1,78 +1,156 @@ +/****************************************************************************** + Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2013, MapsWithMe GmbH. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. Redistributions in binary form must + reproduce the above copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided with the + distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. + ******************************************************************************/ package app.organicmaps.api; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Locale; -import android.annotation.SuppressLint; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; - -public class MwmRequest +public class Request { // ** - private List mPoints = new ArrayList(); - private PendingIntent mPendingIntent; - private String mTitle; - private double mZoomLevel = 1; - private boolean mReturnOnBalloonClick; - private boolean mPickPoint = false; - private String mCustomButtonName = ""; + private List mPoints = new ArrayList<>(); + private PendingIntent mPendingIntent; + private String mTitle; + private double mZoomLevel = 1; + private boolean mReturnOnBalloonClick; + private boolean mPickPoint = false; + private String mCustomButtonName = ""; // ** - public MwmRequest setCustomButtonName(String buttonName) + private static StringBuilder createMwmUrl(Context context, String title, double zoomLevel, List points) + { + final StringBuilder urlBuilder = new StringBuilder("om://map?"); + // version + urlBuilder.append("v=").append(Const.API_VERSION).append("&"); + // back url, always not null + urlBuilder.append("backurl=").append(getCallbackAction(context)).append("&"); + // title + appendIfNotNull(urlBuilder, "appname", title); + // zoom + appendIfNotNull(urlBuilder, "z", isValidZoomLevel(zoomLevel) ? String.valueOf(zoomLevel) : null); + + // points + for (final Point point : points) + { + if (point != null) + { + urlBuilder.append("ll=").append(String.format(Locale.US, "%f,%f&", point.getLat(), point.getLon())); + + appendIfNotNull(urlBuilder, "n", point.getName()); + appendIfNotNull(urlBuilder, "id", point.getId()); + appendIfNotNull(urlBuilder, "s", point.getStyleForUrl()); + } + } + + return urlBuilder; + } + + private static String getCallbackAction(Context context) + { + return Const.CALLBACK_PREFIX + context.getPackageName(); + } + + private static Intent addCommonExtras(Context context, Intent intent) + { + intent.putExtra(Const.EXTRA_CALLER_APP_INFO, context.getApplicationInfo()); + intent.putExtra(Const.EXTRA_API_VERSION, Const.API_VERSION); + + return intent; + } + + private static StringBuilder appendIfNotNull(StringBuilder builder, String key, String value) + { + if (value != null) + builder.append(key).append("=").append(Uri.encode(value)).append("&"); + + return builder; + } + + private static boolean isValidZoomLevel(double zoom) + { + return zoom >= Api.ZOOM_MIN && zoom <= Api.ZOOM_MAX; + } + + public Request setCustomButtonName(String buttonName) { mCustomButtonName = buttonName != null ? buttonName : ""; return this; } - public MwmRequest setTitle(String title) + public Request setTitle(String title) { mTitle = title; return this; } - public MwmRequest setPickPointMode(boolean pickPoint) + public Request setPickPointMode(boolean pickPoint) { mPickPoint = pickPoint; return this; } - public MwmRequest addPoint(OMPoint point) + public Request addPoint(Point point) { mPoints.add(point); return this; } - public MwmRequest addPoint(double lat, double lon, String name, String id) + public Request addPoint(double lat, double lon, String name, String id) { - return addPoint(new OMPoint(lat, lon, name, id)); + return addPoint(new Point(lat, lon, name, id)); } - public MwmRequest setPoints(Collection points) + public Request setPoints(Collection points) { - mPoints = new ArrayList(points); + mPoints = new ArrayList(points); return this; } - public MwmRequest setReturnOnBalloonClick(boolean doReturn) + // Below are utilities from OrganicMapsApi because we are not "Feature Envy" + + public Request setReturnOnBalloonClick(boolean doReturn) { mReturnOnBalloonClick = doReturn; return this; } - public MwmRequest setZoomLevel(double zoomLevel) + public Request setZoomLevel(double zoomLevel) { mZoomLevel = zoomLevel; return this; } - public MwmRequest setPendingIntent(PendingIntent pi) + public Request setPendingIntent(PendingIntent pi) { mPendingIntent = pi; return this; @@ -105,70 +183,12 @@ public class MwmRequest } /** - * @Hidden - * This method is internal only. + * @Hidden This method is internal only. * Used for compatibility. */ - MwmRequest setPoints(OMPoint[] points) + Request setPoints(Point[] points) { return setPoints(Arrays.asList(points)); } - // Below are utilities from OrganicMapsApi because we are not "Feature Envy" - - private static StringBuilder createMwmUrl(Context context, String title, double zoomLevel, List points) - { - final StringBuilder urlBuilder = new StringBuilder("mapswithme://map?"); - // version - urlBuilder.append("v=").append(Const.API_VERSION).append("&"); - // back url, always not null - urlBuilder.append("backurl=").append(getCallbackAction(context)).append("&"); - // title - appendIfNotNull(urlBuilder, "appname", title); - // zoom - appendIfNotNull(urlBuilder, "z", isValidZoomLevel(zoomLevel) ? String.valueOf(zoomLevel) : null); - - // points - for (final OMPoint point : points) - { - if (point != null) - { - urlBuilder.append("ll=").append(String.format(Locale.US, "%f,%f&", point.getLat(), point.getLon())); - - appendIfNotNull(urlBuilder, "n", point.getName()); - appendIfNotNull(urlBuilder, "id", point.getId()); - appendIfNotNull(urlBuilder, "s", point.getStyleForUrl()); - } - } - - return urlBuilder; - } - - private static String getCallbackAction(Context context) - { - return Const.CALLBACK_PREFIX + context.getPackageName(); - } - - @SuppressLint("NewApi") - private static Intent addCommonExtras(Context context, Intent intent) - { - intent.putExtra(Const.EXTRA_CALLER_APP_INFO, context.getApplicationInfo()); - intent.putExtra(Const.EXTRA_API_VERSION, Const.API_VERSION); - - return intent; - } - - private static StringBuilder appendIfNotNull(StringBuilder builder, String key, String value) - { - if (value != null) - builder.append(key).append("=").append(Uri.encode(value)).append("&"); - - return builder; - } - - private static boolean isValidZoomLevel(double zoom) - { - return zoom >= OrganicMapsApi.ZOOM_MIN && zoom <= OrganicMapsApi.ZOOM_MAX; - } - } diff --git a/lib/src/main/java/app/organicmaps/api/Response.java b/lib/src/main/java/app/organicmaps/api/Response.java new file mode 100644 index 0000000..046b2eb --- /dev/null +++ b/lib/src/main/java/app/organicmaps/api/Response.java @@ -0,0 +1,78 @@ +/****************************************************************************** + Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2013, MapsWithMe GmbH. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. Redistributions in binary form must + reproduce the above copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided with the + distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. + ******************************************************************************/ +package app.organicmaps.api; + +import android.content.Context; +import android.content.Intent; + +public class Response +{ + private final static double INVALID_LL = Double.MIN_VALUE; + private Point mPoint; + private double mZoomLevel; + + private Response() {} + + /** + * Factory method to extract response data from intent. + * + * @param context + * @param intent + * @return + */ + public static Response extractFromIntent(Context context, Intent intent) + { + final Response response = new Response(); + // parse point + final double lat = intent.getDoubleExtra(Const.EXTRA_OM_RESPONSE_POINT_LAT, INVALID_LL); + final double lon = intent.getDoubleExtra(Const.EXTRA_OM_RESPONSE_POINT_LON, INVALID_LL); + final String name = intent.getStringExtra(Const.EXTRA_OM_RESPONSE_POINT_NAME); + final String id = intent.getStringExtra(Const.EXTRA_OM_RESPONSE_POINT_ID); + + // parse additional info + response.mZoomLevel = intent.getDoubleExtra(Const.EXTRA_OM_RESPONSE_ZOOM, 9); + + if (lat != INVALID_LL && lon != INVALID_LL) + response.mPoint = new Point(lat, lon, name, id); + else + response.mPoint = null; + + return response; + } + + /** + * @return point, for which user requested more information in Organic Maps application. + */ + public Point getPoint() {return mPoint;} + + public boolean hasPoint() {return mPoint != null;} + + public double getZoomLevel() {return mZoomLevel;} + + @Override + public String toString() + { + return "Response [SelectedPoint=" + mPoint + "]"; + } +} diff --git a/lib/res/drawable/background_pattern.xml b/lib/src/main/res/drawable/background_pattern.xml similarity index 100% rename from lib/res/drawable/background_pattern.xml rename to lib/src/main/res/drawable/background_pattern.xml diff --git a/lib/res/drawable/btn_back_gray.xml b/lib/src/main/res/drawable/btn_back_gray.xml similarity index 100% rename from lib/res/drawable/btn_back_gray.xml rename to lib/src/main/res/drawable/btn_back_gray.xml diff --git a/lib/res/drawable/btn_back_gray_active.xml b/lib/src/main/res/drawable/btn_back_gray_active.xml similarity index 100% rename from lib/res/drawable/btn_back_gray_active.xml rename to lib/src/main/res/drawable/btn_back_gray_active.xml diff --git a/lib/res/drawable/btn_back_green.xml b/lib/src/main/res/drawable/btn_back_green.xml similarity index 100% rename from lib/res/drawable/btn_back_green.xml rename to lib/src/main/res/drawable/btn_back_green.xml diff --git a/lib/res/drawable/btn_back_green_active.xml b/lib/src/main/res/drawable/btn_back_green_active.xml similarity index 100% rename from lib/res/drawable/btn_back_green_active.xml rename to lib/src/main/res/drawable/btn_back_green_active.xml diff --git a/lib/res/drawable/btn_gray_selector.xml b/lib/src/main/res/drawable/btn_gray_selector.xml similarity index 100% rename from lib/res/drawable/btn_gray_selector.xml rename to lib/src/main/res/drawable/btn_gray_selector.xml diff --git a/lib/res/drawable/btn_green_selector.xml b/lib/src/main/res/drawable/btn_green_selector.xml similarity index 100% rename from lib/res/drawable/btn_green_selector.xml rename to lib/src/main/res/drawable/btn_green_selector.xml diff --git a/lib/res/drawable/gray.xml b/lib/src/main/res/drawable/gray.xml similarity index 100% rename from lib/res/drawable/gray.xml rename to lib/src/main/res/drawable/gray.xml diff --git a/lib/res/drawable/green.xml b/lib/src/main/res/drawable/green.xml similarity index 100% rename from lib/res/drawable/green.xml rename to lib/src/main/res/drawable/green.xml diff --git a/lib/res/drawable/overflow.xml b/lib/src/main/res/drawable/overflow.xml similarity index 100% rename from lib/res/drawable/overflow.xml rename to lib/src/main/res/drawable/overflow.xml diff --git a/lib/res/drawable/pattern.png b/lib/src/main/res/drawable/pattern.png similarity index 100% rename from lib/res/drawable/pattern.png rename to lib/src/main/res/drawable/pattern.png diff --git a/lib/res/drawable/shadow.xml b/lib/src/main/res/drawable/shadow.xml similarity index 100% rename from lib/res/drawable/shadow.xml rename to lib/src/main/res/drawable/shadow.xml diff --git a/lib/res/layout/dlg_install_mwm.xml b/lib/src/main/res/layout/dlg_install_mwm.xml similarity index 94% rename from lib/res/layout/dlg_install_mwm.xml rename to lib/src/main/res/layout/dlg_install_mwm.xml index b547a7e..98303e1 100644 --- a/lib/res/layout/dlg_install_mwm.xml +++ b/lib/src/main/res/layout/dlg_install_mwm.xml @@ -22,9 +22,8 @@ OF SUCH DAMAGE. --> + android:layout_height="match_parent"> + android:text="@string/download" /> diff --git a/lib/res/values/strings.xml b/lib/src/main/res/values/strings.xml similarity index 100% rename from lib/res/values/strings.xml rename to lib/src/main/res/values/strings.xml diff --git a/lib/res/values/styles.xml b/lib/src/main/res/values/styles.xml similarity index 100% rename from lib/res/values/styles.xml rename to lib/src/main/res/values/styles.xml diff --git a/sample-app-capitals/.gitignore b/sample-app-capitals/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/sample-app-capitals/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/sample-app-capitals/build.gradle b/sample-app-capitals/build.gradle index 676cab8..e17af69 100644 --- a/sample-app-capitals/build.gradle +++ b/sample-app-capitals/build.gradle @@ -1,19 +1,35 @@ -apply plugin: 'android' +plugins { + id 'com.android.application' +} android { - - // Define these properties in the gradle.properties file in the root project folder - compileSdkVersion propTargetSdkVersion.toInteger() - buildToolsVersion propBuildToolsVersion + compileSdk 32 defaultConfig { - minSdkVersion propMinSdkVersion.toInteger() - targetSdkVersion propTargetSdkVersion.toInteger() + applicationId "app.organicmaps.api.sample.capitals" + minSdk 21 + targetSdk 32 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } - sourceSets.main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = ['src'] - res.srcDirs = ['res'] + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'com.google.android.material:material:1.6.1' + implementation project(path: ':lib') +} \ No newline at end of file diff --git a/sample-app-capitals/build.xml b/sample-app-capitals/build.xml deleted file mode 100644 index dbb2595..0000000 --- a/sample-app-capitals/build.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sample-app-capitals/proguard-rules.pro b/sample-app-capitals/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/sample-app-capitals/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/sample-app-capitals/project.properties b/sample-app-capitals/project.properties deleted file mode 100644 index 21acbea..0000000 --- a/sample-app-capitals/project.properties +++ /dev/null @@ -1,15 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system edit -# "ant.properties", and override values to adapt the script to your -# project structure. -# -# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt - -# Project target. -target=android-21 -android.library.reference.1=../lib diff --git a/sample-app-capitals/res/drawable-hdpi/ic_launcher.png b/sample-app-capitals/res/drawable-hdpi/ic_launcher.png deleted file mode 100644 index 9e67a44a6170092804aa6ace02f22e5baee752ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8680 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 Hu0mjfAa@KV diff --git a/sample-app-capitals/res/drawable-mdpi/ic_launcher.png b/sample-app-capitals/res/drawable-mdpi/ic_launcher.png deleted file mode 100644 index 0555b554b57c737746c2df9e6e7ec83ec1edc5b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4740 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 KMNUMnLSTaD#b46^ diff --git a/sample-app-capitals/res/drawable-xxhdpi/ic_launcher.png b/sample-app-capitals/res/drawable-xxhdpi/ic_launcher.png deleted file mode 100644 index 1520f13b53f7d0804aed1b56fbb82461b1e74cba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37471 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 diff --git a/sample-app-capitals/AndroidManifest.xml b/sample-app-capitals/src/main/AndroidManifest.xml similarity index 57% rename from sample-app-capitals/AndroidManifest.xml rename to sample-app-capitals/src/main/AndroidManifest.xml index 19308f6..fafe43e 100644 --- a/sample-app-capitals/AndroidManifest.xml +++ b/sample-app-capitals/src/main/AndroidManifest.xml @@ -1,10 +1,9 @@ - - + - + - - - - - - + + + + + + - - android:launchMode="singleTop" > - + - + - + \ No newline at end of file diff --git a/sample-app-capitals/src/com/mapswithme/capitals/CapitalsListActivity.java b/sample-app-capitals/src/main/java/app/organicmaps/api/sample/capitals/CapitalsListActivity.java similarity index 80% rename from sample-app-capitals/src/com/mapswithme/capitals/CapitalsListActivity.java rename to sample-app-capitals/src/main/java/app/organicmaps/api/sample/capitals/CapitalsListActivity.java index 257ff8c..b1fcf58 100644 --- a/sample-app-capitals/src/com/mapswithme/capitals/CapitalsListActivity.java +++ b/sample-app-capitals/src/main/java/app/organicmaps/api/sample/capitals/CapitalsListActivity.java @@ -1,5 +1,6 @@ /****************************************************************************** - Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2013, MapsWithMe GmbH. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -20,7 +21,7 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ******************************************************************************/ -package com.mapswithme.capitals; +package app.organicmaps.api.sample.capitals; import android.app.ListActivity; import android.content.Context; @@ -32,8 +33,8 @@ import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; -import app.organicmaps.api.OMPoint; -import app.organicmaps.api.OrganicMapsApi; +import app.organicmaps.api.Point; +import app.organicmaps.api.Api; public class CapitalsListActivity extends ListActivity { @@ -48,11 +49,7 @@ public class CapitalsListActivity extends ListActivity mCityAdapter = new CityAdapter(this, City.CAPITALS); setListAdapter(mCityAdapter); - findViewById(R.id.btn_all).setOnClickListener(new OnClickListener() - { - @Override - public void onClick(View v) { showCityOnOMMap(City.CAPITALS); } - }); + findViewById(R.id.btn_all).setOnClickListener(v -> showCityOnOMMap(City.CAPITALS)); } @@ -64,12 +61,12 @@ public class CapitalsListActivity extends ListActivity private void showCityOnOMMap(City ... cities) { - OMPoint[] points = new OMPoint[cities.length]; + Point[] points = new Point[cities.length]; for (int i = 0; i < cities.length; i++) - points[i] = cities[i].toOMPoint(); + points[i] = cities[i].toPoint(); final String title = cities.length == 1 ? cities[0].getName() : "Capitals of the World"; - OrganicMapsApi.showPointsOnMap(this, title, CityDetailsActivity.getPendingIntent(this), points); + Api.showPointsOnMap(this, title, CityDetailsActivity.getPendingIntent(this), points); } private static class CityAdapter extends ArrayAdapter @@ -86,9 +83,9 @@ public class CapitalsListActivity extends ListActivity public View getView(int position, View convertView, ViewGroup parent) { final View view = super.getView(position, convertView, parent); - final TextView subText = (TextView) view.findViewById(android.R.id.text2); + final TextView subText = view.findViewById(android.R.id.text2); final City city = data[position]; - subText.setText(city.getCountryCode() + "/" + city.getTimeZone()); + subText.setText(String.format("%s/%s", city.getCountryCode(), city.getTimeZone())); return view; } } diff --git a/sample-app-capitals/src/com/mapswithme/capitals/City.java b/sample-app-capitals/src/main/java/app/organicmaps/api/sample/capitals/City.java similarity index 98% rename from sample-app-capitals/src/com/mapswithme/capitals/City.java rename to sample-app-capitals/src/main/java/app/organicmaps/api/sample/capitals/City.java index 1cdc979..d491fb5 100644 --- a/sample-app-capitals/src/com/mapswithme/capitals/City.java +++ b/sample-app-capitals/src/main/java/app/organicmaps/api/sample/capitals/City.java @@ -1,28 +1,29 @@ /****************************************************************************** - Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2013, MapsWithMe GmbH. All rights reserved. - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list - of conditions and the following disclaimer. Redistributions in binary form must - reproduce the above copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided with the - distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - OF SUCH DAMAGE. -******************************************************************************/ -package com.mapswithme.capitals; + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. Redistributions in binary form must + reproduce the above copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided with the + distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. + ******************************************************************************/ +package app.organicmaps.api.sample.capitals; -import app.organicmaps.api.OMPoint; +import app.organicmaps.api.Point; import java.util.Arrays; import java.util.Comparator; @@ -56,7 +57,7 @@ public class City @Override public String toString() { return name; } - public OMPoint toOMPoint() { return new OMPoint(lat, lon, name, id); } + public Point toPoint() { return new Point(lat, lon, name, id); } public String getId() { return id; } public String getName() { return name; } @@ -69,7 +70,7 @@ public class City public String getAltNames() { return altNames; } - public static City fromOMPoint(OMPoint point) + public static City fromPoint(Point point) { City result = null; final String id = point.getId(); diff --git a/sample-app-capitals/src/com/mapswithme/capitals/CityDetailsActivity.java b/sample-app-capitals/src/main/java/app/organicmaps/api/sample/capitals/CityDetailsActivity.java similarity index 53% rename from sample-app-capitals/src/com/mapswithme/capitals/CityDetailsActivity.java rename to sample-app-capitals/src/main/java/app/organicmaps/api/sample/capitals/CityDetailsActivity.java index ec2b772..c3fe059 100644 --- a/sample-app-capitals/src/com/mapswithme/capitals/CityDetailsActivity.java +++ b/sample-app-capitals/src/main/java/app/organicmaps/api/sample/capitals/CityDetailsActivity.java @@ -1,26 +1,27 @@ /****************************************************************************** - Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2022, Organic Maps OÜ. All rights reserved. + Copyright (c) 2013, MapsWithMe GmbH. All rights reserved. - Redistribution and use in source and binary forms, with or without modification, - are permitted provided that the following conditions are met: + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list - of conditions and the following disclaimer. Redistributions in binary form must - reproduce the above copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided with the - distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - OF SUCH DAMAGE. -******************************************************************************/ -package com.mapswithme.capitals; + Redistributions of source code must retain the above copyright notice, this list + of conditions and the following disclaimer. Redistributions in binary form must + reproduce the above copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided with the + distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. + ******************************************************************************/ +package app.organicmaps.api.sample.capitals; import android.app.Activity; import android.app.PendingIntent; @@ -31,12 +32,12 @@ import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; -import app.organicmaps.api.OMResponse; -import app.organicmaps.api.OrganicMapsApi; +import app.organicmaps.api.Response; +import app.organicmaps.api.Api; public class CityDetailsActivity extends Activity { - public static String EXTRA_FROM_OM = "from-maps-with-me"; + public static String EXTRA_FROM_ORGANICMAPS = "from-organicmaps"; private TextView mName; private TextView mAltNames; @@ -54,8 +55,8 @@ public class CityDetailsActivity extends Activity public static PendingIntent getPendingIntent(Context context) { final Intent i = new Intent(context, CityDetailsActivity.class); - i.putExtra(EXTRA_FROM_OM, true); - return PendingIntent.getActivity(context, 0, i, 0); + i.putExtra(EXTRA_FROM_ORGANICMAPS, true); + return PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_IMMUTABLE); } @Override @@ -80,9 +81,8 @@ public class CityDetailsActivity extends Activity @Override public void onClick(View v) { - OrganicMapsApi - .showPointsOnMap(CityDetailsActivity.this,mCity.getName(), - CityDetailsActivity.getPendingIntent(CityDetailsActivity.this),mCity.toOMPoint()); + Api.showPointsOnMap(CityDetailsActivity.this,mCity.getName(), + CityDetailsActivity.getPendingIntent(CityDetailsActivity.this),mCity.toPoint()); } }); @@ -98,10 +98,10 @@ public class CityDetailsActivity extends Activity private void handleIntent(Intent intent) { - if (intent.getBooleanExtra(EXTRA_FROM_OM, false)) + if (intent.getBooleanExtra(EXTRA_FROM_ORGANICMAPS, false)) { - final OMResponse response = OMResponse.extractFromIntent(this, intent); - mCity = City.fromOMPoint(response.getPoint()); + final Response response = Response.extractFromIntent(this, intent); + mCity = City.fromPoint(response.getPoint()); if (mCity != null) { diff --git a/sample-app-capitals/src/main/res/drawable/ic_launcher_foreground.xml b/sample-app-capitals/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..d98c1df --- /dev/null +++ b/sample-app-capitals/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/sample-app-capitals/res/layout/capitals_list_activity.xml b/sample-app-capitals/src/main/res/layout/capitals_list_activity.xml similarity index 97% rename from sample-app-capitals/res/layout/capitals_list_activity.xml rename to sample-app-capitals/src/main/res/layout/capitals_list_activity.xml index 2046e4b..0e9d780 100644 --- a/sample-app-capitals/res/layout/capitals_list_activity.xml +++ b/sample-app-capitals/src/main/res/layout/capitals_list_activity.xml @@ -43,6 +43,6 @@ android:layout_height="wrap_content" android:layout_width="match_parent" android:text="@string/show_all" - android:drawableLeft="@drawable/ic_launcher"/> + android:drawableLeft="@mipmap/ic_launcher"/> diff --git a/sample-app-capitals/res/layout/city_details_activity.xml b/sample-app-capitals/src/main/res/layout/city_details_activity.xml similarity index 98% rename from sample-app-capitals/res/layout/city_details_activity.xml rename to sample-app-capitals/src/main/res/layout/city_details_activity.xml index 73e69a7..473aca4 100644 --- a/sample-app-capitals/res/layout/city_details_activity.xml +++ b/sample-app-capitals/src/main/res/layout/city_details_activity.xml @@ -39,8 +39,8 @@ android:id="@+id/showOnMap" android:layout_width="match_parent" android:layout_height="wrap_content" - android:drawableLeft="@drawable/ic_launcher" - android:text="@string/open_with_mapswithme" /> + android:drawableLeft="@mipmap/ic_launcher" + android:text="@string/open_with_organicmaps" /> + + + + \ No newline at end of file diff --git a/sample-app-capitals/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/sample-app-capitals/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..7353dbd --- /dev/null +++ b/sample-app-capitals/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/sample-app-capitals/src/main/res/mipmap-hdpi/ic_launcher.png b/sample-app-capitals/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..119f4d2da70c9ba8b249167652e8738f59c4e340 GIT binary patch literal 1944 zcmV;J2WR++P)b}Vq}()Bl~G7k)h%8v1~~R`=&HN`-_N8#Mi`E#MTT0bw=Ic z!y+vo<4WQ}+U60yd-v`!FfcHX@eKOn>*?vqQ~GK;F-89*Lw*>HL?YpA0zQ#I7s*A@ z5X_HBlzAk!eSLk4g*fuRUs zf3nGIUguz6K5qlzP$=!L8}{A{9PHzmoG+Qc zCrS`#KYXsXPI078QIXQn4;Q|GN!2|Hssz7^S%npGf zMAbhH?CA|}tHcrD+=X`AL=pm3z*kEG-MV$F9LAC@kPv5PiMr*;2$67&Y$rjuKrJmT z2jQ!u1oB?}gFU%!u}Ta*kQdj;b`r#y0@Yk^X4BRdszitduEDjky##QcK$rgwvb;}T zRXJ}KTnihrU5hwNpqh?m_Q*#IRZhnXY}DQOOJ&~z&JZXv5aGA$$*W&eIct?EG@0~X z3#iJ96Nd;CiLm|kC)wELFRC1s8MQQ@BOjN6E!c!@xx6@VhCrY%)X%>0{={;Z%~Lrm z$Xz~Kg#J1r^};S1om-EDbn~AFR{;mbo^0wV3H{Y8~8+3ct}%3GKy7j-Z>PfCqIc!>1ToaE7uUr`OJ z6IU)^JIMk0nq;xvdx-xLa=EAr>J;Mv*M5O8C|0#Mu&Ha_P*qa!@Tvl~!=HSSwt0VM z53O3DDo=nqp>75Px4i;kd^!7feN-e+4~Vq;;&HixmO;0gXdsRNbweF>#zOl9LV=#v zIyR%kT*zYdvblV2qfyByoBr!f936*-*hqsrY|7u>HM-x4xc@COA zRxh*!$1$`djjjcQKqZ>SC~s zG91yx_}1beZ6s16gEYUB8N`m1q-2oh`&MrACm)d8ya3JqbZf2YiQ*X36U6`@l#RL- z*ywTaL{aIG*+&gL7U1zfwqcc>HOCB}!vtx2)DW0?ScM~au#~S&lhI067Nuc`r`geq}1gG_;NYy8q@CBb__Vo0y%F4=j z;cFle7$xhVo7nviTt^U7J3Bj@(G+2jjAsS#1wJ)3HMNkB)8Xr&&*sySBS#?6q@tpt z1;Jpj<@W8{tiQjX!Eh#nZq?o0%^DjUgN22K3*lpFX{q_{rA!3{1-Z1DMm%3uR<_pT z@l^W#{^Qlv)kl3k-!Ua#uQzI6{%tmo9X1EIM^Sh90AJt}e9Oh>-*l{Xh!DVpW6|14fp*L>oSh@YN!;sDKq& z6h#&hD@&k|P>_5Uf)Jo!0@(@KNhTzjtheXCxp%m^Z)V<`N!UE!_kZurd-tAu&UxpY zyS+C)K9`XgW4;1@F2L{W^?tS_6mCWE$5FrUiqtwkJA(;NfO3BNJrG@QL+D88O1NDB z=eX8JFAp-~c~y{j+Wy+L8weqUIfTy$-xE#~iW(XkDhSmAI4=_SPzGgZi@G;xJU#Np z%T7XIM;OrgO@!wO-xBgkaR$`a*Lwt64?GB)1<#w5b`ZWz9>^6%c#2GMc{(3N_>@qh z8Ku5XkT}I9P=f~CREy&Wt~(3{-lB~`O1lWZE6bzQCr9VOgq@IHF^W_WWbh6Z)wMN- zYZ|0g0e(#w3vC8Flj*XNcv{?R=-7j>UNwyV)Xk8Tb%H&yY!*N2_gtVsw84K1LqUcf zx_pFgx|Q1`+6MFM{Wx_M3P!WbtI z$xh@PuZ)B6fO5U&KE-@ravxT%fO@D8KHi2Kbf~DP$V^U7Zm;U-70JrPmv`lL%}B^l z3Spuv?G3=E8J@&-C@wDEMym0(C{1l^B;Bv3re=C`jDshAAmcc@BjzcCqRoNyB)vV0 zsHIS2Sy@@LR9!6-6O+BFs;cf}oJzqIq&MUib@g@ZhxDWD&bP;S9agRYe#l8k++Ktm zA8wbImskGyHy(AK(jnZBBLmmg?<=mP!?!CV=!B>|69je z5RUkb>v~xL#!fFfV`#$*@bwXzhOk424n3sWz$r-=v)k>TceU>xw#d8>dNkVn7n4A2o}Gcz+kQ*B@%>0ab+ov31w zU;r{O)gim`85Ck_Vn^sxf~b*9JD@8s;5qgQI|hW zwM7#WvFA(S^^Mi=!Z-)U=@~QHG0tff`2ZX9$)DNT(n3Rd6?oEmSh)gn(m5)xUssWP zu7HhRHjB3pIUo<@f_#uuFRw!CN^`WWWCP=(KNH(D`}gnfKxNO0iXa0s6=?kac@qsu zG+_E5Hg5Ur+z5J|ivbw#sejI4{=zsaAfJVB<6%ZK{rrUs7j{-{A`QeXM)@ZM-cxVV zbIF{8C!`Cc0!A|Pq~-#i1LNpztGM7v#`+RO4d~5w@7^5_Tg1o5UkEc9bCjrNn}wGr z(+7AG!Y$wCJ|}q#C#{ZQwyN_6Ud;jcMXY?&k#np7azlQd7a+U)lP6Dp1zR}s5MoWl zTPw=sdu3q*1MWG;Sl8%qL&NUy%U2#|OaHUc%7!32U6{k7HoVV|`aK=s2fpC1x9JYI zMUQlvxS=zmCnF;xk!;c0VHcT!eXvxNcT3Td->l zjc4oz1$Ct4XR)x4X7F&p5x?~^I=~nF(T?7>D`1TqdO#o5NYELHC^t9vbno81+eznf z42o8-UVS4K$`=(tj>`YdIOg#(DMD)rJ>jZqbK@YF1pj@i!}vJjH?Hetb%6he3F}Ss zkPhery%b)uCo7mUXU>HIqcqUAZQHt&fy!iI91)WkY;}1f%p=daepZO(u=*)4qtQ58 z!pCo1x8g}?=c7Fvc)PkRt^j?Y7xaUk^Hi(?Jw5);V{ z`@Z`-19Nu>q-nvT-CtS?t5XG8?6D80yEHzoBiyXyB(#TiF)h*gxC8Wqo^@j4N(QPV z1NAi+X!GXHy;TEY9)!7%&d>}ItKMSg?Ue=voMFcL1?Kx=xgtCW_fbx-tD^-xh=*8FQBiqJOw3)X zfp{+#8ynlXrlzJzlD-mh5bo=BbjU8hC2|mw^wg)(T#H=;VL!!+ltDerqFjtCL`PRjmi&2l+Qgbmv9Tv^v;^N+gErd-R27VOc4aR`Q81+$!k-HDM)qdeNxz%B@OL-hM9kdv^h0y(ViYRK@) z$;l}iK72S{tO_uMm!x&;*0rWXht$+m)0M?0jSw&dz%ORtoB92Eh^%64pa^VFTwRdb74Pn;nTtRu=Fj5W|*sRzJYb>V;h4 z+0N<%d}p?>{G5Te3adM-REAGbi;Ig{baeC>=pOGZ|ELrh8HsPSZqCfi+$ES;@**=} zFC8ABCs6=<@T(HPv%EJS_R-5Mv)KJ6q7_Kp4jeeJmvrtdbazkjjTUUTc=6(~cDvmp zFLDLs94slgd%L3}-tO3kw>#{74(I;ujtBTGKc^($(3Vw5@1fZ{n>%;zGthb2vSr5P z?2Mj$_StLbaLe)I$2Y@O>%4q{3c&k2c;Z&x4}wwt^woSGcKSUXFg6l*kx96@L9NI= z*iF4f=xmKBQ6U$#8$W*h5G+9oF9PX}xCKJx`897Flxs;$`Es5if0;q{T$Dy^qehJi zfvzzzG46AZPE-LFy?N87O)+>2i;U!PE|L>mz6xM6E%6lK*Z7X2`8cPEOcW8&rL?q^ ztyr;Q9(0U~in>A=PL6{+QUhLvntVT6SF$RdC1zJd z4BFD+rb&|~h0{FEhS>F{>&Ia7a=vK~nIU^xT3R{H7M_4kLbvAA#EBCF>2PaoZ0vJ| zg@ru9d1EBta(t^HjYHFkdKwT;Aziu(oxBSzC*(VN^yus9*nQ!`g^~IB`P@jT4f4M3Kg!2OI?*!o$PyokoipN0Q%=Aw$48h;q{l+1c5A7Zyp+QzIcf@Vywm z12f$h^YVK!nUIllD6DL+z4jVBCuq>1L0FJCzJu68D|1v24%pCd<(q>UXr_DRSrWWQ*}k>nQ|8j7dTEif>!|K7cO zcbq$S4qgo5;7uM)OIq@qRnayNDaf>I*RFq)i~}I6kolq;N0RR&k352}iMtT`EMLAn zHX|dW6i>_>LpArSXVox}frccdOP4O4PqN`--Y!Dc7SB0m19JC!57q=xiI2a%B_JVAX5wdEsUsCcP zFkk>;`!>SeG;IIFzJ2@lpr=EA62ujOLhd}v?4K7{{wMGPiz;9rsxJLcsAJT!|P8GZc`WVN&wAl_Ofsv7s=ge4Z zBn$!wZonsalLY2>LLxE(tLt~EpVPz^e9fC+J?Kjxeu#v?U1yzouf9)h4T9Hz9`s=+ zeMv+@;G>_vsBYM10e#p>UlNfJ$gbt-jltf!Adj4Tg)UDGt5(iIA9m80L?i@&zYAG< z^U6Rqz+>l6(`06j_)1bO`g#s}(3d{^uqOnNyLkQb3Es@zqPIUjOOIT5jjr98RlzGi z+@g(&aL08S6JVL6A92J%VX%-^ExfBgYl8HgIkyg3eg_-XG; zP-=3BN@Yjdg-1YLQn+D_(+24vpJ=myotbtW{V&tIQ$tjAN>!cE2yAyrsk9JJwh^EY zJL&7tz)2=CTqO|-0n{*l<$(rr8|fi~L;?5Z!jx|z2YuK{Ut1)GXq`#yngA9@A!Z96 zr;FOKBInn5ui%YA2QB*MJoI5_o=zr^PAMi)a-84 z^bzZKPXO&q;?j?wx||2W2u$3Vaq&8(V~xu{4c7$^AZ?^BfN`k{d-##M8V{a5>Hf0# zTQCCUO2xf2`58ZnM4e;c$hlKAl}Xo;*vT7!J^V=D0M@;@n>T2$3&9`!?rANgfvOSJqpcc6 zZmW%LRHNu)JoakThWhV;Wc7$eYo0c-e-B95zsOFhOUmz@-&bE`c>Ty>8RT|=KJ26~ ziAV?_cd-F&mz{(I~~0I;%bDT1Ooqa zSCf$GNJA4w!^VeE|aj>kv{m{+D-uCDReNNNG6l7_Vo0;)!p443$XTS7Q}*>8V0Wg zid|h@5AdId84tyb!-%En;7!41;oLhAC#)Oxp6nC(4};SOF(*?z323{wbe=fbbHRu?0q`&_}Bf~~Pw?DuFidQQ+N?N&gWXS}12?mO49G5(Io0F$gXv%Eq`9TId1l#q-= zUw^*`_c_oyhp-{IC1{K>6Q$$aYQHNaY8=wB{{H@`L2qAg^ygE*d!TKnDqS@&-KPUBF5h5Q5nDe(&w=-5SJYSfZ?KAjWbvc@w|xz&`n$KYmd& zvY$yHZ@@eH4B-S5#2AR`>FN1VD42aQJSXhUBgVdkylpfHga)%a6nWbT`i6y*hCf*y z9Ub4L3_6i~W0L{+Das$3nb+bD;(^&DzJtOh4D>~3sFh$q89&-5j<&Y8er$6K6{T~q z#NXp)!zK$GGK{@phYNHk{FHrK1WvY$;L zH(a2L4cD&YgvX(+t?igl^EldEeKE@;v;U42I)T~7#A(el; z1EQ&^X^wR2&aA$KQKo=XX?R(ZduZqt8mC&EvOc+&H zSHGtnnB=d()vH&x)5*^J$;t!bnUHX2bvQr=U2M2^!GjV`2P@;l32v-RU0vNyq3oCV zNb2?L*Go(%eh#NRU{ey;L1Du{CocT$As`$)9dxnb+O?fvC5*n|*3i&UCY%RTX(SSv z+SS#?HPGucobrIQNM;Gzu%NK!xSGB8B@eXS_W)gN*eTWp;l!RW+z9jL=H~MoH*TEf zJ8<&k$$R9WxJ)N*Psz#y4kmKDohl8OEeOxs@QUA`HqU}q0vp&0I_wPC*kmW;Kzn<8 z9VjX)nu7xvqtgS@*)?F}ua^S#$ z`{fYh(}%ZAEEmh>8ZltGU;BQ|n1v9wMiN4j@|(77*^=Qqke!`9t+TV!-^Bc63mRai|mHd5|$CW7|4#!a0?b`LIoCWQ=GvX`bHF0P*_Wx1L zG5ZvA66#ksZQ8U5&XGvOTLDu}PnC+aPNK`kkZ$)g$ozn zCrflzD~(wr&xhS$%WIa9%EkfAI`WbF7egABth3It>u^A}BzIJU4^U0q#~m6i1d zV=?B4!zN5*kW?{-6MPAHc=ztz8|v!n&a%`HGJ+SHmcZXo0RZH z*uWMxv7I!}|65^Z^dL72?h?#fzI^!$QjUKv#bBOBd20BQlWFJ8QOPQtI8 zKJ-OLbosJ?jhnH#Zr!@XKU|ELsKNg;firxwhe*2M;k2~0$CfNvvN$s{^I1TfXS~yW z=!=ebtHRcR)&D_Q5i-T;)2G>V>=Uy({QrkrHE8pUd`^5%LI>SJOQVy207`a8mao>N QYybcN07*qoM6N<$f;VJ)@&Et; literal 0 HcmV?d00001 diff --git a/sample-app-capitals/src/main/res/mipmap-xhdpi/ic_launcher.png b/sample-app-capitals/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cdec5b53880e6629b28b5d9db852e0a4521b3806 GIT binary patch literal 2577 zcmV+s3hwoZP)* zS`0xOYQV))r%v6Ks9jpY3yH;IyKv>xWKo)IB(8B4I87uv#1PlJ1T=|8A`#Nw-d>Za zo#h}(_o}(Mc`_~h3>=2t8p$1JAQC2<-+haLW$}GC;M#O|cb{Fqe*JBU8d?hOpwH(k zp#@)8lElTtP7@3dkgf04kqMRa8Cb?TaXY7hHmD`8UAuPU$dMy+5;e3G%Fg3XpFUkm z69jn@F|m_C=wH0|TPA$L^A9nwjCF3Czzyi_?F}6|bm$>yXNLjfPo6w^U)%!*gd&3~ z@kJA`jkupva07aJdV&WI9GC~~>@c9Pv9Yl%?y>=cLt(Pz#9Nx;Cz`P3L>=8WqT1gH z5)25{*4EC4b~#}HdO9!uV?QaZd{`yANFg<0W5b)S^p0}UfG`!Z@>osMD_;cLVjt`) zmX}F#&HyI<(Hb&w!y_t@Q-OW3uahR^lmVzha1~n-|7#}DGMuW8a>fAMSiSJ~eWt1% zJx~VP4>aOp9=pj21JIX$i8i7}8eF5GtWC#jGk%|t^#%k6LuBLe-`FZXhns*LVqUw* zY6JSiAySng@i{0PIgm@tZwFax0P6gW4Ve|6gB-|}i2=Ni_F=zTqRbfKrZAI zk0V{O)&Ov>tBuUwxlAQiGUo1CNy=XNiE4c^X75@?&UJsL%5Mi*Z2&k66AXS5=Dog# zT)p`P1Iyz3THwk@4l%D?WW52y@nQ0@|00>SvqB|aA`AEZlvW}BvHh^T;MdQnwo3$M zp6$BCa)^2DBI^wR+=Q7so=}Mh9;M=6ymm#k--Rzam@(q^0A-=fOo|UYZvch_I<9xC z)@$+6)eB^L^^d+T{{EklPd{&0ZOg%X*hUl|Wr^Er(Rt(Zw1zD_ZNR`#nCxt>C#Ace zBX&K@+BJ_;dF_rFK!HyBfDsE#0&l-R} z_pX1|j}5G$C-RBkSbhB8%jd|l`YrV8zN~srkMrH_q@sQk+gE%~WVFh=G}i9m7;&st z?h`y|00zNuRZS8`HNQts*l4{Rjm1>!QW1?sRqI5M8`YE8=udiK0Xt^119+Y@0QG5g z(_!5q<=_+`LL-r!BYkd(JPRBfxaR6kTM$Dmd;OA`)8W}ceax6 zZhu^LJfaD|YW$tyPoQTEfcTrBmsp>ein6zO5oBV}y z63Y?sgaJ6vs^hg}GOb6&lS#((>c`3H&puX_XEz_TeU$Rb7s0vUoKl(Kx&b&qTrFnB z=Ty{hCedMIA9oNK3^K&^dY~$K;_xO_UL)X~QhgF!H6R>~usJzmZ^tO*`=4cZvtqe= z+zbWC(|_K^z_R$h9>{@QVtyl_Izqdq*D$+gz(8b>{Ic_$68M zmufQZ=kpj?#yW93J&lQ}HcUJM(MSr7b?kiV4U)zh!E-aPH86 z-!VI802-mqDJIG$W9};}*~p_Ph93QcA+m}#w#mfjV4GF%Y&SIpUJ5|tCb}V99MsTeP;s>7_jqo~ESw_G) zyV?kI^0ga^djZ$Gp`5WBF^koal^e0u@6hV#d3hr?28JTG(#FW@P{d=@gi9JwKla5RR9 zofwWrj+`Bi=2-bc=0ELcRpn#~tnM7jn5_ok(!-bZ&@3O&}Gn3lr9eS(t{vv8Az-j0zk`f&_67H$IS{LzV7<{x?B zSpxu{nt0!ym6oO^;;yx|JN48=%!%;ToiE~f1B{SrdOC&>`D=ARpMIgj)sx`N*;YcMSmYp?xkJ0OVsUT{Zxq3Xu

2Mhq&@c4Rs0_y7O z9)WhY7;yCH(K)p68$5}a*lE;%;NZUafE&=&)pc|4-n|b%yL1h}-)|HyTD0h{a5#L< zi+^E)D_?7(tQ$ZZXyo(xE|is(6+=6E@me)@x{T34wG#*gNJ~pg zS7l}8Q_yPZ(xtaUJ3&j!F=6J+nct$X(-$vZyriL_;jh%`wvLXDKEK~TKnW?Y`2;)X z&d$yNv^aL`*x$;_%YOikXyA|B?D;1>CE(=bS+iyp(bwsexkW`q3u(1fv3Bj+m8(~; zUXhRB+@S&0;!$VsgQc`j^jS{*%gEE_f|I5l}pur4i0&VE>Ed`@m zWhCG#8s%Gyi;KTGZQ8VNPn|mTo+(qN6y+m0cW3}DpoyZ5?N`25APM@nsOOM0pMeI@ n!V%$R$dDmJh71`pawEP1wE=wM*wpx800000NkvXXu0mjfhZgjs literal 0 HcmV?d00001 diff --git a/sample-app-capitals/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/sample-app-capitals/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..f50796d0515724f8c3fb50f112e480595d32281c GIT binary patch literal 5460 zcmV-a6|3rrP)}{fMcA)wIDT}6m1!-dxW&>q3y_^|9cZg5&ns=lCYDI zK*%PP6KV;U2v-DfjB{tiJ-8QXkQR9$uii=-Xmp=OSeF%N6{r8h2~QHX5WXQa64;F! zH(Fu0+r5T1oyhB?$QxyZD`oSJpgng>il}HS@pRmm@Xv(*BiOWrYshRNG;4tW0afIA z^UX!lHca8r{Xl5{QHG0VDTgl9OImNpFzkDAsYfZKdq?;!q?6{8km@=isMkiZVmC$%%~MN z1ehEU9!SLZcyS^Jj&Tmx)cZ{U0$rgx1a$}%b>cJa_O9SxXYJnpQnokEz#Mv~I2ps}Xco3im*z{$eSt36+Z90|DBpksCg9w5kw zskym%HC2(DA#I&+sz^o9D@fU0lKhsI7E5|PP*MZ4vxwV!m2?%j2adVyLZvPrvygQ` zy_%Yu{x>NpN!I!1HUbmQmj3o7<^Bxv?QNo~h#7oaUckn!o2Mh%6Mp#Ge4bX#&j)Z3 zjc}x>sHmTogANx>&%cY5N)_ar4l7kquVV#OWo-Ow&v@1IRUi%0A`j%H=5G=_Y(*nn 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 KMNUMnLSTZhd8S1G literal 0 HcmV?d00001 diff --git a/sample-app-capitals/src/main/res/mipmap-xxhdpi/ic_launcher.png b/sample-app-capitals/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6b124875bd00244f1120b9d11cf450d62047db62 GIT binary patch literal 4229 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 bSVs1Lbl)@@1Q#Rw00000NkvXXu0mjfozXN2 literal 0 HcmV?d00001 diff --git a/sample-app-capitals/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/sample-app-capitals/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..bdb586ec92b9e8345408e852cfffc9d9ccb04867 GIT binary patch literal 9035 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 literal 0 HcmV?d00001 diff --git a/sample-app-capitals/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/sample-app-capitals/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..08e5084ca225886780396111bb1246a9bddc4357 GIT binary patch literal 13088 zcmZ8oWmHtr+NN6?k(Tc6kkCOuI;16KknZm8ZeajP5u{VPyOHkhu7Lr*Z#?my2o)unR~V!iaBy(1Uo4YNoF_-4&w;rPGh>zX!G}R?#fkQNr@C&G_ zNMUB_BmxTwe~l@?Unx=-!aQ%9zwqn-@&fB9lz8toQiNnS^+T@S2e-xY{QAD*wJA4(Y{C*~8K^Z~z~8QCP_+`~^$qzV zxjSh;TIC!m*imDw(jwLpgdv>EIf$C)76P-ztl>P1e z#_PkSbpO!P#^SlFDi)`Dha?e;^}g2%w1QD8u~{c}0zcnA7i}8f z*a+$H8p82_h=id{CMJjam@r#kO2qw?i8huAw`=2z(9H8Jv%84%QKi}3^P0-abLGpu zU%XrUl$%!Gf4sAQt~Ep<`wB|LQL{;__!Nb-!KjRnOgEsYRmA+bw>s_lJ#*%Lqoklz z_c>gN_DacU10F?vm>Q#M;oUg}9yDYpLkRx?N&9b)&`8gPE% zySsoAMY2XdlTO1Zp{$Tt;{(w;Wn*YZ0S;?3H6XV7NhF2oqhKhA#`ii~h^;IArm*R% z5+*t-AX(1ia{MMoOlBsDAx_TsmH3wEt_w$iKum4Hyln%bADUu{f(;Ycs>3JILOLLnD)%sYs-%a_Q)|42~ zlTRIWU=NNUi`Ox)Ezcz9X`HfynVs{VTXS>$k;+}_$6Qa!aO}ZVdqLb@pAhEMLdhsh zMX~6$Ga(QknOyE`IwZV$GYwZqW#}FH-%icwMRFv;0DA@o1q*Du%3Q1=N1bp!+_Gy7 z6xnC7gv`t()(LG-{NR0Tg0|Yw&dB@M&=s*GE8J-u!b2?LWa*4upJlX6{BRfyMy+0? zFu7Y=jMN!^`m?O8>`yg;`Qm`xPGcs;DMS2JM|rtV602IS!jP-nB1oq)4-}oo7Y4Rj z`BRteWBra<${BTVCrKU8nFSG|LztWN1r@StlqjfXZ@dVySSLZUni?7&)@${9d47G% zecQv(Ro_IPHmZ4fM@0zzVs{oKdGJc<$E`f1H%yLKI^fXbJKj-EUetcQZhd#zd!l1T-9+DRS4m)LS$IYq8;&l8%Nih|_HQ>O>)ESqNkTjb#(}jKU)E{AKqK(+@4eRQhZaI; z22{>)SAh&W`28l$RFYOaXP?}q;icm>*q2~AQ$&Th#@9AD7I!e^t<3iieqWC_BnveV zHfo^MFMhqWP;My`?yJmP>>2vi3Y#u@3MO zHPzKTf_AIRC`uac^b@Z%9G)p6VGbMT_^v%O9ZFD%sF?Y(KW5Hi2G_;L2A75*vjvY_iz|I$LI$RQWvKny*K1D#0Qd+Gmb)hS%blFP%s;7u>Zv zdAtgENpJ-Gbi#{k(M#Y$?h(VVDTZ{LU2VJ?2^v1VO{S%-gPJT<{so?l@g0GZvr{dj z#zgA4ruWXAl3?KZHv@z0`3AeSKg{YyGr#j(qh5J7=>>C+!au&6mXYW_^1N)OZtY}_ zFB9ax8E%~C{)n!WB}DCdJkO1dy>L%RMdQtB_>+Yn3dEpn!h(umry>x90Vzg@hsYPX zNU0KU6{)LypB_%_B`*j8)xAf#&nwaD@KfybIGel&*izo3xSF9fzg@LOv!d5hZ)*VrpHU=@*+AP(V zd>%W-X`Ca(XE~%*%t0lBPJW&1d))eW;rg>@92VH@&R*d&n`50psJ)AIR#ZWHk*22v zKNNCCMn;C|_ZnE9n-{O4?hD5lct9l}Z`-+LQ==dP{&OxigV$Uj&@{r9FJ$I|c#n{f z5KDF2?TH!Nt?e#ZXm4TGx92BY?g{W$tzmoPt79B;QC9`;m#4e@jdXF#UjDq)!e0vu z3%`3a`bnckLK|O^-Jan#v^~XBakF546ZJ8=jlxu=W7MnyYJs|(oSa)%-RDxxCR!Fc zjh6Pv@e4@dz?tQAe{5~gqx55^a`>3i!Jr|shxFKJ&b(KZH*D2(3vk(JGQcpRCOX#R&<0>2Cq*=wjtWn-?g zSNk{w!KUDMZAN|O(}sz5mWchjzpR{`2jLj=X|GZ+r&-;v+Ch%^8b8OD(Pvld<#zSu z=dpa>U!Lv;iiUuF0ua9%m)7^iR&AUaul#gGty{f)6k?-TMqPKsKZYisd znzRQRV{Z4lYTw&2=g+p=bNk{UrT2}%hWCuj?k!CZOQp-vY|P8^UHef-XF4e4`k0ed zof_;X`WB<6P_E$8KYoi0J->Hw*}DDFA{VJ*oP^?Hg3YD`ZCk5S6W%+ZprAn9p6d{g z`rTtYbT^Z~;3OySo+_>0Pp(7bo9KR3czi+z)#Vb9>>Y0R9CPVA!5D{1WSh&!7l`_% zMDw*4({3w&Txz@newHIdv_Tr3fPBJBOUN;*f_C7f9;jsFTHLfRQyXLn)XrqAA^k&) z{KJ^9XEOdwqtw7K;G(R&?oNp!A|h5cOiXHB!+J9sUp$bJkya)aGFRN1cl2}z6+>Y7|2o~ZW&gTbOd z3=~c>VNa|&c>bm>NA`af8PT$%`3?8qJ`0#@NQMb&+n-p~$mp77?4%(b%6=)~brBpc zlVsYw7_6IAG<-o}+6 zY!h!s!LKRcQiNXHi&cc^5KZUt<-p}(!*&T0AZc4}K8?9-Lu`uZKh=xfymVdoD&pw& zO&^RVy5y?QOfx^dx)W0VHk``-*dI;e#J&t$55mccLZg2mT-QHI=h^Xoaj1(eWr&o^4F@DRw}!t)yI;%xGomF z``lKvx5(`QT9|O0k13=3wcvMmy7IeV*34l~Tew|p z=37Cj)~nLnSfzWryA8zD!A_1N=y*fTNTuvN%q+kQ=Jo7;l>MJ}e&v;bt>_nDU)Bae3Db#%=84B*8xxA3=0AG~xe+QB3VAkAAj z86dapKb0ftEHJ{JspO0_k(*Jw(zyh{B$IGsm09V%-}$Z7^crk^xb;70#YEGwT$%5U zK_uc*pg}butt11-%;@Q8BL+%ii9|%#I!6I3zs30;>*%-yqE)fTO|6uT9&b+=8I-c_ zF&jx$d1Y;UA&ih1;uI+2WB%(W>gA6;ozCt-0pm)iJB<+ig!L;s&k&IBtG@86NXPKx z=|bhCw+%*}fqor-!|4Ysu4M8&4GdPT`5$He!l-xkSJPD7;^mvBcU7b%>3EDuSo=oU zmgHoa=}2o$dNI^!%f6|AMsh)B&t>{e)g>(nE>n87gmC6@3k9=L6i*_;8d_7 zu+?oclB;|())D(H#prdjmKmzg`?ciyVG5R7;jgR1)Y^Lyr>m`cBU!>Vs9Ef8w(;8{ z!Y^fTe+$!|>SJDZM`UHw&w&Uk8#TX@qFw+9`&0hT;Kw z28P(c8hc{w%oc22=gmw|%<}Rwa^zF&cL@+~I{%Q>RT_$`nkbfs+Ofn#{@N2OSvr)u zy{Va84n%7c$b<{Vl_{2$c&p=h`@XT1;ryI#()=Zd(NBOgGVzIu325pt%O0l`5fRW* zGq&Gsg<%$)>8I6HoiJGh+iKPphpoQrhBeVt2xOyBlc|DGvN=+u_zUdnCA8TQ8EpyY=P$zC z2LQJi-e$Zkcb^sQpio>+R_hcN0oWz=nWHz=k| z>?4Yl=rQd888!=3x=q*)vgz2o%%z<8Z@8>C35ki-hYv>;d-Pt$tZ+4cbwKh8CL+r$ z!!xkmI#hd&?Ma+93FO`Rp=is2!CxTncQ3kMkGzN?Cua&wY1TYd!I|Qq(vZ;njXe*2 zMK%Sr^uMp|8_mbFe~5N1J{#76M=7c&2o~YF?A~zLyIb{l?BXCf8VG%_6vL?u!^l!O zw#OZvCi_Nf^NMl2AH5?0%{)Pu%tWu=T3Fa|d%$bmUMSZ7FR*EU<0Zz|YRr`{j$)Za zJ6?T2s4^m7#Waj=T|gAd(4o?>n*GZxd2iVE5^WX<=NngqzmMpV@4@0?;g4xg^ZpS@ zlP;WM!(zJVCb0WMC>FIK6P=7Ut7J@cbTn}?RNeLxk@WC&O_)x6jYz)Sb5MUAP24hQYsWP>N1}k(Y~Q*yGdZpGJz9Zm-X;QpunJ~H(71* zpz1R2-I*ZF1<>6+TpiH!xpkN&=dro6#TQRrXXX^X6ds&Ks;drZAO%zTU93(QCdQ24 zEAe$#F~R$6ymms1?MSiD|L_SO10X%_ARc&ZRu0q(I2^HaIH-iav$2xWnBdT}49xZo z7MfdA|FH%8v)kM?mp&20pCtE!#YM5_YnzOr6#bHu&_tQ zHdmairg|2(k~7M;=^{m|y`7!kl^Va|kvm?%g#jz#0%FU!d#L0B!ycKFbT6~fD|uJV z$|1>)9d1nw-*<8U6_Gv3Rau0wXl*|JG73{dNu}juWa~!Q zDPP~`U3l4Wp)N|KyAb&1@UQ6h$Qn6ESRR}hqU7>5Y%*Ww1@!tWMZlY12+{hm5UYXlAD``f zgav+W&k6W3@wTIvo9(%dZ(y}wLJ)kei;h_zM#_}gI)+>N8Ah*5%}FXL6Ac?|SDwXv z9+nZ(J~#x|AflzLgn+Z6)nB4sC?MCi%R^dZ68m?I>o>6t~tIcj)`T zVv4ccS%G@sFY<6*TM1zXeor^`_BxK=D}C)T&YvI8^r$CDc)_)a$P}+M;V&^U%jioD z);N4)!jZ@Po@2uyQ{-&e5HSW38KLRKYNn*>(MMt6_W6Cj%`(3BSGUKE&2Zs|*IIb> z46If2aCf#w!Vy*oXXy9jVx==7hk^MK{(O1m>n-kH-0qLhJ^F$V0o7yFS4E z%20h&%NRy%BvNpeW$mc9S*k|GCZ9*<2rGa)9Of@Xh(}FUPergdfEBBWuHc_+B!jVk z#q5sYaC`h=AqNnjHc9Cv<)j9}!}(3{q-M_dn+W9fH~Oq66v*~OrDi~%Y&vVX8e6f4 zh7cQ|c?vfES`;a70-7IoA`EKA3`g|q48JBUz%n49eNwnQZ5> zl^E+GQmtG+)zKKS{s2AI)bDX=O^98D4|#vJwb=|IhVtD5SZ6-K=nme$0dLnPSekUh zHrQsl@nZdITw;xqE=E+KGR;=0>AJB1;6aHIw-ps#AwDs-GgG%Xt8{8qEa zUe}W{dYwD*gzMQ}r^d8pvpLV##eGdpO_^P)aGWINut9r$veDXa4fNfe5OijAWBTsF z2)%-$BHOd6!eJNtCa1kIg~Lu}f8RGB^PWr8i&Mk$;X35QI1EMj=DzO;BMTON2=j`} zs(p#7uBquwq?ezS$2LSxt7w1ryj*&(2A37;siUJai^#pfzWw2XgoMQ8 zaHfQ+8>o-KLs*u0fsTvG>$m}BXtuMl*oSo8ty^V-B5IQ&3Lh;&{I%J5_B)fVV07|$ zy}JNZ%Ac=_i5i9p<>9xb*~nZH6BD1y2>r>D_0U^_s(^0=AqTG6SPD_4_Lt|!@vaSk z^;97Q7s0u$xDc!6%8NhWZz-vjmboDkLwj0`wa;TeUdMh!Qlf}y1VoE1KzDh1MGo9e z%}xEA-V>e>PRMkytK4PjOMvY4hExmj`8|YpLdMXHt*~hJV&{i-(gy_c>y@ znCr22o*EoqM~m^i{nEvLRwk8VvCyK?t=rti{&aWjEmB}4oX#0~ri9<~r@@ud4f`Yp z#lTgh>8`ZjP66BF!_(8#5*iFDAR@_bFR72$l4KU83(w!W4v4?P?ziGh`l3k;JHGU8 z+;O1P-5|Wu6-(5Pq4^BtMe{m!V*W872fHdV2!UZeh`?Lq;U1%gP3t%wTv`i_p5s}isc z9Jh`YKv1gH{xJan4}A1Lpv_;jGO^w}!L-(0UaGFnQdB}udB>MUz;QM&rG#jX{-oV2 zD6dFy;W0#ze)VF6e9EdY;B(yp>fWmB6i#JO<$P{P66iNE!~?r-Wu39-mg??)rJ*|T z8Z)`$xLEcr{=utG$)%Tn1RHp!q=@E3ZV}*6LWI92(t(Q&c7`&~E#9}s3x0{qoc2>V zT%DhA<($yG()KJpl*>IThOi%k+ad~-*PYylb5?Qbt}X0CUSN9?Ufm18739HD%lOx7 zC%oMO%>Xj!BRe1qsa_!RRbM%>(TDeZvOlf)E&WLS4x~$u<`RneP;`>pPg||rk$8c7YvGzB5woM_j6GU0HtZ5lk`4%V^xD+%X(jjqpME5ZLsRlDo zY`dSi$cKQGmm0^NAzEc|=vTo;&#f52&1TC-2{vR&Hi=vy8;?3J*kt8s`@^WPaxQ1_qwQJx-dj=X{57QaeLV3C|EAoZr=Ml>#R6xH{n-gPw%Z=J1@8Y;Pew;$5X9qXcz7Qh&VTmM5U{rx|$lc#N`0( zUFT#fyB>Zm^)prdlO6Fe&QHAtjt!O7MmI%W-9>AkD>$M^QiMXq_@%9DLoT>1!sAj?(z?pJBUIa-W#bYfxCcv0~`DTMU$Qx$5!)T#S=YrX?KUfO>~ z&psj~M>(!=Xr)UsNR1MUglm~&JN1wQmghfAQX-!z6&C?Py%V0leSc(R@R0t9cX-_k z%|AU~G`8`zS*(@AA{RP$X=G+kVg0vVP3C?DLgb5p5HyT+IA66jUNBu1lG#6mH8sFF z(4Y{A?dZB#=@+)Pm(Ww*eUP^`!6?7NPG1aO7t8@^pfg4B$Pdp|@#qx_gD6IiXwe_i zQ~ZVel0QJqrN*DdV3#KiYejXIe}C~Ww;cW|D0X3*-H zu8SNwGSrKp#Go6XcpwU>DRc&JC1e>j3J>-5OTAEBca zBI*`-vDNQ~z(^!G_#B-M%`cqCvYag=@s*@Kz*>W(q`0ung5#$<3XC*cZ92N)0ae4l zB(T*W8}+2=wr+tI@%uaa01-8};SoV`Ss*9`08(dbV zt74!||t*pEr7`5)hT15)9d?lwXDP#-Va zi?LcV7+}iSnL9l@D#?;LQ~KFKmVgfECPGe*$@Q3z1hg}jha&4Bb{EKy_u|3z$1wqufc>{v2CT4QGw(FX6ZvyYqM zj(}$REy^RuJ!BQSv)>Is=(2cnYjonzU0{$v`=`Xs<+l-0<*m26u@GAkhs~biZ5G_C z_-}N05z(>)@pvX__4r0t?c(OnpyV;^#m#GRsoGrg7eLUDe13XtM?lRKv>W?s?dD6N z3Rf^sl1eHQ`i(Xs)saZHkD591>N8w1Uf%sCY$Frc0v*Ve5TbA&?92nI6SKDj{i0{G6}pFkUUEUW3G<5{u&c^4*UZLFl$vU4;{wu+ZcwOOYI%p_TZBLO?lpp|h? zGjN_RpnWBf=*~BReraXTLMB77I7$tu-b&f?A2Ypikb3Kcok{8MPn*w_+HYp{d^QXK z3?vMTgc$Z`8LHRv>dRYD5;fX(hrU|71SuulcoyA9q1h}`d1tk^_(wlT8u+OEPWogn zlL;tV_1{n2M6ZwA{a$=&B$z*Y*S!3V49YS+O24xDbTL-hL$CG4h3Ho6%5BwS53h-D zrv!u6H^!cJev{E`k$5i-8(k_!{G_Z#mOCQP;}b7n4}49Sa;=eA#<2DaWM^h(_TX&2 zo>I3jmkL7Bej6-K+jgawN*D&3>>%a0F94ySu+U+%Tg(2{SjoZ~q%*-e&bImY z5UI)QWS2hzN>0C%5@wr!rWQQqPG-xcRXgJ_3lHD~#cr5Jcft)9f4kZpH94NIQeU6x zB{p0pk7X{GW+Lli;3ivtK5JhFdg7H=Yh#&Cd3WCkUS99|ydim7t+k@#ni$*%( z8-m6{A(T0N?nkRhV^yE5hZKO}H)}q_N@muLk5`$I?Oim`Ox6ieyiQfb-~lSRHVW7< z3RH~IF4q2FD0d< zm@x+|*f+rMonNI~eYwJzyYv^Bc%3HN(!0Hf?1qkx{s@GpC+D&%`KGFj&<<&T1DzD_ zNm2ZD2w82sgrA5}hktRs?aKEUn>|-QI9y5?*S~2BwL!*-CW;w|KqLQ5$&VA?+t}Bf z23gY;hV5y9#fu%cwx~#@CDcYAk;6pJLGe4E|Bm82QU80F(4}+0fd<0o z!W>)G{Lr?(-)3UleEeH)B$3HK*SedimqegN-|ivZL@=c6CvJrN-%_n&DZ#PqcaPJ6 z39@2)3pc!#A{Nh3{e~Aj;w*%qMQ2_fAR76hT+l~h zQk9xj@%<)7U4#RqXY^`s+;E^ds{p@JYTc6_E*<}3o#4N|d12*!yV>yTYOy3bLE8Y@ zzECZN#FZgdSM_j3%rQ$ll?sD*!&Kh@F^tUO=r=f@mNLu4pCX3$V0RzaB|p}-0m^Uh zDLjApj{$}jDQ4D(kwwzZKiT)SZ4hZ;_`%LR>gF=Qt36p1ze?3nWo()sp&1C^jHfuhu&KevSYoGv zR~G-qD|+ytn14rd7FxaT!brTNpBX-n3ANt3`z?<@>mDmrt2f5oLssLi+Cp9=C zWu3hNIN)gZx#>l$xZhN_or7kg?Sh@NHNwYTvmfeNezsuYJrw? z@@8q6qd7W4DJiEa3^64Xrt9oJqY-G5ldD^2*`V~D@1W-9Xb!VlHfmE6-SN_iJy4_y zUxncxDsHny+}?YWl$=b+Z8`Ik^NoC;hN6A?I|e8#sF7C#y#OgyS*2Ks;x|$Q7L_;* zLd2^1bxB}E|BToOTY8ESa3J~4wivjMh?&jPzO4c_MCR4)k{ym27KuE6(c*5!_4b?z zOMq*%@Xb*%kd_U}>veMmN3Hf7T`TvY8>zk)-S5)ZN4wEIz@q31{7mT{s91moQI`5yC9!wW=@+;8Hm7@ql zJxshW$yJ+^1sBth|BW8<47(v7*N8X40H}sfz@Q*|3V`a?XdQs6sKTik&TmisP@*`w z7_cKyN52MVxO4?OX4xh}9%>TQ5|fgY53JSbeS@}MM=O3OncdLS?*`_#Yy+}yJUB5j z^&CUQ`Q6XgxrbKg#yD`Qc|)V=O?8>yLpCD6pkK#wdr)V=FX%7EYX+myyC0SmQ!2~K z&JQ?vkT-YTdM3zg1pyOh!@=m%=zwi*|69kP%sBG~QwbtMKd_Yp2(n;d24xr5T`sTl4|KI_V%T%hcP)C*Key#`<3ELr37?B#8eB8 zRobPZ_}}u>cyR6Fu5C2i(zesI{q4sOBzhy`c7MK+GgS4h8}JaL@k|T*qN_}?PMY3P zLWgmi@#FDib<1LL`4bv7ACX6dfK)u?wwf(FOOL>&5+9KyV!j~j(MI%YZ&{rX_tsb5|nA-*+L>BNVng%!ix{CV@l0dFc0DX-Y z1?vsh`&;Nqy-p5pv4F=L+P)#mgNp&Gq6rJ<+*?f9l)ns<{P?}9G~m4Ev$p1?`-`n& zMtXY4_J$XV;wz&B;l?V2jgf??;>alLOfzdoygj!MKMAIm!VNW4RNlItEYiPb*LA)G z09Lxo+!wbe&GCopcc!_0?=!`s6YB3;WtEY7t}(SWBj^bgg2k1q(`T6;CdPEA*%60L?bp?h$Svtvk21&u*hsQz22S5&HtUjjhGJ*5J7nX((9gDp2NTOVsy@fV};IluFYA7z#c`N)VQtw{`w=NAX%; zwUAEcdl42qno{u<6d+{N*Cfqe}S{no5@1_jrK(+XDLjQ5aCI{{B!em=}vIG}XUW`$vxkHpy_VF-?eZ=EB&sU~ca-m^ zuYsNFLGD&SL-L9y6SS>&PQ|gAuar7}Q-qzvB3-%q!3w{KMlz{QmO?s@C}&^+=z2YX z3GU<$z&EGt`kW?HEoSPaNs{$b|fmiiKUP|p|YP%n_<7{@?91RFV2J;j^{>JPI~=ZzW)H3J$*tu)%=fgsESrnTT0E2nho-roQT zGH(zp^oCvZI{`jG>pOn_8^XAogllOA7V0iIj2}B}ygs#H z5!TFG8cWK5$jcm6sAm18_S@tSU>wK%!$(St&Owkc;76MH zoj*$FOgC)N2}?mWGbIA@^z-dzZxoJPwcXC@Ou!$p>xmC>s)9QGOMDw8qBgngk=G!n zYis393sE1*|Ll?s41=MF=9{@rnDR*}!o>;0=VTsP{o+x&ZgVCB>bJ`PfLnmCDfzcC zg*!8T0K}!0xL*(AOphs6&S}&Cu1b~xDWquAOLWW8m*N3*F;^~n`ki>b3hWCnH8r(R z*o!z|=>Y18Yl#L~qw7?G+*&k{04!!h)h}^gMq>kBuC)nY2-@b08ZrduZ(OIQKR#Ml zbZ0C!-Gm!T^_HW7xDbA0eC0BEd5_!5Q+W|&IedW3}-D${+m_1`XUqmM!WqS&{$uBHIkT)CKNh9sQ4>O70oK7 z<7;B0>cU*ZKnAq_V+`pE3b)lse}eW%7_9@-*M50f7e&>OSFJ)K( zommHHLOe(lt@V98TBr{E1s8X^3pFh-SC6$?uZ$WEyRIBxdeup#U!Pl3s8y!MMT&Gr z^60z&jtNPPpMO7JEGj;wJa~t$b3BAAOMQ(2Kgq?4M)qD3{DoW|Y!p6djU~4b9aO2S z%9maj@Z|U41ptv`DV=1wh2^0Cz9n&uMHPMyEWw=i?J^w$PnH?Df_zPEu&L~?lwcCw zinjr|5_8)qo*(CS9OERv;(*-auCs+`0+PEluzr)1;%XuypawpP-deeMFigIy_S(d# tN~)yW;rcO19zMe`;`pvhM)sL%qbnXk&5(W(c=H8LPFe|6{@y6?{{R7y`I7(u literal 0 HcmV?d00001 diff --git a/sample-app-capitals/res/values-sw720dp-land/dimens.xml b/sample-app-capitals/src/main/res/values-sw720dp-land/dimens.xml similarity index 100% rename from sample-app-capitals/res/values-sw720dp-land/dimens.xml rename to sample-app-capitals/src/main/res/values-sw720dp-land/dimens.xml diff --git a/sample-app-capitals/res/values-v11/styles.xml b/sample-app-capitals/src/main/res/values-v11/styles.xml similarity index 100% rename from sample-app-capitals/res/values-v11/styles.xml rename to sample-app-capitals/src/main/res/values-v11/styles.xml diff --git a/sample-app-capitals/res/values-v14/styles.xml b/sample-app-capitals/src/main/res/values-v14/styles.xml similarity index 100% rename from sample-app-capitals/res/values-v14/styles.xml rename to sample-app-capitals/src/main/res/values-v14/styles.xml diff --git a/sample-app-capitals/res/values/dimens.xml b/sample-app-capitals/src/main/res/values/dimens.xml similarity index 100% rename from sample-app-capitals/res/values/dimens.xml rename to sample-app-capitals/src/main/res/values/dimens.xml diff --git a/sample-app-capitals/src/main/res/values/ic_launcher_background.xml b/sample-app-capitals/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..c5d5899 --- /dev/null +++ b/sample-app-capitals/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/sample-app-capitals/res/values/strings.xml b/sample-app-capitals/src/main/res/values/strings.xml similarity index 68% rename from sample-app-capitals/res/values/strings.xml rename to sample-app-capitals/src/main/res/values/strings.xml index 50ec7cf..867894a 100644 --- a/sample-app-capitals/res/values/strings.xml +++ b/sample-app-capitals/src/main/res/values/strings.xml @@ -1,9 +1,9 @@ - maps.me capitals - Show all capitals with maps.me - Open with maps.me + Organic Maps Capitals + Show all capitals with Organic Maps + Open with Organic Maps Name: Alternative names: Lat: diff --git a/sample-app-capitals/res/values/styles.xml b/sample-app-capitals/src/main/res/values/styles.xml similarity index 100% rename from sample-app-capitals/res/values/styles.xml rename to sample-app-capitals/src/main/res/values/styles.xml diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..95bd10c --- /dev/null +++ b/settings.gradle @@ -0,0 +1,17 @@ +pluginManagement { + repositories { + gradlePluginPortal() + google() + mavenCentral() + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} +rootProject.name = "Organic Maps API" +include ':sample-app-capitals' +include ':lib'