Compare commits

..

7 commits
master ... r3.5

Author SHA1 Message Date
max-klaus
ce954287ec Fix huawei gradle 2019-12-17 16:04:13 +03:00
max-klaus
5c10ad31f7 Fix #8087 2019-12-15 14:20:03 +03:00
max-klaus
411e87f9e0 Fix tiles sampling on 28+ 2019-12-15 11:33:06 +03:00
max-klaus
1264d9a714 Drop tiles sampling temporarily 2019-12-15 11:32:58 +03:00
max-klaus
6dc629fbc3 Fix sendToken 2019-12-14 18:07:28 +03:00
max-klaus
c061a16dbc Added free Huawei build 2019-12-12 17:43:06 +03:00
max-klaus
61122b2ecf Fix speed cam announce 2019-12-05 19:17:04 +03:00
7010 changed files with 162136 additions and 303919 deletions

View file

@ -1,16 +0,0 @@
---
name: "❓ Support request"
about: Questions and requests for support
---
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑
Please do not file questions or support requests on the GitHub issues tracker.
In case you aren't sure whether to open an issue or not, please send your request to support@osmand.net.
You can get your questions answered using the [Google group](https://groups.google.com/forum/#!forum/osmand) or chat in real-time via our Telegram instances: [English](https://t.me/OsmAndMaps), [German](https://t.me/deosmand), [French](https://t.me/frosmand), [Ukrainian](https://t.me/uaosmand), [Italian](https://t.me/itosmand), [Russian](https://t.me/ruosmand).
Thank you!
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑

View file

@ -1,18 +0,0 @@
---
name: "\U0001F41E Bug report"
about: Report a bug in OsmAnd
---
### Description
### How to reproduce?
### Your Environment
OsmAnd Version:
Android/iOS version:
Device model:
**Maps used (online or offline):**
If you have an issue related to offline maps, tell us the exact name of the map file where the issue occurs and its edition date.

View file

@ -1,72 +0,0 @@
---
name: "\U0001F6A9 Routing report"
about: Report a routing issue in OsmAnd
---
<!--🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅
Oh hi there! 😄
To expedite issue processing please search open and closed issues before submitting a new one.
Existing issues often contain information about workarounds, resolution, or progress updates.
GitHub is our main development tool for our developers. There are hundreds of requests a month and there are relatively few developers.
So by opening an issue, please know that your issue will be sent out to all developers and acknowledge that it could be closed without explanation or with just a brief message.
Comments on the closed issues are also sent to all developers, so you will definitely will be heard.
However, there is no guarantee that a developer will pick up the issue to work on it.
Please be sure to read our [FAQ](https://osmand.net/help-online) before creating an issue here.
The best way to get help about an OsmAnd issue is to create a valid and detailed issue.
Please give us the following information so that we can try to **reproduce** your issue:
🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅-->
# 🐞 routing report
### Routing engine
<!-- Which routing provider was used? (please tick the proper box [x]) -->
- [ ] OsmAnd's in-app offline routing
- [ ] Any online routing provider (YOURS, OpenRouteService, OSRM, etc.)
### Routing Profile
<!-- What routing profile is chosen in the OsmAnd app? (car, bike, pedestrian, fastest or shortest, etc.) -->
### Start and end points
<!-- Please specify (as exactly as possible) the start and endpoint of your route by telling us the city and street name so that we can find it via the in-app address search easily.
Also, a permalink from [openstreetmap.org](https://www.openstreetmap.org/) can be helpful. -->
### Actual and expected routes
<!-- Tell us your expected routing and how OsmAnd routes, or add screenshots here. -->
### Is this a regression?
<!-- Did this behavior use to work in the previous version? -->
<!-- ✍️--> Yes, the previous version in which this bug was not present was: ....
## 🌍 Your Environment
**OsmAnd Version:**
<pre><code>
<!-- paste version below -->
<!-- ✍️-->
</code></pre>
**Device and Android/iOS version:**
**Maps used (online or offline):**
<!-- Please tick the correct box [x] (or both) -->
- [ ] Offline maps offered within the OsmAnd app for download.
<!-- If you have an issue related to offline maps, tell us the exact name of the map file where the issue occurs and its edition date. -->
- [ ] Online (tile / raster) maps <!-- Please name it -->
**Anything else relevant?**

View file

@ -1,34 +0,0 @@
---
name: "\U0001F680 Feature request"
about: Suggest a feature for OsmAnd
---
<!--🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅
Oh hi there! 😄
To expedite issue processing please search open and closed issues before submitting a new one.
Existing issues often contain information about workarounds, resolution, or progress updates.
GitHub is our main development tool for our developers. There are hundreds of requests a month and there are relatively few developers.
So by opening an issue, please know that your issue will be sent out to all developers and acknowledge that it could be closed without explanation or with just a brief message.
Comments on the closed issues are also sent to all developers, so you definitely will be heard.
However, there is no guarantee that a developer will pick up the issue to work on it.
Please be sure to read our [FAQ](https://osmand.net/help-online) before creating an issue here.
🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅-->
# 🚀 feature request
### Description
<!-- ✍️ A clear and concise description of the feature... -->
### Describe the solution you'd like
<!-- ✍️--> If you have a solution in mind, please describe it.
### Describe alternatives you've considered
<!-- ✍️--> Have you considered any alternative solutions or workarounds?

View file

@ -1,4 +0,0 @@
contact_links:
- name: Outdated FAQ
url: https://groups.google.com/forum/#!forum/osmand
about: Fix wrong or outdated FAQ on the forum instead

View file

@ -1,10 +0,0 @@
name: "Validate Gradle Wrapper"
on: [push, pull_request]
jobs:
validation:
name: "Validation"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: gradle/wrapper-validation-action@v1

7
.gitignore vendored
View file

@ -16,14 +16,9 @@ OsmAndCore_*.aar
*.iml
.settings
.idea
**/.project
**/.classpath
.project
out/
# Huawei
agconnect-services.json
OsmAndHms.jks
# Android Studio
/.idea
*.iml

View file

@ -1,7 +1,7 @@
### Credits to all major contributors / developers:
Major contributors / developers listed here https://github.com/osmandapp/osmandapp.github.io/blob/master/website/help/about.html#L8
### Credits to all major contributors/developers:
Major contributors /developers listed here https://github.com/osmandapp/osmandapp.github.io/blob/master/website/help/about.html#L8
### Other Pull requests
Copyright © All authors of translations and pull requests can be found in the commit history:
Copyright © All authors of translations and pull requests could be found in commits history:
- Translations are under special “contributor” name weblate
- Pull requests have two committers: first is original contributor, and second is project maintainer
- Pull requests have two committers, first is original contributor and second is project maintainer

26
ISSUE_TEMPLATE.md Normal file
View file

@ -0,0 +1,26 @@
Before entering an issue, please read the information below.
```GitHub is a main development tool for developers. There are hundreds requests a month and there are only few developers. So by opening an issue, please know that your issue will be sent out to all developers and acknowledge that it could be closed without explanation or with a brief message. Comments on the closed issues are also sent to all developers, so you will definitely will be heard. However, there is no guarantee that a developer will pick up the issue to work on it.```
In case you are not sure to open issue or not, please send your request to support support@osmand.net. For **general questions** about OsmAnd, please use the [Google group](https://groups.google.com/forum/#!forum/osmand).
Please be sure to have read our [FAQ](http://osmand.net/help-online) before creating an issue here. (Also, tell us in Google Groups when the FAQ is wrong or outdated.)
The best way to get help about an OsmAnd issue is to create a valid and detailed issue content.
Please give us the following information so that we can try to **reproduce** your issue:
What version of OsmAnd are you using, on what device and Android/iOS version?
Do you use the offline maps offered within the OsmAnd app for download, or online (tile / raster) maps?
If you have an issue related to offline maps, tell us the exact name of the map file where the issue occurs, and its edition date.
__*In case of wrong routing:*__
Tell us whether you have used OsmAnd's in-app offline routing, or any online routing provider like YOURS, OpenRouteService or OSRM.
What routing profile is chosen in OsmAnd app? (car, bike, pedestrian, fastest or shortest)
Please specify as exactly as possible the start and end point of your route by telling us city name and street name so that we can find it via in-app address search easily. Also, a permalink from openstreetmap.org can be helpful.
Tell us your expected routing, and how OsmAnd routes, or add screenshots here.

70
LICENSE
View file

@ -1,11 +1,11 @@
OsmAnd OSM Automated Navigation Directions navigation software based on OpenStreetMap.
Copyright © 20102020 OsmAnd BV (Amstelveen, Netherlands - KvK 62066714, BTW 854627704B01).
Copyright © 20102018 OsmAnd BV (Amstelveen, Netherlands - KvK 62066714, BTW 854627704B01).
The code in this repository is covered by *GPLv3* (for code) and the artwork is covered by [CC-BY-NC-ND 4.0](https://creativecommons.org/licenses/by-nc-nd/4.0/) (for artwork), except for some third-party libraries and resources.
ATTENTION: Please be aware that some artwork uses a proprietary license.
The code in this repository is covered by *GPLv3* (for code) and the artwork is covered by [ CC-BY-NC-ND 4.0 ](https://creativecommons.org/licenses/by-nc-nd/4.0/) (for artwork), except some 3rd party libs and resources.
ATTENTION: please be aware that some artwork has proprietary license.
Main AUTHORS (more detailed list in AUTHORS.md):
Main AUTHORS (more detailed list in AUTHORS):
Victor Shcherb all parts of the project, originator
Alexey Pelykh rendering and core parts
Hardy Mueller main parts of the project, mostly rendering, UI interaction design
@ -30,33 +30,33 @@
* Source code in main repositories is covered by GPLv3 (license exceptions below):
- https://github.com/osmandapp/Osmand/tree/master/OsmAnd
- https://github.com/osmandapp/Osmand/tree/master/OsmAnd-java
- https://github.com/osmandapp/OsmAnd-core/tree/legacy_core
- https://github.com/osmandapp/OsmAnd-core
- https://github.com/osmandapp/Osmand-core/tree/legacy_core
- https://github.com/osmandapp/Osmand-core/
- https://github.com/osmandapp/OsmAnd-misc
- https://github.com/osmandapp/OsmAnd-tools
- https://github.com/osmandapp/OsmAnd-resources
* UI Design and UX work, such as layout and icons, are covered by [CC-BY-NC-ND 4.0](https://creativecommons.org/licenses/by-nc-nd/4.0/)
* UI Design and UX work, such as layout, icons is covered by CC-BY-NC-ND
- https://github.com/osmandapp/Osmand/tree/master/OsmAnd/res and others
Restriction to UI/UX CC-BY-NC-ND:
* Publishing applications using the OsmAnd UI/UX code to Google Play, Amazon Market, or Apple Store must be done with written permission.*
* Publishing applications using the OsmAnd UI/UX code to Google Play, Amazon Market or Apple Store must be done with written permission*
* Map icons are taken from sjjb and some are drawn and distributed under Public Domain (except icons8)
- https://github.com/osmandapp/OsmAnd-resources/tree/master/icons/svg
- some icons are from http://osm-icons.org/wiki/Icons (CC-0 by Markus59, CC BY-SA 2.0)
* Integration with Qt library in (https://github.com/osmandapp/OsmAnd-core) - dynamic linking
- LGPL (https://www.qt.io/terms-conditions/)
* Integration with Qt library in (https://github.com/osmandapp/Osmand-core/) - dynamic linking
- LGPL (http://www.qt.io/qt-licensing-terms/)
* Map icons and their derived primitives are covered by a proprietary license:
* Map icons and their derived primitives are covered by proprietary license:
- © icons8.com (https://github.com/osmandapp/OsmAnd-resources/tree/master/icons/svg/icons8)
* Generated voice files from TTS files are covered by a proprietary license:
* Generated voice files from TTS files are covered by proprietary license:
- Voice files (https://github.com/osmandapp/OsmAnd-resources/tree/master/voice)
* Fonts (https://github.com/osmandapp/OsmAnd-resources/tree/master/rendering_styles/fonts)
- Google Fonts (Apache License 2.0)
- Google Fonts (Apache License 2)
* Map icons (Mapnik):
- Open-SVG-Map-Icons - Public Domain
@ -65,27 +65,49 @@
- SherlockBar - Apache License - https://github.com/osmandapp/Osmand/tree/master/SherlockBar (https://github.com/JakeWharton/ActionBarSherlock/blob/master/LICENSE.txt)
* Patched libraries:
- Protobuf - New BSD License (patches - https://github.com/osmandapp/Osmand/tree/master/OsmAnd-java/src/main/java/com/google/protobuf, https://github.com/osmandapp/OsmAnd-core/tree/legacy_core/externals/protobuf)
- Protobuf - New BSD License (patches - https://github.com/osmandapp/Osmand/tree/master/OsmAnd-java/protobuf-src, https://github.com/osmandapp/OsmAnd-core/tree/legacy_core/externals/protobuf)
- Expat - (https://github.com/osmandapp/OsmAnd-core/tree/legacy_core/externals/expat)
- Freetype - (https://github.com/osmandapp/OsmAnd-core/tree/legacy_core/externals/freetype)
- Giflib - (https://github.com/osmandapp/OsmAnd-core/tree/legacy_core/externals/giflib)
- Jpeg - (https://github.com/osmandapp/OsmAnd-core/tree/legacy_core/externals/jpeg)
- Libpng - (https://github.com/osmandapp/OsmAnd-core/tree/legacy_core/externals/libpng)
- Skia - (https://github.com/osmandapp/OsmAnd-core/tree/legacy_core/externals/skia)
- android-openmap-framework - (https://github.com/osmandapp/Osmand/tree/master/OsmAnd-java/src/main/java/com/jwetherell/openmap/common)
- mapbox-vector-tile - (https://github.com/osmandapp/Osmand/tree/master/OsmAnd-java/src/main/java/com/wdtinc/mapbox_vector_tile)
- ZLib - (https://github.com/osmandapp/OsmAnd-core/tree/legacy_core/externals/zlib)
* 3rd party libraries present in the libs folder (https://github.com/osmandapp/Osmand/tree/master/OsmAnd-java/libs):
- bzip2-20090327.jar Bzip2 - Apache License
- commons-logging-1.1.1.jar - Apache License
- gnu-trove-osmand.jar GNU trove - LGPL
- icu4j-49_1_patched.jar - ICU license (https://home.unicode.org/basic-info/projects/#/icu/icu/trunk/license.html)
- icu4j-49_1.jar - ICU license (http://source.icu-project.org/repos/icu/icu/trunk/license.html)
- json-20090211.jar - BSD alike (http://www.json.org/license.html)
- junidecode-0.1.jar - BSD-4-Clause-UC (http://sourceforge.net/projects/junidecode/)
- kxml2-2.3.0.jar - BSD license (http://www.kxml.org/)
- tuprolog.jar - LGPL (http://apice.unibo.it/xwiki/bin/view/Tuprolog/)
- OpenMap framework - Apache License (https://code.google.com/p/android-openmap-framework/)
* Pull-requests and translations:
- All pull requests are accepted under MIT License (most honorable contributors are mentioned in AUTHORS list).
- All pull requests are accepted under MIT License (most honorable contributors are mentioned in AUTHORS list)
* Libraries not used in final product (https://github.com/osmandapp/OsmAnd-tools/tree/master/OsmAndMapCreator/libi)
- Ant libraries - (tools) https://github.com/osmandapp/Osmand/tree/master/OsmAnd/ant-lib
- jleveldb-v01.jar
- jsch-20120101.jar
- junit-4.10.jar
- mysql-connector-java-5.1.18-bin.jar
- sqlite-jdbc-3.7.6.3-20110609.081603-3.jar
- h2-latest.jar
* Special tools for new rendering (GPLv3)
- https://github.com/osmandapp/OsmAnd-tools
- https://github.com/osmandapp/OsmAnd-tools/tree/master/obf-inspector
- https://github.com/osmandapp/OsmAnd-tools/tree/master/obf-verifier
- https://github.com/osmandapp/OsmAnd-tools/tree/master/route-tester
* OSM data
- Extracts - https://github.com/osmandapp/OsmAnd-misc/tree/master/osm-planet/osm-data
* OSM data 2014
- Extracts - https://github.com/osmandapp/OsmAnd-misc/blob/master/osm-planet/osm-data/
* Data files
- Country boundaries - https://github.com/osmandapp/OsmAnd-misc/tree/master/osm-planet/polygons © by Geofabrik - data free to use
- Country boundaries - https://github.com/osmandapp/OsmAnd-misc/tree/master/osm-planet/geo-polygons © by Geofabrik - data free to use
- Country boundaries - https://github.com/osmandapp/OsmAnd-misc/tree/master/osm-planet/gislab-polygons © by http://be.gis-lab.info - data free to use
* Subway icons
- Moscow: Art Lebedev Studio (http://www.artlebedev.ru/everything/metro/logo/) [Public domain], undefined
@ -97,7 +119,7 @@
- Kazan: «Kazan-metro-Logo» (Россиянин) - own work. Under Public domain Commons license from the site - https://commons.wikimedia.org/wiki/File:Kazan-metro-Logo.svg#/media/File:Kazan-metro-Logo.svg
- Tbilisi: «Metro Tbilisi logo» (Carnby) - own work. Under CC BY-SA 3.0 license from site - https://commons.wikimedia.org/wiki/File:Metro_Tbilisi_logo.svg#/media/File:Metro_Tbilisi_logo.svg
- Minsk: «Minsk metro logo» (Skip405) - own work. Under Public domain Commons license from the site - https://commons.wikimedia.org/wiki/File:Minsk_metro_logo.svg#/media/File:Minsk_metro_logo.svg
- Nizhny Novgorod: «NNMetro» (AlexTref871) - own work. This vector image includes elements borrowed from another image: Coat of arms of Nizhny Novgorod Region.svg.. Under Public domain Commons licensefrom the site - https://commons.wikimedia.org/wiki/File:NNMetro.svg#/media/File:NNMetro.svg
- Nizhny Novgorod: «NNMetro» (AlexTref871) - own work. This vector image includes elements borrowed from another image:  Coat of arms of Nizhny Novgorod Region.svg.. Under Public domain Commons licensefrom the site - https://commons.wikimedia.org/wiki/File:NNMetro.svg#/media/File:NNMetro.svg
- Novosibirsk: «Logo-Nsk-Metro» (AlexTref871) - own work. Under Public domain Commons license from the site - https://commons.wikimedia.org/wiki/File:Logo-Nsk-Metro.svg#/media/File:Logo-Nsk-Metro.svg
- Yekaterinburg: «Ekt-metro-logo-01» (AlexTref871) - own work. Under CC BY-SA 4.0 license from site - https://commons.wikimedia.org/wiki/File:Ekt-metro-logo-01.svg#/media/File:Ekt-metro-logo-01.svg
- New York: «MTA New York City Subway logo» (Metropolitan Transportation Authority) - http://mta.info/. Under Public domain Commons license from the site - https://commons.wikimedia.org/wiki/File:MTA_New_York_City_Subway_logo.svg#/media/File:MTA_New_York_City_Subway_logo.svg
@ -130,7 +152,7 @@
- Los Angeles: "Lametro" by Los Angeles County Metropolitan Transportation Authority. Original uploader was Cheeselouise at en.wikipedia - Metro materials at http://www.metro.net/riding_metro/pocket_guide_cambodian_printers.pdf. Licensed under Public Domain via Commons - https://commons.wikimedia.org/wiki/File:Lametro.svg#/media/File:Lametro.svg
* Depth maps
- The GEBCO_2020 Grid, www.gebco.net
- The GEBCO_2014 Grid, version 20150318, www.gebco.net
- U.S. Bureau of Ocean Energy Management (24 may 2017,12m per pixel)
- South_Padre_Island_DEM_4133: Grothe, P.G., L.A. Taylor, B.W. Eakins, K.S. Carignan, D.Z. Friday, and M. Love, 2012. Digital Elevation Models of South Padre Island, Texas: Procedures, Data Sources and Analysis, NOAA National Geophysical Data Center technical report, Boulder, CO, 15 pp.
- Corpus_Christi_DEM_1035: Taylor, L.A., B.W. Eakins, K.S. Carignan, R.R. Warnken, T. Sazonova, and D.C. Schoolcraft, 2008. Digital Elevation Model of Corpus Christi, Texas: Procedures, Data Sources and Analysis, NOAA Technical Memorandum NESDIS NGDC-11, National Geophysical Data Center, Boulder, CO, 19 pp.

View file

@ -1,11 +1,12 @@
apply plugin: 'com.android.library'
apply plugin: 'ivy-publish'
apply plugin: 'com.github.dcendents.android-maven'
group = 'com.github.osmandapp.osmand'
version = '2.0.0'
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
minSdkVersion 14
@ -25,36 +26,9 @@ android {
}
}
afterEvaluate {
publishing {
repositories {
ivy {
url = System.getenv("OSMAND_BINARIES_IVY_ROOT") ?: "./"
}
}
publications {
release(IvyPublication) {
// Applies the component for the release build variant.
from components.release
organisation = 'net.osmand'
module = 'android-aidl-lib'
revision = 'master-snapshot'
}
debug(IvyPublication) {
// Applies the component for the release build variant.
from components.debug
organisation = 'net.osmand'
module = 'android-aidl-lib'
revision = 'master-snapshot'
}
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:support-annotations:28.0.0'
implementation 'com.android.support:support-annotations:27.1.1'
}
task sourcesJar(type: Jar) {
@ -64,4 +38,4 @@ task sourcesJar(type: Jar) {
artifacts {
archives sourcesJar
}
}

View file

@ -51,9 +51,4 @@ interface IOsmAndAidlCallback {
* Callback for {@link IOsmAndAidlInterface} registerForVoiceRouterMessages() method.
*/
void onVoiceRouterNotify(in OnVoiceNavigationParams params);
/**
* Callback for {@link IOsmAndAidlInterface} registerForKeyEvents() method.
*/
void onKeyEvent(in KeyEvent params);
}

View file

@ -2,7 +2,6 @@ package net.osmand.aidlapi;
import net.osmand.aidlapi.map.ALatLon;
import net.osmand.aidlapi.map.SetMapLocationParams;
import net.osmand.aidlapi.map.SetLocationParams;
import net.osmand.aidlapi.favorite.group.AFavoriteGroup;
import net.osmand.aidlapi.favorite.group.AddFavoriteGroupParams;
@ -21,8 +20,6 @@ import net.osmand.aidlapi.mapmarker.UpdateMapMarkerParams;
import net.osmand.aidlapi.calculateroute.CalculateRouteParams;
import net.osmand.aidlapi.profile.ExportProfileParams;
import net.osmand.aidlapi.gpx.ImportGpxParams;
import net.osmand.aidlapi.gpx.ShowGpxParams;
import net.osmand.aidlapi.gpx.StartGpxRecordingParams;
@ -76,11 +73,6 @@ import net.osmand.aidlapi.customization.SetWidgetsParams;
import net.osmand.aidlapi.customization.OsmandSettingsParams;
import net.osmand.aidlapi.customization.OsmandSettingsInfoParams;
import net.osmand.aidlapi.customization.CustomizationInfoParams;
import net.osmand.aidlapi.customization.ProfileSettingsParams;
import net.osmand.aidlapi.customization.MapMarginsParams;
import net.osmand.aidlapi.customization.CustomPluginParams;
import net.osmand.aidlapi.customization.SelectProfileParams;
import net.osmand.aidlapi.customization.AProfile;
import net.osmand.aidlapi.gpx.AGpxFile;
import net.osmand.aidlapi.gpx.AGpxFileDetails;
@ -93,9 +85,6 @@ import net.osmand.aidlapi.copyfile.CopyFileParams;
import net.osmand.aidlapi.navigation.ANavigationUpdateParams;
import net.osmand.aidlapi.navigation.ANavigationVoiceRouterMessageParams;
import net.osmand.aidlapi.navigation.ABlockedRoad;
import net.osmand.aidlapi.navigation.AddBlockedRoadParams;
import net.osmand.aidlapi.navigation.RemoveBlockedRoadParams;
import net.osmand.aidlapi.contextmenu.ContextMenuButtonsParams;
import net.osmand.aidlapi.contextmenu.UpdateContextMenuButtonsParams;
@ -103,17 +92,6 @@ import net.osmand.aidlapi.contextmenu.RemoveContextMenuButtonsParams;
import net.osmand.aidlapi.mapmarker.RemoveMapMarkersParams;
import net.osmand.aidlapi.quickaction.QuickActionParams;
import net.osmand.aidlapi.quickaction.QuickActionInfoParams;
import net.osmand.aidlapi.lock.SetLockStateParams;
import net.osmand.aidlapi.events.AKeyEventsParams;
import net.osmand.aidlapi.info.AppInfoParams;
import net.osmand.aidlapi.profile.ExportProfileParams;
// NOTE: Add new methods at the end of file!!!
interface IOsmAndAidlInterface {
@ -838,10 +816,10 @@ interface IOsmAndAidlInterface {
*
*/
boolean setCustomization(in CustomizationInfoParams params);
/**
* Method to register for Voice Router voice messages during navigation. Notifies user about voice messages.
*
*
* @params subscribeToUpdates (boolean) - boolean flag to subscribe or unsubscribe from messages
* @params callbackId (long) - id of callback, needed to unsubscribe from messages
* @params callback (IOsmAndAidlCallback) - callback to notify user on voice message
@ -853,55 +831,4 @@ interface IOsmAndAidlInterface {
* Empty class of params
*/
boolean removeAllActiveMapMarkers(in RemoveMapMarkersParams params);
boolean importProfile(in ProfileSettingsParams params);
boolean executeQuickAction(in QuickActionParams params);
boolean getQuickActionsInfo(out List<QuickActionInfoParams> quickActions);
/**
* Toggle Lock/Unlock screen.
*/
boolean setLockState(in SetLockStateParams params);
/**
* Method to register for key events.
*
* @params subscribeToUpdates (boolean) - boolean flag to subscribe or unsubscribe from key events
* @params callbackId (long) - id of callback, needed to unsubscribe key events
* @params callback (IOsmAndAidlCallback) - callback to notify user on key event
* @params keyEventList (List<Integer>) - list of requested key events
*/
long registerForKeyEvents(in AKeyEventsParams params, IOsmAndAidlCallback callback);
AppInfoParams getAppInfo();
boolean setMapMargins(in MapMarginsParams params);
boolean exportProfile(in ExportProfileParams params);
/**
* Is any fragment open.
*/
boolean isFragmentOpen();
/**
* Is contect menu open.
*/
boolean isMenuOpen();
int getPluginVersion(in CustomPluginParams params);
boolean selectProfile(in SelectProfileParams params);
boolean getProfiles(out List<AProfile> profiles);
boolean getBlockedRoads(out List<ABlockedRoad> blockedRoads);
boolean addRoadBlock(in AddBlockedRoadParams params);
boolean removeRoadBlock(in RemoveBlockedRoadParams params);
boolean setLocation(in SetLocationParams params);
}

View file

@ -4,14 +4,11 @@ public interface OsmAndCustomizationConstants {
// Navigation Drawer:
String DRAWER_ITEM_ID_SCHEME = "drawer.action.";
String DRAWER_SWITCH_PROFILE_ID = DRAWER_ITEM_ID_SCHEME + "switch_profile";
String DRAWER_CONFIGURE_PROFILE_ID = DRAWER_ITEM_ID_SCHEME + "configure_profile";
String DRAWER_DASHBOARD_ID = DRAWER_ITEM_ID_SCHEME + "dashboard";
String DRAWER_MAP_MARKERS_ID = DRAWER_ITEM_ID_SCHEME + "map_markers";
String DRAWER_MY_PLACES_ID = DRAWER_ITEM_ID_SCHEME + "my_places";
String DRAWER_SEARCH_ID = DRAWER_ITEM_ID_SCHEME + "search";
String DRAWER_DIRECTIONS_ID = DRAWER_ITEM_ID_SCHEME + "directions";
String DRAWER_TRIP_RECORDING_ID = DRAWER_ITEM_ID_SCHEME + "trip_recording";
String DRAWER_CONFIGURE_MAP_ID = DRAWER_ITEM_ID_SCHEME + "configure_map";
String DRAWER_DOWNLOAD_MAPS_ID = DRAWER_ITEM_ID_SCHEME + "download_maps";
String DRAWER_OSMAND_LIVE_ID = DRAWER_ITEM_ID_SCHEME + "osmand_live";
@ -38,7 +35,6 @@ public interface OsmAndCustomizationConstants {
String POI_OVERLAY_LABELS_ID = SHOW_ITEMS_ID_SCHEME + "poi_overlay_labels";
String TRANSPORT_ID = SHOW_ITEMS_ID_SCHEME + "transport";
String GPX_FILES_ID = SHOW_ITEMS_ID_SCHEME + "gpx_files";
String WIKIPEDIA_ID = SHOW_ITEMS_ID_SCHEME + "wikipedia";
String MAP_MARKERS_ID = SHOW_ITEMS_ID_SCHEME + "map_markers";
String MAP_SOURCE_ID = SHOW_ITEMS_ID_SCHEME + "map_source";
String RECORDING_LAYER = SHOW_ITEMS_ID_SCHEME + "recording_layer";
@ -48,7 +44,7 @@ public interface OsmAndCustomizationConstants {
String OVERLAY_MAP = SHOW_ITEMS_ID_SCHEME + "overlay_map";
String UNDERLAY_MAP = SHOW_ITEMS_ID_SCHEME + "underlay_map";
String CONTOUR_LINES = SHOW_ITEMS_ID_SCHEME + "contour_lines";
String TERRAIN = SHOW_ITEMS_ID_SCHEME + "terrain";
String HILLSHADE_LAYER = SHOW_ITEMS_ID_SCHEME + "hillshade_layer";
String MAP_RENDERING_CATEGORY_ID = RENDERING_ITEMS_ID_SCHEME + "category";
String MAP_STYLE_ID = RENDERING_ITEMS_ID_SCHEME + "map_style";
@ -57,6 +53,7 @@ public interface OsmAndCustomizationConstants {
String ROAD_STYLE_ID = RENDERING_ITEMS_ID_SCHEME + "road_style";
String TEXT_SIZE_ID = RENDERING_ITEMS_ID_SCHEME + "text_size";
String MAP_LANGUAGE_ID = RENDERING_ITEMS_ID_SCHEME + "map_language";
String TRANSPORT_RENDERING_ID = RENDERING_ITEMS_ID_SCHEME + "transport";
String DETAILS_ID = RENDERING_ITEMS_ID_SCHEME + "details";
String HIDE_ID = RENDERING_ITEMS_ID_SCHEME + "hide";
String ROUTES_ID = RENDERING_ITEMS_ID_SCHEME + "routes";
@ -74,10 +71,6 @@ public interface OsmAndCustomizationConstants {
//Map Context Menu Actions:
String MAP_CONTEXT_MENU_ACTIONS = "point.actions.";
String MAP_CONTEXT_MENU_ADD_ID = MAP_CONTEXT_MENU_ACTIONS + "add";
String MAP_CONTEXT_MENU_MARKER_ID = MAP_CONTEXT_MENU_ACTIONS + "marker";
String MAP_CONTEXT_MENU_SHARE_ID = MAP_CONTEXT_MENU_ACTIONS + "share";
String MAP_CONTEXT_MENU_MORE_ID = MAP_CONTEXT_MENU_ACTIONS + "more";
String MAP_CONTEXT_MENU_DIRECTIONS_FROM_ID = MAP_CONTEXT_MENU_ACTIONS + "directions_from";
String MAP_CONTEXT_MENU_SEARCH_NEARBY = MAP_CONTEXT_MENU_ACTIONS + "search_nearby";
String MAP_CONTEXT_MENU_CHANGE_MARKER_POSITION = MAP_CONTEXT_MENU_ACTIONS + "change_m_position";
@ -93,9 +86,6 @@ public interface OsmAndCustomizationConstants {
String MAP_CONTEXT_MENU_CREATE_POI = MAP_CONTEXT_MENU_ACTIONS + "create_poi";
String MAP_CONTEXT_MENU_MODIFY_OSM_NOTE = MAP_CONTEXT_MENU_ACTIONS + "modify_osm_note";
String MAP_CONTEXT_MENU_OPEN_OSM_NOTE = MAP_CONTEXT_MENU_ACTIONS + "open_osm_note";
String MAP_CONTEXT_MENU_AUDIO_NOTE = MAP_CONTEXT_MENU_ACTIONS + "audio_note";
String MAP_CONTEXT_MENU_VIDEO_NOTE = MAP_CONTEXT_MENU_ACTIONS + "video_note";
String MAP_CONTEXT_MENU_PHOTO_NOTE = MAP_CONTEXT_MENU_ACTIONS + "photo_note";
//Plug-in's IDs:
String PLUGIN_OSMAND_MONITOR = "osmand.monitoring";

View file

@ -2,28 +2,18 @@ package net.osmand.aidlapi.copyfile;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.NonNull;
import android.support.annotation.NonNull;
import net.osmand.aidlapi.AidlParams;
public class CopyFileParams extends AidlParams {
public static final String DESTINATION_DIR_KEY = "destinationDir";
public static final String FILE_NAME_KEY = "fileName";
public static final String FILE_PART_DATA_KEY = "filePartData";
public static final String START_TIME_KEY = "startTime";
public static final String DONE_KEY = "done";
private String destinationDir;
private String fileName;
private byte[] filePartData;
private long startTime;
private boolean done;
public CopyFileParams(@NonNull String destinationDir, @NonNull String fileName, @NonNull byte[] filePartData,
long startTime, boolean done) {
this.destinationDir = destinationDir;
public CopyFileParams(@NonNull String fileName, @NonNull byte[] filePartData, long startTime, boolean done) {
this.fileName = fileName;
this.filePartData = filePartData;
this.startTime = startTime;
@ -46,10 +36,6 @@ public class CopyFileParams extends AidlParams {
}
};
public String getDestinationDir() {
return destinationDir;
}
public String getFileName() {
return fileName;
}
@ -68,26 +54,23 @@ public class CopyFileParams extends AidlParams {
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString(DESTINATION_DIR_KEY, destinationDir);
bundle.putString(FILE_NAME_KEY, fileName);
bundle.putByteArray(FILE_PART_DATA_KEY, filePartData);
bundle.putLong(START_TIME_KEY, startTime);
bundle.putBoolean(DONE_KEY, done);
bundle.putString("fileName", fileName);
bundle.putByteArray("filePartData", filePartData);
bundle.putLong("startTime", startTime);
bundle.putBoolean("done", done);
}
@Override
protected void readFromBundle(Bundle bundle) {
destinationDir = bundle.getString(DESTINATION_DIR_KEY);
fileName = bundle.getString(FILE_NAME_KEY);
filePartData = bundle.getByteArray(FILE_PART_DATA_KEY);
startTime = bundle.getLong(START_TIME_KEY);
done = bundle.getBoolean(DONE_KEY);
fileName = bundle.getString("fileName");
filePartData = bundle.getByteArray("filePartData");
startTime = bundle.getLong("startTime");
done = bundle.getBoolean("done");
}
@Override
public String toString() {
return "CopyFileParams {" +
" destinationDir=" + destinationDir +
" fileName=" + fileName +
", filePartData size=" + filePartData.length +
", startTime=" + startTime +

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.customization;
parcelable AProfile;

View file

@ -1,129 +0,0 @@
package net.osmand.aidlapi.customization;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class AProfile extends AidlParams {
public static final String PROFILE_ID_KEY = "profile_id";
public static final String USER_PROFILE_NAME_KEY = "user_profile_name";
public static final String PARENT_KEY = "parent";
public static final String ICON_NAME_KEY = "icon_name";
public static final String ICON_COLOR_KEY = "icon_color";
public static final String ROUTING_PROFILE_KEY = "routing_profile";
public static final String ROUTE_SERVICE_KEY = "route_service";
public static final String LOC_ICON_KEY = "loc_icon";
public static final String NAV_ICON_KEY = "nav_icon";
public static final String ORDER_KEY = "order";
private String appModeKey;
private String userProfileName;
private String parent;
private String iconName;
private String iconColor;
private String routingProfile;
private String routeService;
private String locIcon;
private String navIcon;
private int order = -1;
public AProfile(String appModeKey, String userProfileName, String parent, String iconName, String iconColor,
String routingProfile, String routeService, String locIcon, String navIcon, int order) {
this.appModeKey = appModeKey;
this.userProfileName = userProfileName;
this.parent = parent;
this.iconName = iconName;
this.iconColor = iconColor;
this.routingProfile = routingProfile;
this.routeService = routeService;
this.locIcon = locIcon;
this.navIcon = navIcon;
this.order = order;
}
public AProfile(Parcel in) {
readFromParcel(in);
}
public static final Creator<AProfile> CREATOR = new Creator<AProfile>() {
@Override
public AProfile createFromParcel(Parcel in) {
return new AProfile(in);
}
@Override
public AProfile[] newArray(int size) {
return new AProfile[size];
}
};
public String getStringKey() {
return appModeKey;
}
public String getUserProfileName() {
return userProfileName;
}
public String getParent() {
return parent;
}
public String getIconName() {
return iconName;
}
public String getIconColor() {
return iconColor;
}
public String getRoutingProfile() {
return routingProfile;
}
public String getRouteService() {
return routeService;
}
public String getLocIcon() {
return locIcon;
}
public String getNavIcon() {
return navIcon;
}
public int getOrder() {
return order;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString(PROFILE_ID_KEY, appModeKey);
bundle.putString(USER_PROFILE_NAME_KEY, userProfileName);
bundle.putString(PARENT_KEY, parent);
bundle.putString(ICON_NAME_KEY, iconName);
bundle.putString(ICON_COLOR_KEY, iconColor);
bundle.putString(ROUTING_PROFILE_KEY, routingProfile);
bundle.putString(ROUTE_SERVICE_KEY, routeService);
bundle.putString(LOC_ICON_KEY, locIcon);
bundle.putString(NAV_ICON_KEY, navIcon);
bundle.putInt(ORDER_KEY, order);
}
@Override
protected void readFromBundle(Bundle bundle) {
appModeKey = bundle.getString(PROFILE_ID_KEY);
userProfileName = bundle.getString(USER_PROFILE_NAME_KEY);
parent = bundle.getString(PARENT_KEY);
iconName = bundle.getString(ICON_NAME_KEY);
iconColor = bundle.getString(ICON_COLOR_KEY);
routingProfile = bundle.getString(ROUTING_PROFILE_KEY);
routeService = bundle.getString(ROUTE_SERVICE_KEY);
locIcon = bundle.getString(LOC_ICON_KEY);
navIcon = bundle.getString(NAV_ICON_KEY);
order = bundle.getInt(ORDER_KEY);
}
}

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.customization;
parcelable CustomPluginParams;

View file

@ -1,48 +0,0 @@
package net.osmand.aidlapi.customization;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class CustomPluginParams extends AidlParams {
public static final String PLUGIN_ID_KEY = "plugin_id";
private String pluginId;
public CustomPluginParams(String pluginId) {
this.pluginId = pluginId;
}
public CustomPluginParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<CustomPluginParams> CREATOR = new Creator<CustomPluginParams>() {
@Override
public CustomPluginParams createFromParcel(Parcel in) {
return new CustomPluginParams(in);
}
@Override
public CustomPluginParams[] newArray(int size) {
return new CustomPluginParams[size];
}
};
public String getPluginId() {
return pluginId;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString(PLUGIN_ID_KEY, pluginId);
}
@Override
protected void readFromBundle(Bundle bundle) {
pluginId = bundle.getString(PLUGIN_ID_KEY);
}
}

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.customization;
parcelable MapMarginsParams;

View file

@ -1,90 +0,0 @@
package net.osmand.aidlapi.customization;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.Nullable;
import net.osmand.aidlapi.AidlParams;
import java.util.ArrayList;
import java.util.List;
public class MapMarginsParams extends AidlParams {
public static final String LEFT_MARGIN_KEY = "leftMargin";
public static final String TOP_MARGIN_KEY = "topMargin";
public static final String RIGHT_MARGIN_KEY = "rightMargin";
public static final String BOTTOM_MARGIN_KEY = "bottomMargin";
public static final String APP_MODES_KEYS_KEY = "appModesKeys";
private ArrayList<String> appModesKeys = new ArrayList<>();
private int leftMargin;
private int topMargin;
private int rightMargin;
private int bottomMargin;
public MapMarginsParams(int leftMargin, int topMargin, int rightMargin, int bottomMargin,
@Nullable List<String> appModesKeys) {
if (appModesKeys != null) {
this.appModesKeys.addAll(appModesKeys);
}
this.leftMargin = leftMargin;
this.topMargin = topMargin;
this.rightMargin = rightMargin;
this.bottomMargin = bottomMargin;
}
public MapMarginsParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<MapMarginsParams> CREATOR = new Creator<MapMarginsParams>() {
@Override
public MapMarginsParams createFromParcel(Parcel in) {
return new MapMarginsParams(in);
}
@Override
public MapMarginsParams[] newArray(int size) {
return new MapMarginsParams[size];
}
};
public List<String> getAppModesKeys() {
return appModesKeys;
}
public int getLeftMargin() {
return leftMargin;
}
public int getTopMargin() {
return topMargin;
}
public int getRightMargin() {
return rightMargin;
}
public int getBottomMargin() {
return bottomMargin;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putInt(LEFT_MARGIN_KEY, leftMargin);
bundle.putInt(TOP_MARGIN_KEY, topMargin);
bundle.putInt(RIGHT_MARGIN_KEY, rightMargin);
bundle.putInt(BOTTOM_MARGIN_KEY, bottomMargin);
bundle.putStringArrayList(APP_MODES_KEYS_KEY, appModesKeys);
}
@Override
protected void readFromBundle(Bundle bundle) {
leftMargin = bundle.getInt(LEFT_MARGIN_KEY);
topMargin = bundle.getInt(TOP_MARGIN_KEY);
rightMargin = bundle.getInt(RIGHT_MARGIN_KEY);
bottomMargin = bundle.getInt(BOTTOM_MARGIN_KEY);
appModesKeys = bundle.getStringArrayList(APP_MODES_KEYS_KEY);
}
}

View file

@ -2,8 +2,7 @@ package net.osmand.aidlapi.customization;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.NonNull;
import android.support.annotation.NonNull;
import net.osmand.aidlapi.AidlParams;

View file

@ -2,9 +2,8 @@ package net.osmand.aidlapi.customization;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import net.osmand.aidlapi.AidlParams;

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.customization;
parcelable ProfileSettingsParams;

View file

@ -1,105 +0,0 @@
package net.osmand.aidlapi.customization;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
import net.osmand.aidlapi.profile.AExportSettingsType;
import java.util.ArrayList;
import java.util.List;
import static net.osmand.aidlapi.profile.ExportProfileParams.SETTINGS_TYPE_KEY;
public class ProfileSettingsParams extends AidlParams {
public static final String VERSION_KEY = "version";
public static final String REPLACE_KEY = "replace";
public static final String SILENT_IMPORT_KEY = "silentImport";
public static final String LATEST_CHANGES_KEY = "latestChanges";
public static final String PROFILE_SETTINGS_URI_KEY = "profileSettingsUri";
private Uri profileSettingsUri;
private String latestChanges;
private int version;
private List<String> settingsTypeKeyList = new ArrayList<>();
private boolean silent;
private boolean replace;
public ProfileSettingsParams(Uri profileSettingsUri, List<AExportSettingsType> settingsTypeList, boolean replace,
boolean silent, String latestChanges, int version) {
this.profileSettingsUri = profileSettingsUri;
for (AExportSettingsType settingsType : settingsTypeList) {
settingsTypeKeyList.add(settingsType.name());
}
this.replace = replace;
this.latestChanges = latestChanges;
this.version = version;
this.silent = silent;
}
public ProfileSettingsParams(Uri profileSettingsUri, List<AExportSettingsType> settingsTypeList,
boolean replace, String latestChanges, int version) {
this(profileSettingsUri, settingsTypeList, replace, false, latestChanges, version);
}
public ProfileSettingsParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<ProfileSettingsParams> CREATOR = new Creator<ProfileSettingsParams>() {
@Override
public ProfileSettingsParams createFromParcel(Parcel in) {
return new ProfileSettingsParams(in);
}
@Override
public ProfileSettingsParams[] newArray(int size) {
return new ProfileSettingsParams[size];
}
};
public int getVersion() {
return version;
}
public String getLatestChanges() {
return latestChanges;
}
public Uri getProfileSettingsUri() {
return profileSettingsUri;
}
public List<String> getSettingsTypeKeys() {
return settingsTypeKeyList;
}
public boolean isReplace() {
return replace;
}
public boolean isSilent() {
return silent;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putInt(VERSION_KEY, version);
bundle.putString(LATEST_CHANGES_KEY, latestChanges);
bundle.putParcelable(PROFILE_SETTINGS_URI_KEY, profileSettingsUri);
bundle.putStringArrayList(SETTINGS_TYPE_KEY, new ArrayList<>(settingsTypeKeyList));
bundle.putBoolean(REPLACE_KEY, replace);
bundle.putBoolean(SILENT_IMPORT_KEY, silent);
}
@Override
protected void readFromBundle(Bundle bundle) {
version = bundle.getInt(VERSION_KEY);
latestChanges = bundle.getString(LATEST_CHANGES_KEY);
profileSettingsUri = bundle.getParcelable(PROFILE_SETTINGS_URI_KEY);
settingsTypeKeyList = bundle.getStringArrayList(SETTINGS_TYPE_KEY);
replace = bundle.getBoolean(REPLACE_KEY);
silent = bundle.getBoolean(SILENT_IMPORT_KEY);
}
}

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.customization;
parcelable SelectProfileParams;

View file

@ -1,47 +0,0 @@
package net.osmand.aidlapi.customization;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class SelectProfileParams extends AidlParams {
public static final String PROFILE_ID_KEY = "profile_id";
private String appModeKey;
public SelectProfileParams(String appModeKey) {
this.appModeKey = appModeKey;
}
public SelectProfileParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<SelectProfileParams> CREATOR = new Creator<SelectProfileParams>() {
@Override
public SelectProfileParams createFromParcel(Parcel in) {
return new SelectProfileParams(in);
}
@Override
public SelectProfileParams[] newArray(int size) {
return new SelectProfileParams[size];
}
};
public String getAppModeKey() {
return appModeKey;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString(PROFILE_ID_KEY, appModeKey);
}
@Override
protected void readFromBundle(Bundle bundle) {
appModeKey = bundle.getString(PROFILE_ID_KEY);
}
}

View file

@ -2,8 +2,7 @@ package net.osmand.aidlapi.customization;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.Nullable;
import android.support.annotation.Nullable;
import net.osmand.aidlapi.AidlParams;

View file

@ -1,2 +0,0 @@
package net.osmand.aidlapi.events;
parcelable AKeyEventsParams;

View file

@ -1,73 +0,0 @@
package net.osmand.aidlapi.events;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import net.osmand.aidlapi.AidlParams;
import java.util.ArrayList;
public class AKeyEventsParams extends AidlParams {
private long callbackId = -1L;
private boolean subscribeToUpdates = true;
private ArrayList<Integer> keyEventList;
public AKeyEventsParams() {
}
protected AKeyEventsParams(Parcel in) {
readFromParcel(in);
}
public static final Parcelable.Creator<AKeyEventsParams> CREATOR = new Parcelable.Creator<AKeyEventsParams>() {
@Override
public AKeyEventsParams createFromParcel(Parcel in) {
return new AKeyEventsParams(in);
}
@Override
public AKeyEventsParams[] newArray(int size) {
return new AKeyEventsParams[size];
}
};
public long getCallbackId() {
return callbackId;
}
public void setCallbackId(long callbackId) {
this.callbackId = callbackId;
}
public void setSubscribeToUpdates(boolean subscribeToUpdates) {
this.subscribeToUpdates = subscribeToUpdates;
}
public boolean isSubscribeToUpdates() {
return subscribeToUpdates;
}
public void setKeyEventList(ArrayList<Integer> keyEventList) {
this.keyEventList = keyEventList;
}
public ArrayList<Integer> getKeyEventList() {
return keyEventList;
}
@Override
protected void readFromBundle(Bundle bundle) {
callbackId = bundle.getLong("callbackId");
subscribeToUpdates = bundle.getBoolean("subscribeToUpdates");
keyEventList = bundle.getIntegerArrayList("keyEventList");
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putLong("callbackId", callbackId);
bundle.putBoolean("subscribeToUpdates", subscribeToUpdates);
bundle.putIntegerArrayList("keyEventList", keyEventList);
}
}

View file

@ -11,18 +11,16 @@ public class AFavorite extends AidlParams {
private double lon;
private String name;
private String description;
private String address;
private String category;
private String color;
private boolean visible;
public AFavorite(double lat, double lon, String name, String description, String address,
public AFavorite(double lat, double lon, String name, String description,
String category, String color, boolean visible) {
this.lat = lat;
this.lon = lon;
this.name = name;
this.description = description;
this.address = address;
this.category = category;
this.color = color;
this.visible = visible;
@ -60,8 +58,6 @@ public class AFavorite extends AidlParams {
return description;
}
public String getAddress() { return address; }
public String getCategory() {
return category;
}
@ -80,7 +76,6 @@ public class AFavorite extends AidlParams {
bundle.putDouble("lon", lon);
bundle.putString("name", name);
bundle.putString("description", description);
bundle.putString("address", address);
bundle.putString("category", category);
bundle.putString("color", color);
bundle.putBoolean("visible", visible);
@ -92,7 +87,6 @@ public class AFavorite extends AidlParams {
lon = bundle.getDouble("lon");
name = bundle.getString("name");
description = bundle.getString("description");
address = bundle.getString("address");
category = bundle.getString("category");
color = bundle.getString("color");
visible = bundle.getBoolean("visible");

View file

@ -3,8 +3,7 @@ package net.osmand.aidlapi.gpx;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.NonNull;
import android.support.annotation.NonNull;
import net.osmand.aidlapi.AidlParams;

View file

@ -2,9 +2,8 @@ package net.osmand.aidlapi.gpx;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import net.osmand.aidlapi.AidlParams;

View file

@ -2,9 +2,8 @@ package net.osmand.aidlapi.gpx;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import net.osmand.aidlapi.AidlParams;

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.info;
parcelable AppInfoParams;

View file

@ -1,95 +0,0 @@
package net.osmand.aidlapi.info;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
import net.osmand.aidlapi.map.ALatLon;
public class AppInfoParams extends AidlParams {
private ALatLon lastKnownLocation;
private ALatLon mapLocation;
private Bundle turnInfo;
private int leftTime;
private int leftDistance;
private long arrivalTime;
private boolean mapVisible;
public AppInfoParams(ALatLon lastKnownLocation, ALatLon mapLocation, Bundle turnInfo, int leftTime, int leftDistance, long arrivalTime, boolean mapVisible) {
this.lastKnownLocation = lastKnownLocation;
this.mapLocation = mapLocation;
this.leftTime = leftTime;
this.leftDistance = leftDistance;
this.arrivalTime = arrivalTime;
this.turnInfo = turnInfo;
this.mapVisible = mapVisible;
}
public AppInfoParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<AppInfoParams> CREATOR = new Creator<AppInfoParams>() {
@Override
public AppInfoParams createFromParcel(Parcel in) {
return new AppInfoParams(in);
}
@Override
public AppInfoParams[] newArray(int size) {
return new AppInfoParams[size];
}
};
public ALatLon getLastKnownLocation() {
return lastKnownLocation;
}
public ALatLon getMapLocation() {
return mapLocation;
}
public int getLeftTime() {
return leftTime;
}
public long getArrivalTime() {
return arrivalTime;
}
public int getLeftDistance() {
return leftDistance;
}
public boolean isMapVisible() {
return mapVisible;
}
public Bundle getTurnInfo() {
return turnInfo;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putParcelable("lastKnownLocation", lastKnownLocation);
bundle.putParcelable("mapLocation", mapLocation);
bundle.putInt("leftTime", leftTime);
bundle.putLong("arrivalTime", arrivalTime);
bundle.putInt("leftDistance", leftDistance);
bundle.putBundle("turnInfo", turnInfo);
bundle.putBoolean("mapVisible", mapVisible);
}
@Override
protected void readFromBundle(Bundle bundle) {
lastKnownLocation = bundle.getParcelable("lastKnownLocation");
mapLocation = bundle.getParcelable("mapLocation");
leftTime = bundle.getInt("leftTime");
arrivalTime = bundle.getLong("arrivalTime");
leftDistance = bundle.getInt("leftDistance");
turnInfo = bundle.getBundle("turnInfo");
mapVisible = bundle.getBoolean("mapVisible");
}
}

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.lock;
parcelable SetLockStateParams;

View file

@ -1,45 +0,0 @@
package net.osmand.aidlapi.lock;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class SetLockStateParams extends AidlParams {
private boolean lock;
public SetLockStateParams(boolean lock) {
this.lock = lock;
}
public SetLockStateParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<SetLockStateParams> CREATOR = new Creator<SetLockStateParams>() {
@Override
public SetLockStateParams createFromParcel(Parcel in) {
return new SetLockStateParams(in);
}
@Override
public SetLockStateParams[] newArray(int size) {
return new SetLockStateParams[size];
}
};
public boolean getLockState() {
return lock;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putBoolean("lock", this.lock);
}
@Override
protected void readFromBundle(Bundle bundle) {
lock = bundle.getBoolean("lock");
}
}

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.map;
parcelable ALocation;

View file

@ -1,226 +0,0 @@
package net.osmand.aidlapi.map;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import net.osmand.aidlapi.AidlParams;
public class ALocation extends AidlParams {
private double latitude = 0.0;
private double longitude = 0.0;
private long time = 0;
private boolean hasAltitude = false;
private double altitude = 0.0f;
private boolean hasSpeed = false;
private float speed = 0.0f;
private boolean hasBearing = false;
private float bearing = 0.0f;
private boolean hasAccuracy = false;
private float accuracy = 0.0f;
private boolean hasVerticalAccuracy = false;
private float verticalAccuracy = 0.0f;
private ALocation() {
}
public ALocation(double latitude, double longitude, long time, boolean hasAltitude, double altitude,
boolean hasSpeed, float speed, boolean hasBearing, float bearing,
boolean hasAccuracy, float accuracy, boolean hasVerticalAccuracy, float verticalAccuracy) {
this.latitude = latitude;
this.longitude = longitude;
this.time = time;
this.hasAltitude = hasAltitude;
this.altitude = altitude;
this.hasSpeed = hasSpeed;
this.speed = speed;
this.hasBearing = hasBearing;
this.bearing = bearing;
this.hasAccuracy = hasAccuracy;
this.accuracy = accuracy;
this.hasVerticalAccuracy = hasVerticalAccuracy;
this.verticalAccuracy = verticalAccuracy;
}
public ALocation(Parcel in) {
readFromParcel(in);
}
public static final Parcelable.Creator<ALocation> CREATOR = new Parcelable.Creator<ALocation>() {
@Override
public ALocation createFromParcel(Parcel in) {
return new ALocation(in);
}
@Override
public ALocation[] newArray(int size) {
return new ALocation[size];
}
};
public double getLatitude() {
return latitude;
}
public double getLongitude() {
return longitude;
}
public long getTime() {
return time;
}
public boolean hasAltitude() {
return hasAltitude;
}
public double getAltitude() {
return altitude;
}
public boolean hasSpeed() {
return hasSpeed;
}
public float getSpeed() {
return speed;
}
public boolean hasBearing() {
return hasBearing;
}
public float getBearing() {
return bearing;
}
public boolean hasAccuracy() {
return hasAccuracy;
}
public float getAccuracy() {
return accuracy;
}
public boolean hasVerticalAccuracy() {
return hasVerticalAccuracy;
}
public float getVerticalAccuracy() {
return verticalAccuracy;
}
@Override
protected void writeToBundle(Bundle bundle) {
bundle.putDouble("latitude", latitude);
bundle.putDouble("longitude", longitude);
bundle.putLong("time", time);
bundle.putBoolean("hasAltitude", hasAltitude);
bundle.putDouble("altitude", altitude);
bundle.putBoolean("hasSpeed", hasSpeed);
bundle.putFloat("speed", speed);
bundle.putBoolean("hasBearing", hasBearing);
bundle.putFloat("bearing", bearing);
bundle.putBoolean("hasAccuracy", hasAccuracy);
bundle.putFloat("accuracy", accuracy);
bundle.putBoolean("hasVerticalAccuracy", hasVerticalAccuracy);
bundle.putFloat("verticalAccuracy", verticalAccuracy);
}
@Override
protected void readFromBundle(Bundle bundle) {
latitude = bundle.getDouble("latitude");
longitude = bundle.getDouble("longitude");
time = bundle.getLong("time");
hasAltitude = bundle.getBoolean("hasAltitude");
altitude = bundle.getDouble("altitude");
hasSpeed = bundle.getBoolean("hasSpeed");
speed = bundle.getFloat("speed");
hasBearing = bundle.getBoolean("hasBearing");
bearing = bundle.getFloat("bearing");
hasAccuracy = bundle.getBoolean("hasAccuracy");
accuracy = bundle.getFloat("accuracy");
hasVerticalAccuracy = bundle.getBoolean("hasVerticalAccuracy");
verticalAccuracy = bundle.getFloat("verticalAccuracy");
}
public static Builder builder() {
return new ALocation().new Builder();
}
public class Builder {
private Builder() {
}
public Builder setLatitude(double latitude) {
ALocation.this.latitude = latitude;
return this;
}
public Builder setLongitude(double longitude) {
ALocation.this.longitude = longitude;
return this;
}
public Builder setTime(long time) {
ALocation.this.time = time;
return this;
}
public Builder hasAltitude(boolean hasAltitude) {
ALocation.this.hasAltitude = hasAltitude;
return this;
}
public Builder setAltitude(float altitude) {
ALocation.this.altitude = altitude;
return this;
}
public Builder hasSpeed(boolean hasSpeed) {
ALocation.this.hasSpeed = hasSpeed;
return this;
}
public Builder setSpeed(float speed) {
ALocation.this.speed = speed;
return this;
}
public Builder hasBearing(boolean hasBearing) {
ALocation.this.hasBearing = hasBearing;
return this;
}
public Builder setBearing(float bearing) {
ALocation.this.bearing = bearing;
return this;
}
public Builder hasAccuracy(boolean hasAccuracy) {
ALocation.this.hasAccuracy = hasAccuracy;
return this;
}
public Builder setAccuracy(float accuracy) {
ALocation.this.accuracy = accuracy;
return this;
}
public Builder hasVerticalAccuracy(boolean hasVerticalAccuracy) {
ALocation.this.hasVerticalAccuracy = hasVerticalAccuracy;
return this;
}
public Builder setVerticalAccuracy(float verticalAccuracy) {
ALocation.this.verticalAccuracy = verticalAccuracy;
return this;
}
public ALocation build() {
return ALocation.this;
}
}
}

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.map;
parcelable SetLocationParams;

View file

@ -1,54 +0,0 @@
package net.osmand.aidlapi.map;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class SetLocationParams extends AidlParams {
private ALocation location;
private long timeToNotUseOtherGPS;
public SetLocationParams(ALocation location, long timeToNotUseOtherGPS) {
this.location = location;
this.timeToNotUseOtherGPS = timeToNotUseOtherGPS;
}
public SetLocationParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<SetLocationParams> CREATOR = new Creator<SetLocationParams>() {
@Override
public SetLocationParams createFromParcel(Parcel in) {
return new SetLocationParams(in);
}
@Override
public SetLocationParams[] newArray(int size) {
return new SetLocationParams[size];
}
};
public ALocation getLocation() {
return location;
}
public long getTimeToNotUseOtherGPS() {
return timeToNotUseOtherGPS;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putParcelable("location", location);
bundle.putLong("timeToNotUseOtherGPS", timeToNotUseOtherGPS);
}
@Override
protected void readFromBundle(Bundle bundle) {
bundle.setClassLoader(ALocation.class.getClassLoader());
location = bundle.getParcelable("location");
timeToNotUseOtherGPS = bundle.getLong("timeToNotUseOtherGPS");
}
}

View file

@ -10,14 +10,12 @@ public class SetMapLocationParams extends AidlParams {
private double latitude;
private double longitude;
private int zoom;
private float rotation;
private boolean animated;
public SetMapLocationParams(double latitude, double longitude, int zoom, float rotation, boolean animated) {
public SetMapLocationParams(double latitude, double longitude, int zoom, boolean animated) {
this.latitude = latitude;
this.longitude = longitude;
this.zoom = zoom;
this.rotation = rotation;
this.animated = animated;
}
@ -49,10 +47,6 @@ public class SetMapLocationParams extends AidlParams {
return zoom;
}
public float getRotation() {
return rotation;
}
public boolean isAnimated() {
return animated;
}
@ -62,7 +56,6 @@ public class SetMapLocationParams extends AidlParams {
bundle.putDouble("latitude", latitude);
bundle.putDouble("longitude", longitude);
bundle.putInt("zoom", zoom);
bundle.putFloat("rotation", rotation);
bundle.putBoolean("animated", animated);
}
@ -71,7 +64,6 @@ public class SetMapLocationParams extends AidlParams {
latitude = bundle.getDouble("latitude");
longitude = bundle.getDouble("longitude");
zoom = bundle.getInt("zoom");
rotation = bundle.getFloat("rotation");
animated = bundle.getBoolean("animated");
}
}

View file

@ -2,9 +2,8 @@ package net.osmand.aidlapi.navdrawer;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import net.osmand.aidlapi.AidlParams;

View file

@ -2,9 +2,8 @@ package net.osmand.aidlapi.navdrawer;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import net.osmand.aidlapi.AidlParams;

View file

@ -2,9 +2,8 @@ package net.osmand.aidlapi.navdrawer;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import net.osmand.aidlapi.AidlParams;

View file

@ -2,8 +2,7 @@ package net.osmand.aidlapi.navdrawer;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.NonNull;
import android.support.annotation.NonNull;
import net.osmand.aidlapi.AidlParams;

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.navigation;
parcelable ABlockedRoad;

View file

@ -1,85 +0,0 @@
package net.osmand.aidlapi.navigation;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class ABlockedRoad extends AidlParams {
private long roadId;
private double latitude;
private double longitude;
private double direction;
private String name;
private String appModeKey;
public ABlockedRoad(long roadId, double latitude, double longitude, double direction, String name, String appModeKey) {
this.roadId = roadId;
this.latitude = latitude;
this.longitude = longitude;
this.direction = direction;
this.name = name;
this.appModeKey = appModeKey;
}
protected ABlockedRoad(Parcel in) {
readFromParcel(in);
}
public static final Creator<ABlockedRoad> CREATOR = new Creator<ABlockedRoad>() {
@Override
public ABlockedRoad createFromParcel(Parcel in) {
return new ABlockedRoad(in);
}
@Override
public ABlockedRoad[] newArray(int size) {
return new ABlockedRoad[size];
}
};
public long getRoadId() {
return roadId;
}
public double getLatitude() {
return latitude;
}
public double getLongitude() {
return longitude;
}
public double getDirection() {
return direction;
}
public String getName() {
return name;
}
public String getAppModeKey() {
return appModeKey;
}
@Override
protected void readFromBundle(Bundle bundle) {
roadId = bundle.getLong("roadId");
latitude = bundle.getDouble("latitude");
longitude = bundle.getDouble("longitude");
direction = bundle.getDouble("direction");
name = bundle.getString("name");
appModeKey = bundle.getString("appModeKey");
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putLong("roadId", roadId);
bundle.putDouble("latitude", latitude);
bundle.putDouble("longitude", longitude);
bundle.putDouble("direction", direction);
bundle.putString("name", name);
bundle.putString("appModeKey", appModeKey);
}
}

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.navigation;
parcelable AddBlockedRoadParams;

View file

@ -1,46 +0,0 @@
package net.osmand.aidlapi.navigation;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class AddBlockedRoadParams extends AidlParams {
private ABlockedRoad blockedRoad;
public AddBlockedRoadParams(ABlockedRoad blockedRoad) {
this.blockedRoad = blockedRoad;
}
public AddBlockedRoadParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<AddBlockedRoadParams> CREATOR = new Creator<AddBlockedRoadParams>() {
@Override
public AddBlockedRoadParams createFromParcel(Parcel in) {
return new AddBlockedRoadParams(in);
}
@Override
public AddBlockedRoadParams[] newArray(int size) {
return new AddBlockedRoadParams[size];
}
};
public ABlockedRoad getBlockedRoad() {
return blockedRoad;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putParcelable("blockedRoad", blockedRoad);
}
@Override
protected void readFromBundle(Bundle bundle) {
bundle.setClassLoader(ABlockedRoad.class.getClassLoader());
blockedRoad = bundle.getParcelable("blockedRoad");
}
}

View file

@ -11,18 +11,15 @@ public class NavigateGpxParams extends AidlParams {
private String data;
private Uri uri;
private boolean force;
private boolean needLocationPermission;
public NavigateGpxParams(String data, boolean force, boolean needLocationPermission) {
public NavigateGpxParams(String data, boolean force) {
this.data = data;
this.force = force;
this.needLocationPermission = needLocationPermission;
}
public NavigateGpxParams(Uri uri, boolean force, boolean needLocationPermission) {
public NavigateGpxParams(Uri uri, boolean force) {
this.uri = uri;
this.force = force;
this.needLocationPermission = needLocationPermission;
}
public NavigateGpxParams(Parcel in) {
@ -53,16 +50,11 @@ public class NavigateGpxParams extends AidlParams {
return force;
}
public boolean isNeedLocationPermission() {
return needLocationPermission;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString("data", data);
bundle.putParcelable("uri", uri);
bundle.putBoolean("force", force);
bundle.putBoolean("needLocationPermission", needLocationPermission);
}
@Override
@ -70,6 +62,5 @@ public class NavigateGpxParams extends AidlParams {
data = bundle.getString("data");
uri = bundle.getParcelable("uri");
force = bundle.getBoolean("force");
needLocationPermission = bundle.getBoolean("needLocationPermission");
}
}

View file

@ -17,10 +17,8 @@ public class NavigateParams extends AidlParams {
private double destLon;
private boolean force;
private boolean needLocationPermission;
public NavigateParams(String startName, double startLat, double startLon, String destName, double destLat,
double destLon, String profile, boolean force, boolean needLocationPermission) {
public NavigateParams(String startName, double startLat, double startLon, String destName, double destLat, double destLon, String profile, boolean force) {
this.startName = startName;
this.startLat = startLat;
this.startLon = startLon;
@ -29,7 +27,6 @@ public class NavigateParams extends AidlParams {
this.destLon = destLon;
this.profile = profile;
this.force = force;
this.needLocationPermission = needLocationPermission;
}
public NavigateParams(Parcel in) {
@ -80,10 +77,6 @@ public class NavigateParams extends AidlParams {
return force;
}
public boolean isNeedLocationPermission() {
return needLocationPermission;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString("startName", startName);
@ -94,7 +87,6 @@ public class NavigateParams extends AidlParams {
bundle.putDouble("destLon", destLon);
bundle.putString("profile", profile);
bundle.putBoolean("force", force);
bundle.putBoolean("needLocationPermission", needLocationPermission);
}
@Override
@ -107,6 +99,5 @@ public class NavigateParams extends AidlParams {
destLon = bundle.getDouble("destLon");
profile = bundle.getString("profile");
force = bundle.getBoolean("force");
needLocationPermission = bundle.getBoolean("needLocationPermission");
}
}

View file

@ -17,11 +17,10 @@ public class NavigateSearchParams extends AidlParams {
private double searchLon;
private boolean force;
private boolean needLocationPermission;
public NavigateSearchParams(String startName, double startLat, double startLon,
String searchQuery, double searchLat, double searchLon,
String profile, boolean force, boolean needLocationPermission) {
String searchQuery, double searchLat, double searchLon,
String profile, boolean force) {
this.startName = startName;
this.startLat = startLat;
this.startLon = startLon;
@ -30,7 +29,6 @@ public class NavigateSearchParams extends AidlParams {
this.searchLon = searchLon;
this.profile = profile;
this.force = force;
this.needLocationPermission = needLocationPermission;
}
public NavigateSearchParams(Parcel in) {
@ -81,10 +79,6 @@ public class NavigateSearchParams extends AidlParams {
return force;
}
public boolean isNeedLocationPermission() {
return needLocationPermission;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString("startName", startName);
@ -95,7 +89,6 @@ public class NavigateSearchParams extends AidlParams {
bundle.putBoolean("force", force);
bundle.putDouble("searchLat", searchLat);
bundle.putDouble("searchLon", searchLon);
bundle.putBoolean("needLocationPermission", needLocationPermission);
}
@Override
@ -108,6 +101,5 @@ public class NavigateSearchParams extends AidlParams {
force = bundle.getBoolean("force");
searchLat = bundle.getDouble("searchLat");
searchLon = bundle.getDouble("searchLon");
needLocationPermission = bundle.getBoolean("needLocationPermission");
}
}

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.navigation;
parcelable RemoveBlockedRoadParams;

View file

@ -1,46 +0,0 @@
package net.osmand.aidlapi.navigation;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class RemoveBlockedRoadParams extends AidlParams {
private ABlockedRoad blockedRoad;
public RemoveBlockedRoadParams(ABlockedRoad blockedRoad) {
this.blockedRoad = blockedRoad;
}
public RemoveBlockedRoadParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<RemoveBlockedRoadParams> CREATOR = new Creator<RemoveBlockedRoadParams>() {
@Override
public RemoveBlockedRoadParams createFromParcel(Parcel in) {
return new RemoveBlockedRoadParams(in);
}
@Override
public RemoveBlockedRoadParams[] newArray(int size) {
return new RemoveBlockedRoadParams[size];
}
};
public ABlockedRoad getBlockedRoad() {
return blockedRoad;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putParcelable("blockedRoad", blockedRoad);
}
@Override
protected void readFromBundle(Bundle bundle) {
bundle.setClassLoader(ABlockedRoad.class.getClassLoader());
blockedRoad = bundle.getParcelable("blockedRoad");
}
}

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.profile;
parcelable AExportSettingsType;

View file

@ -1,11 +0,0 @@
package net.osmand.aidlapi.profile;
public enum AExportSettingsType {
PROFILE,
QUICK_ACTIONS,
POI_TYPES,
MAP_SOURCES,
CUSTOM_RENDER_STYLE,
CUSTOM_ROUTING,
AVOID_ROADS;
}

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.profile;
parcelable ExportProfileParams;

View file

@ -1,61 +0,0 @@
package net.osmand.aidlapi.profile;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
import java.util.ArrayList;
import java.util.List;
public class ExportProfileParams extends AidlParams {
public static final String PROFILE_KEY = "profile";
public static final String SETTINGS_TYPE_KEY = "settings_type";
private String profile;
private ArrayList<String> settingsTypeKeyList = new ArrayList<>();
public ExportProfileParams(String profile, ArrayList<AExportSettingsType> settingsTypeList) {
this.profile = profile;
for (AExportSettingsType settingsType : settingsTypeList) {
settingsTypeKeyList.add(settingsType.name());
}
}
public ExportProfileParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<ExportProfileParams> CREATOR = new Creator<ExportProfileParams>() {
@Override
public ExportProfileParams createFromParcel(Parcel in) {
return new ExportProfileParams(in);
}
@Override
public ExportProfileParams[] newArray(int size) {
return new ExportProfileParams[size];
}
};
public String getProfile() {
return profile;
}
public List<String> getSettingsTypeKeys() {
return settingsTypeKeyList;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString(PROFILE_KEY, profile);
bundle.putStringArrayList(SETTINGS_TYPE_KEY, settingsTypeKeyList);
}
@Override
protected void readFromBundle(Bundle bundle) {
profile = bundle.getString(PROFILE_KEY);
settingsTypeKeyList = bundle.getStringArrayList(SETTINGS_TYPE_KEY);
}
}

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.quickaction;
parcelable QuickActionInfoParams;

View file

@ -1,69 +0,0 @@
package net.osmand.aidlapi.quickaction;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class QuickActionInfoParams extends AidlParams {
private int actionId;
private String name;
private String actionType;
private String params;
public QuickActionInfoParams(int actionId, String name, String actionType, String params) {
this.actionId = actionId;
this.name = name;
this.actionType = actionType;
this.params = params;
}
public QuickActionInfoParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<QuickActionInfoParams> CREATOR = new Creator<QuickActionInfoParams>() {
@Override
public QuickActionInfoParams createFromParcel(Parcel in) {
return new QuickActionInfoParams(in);
}
@Override
public QuickActionInfoParams[] newArray(int size) {
return new QuickActionInfoParams[size];
}
};
public int getActionId() {
return actionId;
}
public String getName() {
return name;
}
public String getActionType() {
return actionType;
}
public String getParams() {
return params;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putInt("actionId", actionId);
bundle.putString("name", name);
bundle.putString("actionType", actionType);
bundle.putString("params", params);
}
@Override
protected void readFromBundle(Bundle bundle) {
actionId = bundle.getInt("actionNumber");
name = bundle.getString("name");
actionType = bundle.getString("actionType");
params = bundle.getString("params");
}
}

View file

@ -1,3 +0,0 @@
package net.osmand.aidlapi.quickaction;
parcelable QuickActionParams;

View file

@ -1,45 +0,0 @@
package net.osmand.aidlapi.quickaction;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
public class QuickActionParams extends AidlParams {
private int actionNumber;
public QuickActionParams(int actionNumber) {
this.actionNumber = actionNumber;
}
public QuickActionParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<QuickActionParams> CREATOR = new Creator<QuickActionParams>() {
@Override
public QuickActionParams createFromParcel(Parcel in) {
return new QuickActionParams(in);
}
@Override
public QuickActionParams[] newArray(int size) {
return new QuickActionParams[size];
}
};
public int getActionNumber() {
return actionNumber;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putInt("actionNumber", actionNumber);
}
@Override
protected void readFromBundle(Bundle bundle) {
actionNumber = bundle.getInt("actionNumber");
}
}

View file

@ -2,8 +2,7 @@ package net.osmand.aidlapi.tiles;
import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.NonNull;
import android.support.annotation.NonNull;
import net.osmand.aidlapi.AidlParams;

Binary file not shown.

BIN
OsmAnd-java/OsmAnd-core.jar Normal file

Binary file not shown.

View file

@ -1,7 +1,6 @@
apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'ivy-publish'
configurations {
android
}
@ -44,7 +43,6 @@ task collectTestResources(type: Copy) {
into "src/test/resources/"
from("../../resources/test-resources") {
include "*"
include "/search/*"
}
from("../../resources/poi") {
include "poi_types.xml"
@ -86,22 +84,12 @@ artifacts {
}
publishing {
repositories {
ivy {
url = System.getenv("OSMAND_BINARIES_IVY_ROOT") ?: "./"
}
}
publications {
maven(MavenPublication) {
artifactId "osmand-base"
from components.java
}
ivyJava(IvyPublication) {
artifact androidJar {
classifier 'android'
}
}
}
}
}
dependencies {
@ -115,9 +103,6 @@ dependencies {
implementation 'com.moparisthebest:junidecode:0.1.1'
implementation 'com.vividsolutions:jts-core:1.14.0'
implementation 'com.google.openlocationcode:openlocationcode:1.0.4'
implementation ('com.github.scribejava:scribejava-apis:7.1.1') {
exclude group: "com.fasterxml.jackson.core"
}
// turn off for now
//implementation 'com.atilika.kuromoji:kuromoji-ipadic:0.9.0'
implementation 'net.sf.kxml:kxml2:2.1.8'

View file

@ -800,7 +800,7 @@ public abstract class ByteString implements Iterable<Byte> {
// Copy the information we need into local variables so as to hold
// the lock for as short a time as possible.
cachedFlushBuffers =
flushedBuffers.toArray(new ByteString[0]);
flushedBuffers.toArray(new ByteString[flushedBuffers.size()]);
cachedBuffer = buffer;
cachedBufferPos = bufferPos;
}

View file

@ -242,7 +242,8 @@ final class FieldSet<FieldDescriptorType extends
// Wrap the contents in a new list so that the caller cannot change
// the list's contents after setting it.
final List newList = new ArrayList((List) value);
final List newList = new ArrayList();
newList.addAll((List) value);
for (final Object element : newList) {
verifyType(descriptor.getLiteType(), element);
}

View file

@ -14,11 +14,6 @@
package com.jwetherell.openmap.common;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
public class MGRSPoint extends ZonedUTMPoint {
/**
@ -109,15 +104,6 @@ public class MGRSPoint extends ZonedUTMPoint {
* an UPPERCASE coordinate string is expected.
*/
protected void decode(String mgrsString) throws NumberFormatException {
if (mgrsString.contains(" ")) {
String[] parts = mgrsString.split(" ");
StringBuilder s = new StringBuilder();
for (String i : parts) {
s.append(i);
}
mgrsString = s.toString();
}
if (mgrsString == null || mgrsString.length() == 0) {
throw new NumberFormatException("MGRSPoint coverting from nothing");
}
@ -647,96 +633,6 @@ public class MGRSPoint extends ZonedUTMPoint {
return twoLetter;
}
public String toFlavoredString() {
try {
List<String> all = new ArrayList<>();
for (int i = 0; i <= mgrs.length(); i++) {
if (Character.isAlphabetic(mgrs.charAt(i))){
all.add(mgrs.substring(0,i+1));
all.add(mgrs.substring(i+1,i+3));
String remains = mgrs.substring(i+3);
all.add(remains.substring(0,remains.length()/2));
all.add(remains.substring(remains.length()/2));
break;
}
}
StringBuilder os = new StringBuilder();
for(String part: all){
if (os.length() > 0) os.append(" ");
os.append(part);
}
return os.toString();
}catch (Exception e){
return mgrs;
}
}
public String toFlavoredString(int accuracy) {
try {
List<String> all = new ArrayList<>();
for (int i = 0; i <= mgrs.length(); i++) {
if (Character.isAlphabetic(mgrs.charAt(i))){
all.add(mgrs.substring(0,i+1));
all.add(mgrs.substring(i+1,i+3));
String remains = mgrs.substring(i+3);
int easting = Integer.parseInt(remains.substring(0,remains.length()/2));
int northing = Integer.parseInt(remains.substring(remains.length()/2));
double resolution = Math.pow(10, getAccuracy() - accuracy);
long roundedEasting = Math.round(easting/resolution);
long roundedNorthing = Math.round(northing/resolution);
int eastShift = 0;
int northShift = 0;
if (roundedEasting == resolution*10){
roundedEasting = 0L;
eastShift = 1;
}
if (roundedNorthing == resolution*10){
roundedNorthing = 0L;
northShift = 1;
}
if (eastShift != 0 || northShift != 0){
all.set(1, shiftChar(all.get(1), eastShift, northShift));
String zero = "";
}
all.add(String.format(Locale.US,"%0" + accuracy + "d", roundedEasting));
all.add(String.format(Locale.US,"%0" + accuracy + "d", roundedNorthing));
break;
}
}
StringBuilder os = new StringBuilder();
for(String part: all){
if (os.length() > 0) os.append(" ");
os.append(part);
}
return os.toString();
}catch (Exception e){
return toFlavoredString();
}
}
private static String shiftChar(String chars, int east, int north){
ArrayList<Character> keys = new ArrayList<Character>(
Arrays.asList('A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z'));
StringBuilder s = new StringBuilder();
if (east != 0){
int idx = keys.indexOf(chars.charAt(0));
idx += east;
if (idx >= keys.size()) idx -= keys.size();
if (idx < 0) idx += keys.size();
s.append(keys.get(idx));
}else s.append(chars.charAt(0));
if (north != 0){
int idx = keys.indexOf(chars.charAt(1));
idx += north;
if (idx >= keys.size()) idx -= keys.size();
if (idx < 0) idx += keys.size();
s.append(keys.get(idx));
}else s.append(chars.charAt(1));
return s.toString();
}
/**
* {@inheritDoc}
*/

View file

@ -36,16 +36,6 @@ public abstract class MoreMath {
*/
public static final transient double HALF_PI_D = Math.PI / 2.0d;
/**
* Math.PI/4
*/
public static final transient float QUAD_PI = (float) Math.PI / 4.0f;
/**
* Math.PI/4
*/
public static final transient double QUAD_PI_D = Math.PI / 4.0d;
/**
* Checks if a ~= b. Use this to test equality of floating point numbers.
* <p>

View file

@ -345,6 +345,7 @@ public final class JtsAdapter {
for(int i = 0; i < geom.getNumGeometries(); ++i) {
final Polygon nextPoly = (Polygon) geom.getGeometryN(i);
final List<Integer> nextPolyGeom = new ArrayList<>();
boolean valid = true;
// Add exterior ring
@ -361,7 +362,7 @@ public final class JtsAdapter {
CoordinateArrays.reverse(exteriorRing.getCoordinates());
}
final List<Integer> nextPolyGeom = new ArrayList<>(linesToGeomCmds(exteriorRing, mvtClosePath, cursor, 2));
nextPolyGeom.addAll(linesToGeomCmds(exteriorRing, mvtClosePath, cursor, 2));
// Add interior rings

View file

@ -322,7 +322,7 @@ public final class MvtReader {
geoms.add(geomFactory.createLineString(nextCoordSeq));
}
return geoms.size() == 1 ? geoms.get(0) : geomFactory.createMultiLineString(geoms.toArray(new LineString[0]));
return geoms.size() == 1 ? geoms.get(0) : geomFactory.createMultiLineString(geoms.toArray(new LineString[geoms.size()]));
}
/**
@ -450,7 +450,7 @@ public final class MvtReader {
return polygons.get(0);
} else {
return geomFactory.createMultiPolygon(polygons.toArray(new Polygon[0]));
return geomFactory.createMultiPolygon(polygons.toArray(new Polygon[polygons.size()]));
}
}
@ -512,7 +512,7 @@ public final class MvtReader {
if (area > 0d) {
if (outerPoly != null) {
polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[0])));
polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[holes.size()])));
holes.clear();
}
@ -533,7 +533,7 @@ public final class MvtReader {
if (outerPoly != null) {
holes.toArray();
polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[0])));
polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[holes.size()])));
}
return polygons;
@ -569,7 +569,7 @@ public final class MvtReader {
if (outerPoly == null || (outerArea < 0 == area < 0)) {
if (outerPoly != null) {
polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[0])));
polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[holes.size()])));
holes.clear();
}
@ -590,7 +590,7 @@ public final class MvtReader {
if (outerPoly != null) {
holes.toArray();
polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[0])));
polygons.add(geomFactory.createPolygon(outerPoly, holes.toArray(new LinearRing[holes.size()])));
}
return polygons;

View file

@ -17,34 +17,19 @@ public class CollatorStringMatcher implements StringMatcher {
private final String part;
public static enum StringMatcherMode {
// tests only first word as base starts with part
CHECK_ONLY_STARTS_WITH,
// tests all words (split by space) and one of word should start with a given part
CHECK_STARTS_FROM_SPACE,
// tests all words except first (split by space) and one of word should start with a given part
CHECK_STARTS_FROM_SPACE_NOT_BEGINNING,
// tests all words (split by space) and one of word should be equal to part
CHECK_EQUALS_FROM_SPACE,
// simple collator contains in any part of the base
CHECK_CONTAINS,
// simple collator equals
CHECK_ONLY_STARTS_WITH_TRIM,
CHECK_EQUALS,
}
public CollatorStringMatcher(String part, StringMatcherMode mode) {
this.collator = OsmAndCollator.primaryCollator();
part = simplifyStringAndAlignChars(part);
if (part.length() > 0 && part.charAt(part.length() - 1) == '.') {
part = part.substring(0, part.length() - 1);
if (mode == StringMatcherMode.CHECK_EQUALS_FROM_SPACE) {
mode = StringMatcherMode.CHECK_STARTS_FROM_SPACE;
} else if (mode == StringMatcherMode.CHECK_EQUALS) {
mode = StringMatcherMode.CHECK_ONLY_STARTS_WITH;
}
}
this.part = part;
this.part = part.toLowerCase(Locale.getDefault());
this.mode = mode;
}
public Collator getCollator() {
@ -57,20 +42,22 @@ public class CollatorStringMatcher implements StringMatcher {
}
public static boolean cmatches(Collator collator, String fullName, String part, StringMatcherMode mode){
public static boolean cmatches(Collator collator, String base, String part, StringMatcherMode mode){
switch (mode) {
case CHECK_CONTAINS:
return ccontains(collator, fullName, part);
return ccontains(collator, base, part);
case CHECK_EQUALS_FROM_SPACE:
return cstartsWith(collator, fullName, part, true, true, true);
return cstartsWith(collator, base, part, true, true, true, false);
case CHECK_STARTS_FROM_SPACE:
return cstartsWith(collator, fullName, part, true, true, false);
return cstartsWith(collator, base, part, true, true, false, false);
case CHECK_STARTS_FROM_SPACE_NOT_BEGINNING:
return cstartsWith(collator, fullName, part, false, true, false);
return cstartsWith(collator, base, part, false, true, false, false);
case CHECK_ONLY_STARTS_WITH:
return cstartsWith(collator, fullName, part, true, false, false);
return cstartsWith(collator, base, part, true, false, false, false);
case CHECK_ONLY_STARTS_WITH_TRIM:
return cstartsWith(collator, base, part, true, false, false, true);
case CHECK_EQUALS:
return cstartsWith(collator, fullName, part, false, false, true);
return cstartsWith(collator, base, part, false, false, true, false);
}
return false;
}
@ -129,19 +116,25 @@ public class CollatorStringMatcher implements StringMatcher {
* Special check try to find as well in the middle of name
*
* @param collator
* @param fullText
* @param searchInParam
* @param theStart
* @param trim - trim theStart to searchInParam length if searchInParam non empty
* @return true if searchIn starts with token
*/
public static boolean cstartsWith(Collator collator, String fullTextP, String theStart,
boolean checkBeginning, boolean checkSpaces, boolean equals) {
String searchIn = simplifyStringAndAlignChars(fullTextP);
public static boolean cstartsWith(Collator collator, String searchInParam, String theStart,
boolean checkBeginning, boolean checkSpaces, boolean equals, boolean trim) {
String searchIn = searchInParam.toLowerCase(Locale.getDefault());
if (trim && searchIn.length() > 0) {
searchIn += " ";
}
int searchInLength = searchIn.length();
if (trim && searchInLength > 0 && theStart.length() > searchInLength) {
theStart = theStart.substring(0, searchInLength);
}
int startLength = theStart.length();
if (startLength == 0) {
return true;
}
// this is not correct because of Auhofstrasse != Auhofstraße
if (startLength > searchInLength) {
return false;
}
@ -163,8 +156,7 @@ public class CollatorStringMatcher implements StringMatcher {
if (isSpace(searchIn.charAt(i - 1)) && !isSpace(searchIn.charAt(i))) {
if (collator.equals(searchIn.substring(i, i + startLength), theStart)) {
if(equals) {
if(i + startLength == searchInLength ||
isSpace(searchIn.charAt(i + startLength))) {
if(i + startLength == searchInLength || isSpace(searchIn.charAt(i + startLength))) {
return true;
}
} else {
@ -180,17 +172,7 @@ public class CollatorStringMatcher implements StringMatcher {
return false;
}
private static String simplifyStringAndAlignChars(String fullText) {
int i;
fullText = fullText.toLowerCase(Locale.getDefault());
while( (i = fullText.indexOf('ß') ) != -1 ) {
fullText = fullText.substring(0, i) + "ss" + fullText.substring(i+1);
}
return fullText;
}
private static boolean isSpace(char c){
return !Character.isLetter(c) && !Character.isDigit(c);
}
}

File diff suppressed because it is too large Load diff

View file

@ -45,7 +45,7 @@ public interface IProgress {
public boolean isInterrupted() {return false;}
@Override
public boolean isIndeterminate() {return true;}
public boolean isIndeterminate() {return false;}
@Override
public void finishTask() {}

View file

@ -14,25 +14,23 @@ public class IndexConstants {
public static final String TEMP_SOURCE_TO_LOAD = "temp";
public static final String POI_INDEX_EXT = ".poi.odb"; //$NON-NLS-1$
public static final String ZIP_EXT = ".zip"; //$NON-NLS-1$
public static final String BINARY_MAP_INDEX_EXT = ".obf"; //$NON-NLS-1$
public static final String BINARY_MAP_INDEX_EXT_ZIP = ".obf.zip"; //$NON-NLS-1$
public static final String BINARY_WIKIVOYAGE_MAP_INDEX_EXT = ".sqlite"; //$NON-NLS-1$
public static final String BINARY_TRAVEL_GUIDE_MAP_INDEX_EXT = ".travel.obf"; //$NON-NLS-1$
public static final String BINARY_TRAVEL_GUIDE_MAP_INDEX_EXT_ZIP = ".travel.obf.zip"; //$NON-NLS-1$
public static final String BINARY_WIKI_MAP_INDEX_EXT = ".wiki.obf"; //$NON-NLS-1$
public static final String BINARY_WIKI_MAP_INDEX_EXT_ZIP = ".wiki.obf.zip"; //$NON-NLS-1$
public static final String BINARY_ROAD_MAP_INDEX_EXT = ".road.obf"; //$NON-NLS-1$
public static final String BINARY_ROAD_MAP_INDEX_EXT_ZIP = ".road.obf.zip"; //$NON-NLS-1$
public static final String BINARY_SRTM_MAP_INDEX_EXT = ".srtm.obf"; //$NON-NLS-1$
public static final String BINARY_SRTM_FEET_MAP_INDEX_EXT = ".srtmf.obf"; //$NON-NLS-1$
public static final String BINARY_SRTM_MAP_INDEX_EXT_ZIP = ".srtm.obf.zip"; //$NON-NLS-1$
public static final String BINARY_SRTM_FEET_MAP_INDEX_EXT_ZIP = ".srtmf.obf.zip"; //$NON-NLS-1$
public static final String EXTRA_EXT = ".extra";
public static final String EXTRA_ZIP_EXT = ".extra.zip";
public static final String TOUR_INDEX_EXT = ".tour"; //$NON-NLS-1$
public static final String TOUR_INDEX_EXT_ZIP = ".tour.zip"; //$NON-NLS-1$
public static final String GEN_LOG_EXT = ".gen.log"; //$NON-NLS-1$
public static final String VOICE_INDEX_EXT_ZIP = ".voice.zip"; //$NON-NLS-1$
@ -43,16 +41,9 @@ public class IndexConstants {
public static final String FONT_INDEX_EXT_ZIP = ".otf.zip"; //$NON-NLS-1$
public static final String OSMAND_SETTINGS_FILE_EXT = ".osf";
public static final String ROUTING_FILE_EXT = ".xml";
public static final String RENDERER_INDEX_EXT = ".render.xml"; //$NON-NLS-1$
public static final String GPX_FILE_EXT = ".gpx"; //$NON-NLS-1$
public static final String WPT_CHART_FILE_EXT = ".wpt.chart";
public static final String SQLITE_CHART_FILE_EXT = ".3d.chart";
public final static String POI_TABLE = "poi"; //$NON-NLS-1$
public static final String INDEX_DOWNLOAD_DOMAIN = "download.osmand.net";
@ -76,11 +67,8 @@ public class IndexConstants {
public static final String FONT_INDEX_DIR = "fonts/"; //$NON-NLS-1$
public static final String VOICE_INDEX_DIR = "voice/"; //$NON-NLS-1$
public static final String RENDERERS_DIR = "rendering/"; //$NON-NLS-1$
public static final String ROUTING_XML_FILE = "routing.xml";
public static final String ROUTING_XML_FILE= "routing.xml";
public static final String SETTINGS_DIR = "settings/"; //$NON-NLS-1$
public static final String TEMP_DIR = "temp/";
public static final String ROUTING_PROFILES_DIR = "routing/";
public static final String PLUGINS_DIR = "plugins/";
public static final String VOICE_PROVIDER_SUFFIX = "-tts";
}

View file

@ -67,12 +67,6 @@ public class Location {
mProvider = provider;
}
public Location(String provider, double lat, double lon) {
mProvider = provider;
setLatitude(lat);
setLongitude(lon);
}
/**
* Constructs a new Location object that is a copy of the given
* location.

View file

@ -15,7 +15,6 @@ public class LocationConvert {
public static final int FORMAT_SECONDS = 2;
public static final int UTM_FORMAT = 3;
public static final int OLC_FORMAT = 4;
public static final int MGRS_FORMAT = 5;
private static final char DELIM = ':';
private static final char DELIMITER_DEGREES = '°';
private static final char DELIMITER_MINUTES = '';
@ -201,20 +200,19 @@ public class LocationConvert {
private static String formatDegrees(double coordinate, int outputType, StringBuilder sb) {
if (outputType == FORMAT_DEGREES) {
sb.append(new DecimalFormat("##0.00000", new DecimalFormatSymbols(Locale.US)).format(coordinate));
sb.append(new DecimalFormat("##0.0000", new DecimalFormatSymbols(Locale.US)).format(coordinate));
sb.append(DELIMITER_DEGREES);
} else if (outputType == FORMAT_MINUTES) {
coordinate = formatCoordinate(coordinate, sb, DELIMITER_DEGREES);
sb.append(DELIMITER_SPACE);
sb.append(new DecimalFormat("00.000", new DecimalFormatSymbols(Locale.US)).format(coordinate));
sb.append(new DecimalFormat("##0.00", new DecimalFormatSymbols(Locale.US)).format(coordinate));
sb.append(DELIMITER_MINUTES);
} else if (outputType == FORMAT_SECONDS) {
coordinate = formatCoordinate(coordinate, sb, DELIMITER_DEGREES);
sb.append(DELIMITER_SPACE);
coordinate = formatCoordinate(coordinate, sb, DELIMITER_MINUTES);
sb.append(DELIMITER_SPACE);
sb.append(new DecimalFormat("00.0", new DecimalFormatSymbols(Locale.US)).format(coordinate));
sb.append(DELIMITER_SECONDS);
formatCoordinate(coordinate, sb, DELIMITER_SECONDS);
}
return sb.toString();
}

View file

@ -1,159 +0,0 @@
package net.osmand;
import net.osmand.GPXUtilities.WptPt;
import net.osmand.data.LatLon;
import net.osmand.util.Algorithms;
import java.util.ArrayList;
import java.util.List;
public class LocationsHolder {
private static final int LOCATION_TYPE_UNKNOWN = -1;
private static final int LOCATION_TYPE_LATLON = 0;
private static final int LOCATION_TYPE_LOCATION = 1;
private static final int LOCATION_TYPE_WPTPT = 2;
private List<LatLon> latLonList;
private List<Location> locationList;
private List<WptPt> wptPtList;
private int locationType;
private int size;
@SuppressWarnings("unchecked")
public LocationsHolder(List<?> locations) {
this.locationType = resolveLocationType(locations);
switch (locationType) {
case LOCATION_TYPE_LATLON:
latLonList = new ArrayList<>((List<LatLon>) locations);
size = locations.size();
break;
case LOCATION_TYPE_LOCATION:
locationList = new ArrayList<>((List<Location>) locations);
size = locations.size();
break;
case LOCATION_TYPE_WPTPT:
wptPtList = new ArrayList<>((List<WptPt>) locations);
size = locations.size();
break;
}
}
private int resolveLocationType(List<?> locations) {
if (!Algorithms.isEmpty(locations)) {
Object locationObj = locations.get(0);
if (locationObj instanceof LatLon) {
return LOCATION_TYPE_LATLON;
} else if (locationObj instanceof WptPt) {
return LOCATION_TYPE_WPTPT;
} else if (locationObj instanceof Location) {
return LOCATION_TYPE_LOCATION;
} else {
throw new IllegalArgumentException("Unsupported location type: " + locationObj.getClass().getSimpleName());
}
}
return LOCATION_TYPE_UNKNOWN;
}
public double getLatitude(int index) {
switch (locationType) {
case LOCATION_TYPE_LATLON:
return latLonList.get(index).getLatitude();
case LOCATION_TYPE_LOCATION:
return locationList.get(index).getLatitude();
case LOCATION_TYPE_WPTPT:
return wptPtList.get(index).getLatitude();
default:
return 0;
}
}
public double getLongitude(int index) {
switch (locationType) {
case LOCATION_TYPE_LATLON:
return latLonList.get(index).getLongitude();
case LOCATION_TYPE_LOCATION:
return locationList.get(index).getLongitude();
case LOCATION_TYPE_WPTPT:
return wptPtList.get(index).getLongitude();
default:
return 0;
}
}
public int getSize() {
return size;
}
@SuppressWarnings("unchecked")
private <T> List<T> getList(int locationType) {
List<T> res = new ArrayList<>();
if (size > 0) {
for (int i = 0; i < size; i++) {
switch (locationType) {
case LOCATION_TYPE_LATLON:
res.add((T) getLatLon(i));
break;
case LOCATION_TYPE_LOCATION:
res.add((T) getLocation(i));
break;
case LOCATION_TYPE_WPTPT:
res.add((T) getWptPt(i));
break;
}
}
}
return res;
}
public List<LatLon> getLatLonList() {
if (this.locationType == LOCATION_TYPE_LATLON) {
return latLonList;
} else {
return getList(LOCATION_TYPE_LATLON);
}
}
public List<WptPt> getWptPtList() {
if (this.locationType == LOCATION_TYPE_WPTPT) {
return wptPtList;
} else {
return getList(LOCATION_TYPE_WPTPT);
}
}
public List<Location> getLocationsList() {
if (this.locationType == LOCATION_TYPE_LOCATION) {
return locationList;
} else {
return getList(LOCATION_TYPE_LOCATION);
}
}
public LatLon getLatLon(int index) {
if (this.locationType == LOCATION_TYPE_LATLON) {
return latLonList.get(index);
} else {
return new LatLon(getLatitude(index), getLongitude(index));
}
}
public WptPt getWptPt(int index) {
if (this.locationType == LOCATION_TYPE_WPTPT) {
return wptPtList.get(index);
} else {
WptPt wptPt = new WptPt();
wptPt.lat = getLatitude(index);
wptPt.lon = getLongitude(index);
return wptPt;
}
}
public Location getLocation(int index) {
if (this.locationType == LOCATION_TYPE_LOCATION) {
return locationList.get(index);
} else {
return new Location("", getLatitude(index), getLongitude(index));
}
}
}

View file

@ -25,11 +25,10 @@ import net.osmand.data.MapObject;
import net.osmand.data.QuadRect;
import net.osmand.render.RenderingRuleSearchRequest;
import net.osmand.render.RenderingRulesStorage;
import net.osmand.router.NativeTransportRoutingResult;
import net.osmand.router.PrecalculatedRouteDirection;
import net.osmand.router.RouteCalculationProgress;
import net.osmand.router.RouteSegmentResult;
import net.osmand.router.RoutingContext;
import net.osmand.router.TransportRoutingConfiguration;
import net.osmand.router.RoutingConfiguration;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
@ -129,15 +128,12 @@ public class NativeLibrary {
return closeBinaryMapFile(filePath);
}
public NativeTransportRoutingResult[] runNativePTRouting(int sx31, int sy31, int ex31, int ey31,
TransportRoutingConfiguration cfg, RouteCalculationProgress progress) {
return nativeTransportRouting(new int[] { sx31, sy31, ex31, ey31 }, cfg, progress);
}
public RouteSegmentResult[] runNativeRouting(RoutingContext c, RouteRegion[] regions, boolean basemap) {
public RouteSegmentResult[] runNativeRouting(int sx31, int sy31, int ex31, int ey31, RoutingConfiguration config,
RouteRegion[] regions, RouteCalculationProgress progress, PrecalculatedRouteDirection precalculatedRouteDirection,
boolean basemap, boolean publicTransport, boolean startTransportStop, boolean targetTransportStop) {
// config.router.printRules(System.out);
return nativeRouting(c, c.config.initialDirection == null ? -360 : c.config.initialDirection.floatValue(),
regions, basemap);
return nativeRouting(new int[] { sx31, sy31, ex31, ey31 }, config, config.initialDirection == null ? -360 : config.initialDirection.floatValue(),
regions, progress, precalculatedRouteDirection, basemap, publicTransport, startTransportStop, targetTransportStop);
}
@ -153,18 +149,16 @@ public class NativeLibrary {
protected static native NativeRouteSearchResult loadRoutingData(RouteRegion reg, String regName, int regfp, RouteSubregion subreg,
boolean loadObjects);
public static native void deleteNativeRoutingContext(long handle);
protected static native void deleteRenderingContextHandle(long handle);
protected static native void deleteRouteSearchResult(long searchResultHandle);
protected static native RouteDataObject[] getRouteDataObjects(RouteRegion reg, long rs, int x31, int y31);
protected static native RouteSegmentResult[] nativeRouting(RoutingContext c, float initDirection, RouteRegion[] regions, boolean basemap);
protected static native NativeTransportRoutingResult[] nativeTransportRouting(int[] coordinates, TransportRoutingConfiguration cfg,
RouteCalculationProgress progress);
protected static native RouteSegmentResult[] nativeRouting(int[] coordinates, RoutingConfiguration r,
float initDirection, RouteRegion[] regions, RouteCalculationProgress progress,
PrecalculatedRouteDirection precalculatedRouteDirection, boolean basemap,
boolean publicTransport, boolean startTransportStop, boolean targetTransportStop);
protected static native void deleteSearchResult(long searchResultHandle);
@ -350,7 +344,6 @@ public class NativeLibrary {
FileInputStream fis = new FileInputStream(f);
Algorithms.streamCopy(fis, ous);
fis.close();
System.out.println("FONT " + name);
initFontType(ous.toByteArray(), name.substring(0, name.length() - 4), name.toLowerCase().contains("bold"),
name.toLowerCase().contains("italic"));
} catch (IOException e) {
@ -371,8 +364,6 @@ public class NativeLibrary {
private int order;
private boolean visible;
private LatLon labelLatLon;
private int labelX = 0;
private int labelY = 0;
public Map<String, String> getTags() {
return tags;
@ -442,22 +433,7 @@ public class NativeLibrary {
public void putTag(String t, String v) {
tags.put(t, v);
}
public int getLabelX() {
return labelX;
}
public int getLabelY() {
return labelY;
}
public void setLabelX(int labelX) {
this.labelX = labelX;
}
public void setLabelY(int labelY) {
this.labelY = labelY;
}
}
}

View file

@ -38,5 +38,4 @@ public class OsmAndCollator {
}
};
}
}

View file

@ -1,23 +1,20 @@
package net.osmand;
import java.text.ParseException;
import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Period {
public enum PeriodUnit {
YEAR("Y", Calendar.YEAR),
MONTH("M", Calendar.MONTH),
WEEK("W", Calendar.WEEK_OF_YEAR),
DAY("D", Calendar.DATE);
YEAR("Y"),
MONTH("M"),
WEEK("W"),
DAY("D");
private String unitStr;
private int calendarIdx;
PeriodUnit(String unitStr, int calendarIdx) {
this.calendarIdx = calendarIdx;
PeriodUnit(String unitStr) {
this.unitStr = unitStr;
}
@ -25,10 +22,6 @@ public class Period {
return unitStr;
}
public int getCalendarIdx() {
return calendarIdx;
}
public double getMonthsValue() {
switch (this) {
case YEAR:

View file

@ -23,9 +23,7 @@ public class PlatformUtil {
}
public static XmlPullParser newXMLPullParser() throws XmlPullParserException{
org.kxml2.io.KXmlParser xmlParser = new org.kxml2.io.KXmlParser();
xmlParser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
return xmlParser;
return new org.kxml2.io.KXmlParser();
}
public static XmlSerializer newSerializer() {

View file

@ -1,7 +1,6 @@
package net.osmand;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import org.apache.commons.logging.Log;
@ -20,67 +19,61 @@ public class Reshaper {
return "";
}
}
public static String reshape(String s) {
// if(true) {
// return s;
// }
try {
ArabicShaping as = new ArabicShaping(ArabicShaping.LETTERS_SHAPE |
ArabicShaping.LENGTH_GROW_SHRINK);
//printSplit("B", s);
ArabicShaping as = new ArabicShaping(ArabicShaping.LETTERS_SHAPE | ArabicShaping.LENGTH_GROW_SHRINK);
try {
s = as.shape(s);
} catch (ArabicShapingException e) {
LOG.error(e.getMessage(), e);
}
//printSplit("A", s);
Bidi line = new Bidi(s.length(), s.length());
line.setPara(s, Bidi.LEVEL_DEFAULT_LTR, null);
// line.setPara(s, Bidi.LEVEL_DEFAULT_LTR, null);
// s = line.writeReordered(Bidi.DO_MIRRORING);
// s = reordered;
line.setPara(s, Bidi.LEVEL_DEFAULT_LTR, null);
byte direction = line.getDirection();
if (direction != Bidi.MIXED) {
// unidirectional
if (line.isLeftToRight()) {
return s;
} else {
if(line.isLeftToRight()) {
return s;
} else {
char[] chs = new char[s.length()];
for(int i = 0; i< chs.length ; i++) {
// chs[i] = s.charAt(chs.length - i - 1);
chs[i] = mirror(s.charAt(chs.length - i - 1));
chs[i] = s.charAt(chs.length - i - 1);
}
return new String(chs);
}
} else {
// mixed-directional
// System.out.println(s);
// printSplit("Split", s);
// // mixed-directional
int count = line.countRuns();
// if (styleRunCount <= 1) {
// int style = styleRuns[0].style;
// // iterate over directional runs
// for (i = 0; i < count; ++i) {
// run = line.getVisualRun(i);
// renderRun(text, run.getStart(), run.getLimit(),
// run.getDirection(), style);
// }
// }
StringBuilder res = new StringBuilder();
// iterate over both directional and style runs
for (int i = 0; i < count; ++i) {
StringBuilder runs = new StringBuilder();
BidiRun run = line.getVisualRun(i);
boolean ltr = run.getDirection() == Bidi.LTR;
int start = run.getStart();
int limit = run.getLimit();
int begin = ltr ? start : limit - 1;
int end = ltr ? limit : start - 1;
int ind = begin;
while (ind != end) {
char ch = s.charAt(ind);
if (!ltr) {
ch = mirror(ch);
}
res.append(ch);
runs.append(ch);
if (ltr) {
ind++;
int st = run.getStart();
int e = run.getLimit();
int j = run.getDirection() == Bidi.LTR ? st : e - 1;
int l = run.getDirection() == Bidi.LTR ? e : st - 1;
boolean plus = run.getDirection() == Bidi.LTR;
while (j != l) {
res.append(s.charAt(j));
if (plus) {
j++;
} else {
ind--;
j--;
}
}
printSplit(run.getDirection() + " " + run.getEmbeddingLevel(), runs.toString());
}
return res.toString();
}
@ -90,77 +83,24 @@ public class Reshaper {
}
}
private static char mirror(char ch) {
switch (ch) {
case '(': ch = ')'; break;
case ')': ch = '('; break;
case '[': ch = ']'; break;
case ']': ch = '['; break;
}
return ch;
}
public static void main(String[] args) {
// char[] c = new char[] {'א', 'ד','ם', ' ', '1', '2'} ;
// String reshape = "אדם";
char[] c = new char[] {'א', 'ד','ם'} ;
String reshape = reshape(new String(c));
for(int i=0; i < reshape.length(); i++) {
System.out.println(reshape.charAt(i));
}
test2();
test3();
test4();
test5();
}
public static void test3() {
String s = "מרכז מסחרי/השלום (40050)";
String reshape = reshape(s);
String expected = "(40050) םולשה/ירחסמ זכרמ";
check(s, reshape, expected);
}
public static void test5() {
String s = "מרכז מסחרי/השלום (מרז)";
String reshape = reshape(s);
String expected = "(זרמ) םולשה/ירחסמ זכרמ";
check(s, reshape, expected);
}
public static void check(String source, String reshape, String expected) {
printSplit("Source ", source);
printSplit("Expected", expected);
printSplit("Reshaped", reshape);
System.out.println(reshape);
if (!reshape.equals(expected)) {
throw new IllegalArgumentException(String.format("Bug: expected '%s', reshaped '%s'", expected, reshape));
}
}
static void printSplit(String p, String source) {
printSplit(p, source, true);
printSplit(p, source, false);
}
static void printSplit(String p, String source, boolean f) {
System.out.print(p);
System.out.print(": \u2066");
for (int i = 0; i < source.length(); i++) {
if (f) {
System.out.print(source.charAt(i));
System.out.print(" \u200e");
} else {
System.out.print(String.format("%04x ", (int) source.charAt(i)));
}
}
// System.out.println(Arrays.toString(source.toCharArray()));
System.out.println();
System.out.flush();
}
public static void test2() {
private static void test2() {
String s = "گچ پژ نمکی باللغة العربي";
String reshape = reshape(s);
String expected1 = "ﻲﺑﺮﻌﻟﺍ ﺔﻐﻠﻟﺎﺑ ﯽﮑﻤﻧ ﮋﭘ ﭻﮔ";
String expected2 = "ﻲﺑﺮﻌﻟﺍ ﺔﻐﻠﻟﺎﺑ یکﻤﻧ ژپ چگ";
check(s, reshape, expected1);
}
public static void test4() {
String s = "Abc (123)";
check(s, reshape(s), s);
if (!reshape.equals("ﻲﺑﺮﻌﻟﺍ ﺔﻐﻠﻟﺎﺑ ﯽﮑﻤﻧ ﮋﭘ ﭻﮔ")) {
throw new IllegalArgumentException("BUG!!!");
}
}
}
}

View file

@ -106,11 +106,9 @@ public class TspAnt {
// Allocates all memory.
// Adds 1 to edge lengths to ensure no zero length edges.
public TspAnt readGraph(List<LatLon> intermediates, LatLon start, LatLon end) {
boolean keepEndPoint = end != null;
List<LatLon> l = new ArrayList<LatLon>();
if (start != null) {
l.add(start);
}
boolean keepEndPoint = end != null;
List<LatLon> l = new ArrayList<LatLon>();
l.add(start);
l.addAll(intermediates);
if (keepEndPoint) {
l.add(end);

View file

@ -68,7 +68,7 @@ public class TspHeldKarp {
}
break;
}
System.err.print(".");
System.err.printf(".");
PriorityQueue<Node> children = new PriorityQueue<Node>(11, new NodeComparator());
children.add(exclude(currentNode, i, currentNode.parent[i]));
for (int j = 0; j < n; j++) {

View file

@ -8,7 +8,6 @@ import gnu.trove.set.hash.TIntHashSet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@ -222,7 +221,7 @@ public class BinaryMapAddressReaderAdapter {
int fp = codedIS.getTotalBytesRead();
int length = codedIS.readRawVarint32();
int oldLimit = codedIS.pushLimit(length);
City c = readCityHeader(resultMatcher, new DefaultCityMatcher(matcher), fp, additionalTagsTable);
City c = readCityHeader(new DefaultCityMatcher(matcher), fp, additionalTagsTable);
if (c != null) {
if (resultMatcher == null || resultMatcher.publish(c)) {
cities.add(c);
@ -257,7 +256,6 @@ public class BinaryMapAddressReaderAdapter {
int oldLimit = codedIS.pushLimit(length);
readStreet(s, null, false, x >> 7, y >> 7, city.isPostcode() ? city.getName() : null,
attributeTagsTable);
publishRawData(resultMatcher, s);
if (resultMatcher == null || resultMatcher.publish(s)) {
city.registerStreet(s);
}
@ -305,7 +303,7 @@ public class BinaryMapAddressReaderAdapter {
}
}
protected City readCityHeader(SearchRequest<? super City> resultMatcher, CityMatcher matcher, int filePointer, List<String> additionalTagsTable) throws IOException {
protected City readCityHeader(CityMatcher matcher, int filePointer, List<String> additionalTagsTable) throws IOException {
int x = 0;
int y = 0;
City c = null;
@ -315,7 +313,6 @@ public class BinaryMapAddressReaderAdapter {
int tag = WireFormat.getTagFieldNumber(t);
switch (tag) {
case 0:
publishRawData(resultMatcher, c);
return (matcher == null || matcher.matches(c)) ? c : null;
case OsmandOdb.CityIndex.CITY_TYPE_FIELD_NUMBER:
int type = codedIS.readUInt32();
@ -448,7 +445,6 @@ public class BinaryMapAddressReaderAdapter {
if (loadBuildingsAndIntersected) {
int oldLimit = codedIS.pushLimit(length);
Building b = readBuilding(offset, x, y, additionalTagsTable);
publishRawData(buildingsMatcher, b);
if (postcodeFilter == null || postcodeFilter.equalsIgnoreCase(b.getPostcode())) {
if (buildingsMatcher == null || buildingsMatcher.publish(b)) {
s.addBuilding(b);
@ -628,9 +624,7 @@ public class BinaryMapAddressReaderAdapter {
indexOffset = codedIS.getTotalBytesRead();
int oldLimit = codedIS.pushLimit(length);
// here offsets are sorted by distance
TIntArrayList charsList = new TIntArrayList();
charsList.add(0);
map.readIndexedStringTable(stringMatcher.getCollator(), Collections.singletonList(req.nameQuery), "", Collections.singletonList(loffsets), charsList);
map.readIndexedStringTable(stringMatcher.getCollator(), req.nameQuery, "", loffsets, 0);
codedIS.popLimit(oldLimit);
break;
case OsmAndAddressNameIndexData.ATOM_FIELD_NUMBER:
@ -694,7 +688,7 @@ public class BinaryMapAddressReaderAdapter {
codedIS.seek(contOffset);
int len = codedIS.readRawVarint32();
int old = codedIS.pushLimit(len);
obj = readCityHeader(req, null, contOffset, reg.attributeTagsTable);
obj = readCityHeader(null, contOffset, reg.attributeTagsTable);
codedIS.popLimit(old);
}
if (obj != null) {
@ -707,7 +701,6 @@ public class BinaryMapAddressReaderAdapter {
readStreet(s, null, false, MapUtils.get31TileNumberX(l.getLongitude()) >> 7,
MapUtils.get31TileNumberY(l.getLatitude()) >> 7, obj.isPostcode() ? obj.getName() : null,
reg.attributeTagsTable);
publishRawData(req, s);
boolean matches = stringMatcher.matches(s.getName());
if (!matches) {
for (String n : s.getAllNames()) {
@ -734,8 +727,7 @@ public class BinaryMapAddressReaderAdapter {
codedIS.seek(offset);
int len = codedIS.readRawVarint32();
int old = codedIS.pushLimit(len);
City obj = readCityHeader(req, cityPostcodeMatcher, list.get(j), reg.attributeTagsTable);
publishRawData(req, obj);
City obj = readCityHeader(cityPostcodeMatcher, list.get(j), reg.attributeTagsTable);
if (obj != null && !published.contains(offset)) {
req.publish(obj);
published.add(offset);
@ -813,9 +805,4 @@ public class BinaryMapAddressReaderAdapter {
}
}
private <T> void publishRawData(SearchRequest<T> resultMatcher, T obj) {
if (resultMatcher != null && obj != null) {
resultMatcher.collectRawData(obj);
}
}
}

View file

@ -19,8 +19,6 @@ public class BinaryMapDataObject {
protected int[] types = null;
protected int[] additionalTypes = null;
protected int objectType = RenderingRulesStorage.POINT_RULES;
protected int labelX;
protected int labelY;
protected TIntObjectHashMap<String> objectNames = null;
protected TIntArrayList namesOrder = null;
@ -35,7 +33,7 @@ public class BinaryMapDataObject {
public BinaryMapDataObject(long id, int[] coordinates, int[][] polygonInnerCoordinates, int objectType, boolean area,
int[] types, int[] additionalTypes, int labelX, int labelY){
int[] types, int[] additionalTypes){
this.polygonInnerCoordinates = polygonInnerCoordinates;
this.coordinates = coordinates;
this.additionalTypes = additionalTypes;
@ -43,8 +41,6 @@ public class BinaryMapDataObject {
this.id = id;
this.objectType = objectType;
this.area = area;
this.labelX = labelX;
this.labelY = labelY;
}
protected void setCoordinates(int[] coordinates) {
@ -109,7 +105,7 @@ public class BinaryMapDataObject {
}
public boolean containsAdditionalType(int cachedType) {
if (cachedType != -1 && additionalTypes != null) {
if (cachedType != -1) {
for (int i = 0; i < additionalTypes.length; i++) {
if (additionalTypes[i] == cachedType) {
return true;
@ -206,80 +202,79 @@ public class BinaryMapDataObject {
&& this.id == thatObj.id
&& this.area == thatObj.area
&& compareCoordinates(this.coordinates, thatObj.coordinates, coordinatesPrecision) ) {
if (mapIndex == null) {
if(mapIndex == null) {
throw new IllegalStateException("Illegal binary object: " + id);
}
if (thatObj.mapIndex == null) {
if(thatObj.mapIndex == null) {
throw new IllegalStateException("Illegal binary object: " + thatObj.id);
}
boolean equals = true;
if (equals) {
if (polygonInnerCoordinates == null || thatObj.polygonInnerCoordinates == null) {
equals = polygonInnerCoordinates == thatObj.polygonInnerCoordinates;
} else if (polygonInnerCoordinates.length != thatObj.polygonInnerCoordinates.length) {
if(equals) {
if(polygonInnerCoordinates == null || thatObj.polygonInnerCoordinates == null) {
equals = polygonInnerCoordinates == thatObj.polygonInnerCoordinates;
} else if(polygonInnerCoordinates.length != thatObj.polygonInnerCoordinates.length){
equals = false;
} else {
for (int i = 0; i < polygonInnerCoordinates.length && equals; i++) {
if (polygonInnerCoordinates[i] == null || thatObj.polygonInnerCoordinates[i] == null) {
equals = polygonInnerCoordinates[i] == thatObj.polygonInnerCoordinates[i];
} else if (polygonInnerCoordinates[i].length != thatObj.polygonInnerCoordinates[i].length) {
for(int i = 0; i < polygonInnerCoordinates.length && equals; i++) {
if(polygonInnerCoordinates[i] == null || thatObj.polygonInnerCoordinates[i] == null) {
equals = polygonInnerCoordinates[i] == thatObj.polygonInnerCoordinates[i];
} else if(polygonInnerCoordinates[i].length != thatObj.polygonInnerCoordinates[i].length){
equals = false;
} else {
equals = compareCoordinates(polygonInnerCoordinates[i], thatObj.polygonInnerCoordinates[i],
coordinatesPrecision);
equals = compareCoordinates(polygonInnerCoordinates[i], thatObj.polygonInnerCoordinates[i], coordinatesPrecision);
}
}
}
}
if (equals) {
if (types == null || thatObj.types == null) {
equals = types == thatObj.types;
} else if (types.length != thatObj.types.length) {
if(equals) {
if(types == null || thatObj.types == null) {
equals = types == thatObj.types;
} else if(types.length != thatObj.types.length){
equals = false;
} else {
for (int i = 0; i < types.length && equals; i++) {
for(int i = 0; i < types.length && equals; i++) {
TagValuePair o = mapIndex.decodeType(types[i]);
TagValuePair s = thatObj.mapIndex.decodeType(thatObj.types[i]);
equals = o.equals(s) && equals;
}
}
}
if (equals) {
if (additionalTypes == null || thatObj.additionalTypes == null) {
equals = additionalTypes == thatObj.additionalTypes;
} else if (additionalTypes.length != thatObj.additionalTypes.length) {
if(equals) {
if(additionalTypes == null || thatObj.additionalTypes == null) {
equals = additionalTypes == thatObj.additionalTypes;
} else if(additionalTypes.length != thatObj.additionalTypes.length){
equals = false;
} else {
for (int i = 0; i < additionalTypes.length && equals; i++) {
for(int i = 0; i < additionalTypes.length && equals; i++) {
TagValuePair o = mapIndex.decodeType(additionalTypes[i]);
TagValuePair s = thatObj.mapIndex.decodeType(thatObj.additionalTypes[i]);
equals = o.equals(s);
}
}
}
if (equals) {
if (namesOrder == null || thatObj.namesOrder == null) {
equals = namesOrder == thatObj.namesOrder;
} else if (namesOrder.size() != thatObj.namesOrder.size()) {
if(equals) {
if(namesOrder == null || thatObj.namesOrder == null) {
equals = namesOrder == thatObj.namesOrder;
} else if(namesOrder.size() != thatObj.namesOrder.size()){
equals = false;
} else {
for (int i = 0; i < namesOrder.size() && equals; i++) {
for(int i = 0; i < namesOrder.size() && equals; i++) {
TagValuePair o = mapIndex.decodeType(namesOrder.get(i));
TagValuePair s = thatObj.mapIndex.decodeType(thatObj.namesOrder.get(i));
equals = o.equals(s);
}
}
}
if (equals) {
if(equals) {
// here we know that name indexes are equal & it is enough to check the value sets
if (objectNames == null || thatObj.objectNames == null) {
equals = objectNames == thatObj.objectNames;
} else if (objectNames.size() != thatObj.objectNames.size()) {
if(objectNames == null || thatObj.objectNames == null) {
equals = objectNames == thatObj.objectNames;
} else if(objectNames.size() != thatObj.objectNames.size()){
equals = false;
} else {
for (int i = 0; i < namesOrder.size() && equals; i++) {
for(int i = 0; i < namesOrder.size() && equals; i++) {
String o = objectNames.get(namesOrder.get(i));
String s = thatObj.objectNames.get(thatObj.namesOrder.get(i));
equals = Algorithms.objectEquals(o, s);
@ -362,41 +357,14 @@ public class BinaryMapDataObject {
}
public boolean isLabelSpecified() {
return (labelX != 0 || labelY != 0) && coordinates.length > 0;
}
public int getLabelX() {
long sum = 0;
int LABEL_SHIFT = 31 - BinaryMapIndexReader.LABEL_ZOOM_ENCODE;
int len = coordinates.length / 2;
for(int i = 0; i < len; i++) {
sum += coordinates[2 * i];
}
int average = ((int) (sum >> BinaryMapIndexReader.SHIFT_COORDINATES)/ len)
<< (BinaryMapIndexReader.SHIFT_COORDINATES - LABEL_SHIFT);
int label31X = (average + this.labelX) << LABEL_SHIFT;
return label31X;
}
public int getLabelY() {
long sum = 0;
int LABEL_SHIFT = 31 - BinaryMapIndexReader.LABEL_ZOOM_ENCODE;
int len = coordinates.length / 2;
for(int i = 0; i < len; i++) {
sum += coordinates[2 * i + 1];
}
int average = ((int) (sum >> BinaryMapIndexReader.SHIFT_COORDINATES)/ len)
<< (BinaryMapIndexReader.SHIFT_COORDINATES - LABEL_SHIFT);
int label31Y = (average + this.labelY) << LABEL_SHIFT;
return label31Y;
}
public int[] getCoordinates() {
return coordinates;
}
public int getObjectType() {
return objectType;
}
}
}

View file

@ -3,7 +3,6 @@ package net.osmand.binary;
import com.google.protobuf.CodedInputStream;
import com.google.protobuf.CodedOutputStream;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.WireFormat;
import net.osmand.Collator;
@ -27,7 +26,6 @@ import net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel;
import net.osmand.data.Amenity;
import net.osmand.data.Building;
import net.osmand.data.City;
import net.osmand.data.IncompleteTransportRoute;
import net.osmand.data.LatLon;
import net.osmand.data.MapObject;
import net.osmand.data.Street;
@ -78,12 +76,12 @@ import gnu.trove.map.TIntObjectMap;
import gnu.trove.map.hash.TIntObjectHashMap;
import gnu.trove.map.hash.TLongObjectHashMap;
import gnu.trove.set.hash.TIntHashSet;
import gnu.trove.set.hash.TLongHashSet;
public class BinaryMapIndexReader {
public final static int TRANSPORT_STOP_ZOOM = 24;
public static final int SHIFT_COORDINATES = 5;
public static final int LABEL_ZOOM_ENCODE = 31 - SHIFT_COORDINATES;
private final static Log log = PlatformUtil.getLog(BinaryMapIndexReader.class);
public static boolean READ_STATS = false;
public static final SearchPoiTypeFilter ACCEPT_ALL_POI_TYPE_FILTER = new SearchPoiTypeFilter() {
@ -111,8 +109,7 @@ public class BinaryMapIndexReader {
/*private*/ List<TransportIndex> transportIndexes = new ArrayList<TransportIndex>();
/*private*/ List<RouteRegion> routingIndexes = new ArrayList<RouteRegion>();
/*private*/ List<BinaryIndexPart> indexes = new ArrayList<BinaryIndexPart>();
TLongObjectHashMap<IncompleteTransportRoute> incompleteTransportRoutes = null;
protected CodedInputStream codedIS;
private final BinaryMapTransportReaderAdapter transportAdapter;
@ -431,10 +428,7 @@ public class BinaryMapIndexReader {
if (ls.endsWith("_2")) {
ls = ls.substring(0, ls.length() - "_2".length());
}
if (ls.lastIndexOf('_') != -1) {
ls = ls.substring(0, ls.lastIndexOf('_')).replace('_', ' ');
}
return ls;
return ls.substring(0, ls.lastIndexOf('_')).replace('_', ' ');
}
}
@ -496,7 +490,7 @@ public class BinaryMapIndexReader {
}
}
Iterator<Entry<TransportIndex, TIntArrayList>> it = groupPoints.entrySet().iterator();
while (it.hasNext()) {
if (it.hasNext()) {
Entry<TransportIndex, TIntArrayList> e = it.next();
TransportIndex ind = e.getKey();
TIntArrayList pointers = e.getValue();
@ -511,7 +505,7 @@ public class BinaryMapIndexReader {
finishInit.add(transportRoute);
}
TIntObjectHashMap<String> indexedStringTable = transportAdapter.initializeStringTable(ind, stringTable);
for (TransportRoute transportRoute : finishInit) {
for(TransportRoute transportRoute : finishInit ) {
transportAdapter.initializeNames(false, transportRoute, indexedStringTable);
}
@ -696,7 +690,6 @@ public class BinaryMapIndexReader {
private void readMapIndex(MapIndex index, boolean onlyInitEncodingRules) throws IOException {
int defaultId = 1;
int oldLimit;
int encodingRulesSize = 0;
while (true) {
int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t);
@ -713,14 +706,10 @@ public class BinaryMapIndexReader {
break;
case OsmandOdb.OsmAndMapIndex.RULES_FIELD_NUMBER :
if (onlyInitEncodingRules) {
if(encodingRulesSize == 0) {
encodingRulesSize = codedIS.getTotalBytesRead();
}
int len = codedIS.readInt32();
oldLimit = codedIS.pushLimit(len);
readMapEncodingRule(index, defaultId++);
codedIS.popLimit(oldLimit);
index.encodingRulesSizeBytes = (codedIS.getTotalBytesRead() - encodingRulesSize);
} else {
skipUnknownField(t);
}
@ -1147,7 +1136,6 @@ public class BinaryMapIndexReader {
TIntObjectHashMap<String> stringNames = null;
TIntArrayList stringOrder = null;
long id = 0;
int labelX = 0, labelY = 0;
boolean loop = true;
while (loop) {
@ -1244,26 +1232,6 @@ public class BinaryMapIndexReader {
req.stat.lastStringNamesSize += sizeL;
}
break;
case OsmandOdb.MapData.LABELCOORDINATES_FIELD_NUMBER:
sizeL = codedIS.readRawVarint32();
old = codedIS.pushLimit(sizeL);
int i = 0;
while (codedIS.getBytesUntilLimit() > 0) {
if (i == 0) {
labelX = codedIS.readSInt32();
} else if (i == 1) {
labelY = codedIS.readSInt32();
} else {
codedIS.readRawVarint32();
}
i++;
}
codedIS.popLimit(old);
if (READ_STATS) {
req.stat.addTagHeader(OsmandOdb.MapData.LABELCOORDINATES_FIELD_NUMBER, sizeL);
req.stat.lastObjectLabelCoordinates += sizeL;
}
break;
default:
skipUnknownField(t);
break;
@ -1291,9 +1259,6 @@ public class BinaryMapIndexReader {
dataObject.id = id;
dataObject.area = area;
dataObject.mapIndex = root;
dataObject.labelX = labelX;
dataObject.labelY = labelY;
return dataObject;
}
@ -1318,12 +1283,6 @@ public class BinaryMapIndexReader {
poiAdapter.initCategories(poiIndex);
}
public void initCategories() throws IOException {
for (PoiRegion poiIndex : poiIndexes) {
poiAdapter.initCategories(poiIndex);
}
}
public List<Amenity> searchPoiByName(SearchRequest<Amenity> req) throws IOException {
if (req.nameQuery == null || req.nameQuery.length() == 0) {
throw new IllegalArgumentException();
@ -1429,7 +1388,7 @@ public class BinaryMapIndexReader {
return addressIndexes;
}
public List<PoiRegion> getPoiIndexes() {
protected List<PoiRegion> getPoiIndexes() {
return poiIndexes;
}
@ -1462,14 +1421,8 @@ public class BinaryMapIndexReader {
public static <T> SearchRequest<T> buildAddressByNameRequest(ResultMatcher<T> resultMatcher, String nameRequest,
StringMatcherMode matcherMode) {
return buildAddressByNameRequest(resultMatcher, null, nameRequest, matcherMode);
}
public static <T> SearchRequest<T> buildAddressByNameRequest(ResultMatcher<T> resultMatcher, ResultMatcher<T> rawDataCollector, String nameRequest,
StringMatcherMode matcherMode) {
SearchRequest<T> request = new SearchRequest<T>();
request.resultMatcher = resultMatcher;
request.rawDataCollector = rawDataCollector;
request.nameQuery = nameRequest.trim();
request.matcherMode = matcherMode;
return request;
@ -1538,20 +1491,9 @@ public class BinaryMapIndexReader {
return request;
}
public static SearchRequest<Amenity> buildSearchPoiRequest(LatLon latLon, int radius, int zoom,
SearchPoiTypeFilter poiTypeFilter,
ResultMatcher<Amenity> matcher) {
SearchRequest<Amenity> request = new SearchRequest<>();
request.setBBoxRadius(latLon.getLatitude(), latLon.getLongitude(), radius);
request.zoom = zoom;
request.poiTypeFilter = poiTypeFilter;
request.resultMatcher = matcher;
return request;
}
public static SearchRequest<RouteDataObject> buildSearchRouteRequest(int sleft, int sright, int stop, int sbottom,
ResultMatcher<RouteDataObject> matcher) {
public static SearchRequest<RouteDataObject> buildSearchRouteRequest(int sleft, int sright, int stop, int sbottom,
ResultMatcher<RouteDataObject> matcher){
SearchRequest<RouteDataObject> request = new SearchRequest<RouteDataObject>();
request.left = sleft;
request.right = sright;
@ -1564,14 +1506,6 @@ public class BinaryMapIndexReader {
public static SearchRequest<Amenity> buildSearchPoiRequest(int x, int y, String nameFilter, int sleft, int sright, int stop, int sbottom, ResultMatcher<Amenity> resultMatcher) {
return buildSearchPoiRequest(x, y, nameFilter, sleft, sright, stop, sbottom, resultMatcher, null);
}
public static SearchRequest<Amenity> buildSearchPoiRequest(int x, int y, String nameFilter, int sleft, int sright, int stop, int sbottom, ResultMatcher<Amenity> resultMatcher, ResultMatcher<Amenity> rawDataCollector) {
return buildSearchPoiRequest(x, y, nameFilter, sleft, sright, stop, sbottom, null, resultMatcher, null);
}
public static SearchRequest<Amenity> buildSearchPoiRequest(int x, int y, String nameFilter, int sleft, int sright, int stop, int sbottom, SearchPoiTypeFilter poiTypeFilter, ResultMatcher<Amenity> resultMatcher, ResultMatcher<Amenity> rawDataCollector) {
SearchRequest<Amenity> request = new SearchRequest<Amenity>();
request.x = x;
request.y = y;
@ -1579,9 +1513,7 @@ public class BinaryMapIndexReader {
request.right = sright;
request.top = stop;
request.bottom = sbottom;
request.poiTypeFilter = poiTypeFilter;
request.resultMatcher = resultMatcher;
request.rawDataCollector = rawDataCollector;
request.nameQuery = nameFilter.trim();
return request;
}
@ -1630,7 +1562,6 @@ public class BinaryMapIndexReader {
public int lastObjectAdditionalTypes;
public int lastObjectTypes;
public int lastObjectCoordinates;
public int lastObjectLabelCoordinates;
public int lastObjectSize;
public int lastBlockStringTableSize;
@ -1655,7 +1586,6 @@ public class BinaryMapIndexReader {
lastObjectAdditionalTypes = 0;
lastObjectTypes = 0;
lastObjectCoordinates = 0;
lastObjectLabelCoordinates = 0;
}
}
@ -1666,7 +1596,6 @@ public class BinaryMapIndexReader {
private boolean ocean = false;
private ResultMatcher<T> resultMatcher;
private ResultMatcher<T> rawDataCollector;
// 31 zoom tiles
// common variables
@ -1727,12 +1656,13 @@ public class BinaryMapIndexReader {
double half16t = MapUtils.getDistance(lat, MapUtils.getLongitudeFromTile(16, ((int) dx) + 0.5),
lat, MapUtils.getLongitudeFromTile(16, (int) dx));
double cf31 = ((double) radiusMeters / (half16t * 2)) * (1 << 15);
y = MapUtils.get31TileNumberY(lat);
x = MapUtils.get31TileNumberX(lon);
left = (int) (x - cf31);
right = (int) (x + cf31);
top = (int) (y - cf31);
bottom = (int) (y + cf31);
int y31 = MapUtils.get31TileNumberY(lat);
int x31 = MapUtils.get31TileNumberX(lon);
left = (int) (x31 - cf31);
right = (int) (x31 + cf31);
top = (int) (y31 - cf31);
bottom = (int) (y31 + cf31);
}
public boolean publish(T obj) {
@ -1743,12 +1673,6 @@ public class BinaryMapIndexReader {
return false;
}
public void collectRawData(T obj) {
if (rawDataCollector != null) {
rawDataCollector.publish(obj);
}
}
protected void publishOceanTile(boolean ocean) {
if (ocean) {
this.ocean = true;
@ -1769,10 +1693,6 @@ public class BinaryMapIndexReader {
return limit != -1 && searchResults.size() > limit;
}
public void setLimit(int limit) {
this.limit = limit;
}
public boolean isCancelled() {
if (this.interrupted) {
return interrupted;
@ -1853,13 +1773,10 @@ public class BinaryMapIndexReader {
public int onewayReverseAttribute = -1;
public TIntHashSet positiveLayers = new TIntHashSet(2);
public TIntHashSet negativeLayers = new TIntHashSet(2);
public int encodingRulesSizeBytes;
// to speed up comparision
private MapIndex referenceMapIndex;
public Integer getRule(String t, String v) {
Map<String, Integer> m = encodingRules.get(t);
if (m != null) {
@ -2000,8 +1917,7 @@ public class BinaryMapIndexReader {
BinaryMapDataObject bm =
new BinaryMapDataObject(o.id, o.coordinates, o.polygonInnerCoordinates, o.objectType, o.area,
types.toArray(), additionalTypes.isEmpty() ? null : additionalTypes.toArray(),
o.labelX, o.labelY);
types.toArray(), additionalTypes.isEmpty() ? null : additionalTypes.toArray());
if (o.namesOrder != null) {
bm.objectNames = new TIntObjectHashMap<>();
bm.namesOrder = new TIntArrayList();
@ -2161,9 +2077,9 @@ public class BinaryMapIndexReader {
private static boolean testAddressSearch = false;
private static boolean testAddressSearchName = false;
private static boolean testAddressJustifySearch = false;
private static boolean testPoiSearch = true;
private static boolean testPoiSearch = false;
private static boolean testPoiSearchOnPath = false;
private static boolean testTransportSearch = false;
private static boolean testTransportSearch = true;
private static int sleft = MapUtils.get31TileNumberX(27.55079);
private static int sright = MapUtils.get31TileNumberX(27.55317);
@ -2177,7 +2093,7 @@ public class BinaryMapIndexReader {
public static void main(String[] args) throws IOException {
File fl = new File(System.getProperty("maps") + "/Synthetic_test_rendering.obf");
fl = new File(System.getProperty("maps") +"/Wikivoyage.obf__");
fl = new File(System.getProperty("maps") + "/Belarus_europe_2.obf");
RandomAccessFile raf = new RandomAccessFile(fl, "r");
@ -2285,6 +2201,7 @@ public class BinaryMapIndexReader {
private static List<Location> readGPX(File f) {
List<Location> res = new ArrayList<Location>();
try {
StringBuilder content = new StringBuilder();
BufferedReader reader = new BufferedReader(getUTF8Reader(new FileInputStream(f)));
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder dom = factory.newDocumentBuilder();
@ -2301,6 +2218,7 @@ public class BinaryMapIndexReader {
// Document doc = dom.parse(new InputSource(new StringReader(content.toString())));
Document doc = dom.parse(new InputSource(reader));
NodeList list = doc.getElementsByTagName("trkpt");
Way w = new Way(-1);
for (int i = 0; i < list.getLength(); i++) {
Element item = (Element) list.item(i);
try {
@ -2325,7 +2243,7 @@ public class BinaryMapIndexReader {
private static void testPoiSearchByName(BinaryMapIndexReader reader) throws IOException {
println("Searching by name...");
SearchRequest<Amenity> req = buildSearchPoiRequest(0, 0, "central ukraine",
SearchRequest<Amenity> req = buildSearchPoiRequest(0, 0, "Art",
0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE, null);
reader.searchPoiByName(req);
@ -2385,72 +2303,54 @@ public class BinaryMapIndexReader {
}
void readIndexedStringTable(Collator instance, List<String> queries, String prefix, List<TIntArrayList> listOffsets, TIntArrayList matchedCharacters) throws IOException {
int readIndexedStringTable(Collator instance, String query, String prefix, TIntArrayList list, int charMatches) throws IOException {
String key = null;
boolean[] matched = new boolean[matchedCharacters.size()];
boolean shouldWeReadSubtable = false;
while (true) {
int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t);
switch (tag) {
case 0:
return;
return charMatches;
case OsmandOdb.IndexedStringTable.KEY_FIELD_NUMBER :
key = codedIS.readString();
if (prefix.length() > 0) {
if(prefix.length() > 0){
key = prefix + key;
}
shouldWeReadSubtable = false;
for (int i = 0; i < queries.size(); i++) {
int charMatches = matchedCharacters.get(i);
String query = queries.get(i);
matched[i] = false;
if (query == null) {
continue;
}
// check query is part of key (the best matching)
if (CollatorStringMatcher.cmatches(instance, key, query, StringMatcherMode.CHECK_ONLY_STARTS_WITH)) {
if (query.length() >= charMatches) {
if (query.length() > charMatches) {
matchedCharacters.set(i, query.length());
listOffsets.get(i).clear();
}
matched[i] = true;
}
// check key is part of query
} else if (CollatorStringMatcher.cmatches(instance, query, key, StringMatcherMode.CHECK_ONLY_STARTS_WITH)) {
if (key.length() >= charMatches) {
if (key.length() > charMatches) {
matchedCharacters.set(i, key.length());
listOffsets.get(i).clear();
}
matched[i] = true;
// check query is part of key (the best matching)
if(CollatorStringMatcher.cmatches(instance, key, query, StringMatcherMode.CHECK_ONLY_STARTS_WITH)){
if(query.length() >= charMatches){
if(query.length() > charMatches){
charMatches = query.length();
list.clear();
}
} else {
key = null;
}
shouldWeReadSubtable |= matched[i];
// check key is part of query
} else if (CollatorStringMatcher.cmatches(instance, query, key, StringMatcherMode.CHECK_ONLY_STARTS_WITH)) {
if (key.length() >= charMatches) {
if (key.length() > charMatches) {
charMatches = key.length();
list.clear();
}
} else {
key = null;
}
} else {
key = null;
}
break;
case OsmandOdb.IndexedStringTable.VAL_FIELD_NUMBER :
int val = readInt();
for (int i = 0; i < queries.size(); i++) {
if (matched[i]) {
listOffsets.get(i).add(val);
}
if (key != null) {
list.add(val);
}
break;
case OsmandOdb.IndexedStringTable.SUBTABLES_FIELD_NUMBER :
int len = codedIS.readRawVarint32();
int oldLim = codedIS.pushLimit(len);
if (shouldWeReadSubtable && key != null) {
List<String> subqueries = new ArrayList<>(queries);
// reset query so we don't search what was not matched
for(int i = 0; i < queries.size(); i++) {
if(!matched[i]) {
subqueries.set(i, null);
}
}
readIndexedStringTable(instance, subqueries, key, listOffsets, matchedCharacters);
if (key != null) {
charMatches = readIndexedStringTable(instance, query, key, list, charMatches);
} else {
codedIS.skipRawBytes(codedIS.getBytesUntilLimit());
}
@ -2538,9 +2438,8 @@ public class BinaryMapIndexReader {
}
}
}
for (Entry<MapObject, Street> entry : resMap.entrySet()) {
MapObject e = entry.getKey();
Street s = entry.getValue();
for (MapObject e : resMap.keySet()) {
Street s = resMap.get(e);
if (e instanceof Building && MapUtils.getDistance(e.getLocation(), lat, lon) < 40) {
Building b = (Building) e;
System.out.println(b.getName() + " " + s);
@ -2701,20 +2600,5 @@ public class BinaryMapIndexReader {
}
}
public TLongObjectHashMap<IncompleteTransportRoute> getIncompleteTransportRoutes() throws InvalidProtocolBufferException, IOException {
if (incompleteTransportRoutes == null) {
incompleteTransportRoutes = new TLongObjectHashMap<>();
for (TransportIndex ti : transportIndexes) {
if (ti.incompleteRoutesLength > 0) {
codedIS.seek(ti.incompleteRoutesOffset);
int oldLimit = codedIS.pushLimit(ti.incompleteRoutesLength);
transportAdapter.readIncompleteRoutesList(incompleteTransportRoutes, ti.filePointer);
codedIS.popLimit(oldLimit);
}
}
}
return incompleteTransportRoutes;
}
}

View file

@ -1,21 +1,19 @@
package net.osmand.binary;
import gnu.trove.list.array.TIntArrayList;
import gnu.trove.map.hash.TIntLongHashMap;
import gnu.trove.set.hash.TLongHashSet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.logging.Log;
import com.google.protobuf.CodedInputStream;
import com.google.protobuf.WireFormat;
import gnu.trove.list.array.TIntArrayList;
import gnu.trove.map.hash.TIntLongHashMap;
import gnu.trove.set.hash.TLongHashSet;
import net.osmand.Collator;
import net.osmand.CollatorStringMatcher;
import net.osmand.CollatorStringMatcher.StringMatcherMode;
@ -30,6 +28,11 @@ import net.osmand.osm.MapPoiTypes;
import net.osmand.osm.PoiCategory;
import net.osmand.util.MapUtils;
import org.apache.commons.logging.Log;
import com.google.protobuf.CodedInputStream;
import com.google.protobuf.WireFormat;
public class BinaryMapPoiReaderAdapter {
private static final Log LOG = PlatformUtil.getLog(BinaryMapPoiReaderAdapter.class);
@ -37,12 +40,7 @@ public class BinaryMapPoiReaderAdapter {
private static final int CATEGORY_MASK = (1 << SHIFT_BITS_CATEGORY) - 1;
private static final int ZOOM_TO_SKIP_FILTER_READ = 6;
private static final int ZOOM_TO_SKIP_FILTER = 3;
private static final int BUCKET_SEARCH_BY_NAME = 15; // should be bigger 100?
private static final int BASE_POI_SHIFT = SHIFT_BITS_CATEGORY;// 7
private static final int FINAL_POI_SHIFT = BinaryMapIndexReader.SHIFT_COORDINATES;// 5
private static final int BASE_POI_ZOOM = 31 - BASE_POI_SHIFT;// 24 zoom
private static final int FINAL_POI_ZOOM = 31 - FINAL_POI_SHIFT;// 26 zoom
private static final int BUCKET_SEARCH_BY_NAME = 5;
public static class PoiSubType {
public boolean text;
@ -226,7 +224,7 @@ public class BinaryMapPoiReaderAdapter {
case OsmandOdb.OsmAndCategoryTable.CATEGORY_FIELD_NUMBER:
String cat = codedIS.readString().intern();
region.categories.add(cat);
region.categoriesType.add(poiTypes.getPoiCategoryByName(cat.toLowerCase(), true));
region.categoriesType.add(poiTypes.getPoiCategoryByName(cat.toLowerCase()));
region.subcategories.add(new ArrayList<String>());
break;
case OsmandOdb.OsmAndCategoryTable.SUBCATEGORIES_FIELD_NUMBER:
@ -336,7 +334,7 @@ public class BinaryMapPoiReaderAdapter {
});
int p = BUCKET_SEARCH_BY_NAME * 3;
if (p < offKeys.length) {
for (int i = p + BUCKET_SEARCH_BY_NAME;; i += BUCKET_SEARCH_BY_NAME) {
for (int i = p + BUCKET_SEARCH_BY_NAME; ; i += BUCKET_SEARCH_BY_NAME) {
if (i > offKeys.length) {
Arrays.sort(offKeys, p, offKeys.length);
break;
@ -348,6 +346,7 @@ public class BinaryMapPoiReaderAdapter {
}
}
LOG.info("Searched poi structure in " + (System.currentTimeMillis() - time) +
"ms. Found " + offKeys.length + " subtrees");
for (int j = 0; j < offKeys.length; j++) {
@ -373,8 +372,7 @@ public class BinaryMapPoiReaderAdapter {
private TIntLongHashMap readPoiNameIndex(Collator instance, String query, SearchRequest<Amenity> req) throws IOException {
TIntLongHashMap offsets = new TIntLongHashMap();
List<TIntArrayList> listOffsets = null;
List<TIntLongHashMap> listOfSepOffsets = new ArrayList<TIntLongHashMap>();
TIntArrayList dataOffsets = null;
int offset = 0;
while (true) {
int t = codedIS.readTag();
@ -385,51 +383,24 @@ public class BinaryMapPoiReaderAdapter {
case OsmandOdb.OsmAndPoiNameIndex.TABLE_FIELD_NUMBER: {
int length = readInt();
int oldLimit = codedIS.pushLimit(length);
dataOffsets = new TIntArrayList();
offset = codedIS.getTotalBytesRead();
List<String> queries = new ArrayList<>();
for (String word : query.split(" ")) {
if (word.trim().length() > 0) {
queries.add(word.trim());
}
}
TIntArrayList charsList = new TIntArrayList(queries.size());
listOffsets = new ArrayList<TIntArrayList>(queries.size());
while(listOffsets.size() < queries.size()) {
charsList.add(0);
listOffsets.add(new TIntArrayList());
}
map.readIndexedStringTable(instance, queries, "", listOffsets, charsList);
map.readIndexedStringTable(instance, query, "", dataOffsets, 0);
codedIS.popLimit(oldLimit);
break;
}
case OsmandOdb.OsmAndPoiNameIndex.DATA_FIELD_NUMBER: {
if (listOffsets != null) {
for (TIntArrayList dataOffsets : listOffsets) {
TIntLongHashMap offsetMap = new TIntLongHashMap();
listOfSepOffsets.add(offsetMap);
dataOffsets.sort(); // 1104125
for (int i = 0; i < dataOffsets.size(); i++) {
codedIS.seek(dataOffsets.get(i) + offset);
int len = codedIS.readRawVarint32();
int oldLim = codedIS.pushLimit(len);
readPoiNameIndexData(offsetMap, req);
codedIS.popLimit(oldLim);
if (req.isCancelled()) {
codedIS.skipRawBytes(codedIS.getBytesUntilLimit());
return offsets;
}
}
}
}
if (listOfSepOffsets.size() > 0) {
offsets.putAll(listOfSepOffsets.get(0));
for (int j = 1; j < listOfSepOffsets.size(); j++) {
TIntLongHashMap mp = listOfSepOffsets.get(j);
// offsets.retainAll(mp); -- calculate intresection of mp & offsets
for (int chKey : offsets.keys()) {
if (!mp.containsKey(chKey)) {
offsets.remove(chKey);
}
if (dataOffsets != null) {
dataOffsets.sort(); // 1104125
for (int i = 0; i < dataOffsets.size(); i++) {
codedIS.seek(dataOffsets.get(i) + offset);
int len = codedIS.readRawVarint32();
int oldLim = codedIS.pushLimit(len);
readPoiNameIndexData(offsets, req);
codedIS.popLimit(oldLim);
if (req.isCancelled()) {
codedIS.skipRawBytes(codedIS.getBytesUntilLimit());
return offsets;
}
}
}
@ -605,12 +576,13 @@ public class BinaryMapPoiReaderAdapter {
}
}
if (!matches) {
for (String key : am.getAdditionalInfoKeys()) {
if(!key.contains("_name") &&
!key.equals("brand")) {
Map<String, String> lt = am.getAdditionalInfo();
for (Entry<String, String> e : lt.entrySet()) {
if(!e.getKey().contains("_name") &&
!e.getKey().equals("brand")) {
continue;
}
matches = matcher.matches(am.getAdditionalInfo(key));
matches = matcher.matches(e.getValue());
if (matches) {
break;
}
@ -618,7 +590,6 @@ public class BinaryMapPoiReaderAdapter {
}
}
if (matches) {
req.collectRawData(am);
req.publish(am);
}
}
@ -665,7 +636,6 @@ public class BinaryMapPoiReaderAdapter {
int yp = (int) MapUtils.getTileNumberY(zSkip, am.getLocation().getLatitude());
long valSkip = (((long) xp) << zSkip) | yp;
if (!toSkip.contains(valSkip)) {
req.collectRawData(am);
boolean publish = req.publish(am);
if (publish) {
read = true;
@ -676,7 +646,6 @@ public class BinaryMapPoiReaderAdapter {
return read;
}
} else {
req.collectRawData(am);
if (req.publish(am)) {
read = true;
}
@ -719,8 +688,6 @@ public class BinaryMapPoiReaderAdapter {
Amenity am = null;
int x = 0;
int y = 0;
int precisionXY = 0;
boolean hasLocation = false;
StringBuilder retValue = new StringBuilder();
PoiCategory amenityType = null;
LinkedList<String> textTags = null;
@ -747,22 +714,12 @@ public class BinaryMapPoiReaderAdapter {
am.setRoutePoint(arp);
}
}
if (hasLocation) {
if (precisionXY != 0) {
int[] xy = MapUtils.calculateFinalXYFromBaseAndPrecisionXY(BASE_POI_ZOOM, FINAL_POI_ZOOM, precisionXY, x >> BASE_POI_SHIFT, y >> BASE_POI_SHIFT, true);
int x31 = xy[0] << FINAL_POI_SHIFT;
int y31 = xy[1] << FINAL_POI_SHIFT;
am.setLocation(MapUtils.get31LatitudeY(y31), MapUtils.get31LongitudeX(x31));
} else {
am.setLocation(MapUtils.get31LatitudeY(y), MapUtils.get31LongitudeX(x));
}
}
return am;
case OsmandOdb.OsmAndPoiBoxDataAtom.DX_FIELD_NUMBER:
x = (codedIS.readSInt32() + (px << (BASE_POI_ZOOM - zoom))) << BASE_POI_SHIFT;
x = (codedIS.readSInt32() + (px << (24 - zoom))) << 7;
break;
case OsmandOdb.OsmAndPoiBoxDataAtom.DY_FIELD_NUMBER:
y = (codedIS.readSInt32() + (py << (BASE_POI_ZOOM - zoom))) << BASE_POI_SHIFT;
y = (codedIS.readSInt32() + (py << (24 - zoom))) << 7;
req.numberOfVisitedObjects++;
if (checkBounds) {
if (left31 > x || right31 < x || top31 > y || bottom31 < y) {
@ -771,8 +728,7 @@ public class BinaryMapPoiReaderAdapter {
}
}
am = new Amenity();
hasLocation = true;
//am.setLocation(MapUtils.get31LatitudeY(y), MapUtils.get31LongitudeX(x)); // set precise coordinates
am.setLocation(MapUtils.get31LatitudeY(y), MapUtils.get31LongitudeX(x));
break;
case OsmandOdb.OsmAndPoiBoxDataAtom.SUBCATEGORIES_FIELD_NUMBER:
int subtypev = codedIS.readUInt32();
@ -813,8 +769,7 @@ public class BinaryMapPoiReaderAdapter {
}
}
subtype = poiTypes.replaceDeprecatedSubtype(type, subtype);
boolean isForbidden = poiTypes.isTypeForbidden(subtype);
if (!isForbidden && (req.poiTypeFilter == null || req.poiTypeFilter.accept(type, subtype))) {
if (req.poiTypeFilter == null || req.poiTypeFilter.accept(type, subtype)) {
if (amenityType == null) {
amenityType = type;
am.setSubType(subtype);
@ -845,11 +800,6 @@ public class BinaryMapPoiReaderAdapter {
case OsmandOdb.OsmAndPoiBoxDataAtom.NOTE_FIELD_NUMBER:
am.setDescription(codedIS.readString());
break;
case OsmandOdb.OsmAndPoiBoxDataAtom.PRECISIONXY_FIELD_NUMBER:
if (hasLocation) {
precisionXY = codedIS.readInt32();
}
break;
default:
skipUnknownField(t);
break;
@ -858,6 +808,7 @@ public class BinaryMapPoiReaderAdapter {
}
private boolean checkCategories(SearchRequest<Amenity> req, PoiRegion region) throws IOException {
StringBuilder subType = new StringBuilder();
while (true) {
int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t);

View file

@ -1,8 +1,19 @@
package net.osmand.binary;
import com.google.protobuf.CodedInputStream;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.WireFormat;
import gnu.trove.iterator.TLongObjectIterator;
import gnu.trove.list.array.TIntArrayList;
import gnu.trove.list.array.TLongArrayList;
import gnu.trove.map.hash.TIntObjectHashMap;
import gnu.trove.map.hash.TLongObjectHashMap;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import net.osmand.PlatformUtil;
import net.osmand.ResultMatcher;
@ -14,51 +25,27 @@ import net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule;
import net.osmand.binary.OsmandOdb.RestrictionData;
import net.osmand.binary.OsmandOdb.RouteData;
import net.osmand.binary.RouteDataObject.RestrictionInfo;
import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils;
import net.osmand.util.OpeningHoursParser;
import org.apache.commons.logging.Log;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import gnu.trove.iterator.TLongObjectIterator;
import gnu.trove.list.array.TIntArrayList;
import gnu.trove.list.array.TLongArrayList;
import gnu.trove.map.hash.TIntObjectHashMap;
import gnu.trove.map.hash.TLongObjectHashMap;
import com.google.protobuf.CodedInputStream;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.WireFormat;
public class BinaryMapRouteReaderAdapter {
protected static final Log LOG = PlatformUtil.getLog(BinaryMapRouteReaderAdapter.class);
private static final int SHIFT_COORDINATES = 4;
private static class RouteTypeCondition implements StringExternalizable<RouteDataBundle> {
private static class RouteTypeCondition {
String condition = "";
OpeningHoursParser.OpeningHours hours = null;
String value;
int ruleid;
@Override
public void writeToBundle(RouteDataBundle bundle) {
bundle.putString("c", condition);
bundle.putString("v", value);
bundle.putInt("id", ruleid);
}
@Override
public void readFromBundle(RouteDataBundle bundle) {
}
}
public static class RouteTypeRule implements StringExternalizable<RouteDataBundle> {
public static class RouteTypeRule {
private final static int ACCESS = 1;
private final static int ONEWAY = 2;
private final static int HIGHWAY_TYPE = 3;
@ -67,26 +54,23 @@ public class BinaryMapRouteReaderAdapter {
public final static int TRAFFIC_SIGNALS = 6;
public final static int RAILWAY_CROSSING = 7;
private final static int LANES = 8;
private String t;
private String v;
private final String t;
private final String v;
private int intValue;
private float floatValue;
private int type;
private List<RouteTypeCondition> conditions = null;
private int forward;
public RouteTypeRule() {
}
public RouteTypeRule(String t, String v) {
this.t = t.intern();
if ("true".equals(v)) {
if("true".equals(v)) {
v = "yes";
}
if ("false".equals(v)) {
if("false".equals(v)) {
v = "no";
}
this.v = v == null ? null : v.intern();
this.v = v == null? null : v.intern();
try {
analyze();
} catch(RuntimeException e) {
@ -95,52 +79,6 @@ public class BinaryMapRouteReaderAdapter {
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((t == null) ? 0 : t.hashCode());
result = prime * result + ((v == null) ? 0 : v.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
RouteTypeRule other = (RouteTypeRule) obj;
return Algorithms.objectEquals(other.t, t) && Algorithms.objectEquals(other.v, v);
}
@Override
public void writeToBundle(RouteDataBundle bundle) {
bundle.putString("t", t);
if (v != null) {
bundle.putString("v", v);
}
}
@Override
public void readFromBundle(RouteDataBundle bundle) {
t = bundle.getString("t", null);
v = bundle.getString("v", null);
try {
analyze();
} catch(RuntimeException e) {
System.err.println("Error analyzing tag/value = " + t + "/" +v);
throw e;
}
}
@Override
public String toString() {
return t + "=" + v;
}
public int isForward() {
return forward;
}
@ -172,7 +110,7 @@ public class BinaryMapRouteReaderAdapter {
}
return tag;
}
public int onewayDirection(){
if(type == ONEWAY){
return intValue;
@ -293,29 +231,20 @@ public class BinaryMapRouteReaderAdapter {
public static class RouteRegion extends BinaryIndexPart {
public int regionsRead;
public List<RouteTypeRule> routeEncodingRules = new ArrayList<BinaryMapRouteReaderAdapter.RouteTypeRule>();
public int routeEncodingRulesBytes = 0;
public Map<String, Integer> decodingRules = null;
List<RouteSubregion> subregions = new ArrayList<RouteSubregion>();
List<RouteSubregion> basesubregions = new ArrayList<RouteSubregion>();
public int directionForward = -1;
public int directionBackward = -1;
public int directionTrafficSignalsForward = -1;
public int directionTrafficSignalsBackward = -1;
public int trafficSignals = -1;
public int stopSign = -1;
public int stopMinor = -1;
public int giveWaySign = -1;
int nameTypeRule = -1;
int refTypeRule = -1;
int destinationTypeRule = -1;
int destinationRefTypeRule = -1;
private RouteRegion referenceRouteRegion;
public String getPartName() {
return "Routing";
}
public int getFieldNumber() {
return OsmandOdb.OsmAndStructure.ROUTINGINDEX_FIELD_NUMBER;
@ -336,15 +265,7 @@ public class BinaryMapRouteReaderAdapter {
}
return -1;
}
public int getNameTypeRule() {
return nameTypeRule;
}
public int getRefTypeRule() {
return refTypeRule;
}
public RouteTypeRule quickGetEncodingRule(int id) {
return routeEncodingRules.get(id);
}
@ -363,30 +284,9 @@ public class BinaryMapRouteReaderAdapter {
destinationTypeRule = id;
} else if (tags.equals("destination:ref") || tags.equals("destination:ref:forward") || tags.equals("destination:ref:backward")) {
destinationRefTypeRule = id;
} else if (tags.equals("highway") && val.equals("traffic_signals")){
trafficSignals = id;
} else if (tags.equals("stop") && val.equals("minor")) {
stopMinor = id;
} else if (tags.equals("highway") && val.equals("stop")){
stopSign = id;
} else if (tags.equals("highway") && val.equals("give_way")){
giveWaySign = id;
} else if (tags.equals("traffic_signals:direction") && val != null){
if (val.equals("forward")) {
directionTrafficSignalsForward = id;
} else if (val.equals("backward")) {
directionTrafficSignalsBackward = id;
}
} else if (tags.equals("direction") && val != null) {
if (val.equals("forward")) {
directionForward = id;
} else if (val.equals("backward")) {
directionBackward = id;
}
}
}
public void completeRouteEncodingRules() {
for(int i = 0; i < routeEncodingRules.size(); i++) {
RouteTypeRule rtr = routeEncodingRules.get(i);
@ -577,7 +477,7 @@ public class BinaryMapRouteReaderAdapter {
public int shiftToData;
public List<RouteSubregion> subregions = null;
public List<RouteDataObject> dataObjects = null;
public int getEstimatedSize(){
int shallow = 7 * INT_SIZE + 4*3;
if (subregions != null) {
@ -619,7 +519,6 @@ public class BinaryMapRouteReaderAdapter {
protected void readRouteIndex(RouteRegion region) throws IOException {
int routeEncodingRule = 1;
int routeEncodingRulesSize = 0;
while(true){
int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t);
@ -632,13 +531,10 @@ public class BinaryMapRouteReaderAdapter {
break;
case OsmandOdb.OsmAndRoutingIndex.RULES_FIELD_NUMBER: {
int len = codedIS.readInt32();
if(routeEncodingRulesSize == 0) {
routeEncodingRulesSize = codedIS.getTotalBytesRead();
}
int oldLimit = codedIS.pushLimit(len);
readRouteEncodingRule(region, routeEncodingRule++);
codedIS.skipRawBytes(codedIS.getBytesUntilLimit());
codedIS.popLimit(oldLimit);
region.routeEncodingRulesBytes = codedIS.getTotalBytesRead() - routeEncodingRulesSize;
} break;
case OsmandOdb.OsmAndRoutingIndex.ROOTBOXES_FIELD_NUMBER :
case OsmandOdb.OsmAndRoutingIndex.BASEMAPBOXES_FIELD_NUMBER :{

View file

@ -9,9 +9,7 @@ import com.google.protobuf.CodedInputStream;
import com.google.protobuf.WireFormat;
import gnu.trove.map.hash.TIntObjectHashMap;
import gnu.trove.map.hash.TLongObjectHashMap;
import net.osmand.binary.BinaryMapIndexReader.SearchRequest;
import net.osmand.data.IncompleteTransportRoute;
import net.osmand.data.TransportSchedule;
import net.osmand.data.TransportStop;
import net.osmand.data.TransportStopExit;
@ -45,8 +43,6 @@ public class BinaryMapTransportReaderAdapter {
int stopsFileOffset = 0;
int stopsFileLength = 0;
int incompleteRoutesOffset = 0;
int incompleteRoutesLength = 0;
public String getPartName() {
return "Transport";
@ -71,7 +67,7 @@ public class BinaryMapTransportReaderAdapter {
public int getBottom() {
return bottom;
}
IndexStringTable stringTable = null;
}
@ -112,19 +108,12 @@ public class BinaryMapTransportReaderAdapter {
ind.stringTable = st;
codedIS.seek(st.length + st.fileOffset);
break;
case OsmandOdb.OsmAndTransportIndex.INCOMPLETEROUTES_FIELD_NUMBER :
ind.incompleteRoutesLength = codedIS.readRawVarint32();
ind.incompleteRoutesOffset = codedIS.getTotalBytesRead();
codedIS.seek(ind.incompleteRoutesLength + ind.incompleteRoutesOffset);
break;
default:
skipUnknownField(t);
break;
}
}
}
private void readTransportBounds(TransportIndex ind) throws IOException {
while(true){
@ -251,81 +240,6 @@ public class BinaryMapTransportReaderAdapter {
return ((char) i)+"";
}
public void readIncompleteRoutesList(TLongObjectHashMap<net.osmand.data.IncompleteTransportRoute> incompleteRoutes, int transportIndexStart) throws IOException {
boolean end = false;
while (!end) {
int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t);
switch (tag) {
case 0:
end = true;
break;
case OsmandOdb.IncompleteTransportRoutes.ROUTES_FIELD_NUMBER:
int l = codedIS.readRawVarint32();
int olds = codedIS.pushLimit(l);
net.osmand.data.IncompleteTransportRoute ir = readIncompleteRoute(transportIndexStart);
net.osmand.data.IncompleteTransportRoute itr = incompleteRoutes.get(ir.getRouteId());
if(itr != null) {
itr.setNextLinkedRoute(ir);
} else {
incompleteRoutes.put(ir.getRouteId(), ir);
}
codedIS.popLimit(olds);
break;
default:
skipUnknownField(t);
break;
}
}
}
public net.osmand.data.IncompleteTransportRoute readIncompleteRoute(int transportIndexStart) throws IOException {
net.osmand.data.IncompleteTransportRoute dataObject = new net.osmand.data.IncompleteTransportRoute();
boolean end = false;
while(!end){
int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t);
switch (tag) {
case 0:
end = true;
break;
case OsmandOdb.IncompleteTransportRoute.ID_FIELD_NUMBER :
dataObject.setRouteId(codedIS.readUInt64());
break;
case OsmandOdb.IncompleteTransportRoute.ROUTEREF_FIELD_NUMBER :
int delta = codedIS.readRawVarint32();
if (delta > transportIndexStart) {
dataObject.setRouteOffset(delta);
} else {
dataObject.setRouteOffset(transportIndexStart + delta);
}
break;
case OsmandOdb.IncompleteTransportRoute.OPERATOR_FIELD_NUMBER :
skipUnknownField(t);
// dataObject.setOperator(regStr(stringTable));
break;
case OsmandOdb.IncompleteTransportRoute.REF_FIELD_NUMBER :
skipUnknownField(t);
// dataObject.setRef(regStr(stringTable));
break;
case OsmandOdb.IncompleteTransportRoute.TYPE_FIELD_NUMBER :
skipUnknownField(t);
// dataObject.setType(regStr(stringTable));
break;
case OsmandOdb.IncompleteTransportRoute.MISSINGSTOPS_FIELD_NUMBER :
// dataObject.getMissingStops().add(codedIS.readSInt32()); //skip for now
skipUnknownField(t);
break;
default:
skipUnknownField(t);
break;
}
}
return dataObject;
}
public net.osmand.data.TransportRoute getTransportRoute(int filePointer, TIntObjectHashMap<String> stringTable,
boolean onlyDescription) throws IOException {
codedIS.seek(filePointer);
@ -480,6 +394,7 @@ public class BinaryMapTransportReaderAdapter {
codedIS.seek(ind.stringTable.fileOffset);
int oldLimit = codedIS.pushLimit(ind.stringTable.length);
int current = 0;
int i = 0;
while (codedIS.getBytesUntilLimit() > 0) {
int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t);
@ -550,6 +465,8 @@ public class BinaryMapTransportReaderAdapter {
s.setName(stringTable.get(e.getKey().charAt(0)), stringTable.get(e.getValue().charAt(0)));
}
}
private TransportStop readTransportRouteStop(int[] dx, int[] dy, long did, TIntObjectHashMap<String> stringTable,
int filePointer) throws IOException {
@ -720,4 +637,6 @@ public class BinaryMapTransportReaderAdapter {
}
}
}
}

View file

@ -1,5 +1,11 @@
package net.osmand.binary;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import net.osmand.PlatformUtil;
import net.osmand.binary.BinaryMapAddressReaderAdapter.AddressRegion;
import net.osmand.binary.BinaryMapAddressReaderAdapter.CitiesBlock;
@ -20,53 +26,46 @@ import net.osmand.binary.OsmandIndex.PoiPart;
import net.osmand.binary.OsmandIndex.RoutingPart;
import net.osmand.binary.OsmandIndex.RoutingSubregion;
import net.osmand.binary.OsmandIndex.TransportPart;
import net.osmand.util.MapUtils;
import org.apache.commons.logging.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
public class CachedOsmandIndexes {
private OsmAndStoredIndex storedIndex;
private OsmAndStoredIndex.Builder storedIndexBuilder;
private Log log = PlatformUtil.getLog(CachedOsmandIndexes.class);
private boolean hasChanged = true;
public static final int VERSION = 2;
public void addToCache(BinaryMapIndexReader reader, File f) {
hasChanged = true;
if (storedIndexBuilder == null) {
if(storedIndexBuilder == null) {
storedIndexBuilder = OsmandIndex.OsmAndStoredIndex.newBuilder();
storedIndexBuilder.setVersion(VERSION);
storedIndexBuilder.setDateCreated(System.currentTimeMillis());
if (storedIndex != null) {
for (FileIndex ex : storedIndex.getFileIndexList()) {
if (!ex.getFileName().equals(f.getName())) {
storedIndexBuilder.addFileIndex(ex);
}
if(storedIndex != null) {
for(FileIndex ex : storedIndex.getFileIndexList()) {
storedIndexBuilder.addFileIndex(ex);
}
}
}
FileIndex.Builder fileIndex = OsmandIndex.FileIndex.newBuilder();
long d = reader.getDateCreated();
fileIndex.setDateModified(d == 0 ? f.lastModified() : d);
fileIndex.setDateModified(d== 0?f.lastModified() : d);
fileIndex.setSize(f.length());
fileIndex.setVersion(reader.getVersion());
fileIndex.setFileName(f.getName());
for (MapIndex index : reader.getMapIndexes()) {
for(MapIndex index : reader.getMapIndexes()) {
MapPart.Builder map = OsmandIndex.MapPart.newBuilder();
map.setSize(index.getLength());
map.setOffset(index.getFilePointer());
if (index.getName() != null) {
if(index.getName() != null) {
map.setName(index.getName());
}
for (MapRoot mr : index.getRoots()) {
for(MapRoot mr : index.getRoots() ) {
MapLevel.Builder lev = OsmandIndex.MapLevel.newBuilder();
lev.setSize(mr.length);
lev.setOffset(mr.filePointer);
@ -80,36 +79,36 @@ public class CachedOsmandIndexes {
}
fileIndex.addMapIndex(map);
}
for (AddressRegion index : reader.getAddressIndexes()) {
for(AddressRegion index : reader.getAddressIndexes()) {
AddressPart.Builder addr = OsmandIndex.AddressPart.newBuilder();
addr.setSize(index.getLength());
addr.setOffset(index.getFilePointer());
if (index.getName() != null) {
if(index.getName() != null) {
addr.setName(index.getName());
}
if (index.getEnName() != null) {
if(index.getEnName() != null) {
addr.setNameEn(index.getEnName());
}
addr.setIndexNameOffset(index.getIndexNameOffset());
for (CitiesBlock mr : index.getCities()) {
for(CitiesBlock mr : index.getCities() ) {
CityBlock.Builder cblock = OsmandIndex.CityBlock.newBuilder();
cblock.setSize(mr.length);
cblock.setOffset(mr.filePointer);
cblock.setType(mr.type);
addr.addCities(cblock);
}
for (String s : index.getAttributeTagsTable()) {
for(String s : index.getAttributeTagsTable()) {
addr.addAdditionalTags(s);
}
fileIndex.addAddressIndex(addr);
}
for (PoiRegion index : reader.getPoiIndexes()) {
for(PoiRegion index : reader.getPoiIndexes()) {
PoiPart.Builder poi = OsmandIndex.PoiPart.newBuilder();
poi.setSize(index.getLength());
poi.setOffset(index.getFilePointer());
if (index.getName() != null) {
if(index.getName() != null) {
poi.setName(index.getName());
}
poi.setLeft(index.left31);
@ -118,12 +117,12 @@ public class CachedOsmandIndexes {
poi.setBottom(index.bottom31);
fileIndex.addPoiIndex(poi.build());
}
for (TransportIndex index : reader.getTransportIndexes()) {
for(TransportIndex index : reader.getTransportIndexes()) {
TransportPart.Builder transport = OsmandIndex.TransportPart.newBuilder();
transport.setSize(index.getLength());
transport.setOffset(index.getFilePointer());
if (index.getName() != null) {
if(index.getName() != null) {
transport.setName(index.getName());
}
transport.setLeft(index.getLeft());
@ -132,33 +131,29 @@ public class CachedOsmandIndexes {
transport.setBottom(index.getBottom());
transport.setStopsTableLength(index.stopsFileLength);
transport.setStopsTableOffset(index.stopsFileOffset);
// if(index.incompleteRoutesLength > 0) {
transport.setIncompleteRoutesLength(index.incompleteRoutesLength);
transport.setIncompleteRoutesOffset(index.incompleteRoutesOffset);
// }
transport.setStringTableLength(index.stringTable.length);
transport.setStringTableOffset(index.stringTable.fileOffset);
fileIndex.addTransportIndex(transport);
}
for (RouteRegion index : reader.getRoutingIndexes()) {
for(RouteRegion index : reader.getRoutingIndexes()) {
RoutingPart.Builder routing = OsmandIndex.RoutingPart.newBuilder();
routing.setSize(index.getLength());
routing.setOffset(index.getFilePointer());
if (index.getName() != null) {
if(index.getName() != null) {
routing.setName(index.getName());
}
for (RouteSubregion sub : index.getSubregions()) {
for(RouteSubregion sub : index.getSubregions()) {
addRouteSubregion(routing, sub, false);
}
for (RouteSubregion sub : index.getBaseSubregions()) {
for(RouteSubregion sub : index.getBaseSubregions()) {
addRouteSubregion(routing, sub, true);
}
fileIndex.addRoutingIndex(routing);
}
storedIndexBuilder.addFileIndex(fileIndex);
}
private void addRouteSubregion(RoutingPart.Builder routing, RouteSubregion sub, boolean base) {
@ -173,11 +168,11 @@ public class CachedOsmandIndexes {
rpart.setShifToData(sub.shiftToData);
routing.addSubregions(rpart);
}
public BinaryMapIndexReader getReader(File f, boolean useStoredIndex) throws IOException {
public BinaryMapIndexReader getReader(File f) throws IOException {
RandomAccessFile mf = new RandomAccessFile(f.getPath(), "r");
FileIndex found = null;
if (storedIndex != null && useStoredIndex) {
if (storedIndex != null) {
for (int i = 0; i < storedIndex.getFileIndexCount(); i++) {
FileIndex fi = storedIndex.getFileIndex(i);
if (f.length() == fi.getSize() && f.getName().equals(fi.getFileName())) {
@ -193,26 +188,26 @@ public class CachedOsmandIndexes {
reader = new BinaryMapIndexReader(mf, f);
addToCache(reader, f);
if (log.isDebugEnabled()) {
log.debug("Initializing db " + f.getAbsolutePath() + " " + (System.currentTimeMillis() - val) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
log.debug("Initializing db " + f.getAbsolutePath() + " " + (System.currentTimeMillis() - val ) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
} else {
reader = initFileIndex(found, mf, f);
}
return reader;
}
private BinaryMapIndexReader initFileIndex(FileIndex found, RandomAccessFile mf, File f) throws IOException {
BinaryMapIndexReader reader = new BinaryMapIndexReader(mf, f, false);
reader.version = found.getVersion();
reader.dateCreated = found.getDateModified();
for (MapPart index : found.getMapIndexList()) {
for(MapPart index : found.getMapIndexList()) {
MapIndex mi = new MapIndex();
mi.length = (int) index.getSize();
mi.filePointer = (int) index.getOffset();
mi.name = index.getName();
for (MapLevel mr : index.getLevelsList()) {
for(MapLevel mr : index.getLevelsList()) {
MapRoot root = new MapRoot();
root.length = (int) mr.getSize();
root.filePointer = (int) mr.getOffset();
@ -228,27 +223,29 @@ public class CachedOsmandIndexes {
reader.indexes.add(mi);
reader.basemap = reader.basemap || mi.isBaseMap();
}
for (AddressPart index : found.getAddressIndexList()) {
for(AddressPart index : found.getAddressIndexList()) {
AddressRegion mi = new AddressRegion();
mi.length = (int) index.getSize();
mi.filePointer = (int) index.getOffset();
mi.name = index.getName();
mi.enName = index.getNameEn();
mi.indexNameOffset = index.getIndexNameOffset();
for (CityBlock mr : index.getCitiesList()) {
for(CityBlock mr : index.getCitiesList() ) {
CitiesBlock cblock = new CitiesBlock();
cblock.length = (int) mr.getSize();
cblock.filePointer = (int) mr.getOffset();
cblock.type = mr.getType();
mi.cities.add(cblock);
}
mi.attributeTagsTable.addAll(index.getAdditionalTagsList());
for(String s : index.getAdditionalTagsList()) {
mi.attributeTagsTable.add(s);
}
reader.addressIndexes.add(mi);
reader.indexes.add(mi);
}
for (PoiPart index : found.getPoiIndexList()) {
for(PoiPart index : found.getPoiIndexList()) {
PoiRegion mi = new PoiRegion();
mi.length = (int) index.getSize();
mi.filePointer = (int) index.getOffset();
@ -260,34 +257,32 @@ public class CachedOsmandIndexes {
reader.poiIndexes.add(mi);
reader.indexes.add(mi);
}
for (TransportPart index : found.getTransportIndexList()) {
for(TransportPart index : found.getTransportIndexList()) {
TransportIndex mi = new TransportIndex();
mi.length = (int) index.getSize();
mi.filePointer = (int) index.getOffset();
mi.name = index.getName();
mi.left = index.getLeft();
mi.right = index.getRight();
mi.right =index.getRight();
mi.top = index.getTop();
mi.bottom = index.getBottom();
mi.stopsFileLength = index.getStopsTableLength();
mi.stopsFileOffset = index.getStopsTableOffset();
mi.incompleteRoutesLength = index.getIncompleteRoutesLength();
mi.incompleteRoutesOffset = index.getIncompleteRoutesOffset();
mi.stringTable = new IndexStringTable();
mi.stringTable.fileOffset = index.getStringTableOffset();
mi.stringTable.length = index.getStringTableLength();
reader.transportIndexes.add(mi);
reader.indexes.add(mi);
}
for (RoutingPart index : found.getRoutingIndexList()) {
for(RoutingPart index : found.getRoutingIndexList()) {
RouteRegion mi = new RouteRegion();
mi.length = (int) index.getSize();
mi.filePointer = (int) index.getOffset();
mi.name = index.getName();
for (RoutingSubregion mr : index.getSubregionsList()) {
for(RoutingSubregion mr : index.getSubregionsList()) {
RouteSubregion sub = new RouteSubregion(mi);
sub.length = (int) mr.getSize();
sub.filePointer = (int) mr.getOffset();
@ -296,7 +291,7 @@ public class CachedOsmandIndexes {
sub.top = mr.getTop();
sub.bottom = mr.getBottom();
sub.shiftToData = mr.getShifToData();
if (mr.getBasemap()) {
if(mr.getBasemap()) {
mi.basesubregions.add(sub);
} else {
mi.subregions.add(sub);
@ -305,7 +300,7 @@ public class CachedOsmandIndexes {
reader.routingIndexes.add(mi);
reader.indexes.add(mi);
}
return reader;
}
@ -315,7 +310,7 @@ public class CachedOsmandIndexes {
try {
storedIndex = OsmandIndex.OsmAndStoredIndex.newBuilder().mergeFrom(is).build();
hasChanged = false;
if (storedIndex.getVersion() != version) {
if(storedIndex.getVersion() != version){
storedIndex = null;
}
} finally {
@ -323,7 +318,7 @@ public class CachedOsmandIndexes {
}
log.info("Initialize cache " + (System.currentTimeMillis() - time));
}
public void writeToFile(File f) throws IOException {
if (hasChanged) {
FileOutputStream outputStream = new FileOutputStream(f);

View file

@ -13,6 +13,10 @@ public class CommonWords {
frequentlyUsedWordsDictionary.put(string, frequentlyUsedWordsDictionary.size());
}
public static int getCommon(String name) {
// if(true) {
// // not ready for old versions yet
// return -1;
// }
Integer i = commonWordsDictionary.get(name);
return i == null ? -1 : i.intValue();
}
@ -24,15 +28,7 @@ public class CommonWords {
public static int getCommonSearch(String name) {
Integer i = commonWordsDictionary.get(name);
// higher means better for search
if (i == null) {
int fq = getFrequentlyUsed(name);
if (fq != -1) {
return commonWordsDictionary.size() + fq;
}
return -1;
}
return i.intValue();
return i == null ? getFrequentlyUsed(name) : i.intValue() + frequentlyUsedWordsDictionary.size();
}
public static int getCommonGeocoding(String name) {
@ -764,7 +760,6 @@ public class CommonWords {
addFrequentlyUsed("martiri");
addFrequentlyUsed("verdi");
addFrequentlyUsed("augusta");
addFrequentlyUsed("neuburger");
@ -844,7 +839,6 @@ public class CommonWords {
addCommon("van");
addCommon("road");
addCommon("street");
addCommon("sector");
addCommon("drive");
addCommon("avenue");
addCommon("rue");

View file

@ -4,8 +4,8 @@ import net.osmand.PlatformUtil;
import net.osmand.ResultMatcher;
import net.osmand.CollatorStringMatcher.StringMatcherMode;
import net.osmand.binary.BinaryMapIndexReader.SearchRequest;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
import net.osmand.data.Building;
import net.osmand.data.Building.BuildingInterpolation;
import net.osmand.data.City;
import net.osmand.data.LatLon;
import net.osmand.data.MapObject;
@ -22,14 +22,14 @@ import org.apache.commons.logging.Log;
import java.io.IOException;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import gnu.trove.set.hash.TLongHashSet;
@ -43,7 +43,7 @@ public class GeocodingUtilities {
public static final float STOP_SEARCHING_STREET_WITH_MULTIPLIER_RADIUS = 250;
public static final float STOP_SEARCHING_STREET_WITHOUT_MULTIPLIER_RADIUS = 400;
public static final int DISTANCE_STREET_NAME_PROXIMITY_BY_NAME = 45000;
public static final int DISTANCE_STREET_NAME_PROXIMITY_BY_NAME = 15000;
public static final float DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME = 1000;
public static final float THRESHOLD_MULTIPLIER_SKIP_BUILDINGS_AFTER = 1.5f;
@ -145,12 +145,15 @@ public class GeocodingUtilities {
RoutePlannerFrontEnd rp = new RoutePlannerFrontEnd();
List<GeocodingResult> lst = new ArrayList<GeocodingUtilities.GeocodingResult>();
List<RouteSegmentPoint> listR = new ArrayList<BinaryRoutePlanner.RouteSegmentPoint>();
// we allow duplications to search in both files for boundary regions
rp.findRouteSegment(lat, lon, ctx, listR, false, true);
rp.findRouteSegment(lat, lon, ctx, listR);
double distSquare = 0;
Map<String, List<RouteRegion>> streetNames = new HashMap<>();
TLongHashSet set = new TLongHashSet();
Set<String> streetNames = new HashSet<String>();
for (RouteSegmentPoint p : listR) {
RouteDataObject road = p.getRoad();
if (!set.add(road.getId())) {
continue;
}
// System.out.println(road.toString() + " " + Math.sqrt(p.distSquare));
String name = Algorithms.isEmpty(road.getName()) ? road.getRef("", false, true) : road.getName();
if (allowEmptyNames || !Algorithms.isEmpty(name)) {
@ -164,13 +167,7 @@ public class GeocodingUtilities {
sr.connectionPoint = new LatLon(MapUtils.get31LatitudeY(p.preciseY), MapUtils.get31LongitudeX(p.preciseX));
sr.regionFP = road.region.getFilePointer();
sr.regionLen = road.region.getLength();
List<RouteRegion> plst = streetNames.get(sr.streetName);
if (plst == null) {
plst = new ArrayList<BinaryMapRouteReaderAdapter.RouteRegion>();
streetNames.put(sr.streetName, plst);
}
if (!plst.contains(road.region)) {
plst.add(road.region);
if (streetNames.add(sr.streetName)) {
lst.add(sr);
}
}
@ -282,12 +279,10 @@ public class GeocodingUtilities {
} else {
Collections.sort(streetsList, DISTANCE_COMPARATOR);
double streetDistance = 0;
boolean isBuildingFound = knownMinBuildingDistance > 0;
for (GeocodingResult street : streetsList) {
if (streetDistance == 0) {
streetDistance = street.getDistance();
} else if (streetDistance > 0 && street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME &&
isBuildingFound) {
} else if (street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME) {
continue;
}
street.connectionPoint = road.connectionPoint;
@ -298,7 +293,6 @@ public class GeocodingUtilities {
if (knownMinBuildingDistance == 0) {
GeocodingResult firstBld = it.next();
knownMinBuildingDistance = firstBld.getDistance();
isBuildingFound = true;
res.add(firstBld);
}
while (it.hasNext()) {
@ -317,50 +311,6 @@ public class GeocodingUtilities {
return res;
}
public void filterDuplicateRegionResults(final List<GeocodingResult> res) {
Collections.sort(res, DISTANCE_COMPARATOR);
// filter duplicate city results (when building is in both regions on boundary)
for (int i = 0; i < res.size() - 1;) {
int cmp = cmpResult(res.get(i), res.get(i + 1));
if (cmp > 0) {
res.remove(i);
} else if (cmp < 0) {
res.remove(i + 1);
} else {
// nothing to delete
i++;
}
}
}
private int cmpResult(GeocodingResult gr1, GeocodingResult gr2) {
boolean eqStreet = Algorithms.stringsEqual(gr1.streetName, gr2.streetName);
if (eqStreet) {
boolean sameObj = false;
if (gr1.city != null && gr2.city != null) {
if (gr1.building != null && gr2.building != null) {
if (Algorithms.stringsEqual(gr1.building.getName(), gr2.building.getName())) {
// same building
sameObj = true;
}
} else if (gr1.building == null && gr2.building == null) {
// same street
sameObj = true;
}
}
if (sameObj) {
double cityDist1 = MapUtils.getDistance(gr1.searchPoint, gr1.city.getLocation());
double cityDist2 = MapUtils.getDistance(gr2.searchPoint, gr2.city.getLocation());
if (cityDist1 < cityDist2) {
return -1;
} else {
return 1;
}
}
}
return 0;
}
private List<GeocodingResult> loadStreetBuildings(final GeocodingResult road, BinaryMapIndexReader reader,
GeocodingResult street) throws IOException {
final List<GeocodingResult> streetBuildings = new ArrayList<GeocodingResult>();

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,26 +0,0 @@
package net.osmand.binary;
import net.osmand.router.RouteDataResources;
public class RouteDataBundle extends StringBundle {
private RouteDataResources resources;
public RouteDataBundle(RouteDataResources resources) {
this.resources = resources;
}
public RouteDataBundle(RouteDataResources resources, StringBundle bundle) {
super(bundle.getMap());
this.resources = resources;
}
@Override
public StringBundle newInstance() {
return new RouteDataBundle(resources);
}
public RouteDataResources getResources() {
return resources;
}
}

Some files were not shown because too many files have changed in this diff Show more