Merge branch 'master' of ssh://github.com/osmandapp/Osmand into Fix_5595
This commit is contained in:
commit
ab6434f3ba
44 changed files with 801 additions and 117 deletions
|
@ -53,6 +53,8 @@ import net.osmand.aidl.gpx.RemoveGpxParams;
|
|||
|
||||
import net.osmand.aidl.maplayer.point.ShowMapPointParams;
|
||||
|
||||
import net.osmand.aidl.navdrawer.AddOpenAppNavDrawerItemParams;
|
||||
|
||||
// NOTE: Add new methods at the end of file!!!
|
||||
|
||||
interface IOsmAndAidlInterface {
|
||||
|
@ -105,4 +107,6 @@ interface IOsmAndAidlInterface {
|
|||
boolean removeGpx(in RemoveGpxParams params);
|
||||
|
||||
boolean showMapPoint(in ShowMapPointParams params);
|
||||
|
||||
boolean addOpenAppNavDrawerItem(in AddOpenAppNavDrawerItemParams params);
|
||||
}
|
|
@ -16,6 +16,14 @@ public class AMapLayer implements Parcelable {
|
|||
private float zOrder = 5.5f;
|
||||
private Map<String, AMapPoint> points = new ConcurrentHashMap<>();
|
||||
|
||||
private boolean imagePoints = false;
|
||||
private int circlePointMinZoom = 0;
|
||||
private int circlePointMaxZoom = 6;
|
||||
private int smallPointMinZoom = 7;
|
||||
private int smallPointMaxZoom = 13;
|
||||
private int bigPointMinZoom = 14;
|
||||
private int bigPointMaxZoom = 22;
|
||||
|
||||
public AMapLayer(String id, String name, float zOrder, List<AMapPoint> pointList) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
|
@ -70,11 +78,74 @@ public class AMapLayer implements Parcelable {
|
|||
points.remove(pointId);
|
||||
}
|
||||
|
||||
public boolean isImagePoints() {
|
||||
return imagePoints;
|
||||
}
|
||||
|
||||
public void setImagePoints(boolean imagePoints) {
|
||||
this.imagePoints = imagePoints;
|
||||
}
|
||||
|
||||
public void copyZoomBounds(AMapLayer layer) {
|
||||
circlePointMinZoom = layer.circlePointMinZoom;
|
||||
circlePointMaxZoom = layer.circlePointMaxZoom;
|
||||
smallPointMinZoom = layer.smallPointMinZoom;
|
||||
smallPointMaxZoom = layer.smallPointMaxZoom;
|
||||
bigPointMinZoom = layer.bigPointMinZoom;
|
||||
bigPointMaxZoom = layer.bigPointMaxZoom;
|
||||
}
|
||||
|
||||
public void setCirclePointZoomBounds(int min, int max) {
|
||||
circlePointMinZoom = min;
|
||||
circlePointMaxZoom = max;
|
||||
}
|
||||
|
||||
public void setSmallPointZoomBounds(int min, int max) {
|
||||
smallPointMinZoom = min;
|
||||
smallPointMaxZoom = max;
|
||||
}
|
||||
|
||||
public void setBigPointZoomBounds(int min, int max) {
|
||||
bigPointMinZoom = min;
|
||||
bigPointMaxZoom = max;
|
||||
}
|
||||
|
||||
public int getCirclePointMinZoom() {
|
||||
return circlePointMinZoom;
|
||||
}
|
||||
|
||||
public int getCirclePointMaxZoom() {
|
||||
return circlePointMaxZoom;
|
||||
}
|
||||
|
||||
public int getSmallPointMinZoom() {
|
||||
return smallPointMinZoom;
|
||||
}
|
||||
|
||||
public int getSmallPointMaxZoom() {
|
||||
return smallPointMaxZoom;
|
||||
}
|
||||
|
||||
public int getBigPointMinZoom() {
|
||||
return bigPointMinZoom;
|
||||
}
|
||||
|
||||
public int getBigPointMaxZoom() {
|
||||
return bigPointMaxZoom;
|
||||
}
|
||||
|
||||
public void writeToParcel(Parcel out, int flags) {
|
||||
out.writeString(id);
|
||||
out.writeString(name);
|
||||
out.writeFloat(zOrder);
|
||||
out.writeTypedList(new ArrayList<>(points.values()));
|
||||
out.writeByte((byte) (imagePoints ? 1 : 0));
|
||||
out.writeInt(circlePointMinZoom);
|
||||
out.writeInt(circlePointMaxZoom);
|
||||
out.writeInt(smallPointMinZoom);
|
||||
out.writeInt(smallPointMaxZoom);
|
||||
out.writeInt(bigPointMinZoom);
|
||||
out.writeInt(bigPointMaxZoom);
|
||||
}
|
||||
|
||||
private void readFromParcel(Parcel in) {
|
||||
|
@ -86,6 +157,13 @@ public class AMapLayer implements Parcelable {
|
|||
for (AMapPoint p : pointList) {
|
||||
this.points.put(p.getId(), p);
|
||||
}
|
||||
imagePoints = in.readByte() == 1;
|
||||
circlePointMinZoom = in.readInt();
|
||||
circlePointMaxZoom = in.readInt();
|
||||
smallPointMinZoom = in.readInt();
|
||||
smallPointMaxZoom = in.readInt();
|
||||
bigPointMinZoom = in.readInt();
|
||||
bigPointMaxZoom = in.readInt();
|
||||
}
|
||||
|
||||
public int describeContents() {
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
package net.osmand.aidl.navdrawer;
|
||||
|
||||
parcelable AddOpenAppNavDrawerItemParams;
|
|
@ -0,0 +1,63 @@
|
|||
package net.osmand.aidl.navdrawer;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
public class AddOpenAppNavDrawerItemParams implements Parcelable {
|
||||
|
||||
private String itemName;
|
||||
private String appPackage;
|
||||
private int flags;
|
||||
|
||||
public AddOpenAppNavDrawerItemParams(String itemName, String appPackage) {
|
||||
this(itemName, appPackage, -1);
|
||||
}
|
||||
|
||||
public AddOpenAppNavDrawerItemParams(String itemName, String appPackage, int flags) {
|
||||
this.itemName = itemName;
|
||||
this.appPackage = appPackage;
|
||||
this.flags = flags;
|
||||
}
|
||||
|
||||
protected AddOpenAppNavDrawerItemParams(Parcel in) {
|
||||
itemName = in.readString();
|
||||
appPackage = in.readString();
|
||||
flags = in.readInt();
|
||||
}
|
||||
|
||||
public String getItemName() {
|
||||
return itemName;
|
||||
}
|
||||
|
||||
public String getAppPackage() {
|
||||
return appPackage;
|
||||
}
|
||||
|
||||
public int getFlags() {
|
||||
return flags;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeString(itemName);
|
||||
dest.writeString(appPackage);
|
||||
dest.writeInt(flags);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static final Creator<AddOpenAppNavDrawerItemParams> CREATOR = new Creator<AddOpenAppNavDrawerItemParams>() {
|
||||
@Override
|
||||
public AddOpenAppNavDrawerItemParams createFromParcel(Parcel in) {
|
||||
return new AddOpenAppNavDrawerItemParams(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AddOpenAppNavDrawerItemParams[] newArray(int size) {
|
||||
return new AddOpenAppNavDrawerItemParams[size];
|
||||
}
|
||||
};
|
||||
}
|
|
@ -41,6 +41,15 @@ class TelegramApplication : Application(), OsmandHelperListener {
|
|||
settings = TelegramSettings(this)
|
||||
uiUtils = UiUtils(this)
|
||||
osmandAidlHelper = OsmandAidlHelper(this)
|
||||
osmandAidlHelper.listener = object : OsmandAidlHelper.OsmandHelperListener {
|
||||
override fun onOsmandConnectionStateChanged(connected: Boolean) {
|
||||
if (connected) {
|
||||
val basePackage = "net.osmand.telegram"
|
||||
val appPackage = if (BuildConfig.DEBUG) "$basePackage.debug" else basePackage
|
||||
osmandAidlHelper.addOpenAppNavDrawerItem(getString(R.string.app_name), appPackage, -1)
|
||||
}
|
||||
}
|
||||
}
|
||||
shareLocationHelper = ShareLocationHelper(this)
|
||||
showLocationHelper = ShowLocationHelper(this)
|
||||
notificationHelper = NotificationHelper(this)
|
||||
|
|
|
@ -33,6 +33,7 @@ import net.osmand.aidl.mapwidget.AMapWidget
|
|||
import net.osmand.aidl.mapwidget.AddMapWidgetParams
|
||||
import net.osmand.aidl.mapwidget.RemoveMapWidgetParams
|
||||
import net.osmand.aidl.mapwidget.UpdateMapWidgetParams
|
||||
import net.osmand.aidl.navdrawer.AddOpenAppNavDrawerItemParams
|
||||
import net.osmand.aidl.navigation.NavigateGpxParams
|
||||
import net.osmand.aidl.navigation.NavigateParams
|
||||
import net.osmand.aidl.note.StartAudioRecordingParams
|
||||
|
@ -474,6 +475,7 @@ class OsmandAidlHelper(private val app: Application) {
|
|||
if (mIOsmAndAidlInterface != null) {
|
||||
try {
|
||||
val layer = AMapLayer(id, name, zOrder, points)
|
||||
layer.isImagePoints = true
|
||||
return mIOsmAndAidlInterface!!.addMapLayer(AddMapLayerParams(layer))
|
||||
} catch (e: RemoteException) {
|
||||
e.printStackTrace()
|
||||
|
@ -495,6 +497,7 @@ class OsmandAidlHelper(private val app: Application) {
|
|||
if (mIOsmAndAidlInterface != null) {
|
||||
try {
|
||||
val layer = AMapLayer(id, name, zOrder, points)
|
||||
layer.isImagePoints = true
|
||||
return mIOsmAndAidlInterface!!.updateMapLayer(UpdateMapLayerParams(layer))
|
||||
} catch (e: RemoteException) {
|
||||
e.printStackTrace()
|
||||
|
@ -864,4 +867,15 @@ class OsmandAidlHelper(private val app: Application) {
|
|||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fun addOpenAppNavDrawerItem(itemName: String, appPackage: String, flags: Int): Boolean {
|
||||
if (mIOsmAndAidlInterface != null) {
|
||||
try {
|
||||
return mIOsmAndAidlInterface!!.addOpenAppNavDrawerItem(AddOpenAppNavDrawerItemParams(itemName, appPackage, flags))
|
||||
} catch (e: RemoteException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
|
BIN
OsmAnd/res/drawable-hdpi/img_user_picture.png
Normal file
BIN
OsmAnd/res/drawable-hdpi/img_user_picture.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
BIN
OsmAnd/res/drawable-mdpi/img_user_picture.png
Normal file
BIN
OsmAnd/res/drawable-mdpi/img_user_picture.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
BIN
OsmAnd/res/drawable-xhdpi/img_user_picture.png
Normal file
BIN
OsmAnd/res/drawable-xhdpi/img_user_picture.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.7 KiB |
BIN
OsmAnd/res/drawable-xxhdpi/img_user_picture.png
Normal file
BIN
OsmAnd/res/drawable-xxhdpi/img_user_picture.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.8 KiB |
|
@ -2897,4 +2897,5 @@
|
|||
<string name="download_all">تنزيل الكل</string>
|
||||
<string name="shared_string_restart">إعادة تشغيل التطبيق</string>
|
||||
<string name="shared_string_bookmark">إشارة مرجعية</string>
|
||||
<string name="waypoints_removed_from_map_markers">نقاط بالطريق تم إزالتها من علامات الخريطة</string>
|
||||
</resources>
|
||||
|
|
|
@ -3103,4 +3103,5 @@ Praparcyjnaj pamiacі %4$s MB (Abmiežavańnie Android %5$s MB, Dalvik %6$s MB).
|
|||
<string name="search_no_results_description">Niama vynikaŭ?
|
||||
\nRaspaviadzicie nam ab hetym.</string>
|
||||
<string name="send_search_query">Adpravić pašukovy zapyt?</string>
|
||||
<string name="increase_search_radius_to">Pavialičyć radyus pošuku da %1$s</string>
|
||||
</resources>
|
||||
|
|
|
@ -3154,4 +3154,5 @@
|
|||
<string name="search_no_results_description">Няма вынікаў?
|
||||
\nРаспавядзіце нам аб гэтым.</string>
|
||||
<string name="send_search_query">Адправіць пашуковы запыт?</string>
|
||||
<string name="increase_search_radius_to">Павялічыць радыус пошуку да %1$s</string>
|
||||
</resources>
|
||||
|
|
|
@ -3741,4 +3741,10 @@
|
|||
<string name="poi_hazard_minefield">Minové pole</string>
|
||||
|
||||
|
||||
<string name="poi_socket_type3">Počet konektorů typu 3</string>
|
||||
<string name="poi_socket_type3_current">Maximální proud konektoru typ 3 [A]</string>
|
||||
<string name="poi_socket_type3_output">Maximální výkon konektoru typ 3 [kW]</string>
|
||||
<string name="poi_socket_tesla_standard">Počet stanic Tesla Destination Charger</string>
|
||||
<string name="poi_socket_tesla_standard_current">Maximální proud stanice Tesla Destination Charger [A]</string>
|
||||
<string name="poi_socket_tesla_standard_output">Maximální výkon stanice Tesla Destination Charger [kW]</string>
|
||||
</resources>
|
||||
|
|
|
@ -3942,9 +3942,9 @@
|
|||
|
||||
<string name="poi_end_date">Slutdato</string>
|
||||
|
||||
<string name="poi_appliance">Elektronik butik</string>
|
||||
<string name="poi_appliance">Butik for hårde hvidevarer</string>
|
||||
|
||||
<string name="poi_outcrop">Klippefremspring</string>
|
||||
<string name="poi_outcrop">Blotlagt klippe</string>
|
||||
|
||||
<string name="poi_payment_contactless_yes">Kontaktløs</string>
|
||||
<string name="poi_payment_contactless_no">Kontaktløs ikke accepteret</string>
|
||||
|
@ -3953,7 +3953,7 @@
|
|||
<string name="poi_hazard_erosion">Erosionsfare</string>
|
||||
<string name="poi_hazard_avalanche">Lavinefare</string>
|
||||
<string name="poi_hazard_slippery_road">Glat vejbane</string>
|
||||
<string name="poi_hazard_flood">Oversvømmelse fare</string>
|
||||
<string name="poi_hazard_flood">Oversvømmelsesfare</string>
|
||||
<string name="poi_hazard_minefield">Minefelt</string>
|
||||
|
||||
|
||||
|
|
|
@ -3174,4 +3174,18 @@ Repræsenterer område: %1$s x %2$s</string>
|
|||
<string name="search_no_results_description">Ingen resultater?
|
||||
\nRapporter det.</string>
|
||||
<string name="send_search_query">Send søgeforespørgsel?</string>
|
||||
<string name="release_3_1">• Navigation: Fix statuslinjen, hurtigt ombytning af start-og slutpunkt på ruten
|
||||
\n
|
||||
\n• Kort markører: fastgør tænd/sluk-grupper, evne til at skjule markører på kortet
|
||||
\n
|
||||
\n• OSM redigering: mulighed for at redigere tags for ikke-punkt objekter, løs manglende kommentarer til noter, backup af redigeringer
|
||||
\n
|
||||
\n• Forbedre Wikipedia og Wikivoyage parsing, opdaterede filer findes allerede
|
||||
\n
|
||||
\n• Context menu: fix transport shields farve i nat-tilstand, fastsætte yderligere menu størrelser
|
||||
\n
|
||||
\n• Andre fejlrettelser
|
||||
\n
|
||||
\n</string>
|
||||
<string name="increase_search_radius_to">Forøg søgeradius til %1$s</string>
|
||||
</resources>
|
||||
|
|
|
@ -2955,7 +2955,7 @@ Abgedeckte Fläche: %1$s x %2$s</string>
|
|||
<string name="north_abbreviation">N</string>
|
||||
<string name="optional_point_name">Optionaler Punktname</string>
|
||||
<string name="transport_nearby_routes_within">Nahegelegene Routen innerhalb von</string>
|
||||
<string name="transport_nearby_routes">Innerhalb von</string>
|
||||
<string name="transport_nearby_routes">Innerhalb</string>
|
||||
<string name="group_deleted">Gruppe gelöscht</string>
|
||||
<string name="rendering_attr_whiteWaterSports_name">Wildwasser-Sportarten</string>
|
||||
<string name="clear_all_intermediates">Alle Zwischenpunkte löschen</string>
|
||||
|
@ -3072,4 +3072,17 @@ Abgedeckte Fläche: %1$s x %2$s</string>
|
|||
\nNehmen Sie Kontakt mit uns auf.</string>
|
||||
<string name="send_search_query">Suchanfrage senden?</string>
|
||||
<string name="shared_string_world">Welt</string>
|
||||
<string name="increase_search_radius_to">Vergrößerung des Suchradius auf %1$s</string>
|
||||
<string name="release_3_1">• Navigation Fix: Fortschrittsbalken, schneller Wechsel des Start- und Endpunkts der Route
|
||||
\n
|
||||
\n• Map-Marker Fix: Gruppen An-/Ausschalten, Möglichkeit Marker auf der Karte zu verstecken
|
||||
\n
|
||||
\n• OSM-Bearbeitung: Bearbeitung für Nicht-Punkt-Objekte, Behebung fehlender Kommentare zu Notizen, Sicherung von Änderungen
|
||||
\n
|
||||
\n• Verbessere Wikipedia und Wikivoyage Parsing, aktualisierte Dateien sind bereits verfügbar
|
||||
\n
|
||||
\n• Kontextmenü: fixieren Sie die Transportschilderfarbe im Nachtmodus, fixieren Sie zusätzliche Menügrößen
|
||||
\n
|
||||
\n• Andere Fehlerbehebungen
|
||||
\n</string>
|
||||
</resources>
|
||||
|
|
|
@ -1463,7 +1463,7 @@
|
|||
<string name="map_widget_left">Panel izquierdo</string>
|
||||
<string name="shared_string_show">Mostrar</string>
|
||||
<string name="configure_map">Configurar mapa</string>
|
||||
<string name="search_radius_proximity">En un radio de</string>
|
||||
<string name="search_radius_proximity">A menos de</string>
|
||||
<string name="rendering_category_routes">Rutas</string>
|
||||
<string name="impassable_road">Evitar caminos…</string>
|
||||
<string name="rendering_attr_tramTrainRoutes_name">Rutas de tranvía y tren</string>
|
||||
|
|
|
@ -3118,4 +3118,9 @@ Area honi dagokio: %1$s x %2$s</string>
|
|||
<string name="coord_input_save_as_track_descr">%1$s puntu gehitu dituzu. Idatzi fitxategi-izena eta sakatu \"Gorde\".</string>
|
||||
<string name="point_deleted">%1$s puntua ezabatuta</string>
|
||||
<string name="shared_string_world">Mundua</string>
|
||||
<string name="increase_search_radius_to">Handitu bilaketa-erradioa %1$s-ra</string>
|
||||
<string name="send_search_query_description">Zure bilaketa <b>\"%1$s\"</b> eta kokapena bidaliko dugu. <br/><br/>Ez dugu informazio pertsonala bilduko, bilaketa datuak algoritmoa hobetzeko biltzen ditugu.<br/></string>
|
||||
<string name="search_no_results_description">Emaitzarik ez?
|
||||
\nEman iezaguzu horren berri.</string>
|
||||
<string name="send_search_query">Bilaketa-kontsulta bidali?</string>
|
||||
</resources>
|
||||
|
|
|
@ -705,7 +705,7 @@
|
|||
<string name="poi_pump">پنجرگیری دوچرخه</string>
|
||||
<string name="poi_observatory_designation">رصدخانه</string>
|
||||
<string name="poi_pharmacy_dispensing">داروخانه</string>
|
||||
<string name="poi_star_rating">ستاره دار</string>
|
||||
<string name="poi_star_rating">رتبهبندی ستارهای</string>
|
||||
<string name="poi_clock_option">تنظیمات ساعت</string>
|
||||
<string name="poi_scout_camp">کمپ گردشگری</string>
|
||||
<string name="poi_backcountry">پشت صحنه</string>
|
||||
|
@ -1016,4 +1016,6 @@
|
|||
<string name="poi_emergency_infrastructure">زیرساخت فوریتی</string>
|
||||
<string name="poi_enforcement_toll">اعمال قانون: عوارضی</string>
|
||||
|
||||
<string name="poi_start_date">تاریخ شروع</string>
|
||||
<string name="poi_stars_2">۲ (استاندارد)</string>
|
||||
</resources>
|
||||
|
|
|
@ -3170,4 +3170,5 @@
|
|||
<string name="search_no_results_description">چیزی پیدا نشد؟
|
||||
\nدر این باره با ما صحبت کنید.</string>
|
||||
<string name="send_search_query">عبارت جستوجویتان ارسال شود؟</string>
|
||||
<string name="increase_search_radius_to">افزایش شعاع جستوجو به %1$s</string>
|
||||
</resources>
|
||||
|
|
|
@ -3153,19 +3153,18 @@ représentant la zone : %1$s x %2$s</string>
|
|||
<string name="search_no_results_description">Aucun résultat ?
|
||||
\nSignalez-le nous.</string>
|
||||
<string name="send_search_query">Envoyez votre recherche ?</string>
|
||||
<string name="release_3_1">• Navigation : correction de la barre de progression, inversion facile entre le point de départ et le point d\'arrivée
|
||||
<string name="release_3_1">• Navigation : correction de la barre de progression, permutation facile entre le point de départ et le point d\'arrivée
|
||||
\n
|
||||
\n• Marque : correction pour l\'activation / désactivation des groupes, possibilité de masquer les marques sur la carte
|
||||
\n
|
||||
\n• Modifications OSM : possibilité de modifier les objets autres que les points, correction de la perte des commentaires et des notes, copie de sauvegarde des modifications
|
||||
\n
|
||||
\n • Amélioration de Wikipedia et Wikivoyage, les fichiers mis à jour sont déjà disponibles
|
||||
\n• Amélioration de Wikipedia et Wikivoyage, les fichiers à jour sont déjà disponibles
|
||||
\n
|
||||
\n • Menu contextuel : correction de la taille des menus, correction en mode nuit
|
||||
\n• Menu contextuel : correction de la taille des menus, correction des couleurs en mode nuit
|
||||
\n
|
||||
\n• Autres corrections
|
||||
\n
|
||||
\n
|
||||
\n</string>
|
||||
<string name="increase_search_radius_to">Augmenter le rayon de recherche à %1$s</string>
|
||||
</resources>
|
||||
|
|
|
@ -3066,4 +3066,5 @@
|
|||
<string name="search_no_results_description">אין תוצאות?
|
||||
\nנשמח לקבל דיווח על כך.</string>
|
||||
<string name="send_search_query">לשלוח את שאילתת החיפוש?</string>
|
||||
<string name="increase_search_radius_to">הגדלת רדיוס החיפוש ל־%1$s</string>
|
||||
</resources>
|
||||
|
|
|
@ -1326,4 +1326,9 @@
|
|||
<string name="poi_aeroway_fuel">Flybrenselstasjon</string>
|
||||
<string name="poi_waterway_fuel">Båtbensinstasjon</string>
|
||||
<string name="poi_helipad">Helikopterlandingsplass</string>
|
||||
<string name="poi_fire_water_pond">Branndam</string>
|
||||
<string name="poi_fuel_octane_80">80-oktan</string>
|
||||
<string name="poi_communication_tower">Kommunikasjonstårn</string>
|
||||
<string name="poi_observation_tower">Utkikkstårn</string>
|
||||
<string name="poi_lighting_tower">Lysmast</string>
|
||||
</resources>
|
||||
|
|
|
@ -3082,4 +3082,23 @@ Reprezentuje obszar: %1$s x %2$s</string>
|
|||
<string name="coord_input_add_point">Dodaj punkt</string>
|
||||
<string name="coord_input_save_as_track_descr">Dodano %1$s punktów. Proszę wprowadzić nazwę pliku i nacisnąć „Zapisz”.</string>
|
||||
<string name="coord_input_save_as_track">Zapisz jako ślad</string>
|
||||
<string name="release_3_1">• Nawigacja: naprawiono pasek postępu, szybka zamiana punktu początkowego i końcowego trasy
|
||||
\n
|
||||
\n• Znaczniki mapy: naprawiono włączanie/wyłączanie grup, możliwość ukrycia znaczników na mapie
|
||||
\n
|
||||
\n• Edytowanie OSM: możliwość edycji tagów dla niepunktowych obiektów, naprawiono brakujące komentarze do uwag, kopia zapasowa edycji
|
||||
\n
|
||||
\n• Ulepszono analizowanie Wikipedii i Wikipodróży, zaktualizowane pliki są już dostępne
|
||||
\n
|
||||
\n• Menu kontekstowe: poprawiono kolor tarcz transportowych w trybie nocnym, naprawiono dodatkowe rozmiary menu
|
||||
\n
|
||||
\n• Inne poprawki błędów
|
||||
\n</string>
|
||||
<string name="increase_search_radius_to">Zwiększ promień wyszukiwania do %1$s</string>
|
||||
<string name="send_search_query_description">Wyślemy twoje zapytanie: <b>\"%1$s\"</b>, oraz twoje położenie.<br/><br/> Nie zbieramy informacji osobistych, potrzebujemy tylko danych wyszukiwania do poprawienia algorytmu wyszukiwania.<br/></string>
|
||||
<string name="search_no_results_description">Brak wyników?
|
||||
\nPowiedz nam o tym.</string>
|
||||
<string name="send_search_query">Wysłać zapytanie?</string>
|
||||
<string name="shared_string_world">Świat</string>
|
||||
<string name="point_deleted">Usunięto punkt %1$s</string>
|
||||
</resources>
|
||||
|
|
|
@ -3109,4 +3109,18 @@ Pro praghere iscrie su còdighe intreu</string>
|
|||
<string name="search_no_results_description">Perunu risultadu?
|
||||
\nFaghide·nos·lu ischire.</string>
|
||||
<string name="send_search_query">Imbiare sos tèrmines de chirca?</string>
|
||||
<string name="release_3_1">• Nàvigu: Barra de progressu acontzada, cuncàmbiu lestru intre sos puntos de incumintzu e de acabu de s\'àndala
|
||||
\n
|
||||
\n • Marcadores de sa mapa: acontzu de s\'allughidura/istudadura de sos grupos, possibilidade de istichire marcadores dae sa mapa
|
||||
\n
|
||||
\n • Modìficas OSM: Possibilidade de modificare sas etichetas pro sos ogetos chi non sunt puntos, acontzu de su problema de sos cummentos chi mancaiant in sas notas, còpia de seguresa de sas modìficas
|
||||
\n
|
||||
\n • Anàlisi de Wikipedia e de Wikivoyage megioradas, sos documentos agiornados sunt giai disponìbiles
|
||||
\n
|
||||
\n • Menù de cuntestu: colores de sos iscudos de trasportu in sa modalidade pro sa note acontzados, mannàrias pro sos menùs additzionales acontzadas
|
||||
\n
|
||||
\n • Àteros acontzos de errores
|
||||
\n
|
||||
\n</string>
|
||||
<string name="increase_search_radius_to">Ismànnia su raju de chirca finas a %1$s</string>
|
||||
</resources>
|
||||
|
|
|
@ -3531,4 +3531,19 @@
|
|||
<string name="poi_cable_number">Počet lán</string>
|
||||
<string name="poi_via_ferrata_scale">Náročnosť</string>
|
||||
|
||||
<string name="poi_checkpoint_type">Typ kontrolného stanovišťa</string>
|
||||
|
||||
<string name="poi_appliance">Obchod so spotrebičmi</string>
|
||||
|
||||
<string name="poi_payment_contactless_yes">Bezkontaktne</string>
|
||||
<string name="poi_payment_contactless_no">Bezkontaktne nie je možné platiť</string>
|
||||
|
||||
<string name="poi_hazard_nuclear">Nebezpečenstvo rádioaktivity</string>
|
||||
<string name="poi_hazard_erosion">Nebezpečenstvo erózie</string>
|
||||
<string name="poi_hazard_avalanche">Nebezpečenstvo lavín</string>
|
||||
<string name="poi_hazard_slippery_road">Klzká cesta</string>
|
||||
<string name="poi_hazard_flood">Nebezpečenstvo záplav</string>
|
||||
<string name="poi_hazard_minefield">Mínové pole</string>
|
||||
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -1422,7 +1422,7 @@ Proporčná pamäť %4$s MB (Limit Androidu %5$s MB, Dalvik %6$s MB).</string>
|
|||
<string name="map_widget_right">Pravý panel</string>
|
||||
<string name="map_widget_left">Ľavý panel</string>
|
||||
<string name="configure_map">Nastaviť mapu</string>
|
||||
<string name="search_radius_proximity">Vovnútri</string>
|
||||
<string name="search_radius_proximity">Do vzdialenosti</string>
|
||||
<string name="rendering_category_routes">Trasy</string>
|
||||
<string name="rendering_attr_trainLightrailRoutes_name">Vlakové linky</string>
|
||||
<string name="rendering_attr_tramRoutes_name">Električkové linky</string>
|
||||
|
@ -2853,7 +2853,7 @@ Zodpovedá oblasti: %1$s x %2$s</string>
|
|||
<string name="north_abbreviation">S</string>
|
||||
<string name="optional_point_name">Voliteľný názov bodu</string>
|
||||
<string name="transport_nearby_routes_within">Blízke trasy do</string>
|
||||
<string name="transport_nearby_routes">Vovnútri</string>
|
||||
<string name="transport_nearby_routes">Do vzdialenosti</string>
|
||||
<string name="rendering_attr_whiteWaterSports_name">Divoká voda</string>
|
||||
<string name="group_deleted">Skupina odstránená</string>
|
||||
<string name="waypoints_removed_from_map_markers">Body trasy odstránené z mapových značiek</string>
|
||||
|
@ -2965,4 +2965,22 @@ Zodpovedá oblasti: %1$s x %2$s</string>
|
|||
<string name="coord_input_save_as_track_descr">Pridali ste %1$s bodov. Zadajte názov súboru a stlačte \"Uložiť\".</string>
|
||||
<string name="point_deleted">Bod %1$s vymazaný</string>
|
||||
<string name="shared_string_world">Celý svet</string>
|
||||
<string name="release_3_1">• Navigácia: Opravený indikátor postupu, rýchle prepínanie začiatočného a koncového bodu trasy
|
||||
\n
|
||||
\n • Mapové značky: opravené zapínanie a vypínanie skupín, možnosť skryť značky z mapy
|
||||
\n
|
||||
\n • Úpravy OSM: Možnosť meniť značky nebodovách objektov, oprava chýbajúcich komentárov na poznámkach, záloha úprav
|
||||
\n
|
||||
\n • Vylepšené čítanie Wikipédie a Wikivoyage, aktualizované súbory sú už k dispozícii
|
||||
\n
|
||||
\n • Kontextové menu: opravené farby znakov ciest v nočnom režime, opravené doplnkové veľkosti menu
|
||||
\n
|
||||
\n • Opravy ďalších chýb
|
||||
\n
|
||||
\n</string>
|
||||
<string name="increase_search_radius_to">Zväčšiť polomer hľadania na %1$s</string>
|
||||
<string name="send_search_query_description">Odošleme váš vyhľadávaciu požiadavku: <b>\"%1$s\"</b>, ako aj vašu polohu.<br/><br/> Nezbierame osobné údaje, potrebujeme len údaje vyhľadávania na vylepšenie vyhľadávací algoritmus.<br/></string>
|
||||
<string name="search_no_results_description">Žiadne výsledky?
|
||||
\nPovedzte nám o tom.</string>
|
||||
<string name="send_search_query">Odoslať vyhľadávaciu požiadavku?</string>
|
||||
</resources>
|
||||
|
|
|
@ -2971,4 +2971,5 @@
|
|||
<string name="search_no_results_description">Нема резултата?
|
||||
\nРеците нам о овоме.</string>
|
||||
<string name="send_search_query">Пошаљи упит претраге?</string>
|
||||
<string name="increase_search_radius_to">Повећај полупречник претраге на %1$s</string>
|
||||
</resources>
|
||||
|
|
|
@ -183,7 +183,7 @@
|
|||
<string name="poi_service_tyres">Шини</string>
|
||||
<string name="poi_vehicle_inspection">Огляд автомобіля</string>
|
||||
<string name="poi_car_wash">Мийка автомобіля</string>
|
||||
<string name="poi_fuel">АЗС</string>
|
||||
<string name="poi_fuel">АЗС;Автомобільна заправка;Автозаправка;Бензоколонка;Бензозаправка</string>
|
||||
<string name="poi_fuel_diesel">Дизель</string>
|
||||
<string name="poi_fuel_gtl_diesel">Високоякісний дизель</string>
|
||||
<string name="poi_fuel_hgv_diesel">TIR дизель</string>
|
||||
|
@ -3825,4 +3825,41 @@
|
|||
|
||||
<string name="poi_aerialway_zip_line">Зіплайн</string>
|
||||
|
||||
<string name="poi_climbing_adventure">Пригоди з скелелазенням</string>
|
||||
|
||||
<string name="poi_via_ferrata">Віа феррата</string>
|
||||
<string name="poi_glacier_type_icecap">Льодовиковий покрив</string>
|
||||
<string name="poi_glacier_type_icefield">Льодовикове поле</string>
|
||||
<string name="poi_glacier_type_plateau">Плато</string>
|
||||
<string name="poi_glacier_type_valley">Долинний льодовик</string>
|
||||
<string name="poi_glacier_type_outlet">Відтік</string>
|
||||
<string name="poi_glacier_type_tidewater">Стічна вода</string>
|
||||
<string name="poi_glacier_type_icefall">Льодоспад</string>
|
||||
<string name="poi_glacier_type_rock">Скала</string>
|
||||
<string name="poi_glacier_type_shelf">Шельфовий</string>
|
||||
<string name="poi_glacier_type_remnant">Залишок</string>
|
||||
<string name="poi_glacier_type_ice_tongue">Льодовий язик</string>
|
||||
|
||||
<string name="poi_glacier_ele_top">Найвища точка</string>
|
||||
<string name="poi_glacier_ele_bottom">Найнижча точка</string>
|
||||
<string name="poi_glacier_slope">Середній схил</string>
|
||||
|
||||
<string name="poi_checkpoint_hiking">Пішохідний контрольний пункт</string>
|
||||
<string name="poi_checkpoint_type_stamp">Пункт штампування</string>
|
||||
<string name="poi_checkpoint_type_needler">Голкова машина</string>
|
||||
<string name="poi_checkpoint_type_quize">Вікторина</string>
|
||||
<string name="poi_rock">Скеля</string>
|
||||
|
||||
<string name="poi_appliance">Магазин побутової техніки</string>
|
||||
|
||||
<string name="poi_outcrop">Оголення порід</string>
|
||||
|
||||
<string name="poi_hazard_nuclear">Радіаційна небезпека</string>
|
||||
<string name="poi_hazard_erosion">Ерозійна небезпека</string>
|
||||
<string name="poi_hazard_avalanche">Небезпека лавини</string>
|
||||
<string name="poi_hazard_slippery_road">Слизька дорога</string>
|
||||
<string name="poi_hazard_flood">Небезпека затоплення</string>
|
||||
<string name="poi_hazard_minefield">Мінне поле</string>
|
||||
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -653,7 +653,7 @@
|
|||
<string name="loading_streets">Завантажуються вулиці…</string>
|
||||
<string name="loading_cities">Завантажуються міста…</string>
|
||||
|
||||
<string name="poi">POI</string>
|
||||
<string name="poi">Корисне місце</string>
|
||||
<string name="error_occurred_saving_gpx">Помилка збереження шляху в GPX файл</string>
|
||||
<string name="error_calculating_route">Помилка розрахунку маршруту</string>
|
||||
<string name="error_calculating_route_occured">Помилка прокладання маршруту</string>
|
||||
|
@ -1010,8 +1010,8 @@
|
|||
<string name="intermediate_point">Проміжний пункт %1$s</string>
|
||||
<string name="context_menu_item_last_intermediate_point">Додати як останню проміжну точку</string>
|
||||
<string name="context_menu_item_first_intermediate_point">Додати як першу проміжну точку</string>
|
||||
<string name="add_as_last_destination_point">Додати як останню проміжну точку</string>
|
||||
<string name="add_as_first_destination_point">Додати як першу проміжну точку</string>
|
||||
<string name="add_as_last_destination_point">Додати як останній проміжний пункт призначення</string>
|
||||
<string name="add_as_first_destination_point">Додати як перший проміжний пункт призначення</string>
|
||||
<string name="replace_destination_point">Замінити пункт призначення</string>
|
||||
<string name="new_destination_point_dialog">Ви вже встановили пункт призначення:</string>
|
||||
<string name="shared_string_target_points">Точки призначення</string>
|
||||
|
@ -1180,7 +1180,7 @@
|
|||
<string name="cancel_route">Відхилити маршрут</string>
|
||||
<string name="search_street_in_neighborhood_cities">Шукати в навколишніх містах</string>
|
||||
<string name="intermediate_items_sort_return">Проміжні точки впорядковано оптимальним чином від поточної до кінцевої.</string>
|
||||
<string name="intermediate_items_sort_by_distance">Впорядкувати за відстанню</string>
|
||||
<string name="intermediate_items_sort_by_distance">Впорядкувати від дверей до дверей</string>
|
||||
<string name="local_osm_changes_backup_successful">Файл змін OSM успішно створений в %1$s</string>
|
||||
<string name="osmand_distance_planning_plugin_name">Інструмент підрахунку відстані і планування</string>
|
||||
<string name="please_select_address">Виберіть місто або вулицю</string>
|
||||
|
@ -1508,7 +1508,7 @@
|
|||
<string name="calculate_osmand_route_without_internet">Розрахувати ділянку маршруту OsmAnd без Інтернету</string>
|
||||
<string name="gpx_option_calculate_first_last_segment">Обчислити маршрут OsmAnd для першого та останнього сегментів маршруту</string>
|
||||
<string name="use_displayed_track_for_navigation">Чи Ви хочете використовувати відображення треку для навігації?</string>
|
||||
<string name="keep_and_add_destination_point">Додати як наступний пункт призначення</string>
|
||||
<string name="keep_and_add_destination_point">Додати наступним пунктом призначення</string>
|
||||
<string name="select_gpx">Виберіть GPX…</string>
|
||||
<string name="route_descr_select_destination">Виберіть пункт призначення</string>
|
||||
<string name="shared_string_select_on_map">Виберіть на мапі</string>
|
||||
|
@ -2169,7 +2169,7 @@
|
|||
<string name="add_time_span">Додати часовий проміжок</string>
|
||||
<string name="road_blocked">Дорога заблокована</string>
|
||||
<string name="shared_string_select">Вибрати</string>
|
||||
<string name="switch_start_finish">Поміняти місцями точки призначення та початку</string>
|
||||
<string name="switch_start_finish">Поміняти місцями пункт відправлення і пункт призначення</string>
|
||||
<string name="rendering_attr_hideIcons_name">Значки POI</string>
|
||||
<string name="item_removed">Елемент видалено</string>
|
||||
<string name="n_items_removed">Елементи видалено</string>
|
||||
|
@ -3040,7 +3040,7 @@
|
|||
|
||||
<string name="map_import_error">Помилка імпорту мапи</string>
|
||||
<string name="map_imported_successfully">Мапа успішна імпортована</string>
|
||||
<string name="make_as_start_point">Зробити початковою точкою</string>
|
||||
<string name="make_as_start_point">Зробити пунктом відправлення</string>
|
||||
<string name="shared_string_current">Поточний</string>
|
||||
<string name="last_intermediate_dest_description">Додає останню зупинку на маршруті</string>
|
||||
<string name="first_intermediate_dest_description">Додає першу зупинку на маршруті</string>
|
||||
|
@ -3104,4 +3104,34 @@
|
|||
<string name="shared_string_restart">Перезапуск</string>
|
||||
<string name="show_images">Показати зображення</string>
|
||||
<string name="off_road_render_descr">"Підходить для використання під час їзди по бездоріжжю. Підходить для використання з зеленими супутниковими зображеннями в якості підкладки карти. Ключові особливості: зменшена товщина основних доріг, збільшена товщина доріжок, стежок, велосипедних та інших маршрутів. Засноване на стилі „Topo“."</string>
|
||||
<string name="light_rs_render_descr">Простий і контрастний стиль для автомобільної навігації. Комфортний для очей в нічному режимі. Ключові особливості: контурні лінії, контрастні помаранчеві дороги, менше відволікаючих другорядних об\'єктів на мапі.</string>
|
||||
<string name="topo_render_descr">Контрастний стиль, призначений в основному для піших прогулянок, походів і велосипедних прогулянок на природі. Хороша читабельність при складному зовнішньому освітленні. Ключові особливості: контрастні дороги і природні об\'єкти, різні типи маршрутів, контурні лінії з розширеними настройками, більш детальна інформація при відповідних рівнях масштабування, ніж в стилі за замовчуванням. Опція „Якість дорожнього покриття“ дозволяє розрізняти дороги з різною якістю поверхні. Немає нічного режиму.</string>
|
||||
<string name="mapnik_render_descr">Старий стиль відображення за умовчанням „Mapnik“. Ключові особливості: кольору схожі на стиль „Mapnik“.</string>
|
||||
<string name="touring_view_render_descr">Високо деталізований стиль для туристичних цілей. Включає усі параметри конфігурації стилю за умованням, крім того: відображає якомога більше деталей, зокрема, усі дороги, стежки та інші способи переміщення. Чітка візуальна відмінність між усіма типами доріг, ремінісценція багатьох туристичних атласів. Висококонтрастна колірна схема для вуличного використання, денний і нічний режим.</string>
|
||||
<string name="default_render_descr">Стиль загального призначення. Спрощений рендеринг в густонаселених містах. Ключові особливості: контурні лінії, маршрути, якість поверхні, обмеження доступу, дорожні щити, візуалізація маршрутів за шкалою SAC, характеристики спортивних сплавів.</string>
|
||||
<string name="open_wikipedia_link_online">Відкрити посилання Вікіпедії в онлайні</string>
|
||||
<string name="open_wikipedia_link_online_description">Посилання буде відкрите в веб-браузері.</string>
|
||||
<string name="read_wikipedia_offline_description">Отримайте підписку на OsmAnd Live, щоб читати статті у Вікіпедії та вікімандри в автономному режимі.</string>
|
||||
<string name="read_wikipedia_offline">Читати Вікіпедію в автономному режимі</string>
|
||||
<string name="purchase_cancelled_dialog_title">Ви скасували підписку OsmAnd Live</string>
|
||||
<string name="purchase_cancelled_dialog_descr">Відновіть підписку, щоб продовжити використовувати усі функції:</string>
|
||||
|
||||
<string name="maps_you_need_descr">На основі збережених Вами статей ми рекомендуємо Вам звантажити наступні мапи:</string>
|
||||
<string name="maps_you_need">Потрібні Вам мапи</string>
|
||||
<string name="osmand_team">Команда OsmAnd</string>
|
||||
<string name="popular_destinations">Популярні напрямки</string>
|
||||
<string name="paid_app">Платний додаток</string>
|
||||
<string name="travel_card_update_descr">Доступні нові дані ВікіМандри, оновіть їх та насолоджуйтеся.</string>
|
||||
<string name="travel_card_download_descr">Завантажте путівники ВікіМандри, щоб переглянути статті про місця в усьому світі без підключення до Інтернету.</string>
|
||||
<string name="update_is_available">Оновлення доступне</string>
|
||||
<string name="download_file">Звантажити файл</string>
|
||||
<string name="start_editing_card_image_text">Вільний всесвітній путівник, який може редагувати кожен.</string>
|
||||
<string name="welcome_to_open_beta_description">Туристичні путівники в даний час засновані на Вікімандрах. Перевірте усі функції безкоштовно під час відкритого бета-тестування. Потім путівники будуть доступні передплатникам OsmAnd Unlimited і власником OsmAnd+.</string>
|
||||
<string name="start_editing_card_description">Вам можна і слід редагувати будь-яку статтю на Вікімандрах. Діліться знаннями, досвідом, талантом і вашої увагою</string>
|
||||
<string name="start_editing">Розпочати редагування</string>
|
||||
<string name="get_unlimited_access">Отримати необмежений доступ</string>
|
||||
<string name="welcome_to_open_beta">Ласкаво просимо на відкрите бета-тестування</string>
|
||||
<string name="wikivoyage_travel_guide">Туристичний путівник</string>
|
||||
<string name="wikivoyage_travel_guide_descr">Переглядайте путівники Вікімандів про найцікавіші місця на планеті всередині OsmAnd без підключення до інтернету.</string>
|
||||
<string name="clear_all_intermediates">Очистити усі проміжні точки</string>
|
||||
</resources>
|
||||
|
|
|
@ -2715,4 +2715,7 @@
|
|||
<string name="download_wikipedia_label">下载维基百科数据</string>
|
||||
<string name="open_in_browser_wiki">在线打开文章</string>
|
||||
<string name="wiki_article_not_found">文章未找到</string>
|
||||
<string name="increase_search_radius_to">增大搜索半径至 %1$s</string>
|
||||
<string name="send_search_query_description">我们将会发送您的搜索请求:<b>\"%1$s\"</b>,以及您的位置。<br/><br/>我们不会搜集您的个人信息,我们只需要搜索数据以改进搜索算法。<br/></string>
|
||||
<string name="send_search_query">发送搜索请求?</string>
|
||||
</resources>
|
||||
|
|
|
@ -3127,4 +3127,17 @@
|
|||
<string name="search_no_results_description">沒有結果?
|
||||
\n告訴我們這件事。</string>
|
||||
<string name="send_search_query">送出搜尋查詢?</string>
|
||||
<string name="release_3_1">• 導航:修復進度列,快速交換路線的起點和終點
|
||||
\n
|
||||
\n • 地圖標記:修復開/關群組,從地圖中隱藏標記的功能
|
||||
\n
|
||||
\n • OSM 編輯:能夠編輯非點物件標記,修復評論上遺漏的註解、編輯備份
|
||||
\n
|
||||
\n • 改善 Wikipedia 和維基導遊分析,更新檔案已經能用
|
||||
\n
|
||||
\n • 內容選單:在夜間模式下修復交通保護顏色,修復附加選單大小
|
||||
\n
|
||||
\n • 其他錯誤修復
|
||||
\n</string>
|
||||
<string name="increase_search_radius_to">將搜尋半徑增加到 %1$s</string>
|
||||
</resources>
|
||||
|
|
|
@ -53,6 +53,8 @@ import net.osmand.aidl.gpx.RemoveGpxParams;
|
|||
|
||||
import net.osmand.aidl.maplayer.point.ShowMapPointParams;
|
||||
|
||||
import net.osmand.aidl.navdrawer.AddOpenAppNavDrawerItemParams;
|
||||
|
||||
// NOTE: Add new methods at the end of file!!!
|
||||
|
||||
interface IOsmAndAidlInterface {
|
||||
|
@ -105,4 +107,6 @@ interface IOsmAndAidlInterface {
|
|||
boolean removeGpx(in RemoveGpxParams params);
|
||||
|
||||
boolean showMapPoint(in ShowMapPointParams params);
|
||||
|
||||
boolean addOpenAppNavDrawerItem(in AddOpenAppNavDrawerItemParams params);
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package net.osmand.aidl;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
|
@ -12,6 +13,7 @@ import android.os.ParcelFileDescriptor;
|
|||
import android.support.v7.app.AlertDialog;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.widget.ArrayAdapter;
|
||||
|
||||
import net.osmand.IndexConstants;
|
||||
import net.osmand.PlatformUtil;
|
||||
|
@ -28,6 +30,8 @@ import net.osmand.data.FavouritePoint;
|
|||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.ApplicationMode;
|
||||
import net.osmand.plus.ContextMenuAdapter;
|
||||
import net.osmand.plus.ContextMenuItem;
|
||||
import net.osmand.plus.FavouritesDbHelper;
|
||||
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
||||
import net.osmand.plus.GPXUtilities;
|
||||
|
@ -38,6 +42,7 @@ import net.osmand.plus.MapMarkersHelper;
|
|||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.TargetPointsHelper;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
|
||||
|
@ -826,6 +831,7 @@ public class OsmandAidlApi {
|
|||
for (AMapPoint point : layer.getPoints()) {
|
||||
existingLayer.putPoint(point);
|
||||
}
|
||||
existingLayer.copyZoomBounds(layer);
|
||||
refreshMap();
|
||||
return true;
|
||||
} else {
|
||||
|
@ -1185,4 +1191,41 @@ public class OsmandAidlApi {
|
|||
app.sendBroadcast(intent);
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean addOpenAppNavDrawerItem(String itemName, String appPackage, int flags) {
|
||||
if (!TextUtils.isEmpty(itemName) && !TextUtils.isEmpty(appPackage)) {
|
||||
OsmandSettings settings = app.getSettings();
|
||||
settings.API_NAV_DRAWER_ITEM_NAME.set(itemName);
|
||||
settings.API_NAV_DRAWER_ITEM_APP_PACKAGE.set(appPackage);
|
||||
settings.API_NAV_DRAWER_ITEM_FLAGS.set(flags);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void registerNavDrawerItem(final Activity activity, ContextMenuAdapter adapter) {
|
||||
final OsmandSettings settings = app.getSettings();
|
||||
final String itemName = settings.API_NAV_DRAWER_ITEM_NAME.get();
|
||||
final String appPackage = settings.API_NAV_DRAWER_ITEM_APP_PACKAGE.get();
|
||||
if (!TextUtils.isEmpty(itemName) && !TextUtils.isEmpty(appPackage)) {
|
||||
final Intent intent = activity.getPackageManager().getLaunchIntentForPackage(appPackage);
|
||||
if (intent != null) {
|
||||
int flags = settings.API_NAV_DRAWER_ITEM_FLAGS.get();
|
||||
if (flags != -1) {
|
||||
intent.addFlags(flags);
|
||||
}
|
||||
|
||||
adapter.addItem(new ContextMenuItem.ItemBuilder()
|
||||
.setTitle(itemName)
|
||||
.setListener(new ContextMenuAdapter.ItemClickListener() {
|
||||
@Override
|
||||
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int position, boolean isChecked, int[] viewCoordinates) {
|
||||
activity.startActivity(intent);
|
||||
return true;
|
||||
}
|
||||
})
|
||||
.createItem());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ import net.osmand.aidl.mapmarker.UpdateMapMarkerParams;
|
|||
import net.osmand.aidl.mapwidget.AddMapWidgetParams;
|
||||
import net.osmand.aidl.mapwidget.RemoveMapWidgetParams;
|
||||
import net.osmand.aidl.mapwidget.UpdateMapWidgetParams;
|
||||
import net.osmand.aidl.navdrawer.AddOpenAppNavDrawerItemParams;
|
||||
import net.osmand.aidl.navigation.NavigateGpxParams;
|
||||
import net.osmand.aidl.navigation.NavigateParams;
|
||||
import net.osmand.aidl.note.StartAudioRecordingParams;
|
||||
|
@ -457,5 +458,15 @@ public class OsmandAidlService extends Service {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addOpenAppNavDrawerItem(AddOpenAppNavDrawerItemParams params) throws RemoteException {
|
||||
try {
|
||||
return params != null && getApi("addOpenAppNavDrawerItem").addOpenAppNavDrawerItem(params.getItemName(), params.getAppPackage(), params.getFlags());
|
||||
} catch (Exception e) {
|
||||
handleException(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -16,6 +16,14 @@ public class AMapLayer implements Parcelable {
|
|||
private float zOrder = 5.5f;
|
||||
private Map<String, AMapPoint> points = new ConcurrentHashMap<>();
|
||||
|
||||
private boolean imagePoints = false;
|
||||
private int circlePointMinZoom = 0;
|
||||
private int circlePointMaxZoom = 6;
|
||||
private int smallPointMinZoom = 7;
|
||||
private int smallPointMaxZoom = 13;
|
||||
private int bigPointMinZoom = 14;
|
||||
private int bigPointMaxZoom = 22;
|
||||
|
||||
public AMapLayer(String id, String name, float zOrder, List<AMapPoint> pointList) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
|
@ -74,11 +82,74 @@ public class AMapLayer implements Parcelable {
|
|||
points.remove(pointId);
|
||||
}
|
||||
|
||||
public boolean isImagePoints() {
|
||||
return imagePoints;
|
||||
}
|
||||
|
||||
public void setImagePoints(boolean imagePoints) {
|
||||
this.imagePoints = imagePoints;
|
||||
}
|
||||
|
||||
public void copyZoomBounds(AMapLayer layer) {
|
||||
circlePointMinZoom = layer.circlePointMinZoom;
|
||||
circlePointMaxZoom = layer.circlePointMaxZoom;
|
||||
smallPointMinZoom = layer.smallPointMinZoom;
|
||||
smallPointMaxZoom = layer.smallPointMaxZoom;
|
||||
bigPointMinZoom = layer.bigPointMinZoom;
|
||||
bigPointMaxZoom = layer.bigPointMaxZoom;
|
||||
}
|
||||
|
||||
public void setCirclePointZoomBounds(int min, int max) {
|
||||
circlePointMinZoom = min;
|
||||
circlePointMaxZoom = max;
|
||||
}
|
||||
|
||||
public void setSmallPointZoomBounds(int min, int max) {
|
||||
smallPointMinZoom = min;
|
||||
smallPointMaxZoom = max;
|
||||
}
|
||||
|
||||
public void setBigPointZoomBounds(int min, int max) {
|
||||
bigPointMinZoom = min;
|
||||
bigPointMaxZoom = max;
|
||||
}
|
||||
|
||||
public int getCirclePointMinZoom() {
|
||||
return circlePointMinZoom;
|
||||
}
|
||||
|
||||
public int getCirclePointMaxZoom() {
|
||||
return circlePointMaxZoom;
|
||||
}
|
||||
|
||||
public int getSmallPointMinZoom() {
|
||||
return smallPointMinZoom;
|
||||
}
|
||||
|
||||
public int getSmallPointMaxZoom() {
|
||||
return smallPointMaxZoom;
|
||||
}
|
||||
|
||||
public int getBigPointMinZoom() {
|
||||
return bigPointMinZoom;
|
||||
}
|
||||
|
||||
public int getBigPointMaxZoom() {
|
||||
return bigPointMaxZoom;
|
||||
}
|
||||
|
||||
public void writeToParcel(Parcel out, int flags) {
|
||||
out.writeString(id);
|
||||
out.writeString(name);
|
||||
out.writeFloat(zOrder);
|
||||
out.writeTypedList(new ArrayList<>(points.values()));
|
||||
out.writeByte((byte) (imagePoints ? 1 : 0));
|
||||
out.writeInt(circlePointMinZoom);
|
||||
out.writeInt(circlePointMaxZoom);
|
||||
out.writeInt(smallPointMinZoom);
|
||||
out.writeInt(smallPointMaxZoom);
|
||||
out.writeInt(bigPointMinZoom);
|
||||
out.writeInt(bigPointMaxZoom);
|
||||
}
|
||||
|
||||
private void readFromParcel(Parcel in) {
|
||||
|
@ -90,6 +161,13 @@ public class AMapLayer implements Parcelable {
|
|||
for (AMapPoint p : pointList) {
|
||||
this.points.put(p.getId(), p);
|
||||
}
|
||||
imagePoints = in.readByte() == 1;
|
||||
circlePointMinZoom = in.readInt();
|
||||
circlePointMaxZoom = in.readInt();
|
||||
smallPointMinZoom = in.readInt();
|
||||
smallPointMaxZoom = in.readInt();
|
||||
bigPointMinZoom = in.readInt();
|
||||
bigPointMaxZoom = in.readInt();
|
||||
}
|
||||
|
||||
public int describeContents() {
|
||||
|
|
|
@ -11,7 +11,6 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
public class AMapPoint implements Parcelable {
|
||||
public static final int POINT_IMAGE_SIZE_PX = 160;
|
||||
public static final String POINT_IMAGE_URI_PARAM = "point_image_uri_param";
|
||||
|
||||
private String id;
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
package net.osmand.aidl.navdrawer;
|
||||
|
||||
parcelable AddOpenAppNavDrawerItemParams;
|
|
@ -0,0 +1,63 @@
|
|||
package net.osmand.aidl.navdrawer;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
public class AddOpenAppNavDrawerItemParams implements Parcelable {
|
||||
|
||||
private String itemName;
|
||||
private String appPackage;
|
||||
private int flags;
|
||||
|
||||
public AddOpenAppNavDrawerItemParams(String itemName, String appPackage) {
|
||||
this(itemName, appPackage, -1);
|
||||
}
|
||||
|
||||
public AddOpenAppNavDrawerItemParams(String itemName, String appPackage, int flags) {
|
||||
this.itemName = itemName;
|
||||
this.appPackage = appPackage;
|
||||
this.flags = flags;
|
||||
}
|
||||
|
||||
protected AddOpenAppNavDrawerItemParams(Parcel in) {
|
||||
itemName = in.readString();
|
||||
appPackage = in.readString();
|
||||
flags = in.readInt();
|
||||
}
|
||||
|
||||
public String getItemName() {
|
||||
return itemName;
|
||||
}
|
||||
|
||||
public String getAppPackage() {
|
||||
return appPackage;
|
||||
}
|
||||
|
||||
public int getFlags() {
|
||||
return flags;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeString(itemName);
|
||||
dest.writeString(appPackage);
|
||||
dest.writeInt(flags);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static final Creator<AddOpenAppNavDrawerItemParams> CREATOR = new Creator<AddOpenAppNavDrawerItemParams>() {
|
||||
@Override
|
||||
public AddOpenAppNavDrawerItemParams createFromParcel(Parcel in) {
|
||||
return new AddOpenAppNavDrawerItemParams(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AddOpenAppNavDrawerItemParams[] newArray(int size) {
|
||||
return new AddOpenAppNavDrawerItemParams[size];
|
||||
}
|
||||
};
|
||||
}
|
|
@ -8,6 +8,7 @@ import android.content.Context;
|
|||
import android.os.ParcelFileDescriptor;
|
||||
|
||||
import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
|
||||
import net.osmand.plus.osmedit.OsmBugsDbHelper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
@ -31,7 +32,8 @@ public class OsmandBackupAgent extends BackupAgentHelper {
|
|||
SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(this, prefs);
|
||||
addHelper("osmand.settings", helper);
|
||||
|
||||
FileBackupHelper fileBackupHelper = new FileBackupHelper(this, FavouritesDbHelper.FILE_TO_BACKUP, "../databases/" + MapMarkersDbHelper.DB_NAME);
|
||||
FileBackupHelper fileBackupHelper = new FileBackupHelper(this, FavouritesDbHelper.FILE_TO_BACKUP,
|
||||
"../databases/" + MapMarkersDbHelper.DB_NAME, "../databases/" + OsmBugsDbHelper.OSMBUGS_DB_NAME);
|
||||
addHelper("osmand.files", fileBackupHelper);
|
||||
}
|
||||
|
||||
|
|
|
@ -742,6 +742,10 @@ public class OsmandSettings {
|
|||
public final CommonPreference<Boolean> SHOW_DASHBOARD_ON_START = new BooleanPreference("should_show_dashboard_on_start", false).makeGlobal();
|
||||
public final CommonPreference<Boolean> SHOW_DASHBOARD_ON_MAP_SCREEN = new BooleanPreference("show_dashboard_on_map_screen", false).makeGlobal();
|
||||
|
||||
public final CommonPreference<String> API_NAV_DRAWER_ITEM_NAME = new StringPreference("api_nav_drawer_item_name", "").makeGlobal();
|
||||
public final CommonPreference<String> API_NAV_DRAWER_ITEM_APP_PACKAGE = new StringPreference("api_nav_drawer_item_app_package", "").makeGlobal();
|
||||
public final CommonPreference<Integer> API_NAV_DRAWER_ITEM_FLAGS = new IntPreference("api_nav_drawer_item_flags", -1).makeGlobal();
|
||||
|
||||
public final CommonPreference<Integer> NUMBER_OF_STARTS_FIRST_XMAS_SHOWN = new IntPreference("number_of_starts_first_xmas_shown", 0).makeGlobal();
|
||||
|
||||
// this value string is synchronized with settings_pref.xml preference name
|
||||
|
|
|
@ -795,6 +795,8 @@ public class MapActivityActions implements DialogProvider {
|
|||
}
|
||||
}).createItem());
|
||||
|
||||
app.getAidlApi().registerNavDrawerItem(mapActivity, optionsMenuHelper);
|
||||
|
||||
optionsMenuHelper.addItem(new ItemBuilder().setTitleId(R.string.layer_map_appearance, mapActivity)
|
||||
.setIcon(R.drawable.ic_configure_screen_dark)
|
||||
.setListener(new ContextMenuAdapter.ItemClickListener() {
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
package net.osmand.plus.views;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.PointF;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.PorterDuffColorFilter;
|
||||
import android.graphics.Rect;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.support.annotation.NonNull;
|
||||
|
@ -26,29 +30,47 @@ import net.osmand.plus.widgets.tools.CropCircleTransformation;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import static net.osmand.aidl.maplayer.point.AMapPoint.POINT_IMAGE_SIZE_PX;
|
||||
|
||||
public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider, MapTextLayer.MapTextProvider<AMapPoint> {
|
||||
private static int POINT_OUTER_COLOR = 0x88555555;
|
||||
|
||||
private static final int POINT_OUTER_COLOR = 0x88555555;
|
||||
private static final float START_ZOOM = 7;
|
||||
private static final int SMALL_ICON_SIZE_DP = 20;
|
||||
private static final int BIG_ICON_SIZE_DP = 40;
|
||||
|
||||
private final MapActivity map;
|
||||
private AMapLayer aidlLayer;
|
||||
private OsmandMapTileView view;
|
||||
|
||||
private AMapLayer aidlLayer;
|
||||
|
||||
private Paint pointInnerCircle;
|
||||
private Paint pointOuter;
|
||||
private Paint pointOuterCircle;
|
||||
private Paint bitmapPaint;
|
||||
private final static float startZoom = 7;
|
||||
|
||||
private Bitmap circle;
|
||||
private Bitmap smallIconBg;
|
||||
private Bitmap bigIconBg;
|
||||
private Bitmap placeholder;
|
||||
|
||||
private int smallIconSize;
|
||||
private int bigIconSize;
|
||||
|
||||
private PointsType pointsType;
|
||||
|
||||
private MapTextLayer mapTextLayer;
|
||||
|
||||
private Map<String, Bitmap> pointImages = new ConcurrentHashMap<>();
|
||||
|
||||
private Set<String> imageRequests = new HashSet<>();
|
||||
private List<AMapPoint> displayedPoints = new ArrayList<>();
|
||||
|
||||
public AidlMapLayer(MapActivity map, AMapLayer aidlLayer) {
|
||||
this.map = map;
|
||||
this.aidlLayer = aidlLayer;
|
||||
|
@ -58,88 +80,119 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider
|
|||
public void initLayer(OsmandMapTileView view) {
|
||||
this.view = view;
|
||||
|
||||
Resources res = view.getResources();
|
||||
boolean night = map.getMyApplication().getDaynightHelper().isNightMode();
|
||||
|
||||
pointInnerCircle = new Paint();
|
||||
pointInnerCircle.setColor(view.getApplication().getResources().getColor(R.color.poi_background));
|
||||
pointInnerCircle.setColor(res.getColor(R.color.poi_background));
|
||||
pointInnerCircle.setStyle(Paint.Style.FILL);
|
||||
pointInnerCircle.setAntiAlias(true);
|
||||
|
||||
pointOuter = new Paint();
|
||||
pointOuter.setColor(POINT_OUTER_COLOR);
|
||||
pointOuter.setAntiAlias(true);
|
||||
pointOuter.setStyle(Paint.Style.FILL_AND_STROKE);
|
||||
pointOuterCircle = new Paint();
|
||||
pointOuterCircle.setColor(POINT_OUTER_COLOR);
|
||||
pointOuterCircle.setStyle(Paint.Style.FILL_AND_STROKE);
|
||||
pointOuterCircle.setAntiAlias(true);
|
||||
|
||||
bitmapPaint = new Paint();
|
||||
bitmapPaint.setAntiAlias(true);
|
||||
bitmapPaint.setDither(true);
|
||||
bitmapPaint.setFilterBitmap(true);
|
||||
|
||||
circle = BitmapFactory.decodeResource(res, R.drawable.map_white_shield_small);
|
||||
smallIconBg = BitmapFactory.decodeResource(res, night
|
||||
? R.drawable.map_pin_user_location_small_night : R.drawable.map_pin_user_location_small_day);
|
||||
bigIconBg = BitmapFactory.decodeResource(res, night
|
||||
? R.drawable.map_pin_user_location_night : R.drawable.map_pin_user_location_day);
|
||||
placeholder = BitmapFactory.decodeResource(res, R.drawable.img_user_picture);
|
||||
|
||||
smallIconSize = AndroidUtils.dpToPx(map, SMALL_ICON_SIZE_DP);
|
||||
bigIconSize = AndroidUtils.dpToPx(map, BIG_ICON_SIZE_DP);
|
||||
|
||||
mapTextLayer = view.getLayerByClass(MapTextLayer.class);
|
||||
}
|
||||
|
||||
private int getRadiusPoi(RotatedTileBox tb) {
|
||||
int r;
|
||||
final double zoom = tb.getZoom();
|
||||
if (zoom < startZoom) {
|
||||
r = 0;
|
||||
} else if (zoom <= 11) {
|
||||
r = 10;
|
||||
} else if (zoom <= 14) {
|
||||
r = 12;
|
||||
} else {
|
||||
r = 14;
|
||||
}
|
||||
return (int) (r * tb.getDensity());
|
||||
}
|
||||
|
||||
private boolean hasBitmap(AMapPoint point) {
|
||||
String imageUriStr = point.getParams().get(AMapPoint.POINT_IMAGE_URI_PARAM);
|
||||
return !TextUtils.isEmpty(imageUriStr) && pointImages.containsKey(imageUriStr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDraw(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) {
|
||||
float density = (float) Math.ceil(tileBox.getDensity());
|
||||
final int radius = getRadiusPoi(tileBox);
|
||||
final int maxRadius = (int) (Math.max(radius, POINT_IMAGE_SIZE_PX) + density);
|
||||
pointsType = getPointsType(tileBox.getZoom());
|
||||
if (pointsType == PointsType.INVISIBLE) {
|
||||
mapTextLayer.putData(this, Collections.emptyList());
|
||||
return;
|
||||
}
|
||||
displayedPoints.clear();
|
||||
imageRequests.clear();
|
||||
|
||||
canvas.rotate(-tileBox.getRotate(), tileBox.getCenterPixelX(), tileBox.getCenterPixelY());
|
||||
|
||||
Set<String> imageRequests = new HashSet<>();
|
||||
List<AMapPoint> points = aidlLayer.getPoints();
|
||||
for (AMapPoint point : points) {
|
||||
for (AMapPoint point : aidlLayer.getPoints()) {
|
||||
ALatLon l = point.getLocation();
|
||||
if (l != null) {
|
||||
int x = (int) tileBox.getPixXFromLatLon(l.getLatitude(), l.getLongitude());
|
||||
int y = (int) tileBox.getPixYFromLatLon(l.getLatitude(), l.getLongitude());
|
||||
if (tileBox.containsPoint(x, y, maxRadius)) {
|
||||
boolean hasBitmap = false;
|
||||
Map<String, String> params = point.getParams();
|
||||
String imageUriStr = params.get(AMapPoint.POINT_IMAGE_URI_PARAM);
|
||||
if (!TextUtils.isEmpty(imageUriStr)) {
|
||||
Bitmap bitmap = pointImages.get(imageUriStr);
|
||||
if (bitmap == null) {
|
||||
imageRequests.add(imageUriStr);
|
||||
} else {
|
||||
hasBitmap = true;
|
||||
canvas.drawBitmap(bitmap, x - bitmap.getHeight() / 2, y - bitmap.getWidth() / 2, bitmapPaint);
|
||||
}
|
||||
}
|
||||
if (!hasBitmap) {
|
||||
pointInnerCircle.setColor(point.getColor());
|
||||
pointOuter.setColor(POINT_OUTER_COLOR);
|
||||
canvas.drawCircle(x, y, radius + density, pointOuter);
|
||||
canvas.drawCircle(x, y, radius - density, pointInnerCircle);
|
||||
if (tileBox.containsPoint(x, y, bigIconSize)) {
|
||||
Bitmap image = null;
|
||||
if (pointsType != PointsType.STANDARD) {
|
||||
String imageUri = point.getParams().get(AMapPoint.POINT_IMAGE_URI_PARAM);
|
||||
if (!TextUtils.isEmpty(imageUri)) {
|
||||
image = pointImages.get(imageUri);
|
||||
if (image == null) {
|
||||
imageRequests.add(imageUri);
|
||||
}
|
||||
}
|
||||
}
|
||||
displayedPoints.add(point);
|
||||
drawPoint(canvas, x, y, tileBox, point, image);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (imageRequests.size() > 0) {
|
||||
executeTaskInBackground(new PointImageReaderTask(this), imageRequests.toArray(new String[imageRequests.size()]));
|
||||
}
|
||||
mapTextLayer.putData(this, points);
|
||||
mapTextLayer.putData(this, displayedPoints);
|
||||
}
|
||||
|
||||
private void drawPoint(Canvas canvas, int x, int y, RotatedTileBox tb, AMapPoint point, Bitmap image) {
|
||||
if (image == null) {
|
||||
image = placeholder;
|
||||
}
|
||||
if (pointsType == PointsType.STANDARD) {
|
||||
int radius = getRadiusPoi(tb);
|
||||
float density = tb.getDensity();
|
||||
pointInnerCircle.setColor(point.getColor());
|
||||
canvas.drawCircle(x, y, radius + density, pointOuterCircle);
|
||||
canvas.drawCircle(x, y, radius - density, pointInnerCircle);
|
||||
} else if (pointsType == PointsType.CIRCLE) {
|
||||
drawColoredBitmap(canvas, x, y, circle, point.getColor());
|
||||
} else if (pointsType == PointsType.SMALL_ICON) {
|
||||
drawColoredBitmap(canvas, x, y, smallIconBg, point.getColor());
|
||||
bitmapPaint.setColorFilter(null);
|
||||
canvas.drawBitmap(image, null, getDstRect(x, y, smallIconSize / 2), bitmapPaint);
|
||||
} else if (pointsType == PointsType.BIG_ICON) {
|
||||
bitmapPaint.setColorFilter(null);
|
||||
// FIXME: vertical offset
|
||||
float vOffset = bigIconBg.getHeight() * 0.9f;
|
||||
int imageCenterY = (int) (y - vOffset + bigIconBg.getHeight() / 2);
|
||||
canvas.drawBitmap(bigIconBg, x - bigIconBg.getWidth() / 2, y - vOffset, bitmapPaint);
|
||||
canvas.drawBitmap(image, null, getDstRect(x, imageCenterY, bigIconSize / 2), bitmapPaint);
|
||||
}
|
||||
}
|
||||
|
||||
private void drawColoredBitmap(Canvas canvas, int x, int y, Bitmap bitmap, int color) {
|
||||
bitmapPaint.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
|
||||
canvas.drawBitmap(bitmap, x - bitmap.getWidth() / 2, y - bitmap.getHeight() / 2, bitmapPaint);
|
||||
}
|
||||
|
||||
private Rect getDstRect(int centerX, int centerY, int offset) {
|
||||
Rect rect = new Rect();
|
||||
rect.left = centerX - offset;
|
||||
rect.top = centerY - offset;
|
||||
rect.right = centerX + offset;
|
||||
rect.bottom = centerY + offset;
|
||||
return rect;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -151,12 +204,6 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider
|
|||
return false;
|
||||
}
|
||||
|
||||
public void refresh() {
|
||||
if (view != null) {
|
||||
view.refreshMap();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean disableSingleTap() {
|
||||
return false;
|
||||
|
@ -207,28 +254,6 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider
|
|||
return aidlLayer.getPoint(id);
|
||||
}
|
||||
|
||||
private void getFromPoint(RotatedTileBox tb, PointF point, List<? super AMapPoint> points) {
|
||||
if (view != null) {
|
||||
int ex = (int) point.x;
|
||||
int ey = (int) point.y;
|
||||
final int rp = getRadiusPoi(tb);
|
||||
final int bitmapRadius = (int) ((POINT_IMAGE_SIZE_PX / tb.getDensity()) * 3 / 2);
|
||||
int compare;
|
||||
int radius = rp * 3 / 2;
|
||||
for (AMapPoint p : aidlLayer.getPoints()) {
|
||||
ALatLon position = p.getLocation();
|
||||
if (position != null) {
|
||||
compare = hasBitmap(p) ? bitmapRadius : radius;
|
||||
int x = (int) tb.getPixXFromLatLon(position.getLatitude(), position.getLongitude());
|
||||
int y = (int) tb.getPixYFromLatLon(position.getLatitude(), position.getLongitude());
|
||||
if (Math.abs(x - ex) <= compare && Math.abs(y - ey) <= compare) {
|
||||
points.add(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public LatLon getTextLocation(AMapPoint o) {
|
||||
ALatLon loc = o.getLocation();
|
||||
|
@ -240,11 +265,16 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider
|
|||
|
||||
@Override
|
||||
public int getTextShift(AMapPoint o, RotatedTileBox rb) {
|
||||
int radius = getRadiusPoi(rb);
|
||||
if (hasBitmap(o)) {
|
||||
return (int) (POINT_IMAGE_SIZE_PX * 0.6);
|
||||
if (pointsType == PointsType.STANDARD) {
|
||||
return (int) (getRadiusPoi(rb) * 1.5);
|
||||
} else if (pointsType == PointsType.CIRCLE) {
|
||||
return (int) (circle.getHeight() * 0.6);
|
||||
} else if (pointsType == PointsType.SMALL_ICON) {
|
||||
return smallIconBg.getHeight() / 2;
|
||||
} else if (pointsType == PointsType.BIG_ICON) {
|
||||
return bigIconBg.getHeight() / 6;
|
||||
}
|
||||
return (int) (radius * 1.5);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -262,6 +292,81 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider
|
|||
return true;
|
||||
}
|
||||
|
||||
public void refresh() {
|
||||
if (view != null) {
|
||||
view.refreshMap();
|
||||
}
|
||||
}
|
||||
|
||||
private PointsType getPointsType(int zoom) {
|
||||
if (!aidlLayer.isImagePoints()) {
|
||||
return zoom >= START_ZOOM ? PointsType.STANDARD : PointsType.INVISIBLE;
|
||||
}
|
||||
if (zoom >= aidlLayer.getCirclePointMinZoom() && zoom <= aidlLayer.getCirclePointMaxZoom()) {
|
||||
return PointsType.CIRCLE;
|
||||
} else if (zoom >= aidlLayer.getSmallPointMinZoom() && zoom <= aidlLayer.getSmallPointMaxZoom()) {
|
||||
return PointsType.SMALL_ICON;
|
||||
} else if (zoom >= aidlLayer.getBigPointMinZoom() && zoom <= aidlLayer.getBigPointMaxZoom()) {
|
||||
return PointsType.BIG_ICON;
|
||||
}
|
||||
return PointsType.INVISIBLE;
|
||||
}
|
||||
|
||||
private int getRadiusPoi(RotatedTileBox tb) {
|
||||
int r;
|
||||
final double zoom = tb.getZoom();
|
||||
if (zoom < START_ZOOM) {
|
||||
r = 0;
|
||||
} else if (zoom <= 11) {
|
||||
r = 10;
|
||||
} else if (zoom <= 14) {
|
||||
r = 12;
|
||||
} else {
|
||||
r = 14;
|
||||
}
|
||||
return (int) (r * tb.getDensity());
|
||||
}
|
||||
|
||||
private int getPointRadius(RotatedTileBox tb) {
|
||||
int r = 0;
|
||||
if (pointsType == PointsType.STANDARD) {
|
||||
r = getRadiusPoi(tb);
|
||||
} else if (pointsType == PointsType.CIRCLE) {
|
||||
r = circle.getHeight() / 2;
|
||||
} else if (pointsType == PointsType.SMALL_ICON) {
|
||||
r = smallIconSize / 2;
|
||||
} else if (pointsType == PointsType.BIG_ICON) {
|
||||
r = bigIconSize / 2;
|
||||
}
|
||||
return r * 3 / 2;
|
||||
}
|
||||
|
||||
private void getFromPoint(RotatedTileBox tb, PointF point, List<? super AMapPoint> points) {
|
||||
if (view != null) {
|
||||
int ex = (int) point.x;
|
||||
int ey = (int) point.y;
|
||||
int radius = getPointRadius(tb);
|
||||
for (AMapPoint p : aidlLayer.getPoints()) {
|
||||
ALatLon position = p.getLocation();
|
||||
if (position != null) {
|
||||
int x = (int) tb.getPixXFromLatLon(position.getLatitude(), position.getLongitude());
|
||||
int y = (int) tb.getPixYFromLatLon(position.getLatitude(), position.getLongitude());
|
||||
if (Math.abs(x - ex) <= radius && Math.abs(y - ey) <= radius) {
|
||||
points.add(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private enum PointsType {
|
||||
STANDARD,
|
||||
CIRCLE,
|
||||
SMALL_ICON,
|
||||
BIG_ICON,
|
||||
INVISIBLE
|
||||
}
|
||||
|
||||
private static class PointImageReaderTask extends AsyncTask<String, Void, Boolean> {
|
||||
|
||||
private WeakReference<AidlMapLayer> layerRef;
|
||||
|
@ -285,8 +390,8 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider
|
|||
Bitmap bitmap = BitmapFactory.decodeStream(ims);
|
||||
if (bitmap != null) {
|
||||
bitmap = circleTransformation.transform(bitmap);
|
||||
if (bitmap.getWidth() != POINT_IMAGE_SIZE_PX || bitmap.getHeight() != POINT_IMAGE_SIZE_PX) {
|
||||
bitmap = AndroidUtils.scaleBitmap(bitmap, POINT_IMAGE_SIZE_PX, POINT_IMAGE_SIZE_PX, false);
|
||||
if (bitmap.getWidth() != layer.bigIconSize || bitmap.getHeight() != layer.bigIconSize) {
|
||||
bitmap = AndroidUtils.scaleBitmap(bitmap, layer.bigIconSize, layer.bigIconSize, false);
|
||||
}
|
||||
layer.pointImages.put(imageUriStr, bitmap);
|
||||
res = true;
|
||||
|
|
Loading…
Reference in a new issue