From 4533b7441c7ae07d5bf7db925e88ed4341d3837d Mon Sep 17 00:00:00 2001 From: Alexander Borsuk Date: Sun, 5 Jun 2022 15:56:20 +0200 Subject: [PATCH 1/3] Updated API example Signed-off-by: Alexander Borsuk --- README.html | 174 ------------------ README.md | 80 ++++---- lib/AndroidManifest.xml | 4 +- lib/res/layout/dlg_install_mwm.xml | 4 +- lib/res/values/strings.xml | 8 +- lib/src/com/mapswithme/maps/api/Const.java | 18 +- .../maps/api/DownloadMapsWithMeDialog.java | 12 +- lib/src/com/mapswithme/maps/api/MWMPoint.java | 27 ++- .../com/mapswithme/maps/api/MWMResponse.java | 32 ++-- .../mapswithme/maps/api/MapsWithMeApi.java | 34 ++-- .../com/mapswithme/maps/api/MwmRequest.java | 24 +-- readme_to_html.sh | 11 -- sample-app-capitals/AndroidManifest.xml | 4 +- .../res/layout/capitals_list_activity.xml | 2 +- .../res/layout/city_details_activity.xml | 4 +- .../capitals/CapitalsListActivity.java | 18 +- .../src/com/mapswithme/capitals/City.java | 8 +- .../capitals/CityDetailsActivity.java | 20 +- 18 files changed, 153 insertions(+), 331 deletions(-) delete mode 100644 README.html delete mode 100755 readme_to_html.sh diff --git a/README.html b/README.html deleted file mode 100644 index f22c6e3..0000000 --- a/README.html +++ /dev/null @@ -1,174 +0,0 @@ -

maps.me Android API: Getting Started

- -

Introduction

- -

NOTE: We have changed the name of our maps from MapsWithMe to MAPS.ME, but left all references below unchanged.

- -

MapsWithMe Android API (hereinafter referred to as "API Library" or just "library") -provides interface for client application to perform next tasks:

- - - -

Thus, you can provide two way communication between your application and MapsWithMe, -using MapsWithMe to show points of interest (POI) and providing more information in your app.

- -

Please refer to sample application for demo or see -our travel guide apps as an API integration example.

- -

Prerequisites

- -

It is supposed that you are familiar with Android Development, and you have Android SDK and Eclipse (or another IDE of your choice) installed. -You should be familiar with concept of Intents, library projects, and PendingIntents (recommended) as well. -Your application must target at least android sdk version 9.

- -

Integration

- -

First step is to clone repository 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 MapsWithMeApi methods (more details below).

- -

Classes Overview and HOW TO

- -

Core classes you will work with are:

- - - -

Show Points on the Map

- -

The simplest usage:

- -
public class MyPerfectActivity extends Activity {
-...
-
-  void showSomethingOnTheMap(SomeDomainObject arg)
-  {
-    // Do some work, create lat, lon, and name for point
-    final double lat = ...;
-    final double lon = ...;
-    final String name = ...;
-    // Ask MapsWithMe to show the point
-    MapsWithMeApi.showPointOnMap(this, lat, lon, name);
-  }
-...
-
-}
-
- -

For multiple points use MWMPoint class:

- -
void showMultiplePoints(List<SomeDomainObject> list)
-{
-  // Convert objects to MMWPoints
-  final MWMPoint[] points = new MWMPoint[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 MWMPoint(lat, lon, name);
-  }
-  // Show all point on the map, you could also provide some title
-  MapsWithMeApi.showPointsOnMap(this, "Look at my points, my points are amazing!", points);
-}
-
- -

Ask MapsWithMe to Call my App

- -

We support PendingIntent interaction (just like Android native -NotificationManager does). You should specify ID for each point to -distinguish it later, and PentingIntent that MapsWithMe will send back to -your application when user press "More Info" button :

- -
// Here is how to pass points with ID ant PendingIntent
-void showMultiplePointsWithPendingIntent(List<SomeDomainObject> list, PendingIntent pendingIntent)
-{
-  // Convert objects to MWMPoints
-  final MWMPoint[] points = new MWMPoint[list.length];
-  for (int i = 0; i < list.size; i++)
-  {
-    //                                      ||
-    //                                      ||
-    //                                      \/
-    //         Now you should specify string ID for each point
-    points[i] = new MWMPoint(lat, lon, name, id);
-  }
-  // Show all points on the map, you could also provide some title
-  MapsWithMeApi.showPointsOnMap(this, "This title says that user should choose some point", pendingIntent, points);
-}
-
-//Code below shows general way to extract response data
-@Override
-protected void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.activity_main);
-    // Handle intent you specified with PandingIntent
-    // Now it has additional information (MWMPoint).
-    handleIntent(getIntent());
-}
-
-@Override
-protected void onNewIntent(Intent intent)
-{
-  super.onNewIntent(intent);
-  // if defined your activity as "SingleTop"- you should use onNewIntent callback
-  handleIntent(intent);
-}
-
-void handleIntent(Intent intent)
-{
-  // Apply MWMResponse extraction method to intent
-  final MWMResponse mwmResponse = MWMResponse.extractFromIntent(this, intent);
-  // Here is your point that user selected
-  final MWMPoint point = mwmResponse.getPoint();
-  // Now, for instance you can do some work depending on point id
-  processUserInteraction(point.getId());
-}
-
- -

FAQ

- -

How should I detect if user has MapsWithMe installed?

- -

MapsWithMeApi.isMapsWithMeInstalled(Context) will return true if user has Lite or Pro version that supports API call installed.

- -

Which versions of MapsWithMe support API calls?

- -

All versions since 2.4.0 and above support API calls.

- -

What will happen if I call for MapsWithMeApi.showPoint() but MapsWithMe application is not installed?

- -

Nothing serious. API library will show simple dialog with gentle offer to download MapsWithMe. You can see how it looks like below. Please install us

- -

Sample Code and Application

- - - -

Support

- -

If you have any questions please email to api@mapswith.me.

- -
- -

API Code License

- -

Copyright (c) 2014, 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:

- - - -

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.

diff --git a/README.md b/README.md index 9788368..7eaa260 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,38 @@ -# maps.me Android API: Getting Started +# Organic Maps Android API: Getting Started ## Introduction -NOTE: We have changed the name of our maps from MapsWithMe to MAPS.ME, but left all references below unchanged. - -MapsWithMe Android API (hereinafter referred to as *"API Library"* or just *"library"*) +Organic Maps Android API (hereinafter referred to as *"API Library"* or just *"library"*) provides interface for client application to perform next tasks: -* Show one or more points on offline map of [MapsWithMe Application][linkMwm] -* Come back to the client application after selecting specific point on the map, by sending [PendingIntent][linkPIntent] with point data when user asks for more information by pressing "More Info" button in MapsWithMe Application +* Show one or more points on offline map of [Organic Maps app][linkOM] +* Come back to the client application after selecting specific point on the map, by sending [PendingIntent][linkPIntent] with point data when user asks for more information by pressing "More Info" button in Organic Maps app * Map screen branding : your application's icon and name (or custom title) will be placed at the top. -Thus, you can provide **two way communication between your application and MapsWithMe**, -using MapsWithMe to show points of interest (POI) and providing more information in your app. +Thus, you can provide **two way communication between your application and Organic Maps**, +using Organic Maps to show points of interest (POI) and providing more information in your app. -Please refer to [sample application][linkSampleSource] for demo or see -our [travel guide apps][linkTravelGuides] as an API integration example. +Please refer to [sample application][linkSampleSource] for demo. ## Prerequisites -It is supposed that you are familiar with Android Development, and you have Android SDK and Eclipse (or another IDE of your choice) installed. +It is supposed that you are familiar with Android Development. You should be familiar with concept of [Intents][linkIntents], [library projects][linkLibProj], and [PendingIntents][linkPIntent] (recommended) as well. -Your application must target at least *android sdk version 9*. + +Organic Maps works from *Android SDK version 21 (Android 5)* and above ## Integration 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 `MapsWithMeApi` 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 `OrganicMapsApi` methods (more details below). ## Classes Overview and HOW TO Core classes you will work with are: -* [com.mapswithme.maps.api.MapsWithMeApi][linkApiClass] - static class with methods such as `showPointOnMap(Activity, double, double, String)` etc. -* [com.mapswithme.maps.api.MWMPoint][linkPointClass] - model of POI, includes lat, lon, name, id, and style data. -* [com.mapswithme.maps.api.MWMResponse][linkRespClass] - helps you to extract response from MapsWithMe by applying `MWMResponse.extractFromIntent(Intent)` to Intent. Contains MWMPoint data. +* [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. ### Show Points on the Map @@ -49,51 +47,51 @@ The simplest usage: final double lat = ...; final double lon = ...; final String name = ...; - // Ask MapsWithMe to show the point - MapsWithMeApi.showPointOnMap(this, lat, lon, name); + // Ask Organic Maps to show the point + OrganicMapsApi.showPointOnMap(this, lat, lon, name); } ... } -For multiple points use [MWMPoint][linkPointClass] class: +For multiple points use [OMPoint][linkPointClass] class: void showMultiplePoints(List list) { // Convert objects to MMWPoints - final MWMPoint[] points = new MWMPoint[list.length]; + final OMPoint[] points = new OMPoint[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 MWMPoint(lat, lon, name); + points[i] = new OMPoint(lat, lon, name); } // Show all point on the map, you could also provide some title - MapsWithMeApi.showPointsOnMap(this, "Look at my points, my points are amazing!", points); + OrganicMapsApi.showPointsOnMap(this, "Look at my points, my points are amazing!", points); } -### Ask MapsWithMe to Call my App +### Ask Organic Maps to Call my App We support PendingIntent interaction (just like Android native NotificationManager does). You should specify ID for each point to -distinguish it later, and PentingIntent that MapsWithMe will send back to +distinguish it later, and PentingIntent that Organic Maps will send back to 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 MWMPoints - final MWMPoint[] points = new MWMPoint[list.length]; + // Convert objects to OMPoints + final OMPoint[] points = new OMPoint[list.length]; for (int i = 0; i < list.size; i++) { // || // || // \/ // Now you should specify string ID for each point - points[i] = new MWMPoint(lat, lon, name, id); + points[i] = new OMPoint(lat, lon, name, id); } // Show all points on the map, you could also provide some title - MapsWithMeApi.showPointsOnMap(this, "This title says that user should choose some point", pendingIntent, points); + OrganicMapsApi.showPointsOnMap(this, "This title says that user should choose some point", pendingIntent, points); } //Code below shows general way to extract response data @@ -102,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 (MWMPoint). + // Now it has additional information (OMPoint). handleIntent(getIntent()); } @@ -116,24 +114,24 @@ your application when user press "More Info" button : void handleIntent(Intent intent) { - // Apply MWMResponse extraction method to intent - final MWMResponse mwmResponse = MWMResponse.extractFromIntent(this, intent); + // Apply OMResponse extraction method to intent + final OMResponse mwmResponse = OMResponse.extractFromIntent(this, intent); // Here is your point that user selected - final MWMPoint point = mwmResponse.getPoint(); + final OMPoint point = mwmResponse.getPoint(); // Now, for instance you can do some work depending on point id processUserInteraction(point.getId()); } ## FAQ -#### How should I detect if user has MapsWithMe installed? -`MapsWithMeApi.isMapsWithMeInstalled(Context)` will return `true` if user has *Lite* or *Pro* version that supports API call installed. +#### 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. -#### Which versions of MapsWithMe support API calls? +#### 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 `MapsWithMeApi.showPoint()` but MapsWithMe application is not installed? -Nothing serious. API library will show simple dialog with gentle offer to download MapsWithMe. You can see how it looks like below. +#### What will happen if I call for `OrganicMapsApi.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) @@ -154,14 +152,14 @@ Redistribution and use in source and binary forms, with or without modification, 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. -[linkMwm]: https://maps.me/ "MAPS.ME" +[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" [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/MapsWithMeApi.java "MapsWithMeApi.java" -[linkPointClass]: lib/src/com/mapswithme/maps/api/MWMPoint.java "MWMPoint.java" -[linkRespClass]: lib/src/com/mapswithme/maps/api/MWMResponse.java "MWMResponse.java" +[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 diff --git a/lib/AndroidManifest.xml b/lib/AndroidManifest.xml index 1bea627..5c3706a 100644 --- a/lib/AndroidManifest.xml +++ b/lib/AndroidManifest.xml @@ -1,8 +1,8 @@ - \ No newline at end of file + diff --git a/lib/res/layout/dlg_install_mwm.xml b/lib/res/layout/dlg_install_mwm.xml index 1858369..b547a7e 100644 --- a/lib/res/layout/dlg_install_mwm.xml +++ b/lib/res/layout/dlg_install_mwm.xml @@ -1,6 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - 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 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 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 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 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' -- 2.45.3