From 5573fcb5f2b36a8a82aa15a96a063e9519cc86d7 Mon Sep 17 00:00:00 2001 From: crimean Date: Sun, 10 Jun 2018 19:27:03 +0300 Subject: [PATCH] Telegram - added osmand api --- .../{src/main => }/AndroidManifest.xml | 0 OsmAnd-telegram/build.gradle | 23 +- .../drawable-hdpi/ic_action_polygom_dark.png | Bin .../res/drawable-hdpi/ic_action_rec_start.png | Bin .../res/drawable-hdpi/ic_action_rec_stop.png | Bin .../main => }/res/drawable-hdpi/ic_group.png | Bin .../main => }/res/drawable-hdpi/ic_pause.png | Bin .../res/drawable-hdpi/osmand_logo.png | Bin 0 -> 15623 bytes .../drawable-mdpi/ic_action_polygom_dark.png | Bin .../res/drawable-mdpi/ic_action_rec_start.png | Bin .../res/drawable-mdpi/ic_action_rec_stop.png | Bin .../main => }/res/drawable-mdpi/ic_group.png | Bin .../main => }/res/drawable-mdpi/ic_pause.png | Bin .../res/drawable-mdpi/osmand_logo.png | Bin 0 -> 10288 bytes .../drawable-v24/ic_launcher_foreground.xml | 0 .../drawable-xhdpi/ic_action_polygom_dark.png | Bin .../drawable-xhdpi/ic_action_rec_start.png | Bin .../res/drawable-xhdpi/ic_action_rec_stop.png | Bin .../main => }/res/drawable-xhdpi/ic_group.png | Bin .../main => }/res/drawable-xhdpi/ic_pause.png | Bin .../res/drawable-xhdpi/osmand_logo.png | Bin 0 -> 21062 bytes .../ic_action_polygom_dark.png | Bin .../drawable-xxhdpi/ic_action_rec_start.png | Bin .../drawable-xxhdpi/ic_action_rec_stop.png | Bin .../res/drawable-xxhdpi/ic_group.png | Bin .../res/drawable-xxhdpi/ic_pause.png | Bin .../res/drawable-xxhdpi/osmand_logo.png | Bin 0 -> 31619 bytes .../res/drawable/ic_launcher_background.xml | 0 .../res/layout/action_progress_bar.xml | 0 .../main => }/res/layout/activity_main.xml | 0 .../main => }/res/layout/chat_list_item.xml | 0 .../res/layout/install_osmand_dialog.xml | 37 + .../main => }/res/layout/login_dialog.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../main => }/res/mipmap-hdpi/ic_launcher.png | Bin .../res/mipmap-hdpi/ic_launcher_round.png | Bin .../main => }/res/mipmap-mdpi/ic_launcher.png | Bin .../res/mipmap-mdpi/ic_launcher_round.png | Bin .../res/mipmap-xhdpi/ic_launcher.png | Bin .../res/mipmap-xhdpi/ic_launcher_round.png | Bin .../res/mipmap-xxhdpi/ic_launcher.png | Bin .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../res/mipmap-xxxhdpi/ic_launcher.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin .../{src/main => }/res/values/attrs.xml | 0 .../{src/main => }/res/values/colors.xml | 2 + .../{src/main => }/res/values/dimens.xml | 0 .../{src/main => }/res/values/strings.xml | 3 + .../{src/main => }/res/values/styles.xml | 0 .../telegram/ExampleInstrumentedTest.kt | 24 - .../java => }/net/osmand/PlatformUtil.java | 0 .../net/osmand/aidl/IOsmAndAidlInterface.aidl | 104 +++ .../calculateroute/CalculateRouteParams.aidl | 3 + .../calculateroute/CalculateRouteParams.java | 100 +++ .../net/osmand/aidl/favorite/AFavorite.aidl | 3 + .../net/osmand/aidl/favorite/AFavorite.java | 96 +++ .../aidl/favorite/AddFavoriteParams.aidl | 3 + .../aidl/favorite/AddFavoriteParams.java | 47 + .../aidl/favorite/RemoveFavoriteParams.aidl | 3 + .../aidl/favorite/RemoveFavoriteParams.java | 47 + .../aidl/favorite/UpdateFavoriteParams.aidl | 3 + .../aidl/favorite/UpdateFavoriteParams.java | 55 ++ .../aidl/favorite/group/AFavoriteGroup.aidl | 3 + .../aidl/favorite/group/AFavoriteGroup.java | 63 ++ .../group/AddFavoriteGroupParams.aidl | 3 + .../group/AddFavoriteGroupParams.java | 47 + .../group/RemoveFavoriteGroupParams.aidl | 3 + .../group/RemoveFavoriteGroupParams.java | 47 + .../group/UpdateFavoriteGroupParams.aidl | 3 + .../group/UpdateFavoriteGroupParams.java | 55 ++ .../net/osmand/aidl/gpx/ASelectedGpxFile.aidl | 3 + .../net/osmand/aidl/gpx/ASelectedGpxFile.java | 45 + .../net/osmand/aidl/gpx/HideGpxParams.aidl | 3 + .../net/osmand/aidl/gpx/HideGpxParams.java | 45 + .../net/osmand/aidl/gpx/ImportGpxParams.aidl | 3 + .../net/osmand/aidl/gpx/ImportGpxParams.java | 106 +++ .../net/osmand/aidl/gpx/RemoveGpxParams.aidl | 3 + .../net/osmand/aidl/gpx/RemoveGpxParams.java | 48 ++ .../net/osmand/aidl/gpx/ShowGpxParams.aidl | 3 + .../net/osmand/aidl/gpx/ShowGpxParams.java | 44 + .../aidl/gpx/StartGpxRecordingParams.aidl | 3 + .../aidl/gpx/StartGpxRecordingParams.java | 40 + .../aidl/gpx/StopGpxRecordingParams.aidl | 3 + .../aidl/gpx/StopGpxRecordingParams.java | 40 + .../src/net/osmand/aidl/map/ALatLon.aidl | 3 + .../src/net/osmand/aidl/map/ALatLon.java | 83 ++ .../osmand/aidl/map/SetMapLocationParams.aidl | 3 + .../osmand/aidl/map/SetMapLocationParams.java | 68 ++ .../net/osmand/aidl/maplayer/AMapLayer.aidl | 3 + .../net/osmand/aidl/maplayer/AMapLayer.java | 94 ++ .../aidl/maplayer/AddMapLayerParams.aidl | 3 + .../aidl/maplayer/AddMapLayerParams.java | 44 + .../aidl/maplayer/RemoveMapLayerParams.aidl | 3 + .../aidl/maplayer/RemoveMapLayerParams.java | 44 + .../aidl/maplayer/UpdateMapLayerParams.aidl | 3 + .../aidl/maplayer/UpdateMapLayerParams.java | 44 + .../osmand/aidl/maplayer/point/AMapPoint.aidl | 3 + .../osmand/aidl/maplayer/point/AMapPoint.java | 99 +++ .../maplayer/point/AddMapPointParams.aidl | 3 + .../maplayer/point/AddMapPointParams.java | 51 ++ .../maplayer/point/RemoveMapPointParams.aidl | 3 + .../maplayer/point/RemoveMapPointParams.java | 51 ++ .../maplayer/point/UpdateMapPointParams.aidl | 3 + .../maplayer/point/UpdateMapPointParams.java | 51 ++ .../net/osmand/aidl/mapmarker/AMapMarker.aidl | 3 + .../net/osmand/aidl/mapmarker/AMapMarker.java | 63 ++ .../aidl/mapmarker/AddMapMarkerParams.aidl | 3 + .../aidl/mapmarker/AddMapMarkerParams.java | 44 + .../aidl/mapmarker/RemoveMapMarkerParams.aidl | 3 + .../aidl/mapmarker/RemoveMapMarkerParams.java | 44 + .../aidl/mapmarker/UpdateMapMarkerParams.aidl | 3 + .../aidl/mapmarker/UpdateMapMarkerParams.java | 52 ++ .../net/osmand/aidl/mapwidget/AMapWidget.aidl | 3 + .../net/osmand/aidl/mapwidget/AMapWidget.java | 110 +++ .../aidl/mapwidget/AddMapWidgetParams.aidl | 3 + .../aidl/mapwidget/AddMapWidgetParams.java | 43 + .../aidl/mapwidget/RemoveMapWidgetParams.aidl | 3 + .../aidl/mapwidget/RemoveMapWidgetParams.java | 43 + .../aidl/mapwidget/UpdateMapWidgetParams.aidl | 3 + .../aidl/mapwidget/UpdateMapWidgetParams.java | 43 + .../aidl/navigation/NavigateGpxParams.aidl | 3 + .../aidl/navigation/NavigateGpxParams.java | 69 ++ .../aidl/navigation/NavigateParams.aidl | 3 + .../aidl/navigation/NavigateParams.java | 104 +++ .../aidl/note/StartAudioRecordingParams.aidl | 3 + .../aidl/note/StartAudioRecordingParams.java | 56 ++ .../aidl/note/StartVideoRecordingParams.aidl | 3 + .../aidl/note/StartVideoRecordingParams.java | 56 ++ .../osmand/aidl/note/StopRecordingParams.aidl | 3 + .../osmand/aidl/note/StopRecordingParams.java | 42 + .../osmand/aidl/note/TakePhotoNoteParams.aidl | 3 + .../osmand/aidl/note/TakePhotoNoteParams.java | 56 ++ .../net/osmand/telegram/LocationService.kt | 0 .../osmand/telegram/LoginDialogFragment.kt | 0 .../net/osmand/telegram/MainActivity.kt | 53 +- .../osmand/telegram/TelegramApplication.kt | 4 + .../net/osmand/telegram/TelegramSettings.kt | 0 .../telegram/helpers/OsmandAidlHelper.kt | 815 ++++++++++++++++++ .../telegram/helpers/ShareLocationHelper.kt | 0 .../osmand/telegram/helpers/TelegramHelper.kt | 0 .../NotificationDismissReceiver.kt | 0 .../notifications/NotificationHelper.kt | 0 .../ShareLocationNotification.kt | 0 .../notifications/TelegramNotification.kt | 0 .../net/osmand/telegram/utils/AndroidUtils.kt | 0 .../telegram/utils/CancellableAsyncTask.kt | 0 .../telegram/utils/OsmandFormatter.java | 0 .../osmand/telegramtest/ExampleUnitTest.kt | 17 - OsmAnd/res/values-be/strings.xml | 169 ++-- 150 files changed, 3605 insertions(+), 145 deletions(-) rename OsmAnd-telegram/{src/main => }/AndroidManifest.xml (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-hdpi/ic_action_polygom_dark.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-hdpi/ic_action_rec_start.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-hdpi/ic_action_rec_stop.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-hdpi/ic_group.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-hdpi/ic_pause.png (100%) create mode 100644 OsmAnd-telegram/res/drawable-hdpi/osmand_logo.png rename OsmAnd-telegram/{src/main => }/res/drawable-mdpi/ic_action_polygom_dark.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-mdpi/ic_action_rec_start.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-mdpi/ic_action_rec_stop.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-mdpi/ic_group.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-mdpi/ic_pause.png (100%) create mode 100644 OsmAnd-telegram/res/drawable-mdpi/osmand_logo.png rename OsmAnd-telegram/{src/main => }/res/drawable-v24/ic_launcher_foreground.xml (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-xhdpi/ic_action_polygom_dark.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-xhdpi/ic_action_rec_start.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-xhdpi/ic_action_rec_stop.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-xhdpi/ic_group.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-xhdpi/ic_pause.png (100%) create mode 100644 OsmAnd-telegram/res/drawable-xhdpi/osmand_logo.png rename OsmAnd-telegram/{src/main => }/res/drawable-xxhdpi/ic_action_polygom_dark.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-xxhdpi/ic_action_rec_start.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-xxhdpi/ic_action_rec_stop.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-xxhdpi/ic_group.png (100%) rename OsmAnd-telegram/{src/main => }/res/drawable-xxhdpi/ic_pause.png (100%) create mode 100644 OsmAnd-telegram/res/drawable-xxhdpi/osmand_logo.png rename OsmAnd-telegram/{src/main => }/res/drawable/ic_launcher_background.xml (100%) rename OsmAnd-telegram/{src/main => }/res/layout/action_progress_bar.xml (100%) rename OsmAnd-telegram/{src/main => }/res/layout/activity_main.xml (100%) rename OsmAnd-telegram/{src/main => }/res/layout/chat_list_item.xml (100%) create mode 100644 OsmAnd-telegram/res/layout/install_osmand_dialog.xml rename OsmAnd-telegram/{src/main => }/res/layout/login_dialog.xml (100%) rename OsmAnd-telegram/{src/main => }/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename OsmAnd-telegram/{src/main => }/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename OsmAnd-telegram/{src/main => }/res/mipmap-hdpi/ic_launcher.png (100%) rename OsmAnd-telegram/{src/main => }/res/mipmap-hdpi/ic_launcher_round.png (100%) rename OsmAnd-telegram/{src/main => }/res/mipmap-mdpi/ic_launcher.png (100%) rename OsmAnd-telegram/{src/main => }/res/mipmap-mdpi/ic_launcher_round.png (100%) rename OsmAnd-telegram/{src/main => }/res/mipmap-xhdpi/ic_launcher.png (100%) rename OsmAnd-telegram/{src/main => }/res/mipmap-xhdpi/ic_launcher_round.png (100%) rename OsmAnd-telegram/{src/main => }/res/mipmap-xxhdpi/ic_launcher.png (100%) rename OsmAnd-telegram/{src/main => }/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename OsmAnd-telegram/{src/main => }/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename OsmAnd-telegram/{src/main => }/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) rename OsmAnd-telegram/{src/main => }/res/values/attrs.xml (100%) rename OsmAnd-telegram/{src/main => }/res/values/colors.xml (87%) rename OsmAnd-telegram/{src/main => }/res/values/dimens.xml (100%) rename OsmAnd-telegram/{src/main => }/res/values/strings.xml (93%) rename OsmAnd-telegram/{src/main => }/res/values/styles.xml (100%) delete mode 100644 OsmAnd-telegram/src/androidTest/java/net/osmand/telegram/ExampleInstrumentedTest.kt rename OsmAnd-telegram/src/{main/java => }/net/osmand/PlatformUtil.java (100%) create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/IOsmAndAidlInterface.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/calculateroute/CalculateRouteParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/calculateroute/CalculateRouteParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/AFavorite.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/AFavorite.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/AddFavoriteParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/AddFavoriteParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/RemoveFavoriteParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/RemoveFavoriteParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/UpdateFavoriteParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/UpdateFavoriteParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AFavoriteGroup.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AFavoriteGroup.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AddFavoriteGroupParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AddFavoriteGroupParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/group/RemoveFavoriteGroupParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/group/RemoveFavoriteGroupParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/group/UpdateFavoriteGroupParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/favorite/group/UpdateFavoriteGroupParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/ASelectedGpxFile.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/ASelectedGpxFile.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/HideGpxParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/HideGpxParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/ImportGpxParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/ImportGpxParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/RemoveGpxParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/RemoveGpxParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/ShowGpxParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/ShowGpxParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/StartGpxRecordingParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/StartGpxRecordingParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/StopGpxRecordingParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/gpx/StopGpxRecordingParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/map/ALatLon.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/map/ALatLon.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/map/SetMapLocationParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/map/SetMapLocationParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/AMapLayer.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/AMapLayer.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/AddMapLayerParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/AddMapLayerParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/RemoveMapLayerParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/RemoveMapLayerParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/UpdateMapLayerParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/UpdateMapLayerParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AMapPoint.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AMapPoint.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AddMapPointParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AddMapPointParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/RemoveMapPointParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/RemoveMapPointParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/UpdateMapPointParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/UpdateMapPointParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AMapMarker.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AMapMarker.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AddMapMarkerParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AddMapMarkerParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapmarker/RemoveMapMarkerParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapmarker/RemoveMapMarkerParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapmarker/UpdateMapMarkerParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapmarker/UpdateMapMarkerParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AMapWidget.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AMapWidget.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AddMapWidgetParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AddMapWidgetParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapwidget/RemoveMapWidgetParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapwidget/RemoveMapWidgetParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapwidget/UpdateMapWidgetParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/mapwidget/UpdateMapWidgetParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateGpxParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateGpxParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/note/StartAudioRecordingParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/note/StartAudioRecordingParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/note/StartVideoRecordingParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/note/StartVideoRecordingParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/note/StopRecordingParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/note/StopRecordingParams.java create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/note/TakePhotoNoteParams.aidl create mode 100644 OsmAnd-telegram/src/net/osmand/aidl/note/TakePhotoNoteParams.java rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/LocationService.kt (100%) rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/LoginDialogFragment.kt (100%) rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/MainActivity.kt (86%) rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/TelegramApplication.kt (94%) rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/TelegramSettings.kt (100%) create mode 100644 OsmAnd-telegram/src/net/osmand/telegram/helpers/OsmandAidlHelper.kt rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/helpers/ShareLocationHelper.kt (100%) rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/helpers/TelegramHelper.kt (100%) rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/notifications/NotificationDismissReceiver.kt (100%) rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/notifications/NotificationHelper.kt (100%) rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/notifications/ShareLocationNotification.kt (100%) rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/notifications/TelegramNotification.kt (100%) rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/utils/AndroidUtils.kt (100%) rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/utils/CancellableAsyncTask.kt (100%) rename OsmAnd-telegram/src/{main/java => }/net/osmand/telegram/utils/OsmandFormatter.java (100%) delete mode 100644 OsmAnd-telegram/src/test/java/net/osmand/telegramtest/ExampleUnitTest.kt diff --git a/OsmAnd-telegram/src/main/AndroidManifest.xml b/OsmAnd-telegram/AndroidManifest.xml similarity index 100% rename from OsmAnd-telegram/src/main/AndroidManifest.xml rename to OsmAnd-telegram/AndroidManifest.xml diff --git a/OsmAnd-telegram/build.gradle b/OsmAnd-telegram/build.gradle index 9ae14d619b..dfd1fed11e 100644 --- a/OsmAnd-telegram/build.gradle +++ b/OsmAnd-telegram/build.gradle @@ -6,9 +6,16 @@ apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 27 - sourceSets.main { - jniLibs.srcDir 'libs' - jni.srcDirs = [] //disable automatic ndk-build call + sourceSets { + main { + manifest.srcFile "AndroidManifest.xml" + jni.srcDirs = [] + jniLibs.srcDirs = ["libs"] + aidl.srcDirs = ["src"] + java.srcDirs = ["src"] + resources.srcDirs = ["src"] + res.srcDirs = ["res"] + } } defaultConfig { @@ -19,7 +26,6 @@ android { versionCode System.getenv("APK_NUMBER_VERSION") ? System.getenv("APK_NUMBER_VERSION").toInteger() : versionCode versionName "1.0" versionName System.getenv("APK_VERSION")? System.getenv("APK_VERSION").toString(): versionName - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } flavorDimensions "abi" @@ -97,7 +103,7 @@ task copyNativeLibs(type: Copy) { task copyJavaSources(type: Copy) { dependsOn downloadTdLibzip from "tdlib/libtd/src/main/java/org/drinkless/td" - into "src/main/java/org/drinkless/td" + into "src/org/drinkless/td" } task downloadPrebuiltTelegram { @@ -116,15 +122,10 @@ dependencies { implementation project(path: ':OsmAnd-java', configuration: 'android') implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'com.android.support:appcompat-v7:27.1.1' - implementation 'com.android.support.constraint:constraint-layout:1.1.0' implementation 'com.android.support:support-annotations:27.1.1' implementation 'commons-logging:commons-logging-api:1.1' implementation 'com.android.support:recyclerview-v7:27.1.1' implementation 'com.vividsolutions:jts-core:1.14.0' - - testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' } diff --git a/OsmAnd-telegram/src/main/res/drawable-hdpi/ic_action_polygom_dark.png b/OsmAnd-telegram/res/drawable-hdpi/ic_action_polygom_dark.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-hdpi/ic_action_polygom_dark.png rename to OsmAnd-telegram/res/drawable-hdpi/ic_action_polygom_dark.png diff --git a/OsmAnd-telegram/src/main/res/drawable-hdpi/ic_action_rec_start.png b/OsmAnd-telegram/res/drawable-hdpi/ic_action_rec_start.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-hdpi/ic_action_rec_start.png rename to OsmAnd-telegram/res/drawable-hdpi/ic_action_rec_start.png diff --git a/OsmAnd-telegram/src/main/res/drawable-hdpi/ic_action_rec_stop.png b/OsmAnd-telegram/res/drawable-hdpi/ic_action_rec_stop.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-hdpi/ic_action_rec_stop.png rename to OsmAnd-telegram/res/drawable-hdpi/ic_action_rec_stop.png diff --git a/OsmAnd-telegram/src/main/res/drawable-hdpi/ic_group.png b/OsmAnd-telegram/res/drawable-hdpi/ic_group.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-hdpi/ic_group.png rename to OsmAnd-telegram/res/drawable-hdpi/ic_group.png diff --git a/OsmAnd-telegram/src/main/res/drawable-hdpi/ic_pause.png b/OsmAnd-telegram/res/drawable-hdpi/ic_pause.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-hdpi/ic_pause.png rename to OsmAnd-telegram/res/drawable-hdpi/ic_pause.png diff --git a/OsmAnd-telegram/res/drawable-hdpi/osmand_logo.png b/OsmAnd-telegram/res/drawable-hdpi/osmand_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..08afc02344ffa42de4b4baaa7e5084dbbe7ab1e5 GIT binary patch literal 15623 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 literal 0 HcmV?d00001 diff --git a/OsmAnd-telegram/src/main/res/drawable-mdpi/ic_action_polygom_dark.png b/OsmAnd-telegram/res/drawable-mdpi/ic_action_polygom_dark.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-mdpi/ic_action_polygom_dark.png rename to OsmAnd-telegram/res/drawable-mdpi/ic_action_polygom_dark.png diff --git a/OsmAnd-telegram/src/main/res/drawable-mdpi/ic_action_rec_start.png b/OsmAnd-telegram/res/drawable-mdpi/ic_action_rec_start.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-mdpi/ic_action_rec_start.png rename to OsmAnd-telegram/res/drawable-mdpi/ic_action_rec_start.png diff --git a/OsmAnd-telegram/src/main/res/drawable-mdpi/ic_action_rec_stop.png b/OsmAnd-telegram/res/drawable-mdpi/ic_action_rec_stop.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-mdpi/ic_action_rec_stop.png rename to OsmAnd-telegram/res/drawable-mdpi/ic_action_rec_stop.png diff --git a/OsmAnd-telegram/src/main/res/drawable-mdpi/ic_group.png b/OsmAnd-telegram/res/drawable-mdpi/ic_group.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-mdpi/ic_group.png rename to OsmAnd-telegram/res/drawable-mdpi/ic_group.png diff --git a/OsmAnd-telegram/src/main/res/drawable-mdpi/ic_pause.png b/OsmAnd-telegram/res/drawable-mdpi/ic_pause.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-mdpi/ic_pause.png rename to OsmAnd-telegram/res/drawable-mdpi/ic_pause.png diff --git a/OsmAnd-telegram/res/drawable-mdpi/osmand_logo.png b/OsmAnd-telegram/res/drawable-mdpi/osmand_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f70c17241822b1055d467a24bc95b64cc1f2c5a5 GIT binary patch literal 10288 zcmbVyWmH?=wl7X`DbNB1f|t@D!QHL6dkGRCKyY^{F2##$vEoi~DNx+qixhX)m;X8U z-1k1*aX-9_k*vLUrmr>E{LM9XxQdbt4kj5U0s;b#oUEi8d_07I6<(pie{IL~@8JWf zvy_grx}CYRo3SGVLCnm~1OkwQ8CyWqAjW1M4g(ND1O#MPsD_TSj-mp;sU3{P_#YY; zcbGk#8v#L3#NFQ5)EeRpFo9S=ZG~t~S~_R|P%|MKZ7xMNMSBT|B~;ea5u)y?q+#l5 zZOUgxBO(kCbmxZ)fI*y%0q!sxTPJ>ZA)0^5<%eJY^O%(e@GlZ)YayC{8>OSD0+6tC zgaEi$xPhkZ?Cby@J{EQ^UJek~M*xV8or{%?kCmMb$i~jk&c+X71N_&A2CmJ~%$#3M zQu@Di!S94?~}oFxWqS z{fpYkSq<`k&G;Xwoise`A*^Z;Cp#BMQ}}$C)BcAU9=rct(LaQ6YxtENq3}sDwvn_m zb%8-_o#iBjXyE^_m_g0>IZfC&xy{WXKnTdx3}|k~$pJLsGz9@c5N;k5V+hEMlh5=& za{fntPHAb7q$D3VhnN&QyA-#W7>G-nO^jWFn~Rr+n^XEfymGcq&c?Q;kpJk0{-gWf zyuAM_FTaE%#Ms%+QNzy8=0B@I#nR5%&dJiw9v~s{uUQAY*M{1f*||9}{WDGf_F59+ z2z7;+NjuuX0RM_JKlFdFfsc*H)Qk-R0-Ez0n*cdDIL&}?U*O?jgAbg>W_;Y{W;FlB zZ}$HiKUTO=tp6;Q|7Y?1=Mj8G{&V@?sQ|zE?_`45!ZXMbo+_+*_LK++bSiR^VjAv? zhlc3xM4EHLEemvX-(yj*zu@L#s0q_drpvMhhIJ4XMCuTzbmB4HBi_s4C;7jpk&5-_ zESdbCB5CDMCH@L1N+^y=EtGzE?039{tq_u#nkn}({~&lXVD4rsaMM~e0_0ao{TM0g zG&zDm@uGTL--K~yVKap!l~{$B7T>F8W?04OHJO3ktILO&h`bg3HTTob-|+!4JRpU$ zicw_{+N}%mFeN`l({>Qjxz6|)d0o`em_wo1STfolYQ=e3#gHq%~& zUJqtnu`q z=I5(cTs(WcrnbkR$ph~{Wk$-(r5m}X>3abxF(xVT!IRRP0 z+}sx9N@T_|Femb6{lNbOut2iDh-j_6&9{ejkndWKj!T-|lft06P8jGSjS-kck2ky1 z@wkq8y>S!{>jbb391Ub0k|jfRK9@?5`SZ^Rfir_B7rzB}r3~W}CSc}Uu?Fg^EzZJ? z+$%x)m^4u|5=u=>u_1G*E;KahkFU){`jf5eiDN$GC9OB79(gt^i=oqz;q=*|3PEvV z58?sdU1Hg<$25O&K~@kSw?ZuwT2S{uF0-}8v(K8r(c>{4DDMC}YJlR|h@_Mm%ZwV1tx+V!1-Jr+F&r_L3}TDcc>R{k4{htR`e ztsLeU`?i&qXL%25%Cj#yNuqXDd?Ce9AHrQ_^V8v9dpiCUL`d0PeXvF?=<$|Ag6Q<>9vsu#tTue+Q;YCG%iGKdg%gZxg&mTxG znu?kz`2KyqhElxp)qL@uN`DWj7D<7Y_{F7nGl3GFMR$ol-uix*HGbnRt1P7BsYSru zwG3JF(I=<6k-2q!2PIQQKv-MjOIP)yJ>)|M^pQ()2~nTMH+6Mo<;e#fJ@m|RY_?qg zhVc0gH!=n2x+b9%@Chw5Wo=)jA4`jNp$&71P)TgD$3}<3k$m<_A7@UsC$%^2II<@; z*zXU!QD1AO;_Yhncn(a_y{8tbHQdL6_1)_LHy^57)c#rIC*4Sjy51phS65dST9EOV zyrDn4yaX>FX??30QMs&Vh=f6LOOUCOSkV!w9JG;T^pVz`E*lhU6yHomKJ;2un!l%G zS9hc=rVGk{sRDP(SRPp_*?hX$UCd2uA8LCm3|)NgFG*vlR)|tnD(xIkR@;(|Z5S&P78!Tjs8LuhNN6O%vM-hWjYRJ9UUD(KEgJ0Ri1BT-j>c-WHyuc8MO9Gd3wCm{m%ClA2-oo zaKi26O-PLtES;;lGp$GGkI-t_Z*ku1o=s~hHkWQ|-&pf|S?R^qSwbl7cxJB~KgcNw z@pM#P31%0|T}HGL)QKFy%WdWx_jMtn%!m#?%c1rh?(>B4bIu{@1rrPQHhcDeTHFzDS^q8~UxbHUceFlV) zhq~m=q!|q())zt)EdoJ$9T<;-;J43wcGjoiHxsri&6+J%Ge3lI&?J~2JJ4!( z0V2F4cA(S>vgp42bRIiga&DWqk&gP`Nl;#q_#*3woNMYR-SkuWY5X1@J`6r`6^+(N z^0DAf*G(^C{oLBr=y9=w*L!pZ%iwj$qe+5=LbAI~-c{QmCAY;UCf2>7icC5v1qw!x z)i6&b#;DU7CW_ zGoC*8)BVy)^FJs@;;|ol{}|8uf9a@~h^`x2l*WEs2;BB_aCXj!Q7C-5Ub0*3@)YSk zVUAqtu~`54H%oqOU_iIVxF-blRsr|L%ii8TSS$!_q_c)Sax4p@N zR2^=D2h-WkV$bQ=no36&gQlt`|U?<(2i(BmW0q+CnUYKfR>X{RcJnQbRboE+IM5A{U^u% zD2GFOIOYx<+^z+8V1=)G7wB$oH=DATw%lnG6}N|MA1`>6RP4>nzEg2Te!-4Wnc$z z`l^Z5-P7|q+~*$c;cqcXRdWMZZa#_8vG}`3aWL1nK3{dK1T0Czh`;xFWVNi*Tch9O zO>il!KJ|A6q1%a<@O`!xMPb}cLc<|@Oo)wLXFWA`es2hY#wb)|vzzvP)oIU;XlTCP zoiOd~4#pCS4RHPQGFCdC=<@XV_{{6L6&6a?kup&Yohmd<2}xuR4Vs#qj0y+{7|xUZ zh9Nv7QF|+;j~IFNVbXr70fwcz?qhcFxDji0e}8{0=zf~>?HvV5@*DsKz)>_)W;AY` zy-F$UeGB69-wr!6^G_zD>3Jhi?$2CMY=~v4dzsH_oLx~2Jj@VrwXSsIT`beB-4Ws} z!EAF7;o-S?tbq(2V=jrA$3p-a<5?-8KVVqFLkH?bN-Mc&Wk?J*^9``2ubL=+&W0_n zTsh|N7;o_J=hNRV<gQ7N*S-BL z%50UNQKgo$iD-o|#AP+^q-|0BX~Dxj3f&r-wId31%IOuR(4_DfqH39eq`hK$WA-aG z_=whOa`U9^W;NY%b?3+QFjsv;c+?LMATMYl)Kbf9>Bn}1&B7!(mno3c*rfq(E5R>T zkDHS|0;!-z^S;O_nCZ7g(9Dp z78DX9viLaso*(D5DhyI_x6N2tVipQ~9f;Ub#Y}sYIS*7i^Rg z6L=KUI7x8|I?e|$p7xAQ_)j;bovwWzbvnND=f6QQ(x{|RlKo4vp+ATZ28O5Nmr$RY z!4CP)*`Mhba(d&>w!ax&mw#@%AN-r`_pBo-+Bxw71RmRfNG8-L_@*^z_q7EX9&W($Uqs5~VUfzap z5_W%HijoGKnwnb8g3L{1GNz@!i5=reP&VizRPBqRP61f>-ob&Cezu68FT&`WTa=#$ z^EVkJFMFa!-6!B1ol1A(>HMnFSDofHrgk9XLgE_p_ z4!;*Uv)Dr>^}=5lW0ok^_Y?Ut4{isuM@WLJ9As&+v9UTo9k=-+D&$?SpS8;MqMIDI zBjR=rmP;$!@BfD2kjK!B)2*fcu>+zche~~Ff!p-$t^yZy+-cMkf)n{h_e~)jW}xJg zWCBbFXQkC!-o!X)tDg4NThH}zT8@K@z!fZcB0jt2jjQ+MOXqR9a8zfVc+zp)gC}Bk zl2H1aYw!!gth92J#oXbkJKFLnc5|S=p1K+DI5F@_`~y%K z`Nb>1y%EGB?|ALOoN4U>stF1`1AbXRM*xDz>P@L5wK$?YgP=EZK-QZ4@RQUyBnRpx z)CY8%z5vz!1t>S&Jg>$JL`DdoCui$#)%Q|jN* zStF5Q`%HW(Q`M<`+utm$Ao9$SR@85k6Qq*!x8Dal#MN=zcD41ccOZeWR?^9W@RHhX z>v!BlczC!G6tPSdND#uQS(y|mP+x)gqxV&fa>KMTd~;o5y%~)~7fc)VnQ(iW?CGJk zfje`9-^r}P(eR-TrABA6+3mzvu{bwugU<+mN(i+x>rEoD74K`1gSW9M;Q09XH4*1h zR%d5tl*|T_p861nh}HARC)@On4!_*`!wSO|B|-`X6S6#1{QQP?L}awLm! z6#UM-?}_G<1NY)Yjo`Ie52@`U^Si}fa2Qt`Sk_j;KSL2(5^nK3T762LOSp>Q&e&$2r?*9)h;|w z`1*B1aXfA_yg=Rk)-5Bgi&o*j^{~E; zgfo-eTiri|KfPS6n%@hBLQCtMu>u6@;Mk|=WUXV(fY}m@be=65>Yb(+x%5toEMtRt(q z2hm*qWnXC|t}>todVMma$OR^rw?*=6GrEg$$)s;Iqd4$kgvC#W6&@!pHQFhQclSZT zr&dYK+N%|H!{xk$(DgiA%>DMKYkh6AMFM&*+&ZlY*b;>v;*Y(ccDI=B46k`vH>?qL zdQGxf%RurU=vMv}Dy~X4>-QU52!=BxiKH!3_=2F>3PZ1_-*L41D?gq79>K8(@_Rt7 zhJOS1J*RqZ230^edb)Hp8JC8wn4Bu(bf3_|!)i?)AeqH54IAWDRoyYRFt1IK_G|Rk zTU{Se02x~TEFK1*`$Y$xvdvu z0~T#Iv{*`<+Hu%iZ{8Lg3`$N1E1(%!pu4L}bTT#1eP}92&{>J2mB~FH@?Ompud z4vW!`<^;CS?r*bV4qw*S!EVmg+Z+>BG?b@l zmOaVY_#$R$xqI{5y)wbsMi*X0+43ivggH1a=HNv&0gh%y1pS^{D?2(~%rXE2IdAR- z-7H4Zl614`4`Qh$p3y}HF$?PI>el$(j=eE$))+@7Jf7~a9B8GZz>7;_($-g^A(eAY z4x7blu8@&z-+So(!%0U6*^|eDQ)`^tVoOVlos==&rIMD@I|)`4o3$BxBE?@`dV%gU z%f>71)hZZVpTki#b@b8ugS0hm$ca|BONBQsRMp)BF|rCq|kyD)~3c?~&nPup;qZ&U55*)paPfN-iCeN*T_q z);G^8(xr;h0^D~84BX}z_|?dh4BEvi8|wN79^_dAQoz=CgC{t!!~5tr<3P(2FmCAe z@yY|kt69~hl%H4i@M?5G9B!D~T@2q^`M%Y#4l(^a+w5QKaQZtcBb8e{lb3lQIuFx9 zB(n?S*v(y=N6@Kl@;eJm?%WTAmG^SDK+723^xp?%xF+c{|KO%)WMs93H^_8}V?*Cz z?Y^}1^xHi6#cT{(qA?jJFw2hg5V0)ue2;@?0MB?Q|5?ZBGdEh*RLoo zUQ#g!VM=%((((H+KqU<4umESCLcsNwmyZue6Wp3%R6jnV0 zzsA-*(5mvr8_ICCv?ndb8(@mO+c}|>i}Yk$8BM5IV)mt3U&2j(sOI;PaCYeBp*(&a zFpJPE=yq~q{R}TLRgH}|-tMgfD|vD3-$`74D_1@4An1P^-TUl)Ce?eu6D7TAI~~gu z%=W<7!3F|3X3~5m#Wu{(%WImWj){rkW<~r+$4g)TF@4P<%flQhD=UkKvWB5w6%hz! z#%xlu^a##n<6M|*?;`8+EDt2d`zsb3%Hdrs^yAgDaD{#ME!8diAK_uCD*C{Xk>kg_ zupz2|$_~6?2j_JXnYWk{cbv2zPo6lI6A{Pr)d}YR(#t2)nSP#z=L|i(b@k4L!`T%> zLqmPq{AnrC+q`fs#J?=*M`dD#ZSk3zKF@IE?*-p}DA2y%2&chM;)dFN9=Ziw59j%S zz!5Ngvt?KKaQt3Ay`Z2si*POWl23P9mvGvjKYwfo6M6DQ_oAXU0m5x@^&^89N0Kr! zCtV#cItPp|f(^tYQwsUST~|y1z-iL@MF2OG0S=|5g=TEuG*gk6d z6d-RA6sT7>u8|d;&}Ne7(crv09zfAHbpk)YD^KHw@goeO0kWsNEesa86^Z^dR%KR= zkB_gR$aSYEg9sES~yZoo?}4 zVG$V+LkPWn1H+*=F;z;Li39X#0v)E((^REef%Vs@+c=o8iyYzx`VtCylmtw%O4--e zK2y-#Tz_0#y`ji`f>DfYmp|()g2GD?MQ_6T01NF(fpWUkMPVi5`3}VMxKeM$`!}Sw zQa7pwkaDG88$^4&a!aW7*H>6SLb9C^$}LPl=5!tx6W}awp(Q1IlRIWC4HG$C=v_9! z$j3C2XB?dEw8E()A!pRBV2SrvCsFDne!wzv(+0y$j&1KT0B^(3quX3WHHdAP&ijLM?9V}Sq{c zS4|P9)Hpj#C3*pyoqSAUO_0Owm7~W*S={_z-(W=Mv~CeFZucSGMU=n}aY_f1HD{-A zeNQXih2b!D3VP{#ftbGSQc< ze3%v=kkX-+^VN;Otqo^KDkVLMZD79n>}E&+jOFh-$P#waLWWkj(|HcE($lN56D#{# zR@rI}+!{Gm5RFc}%Y?OI0fXvx{rPl@rckT(XV`0*DPOwF%%83ZhK~rgDibw|svwjC^2W(}f~ z^>prys({0ge#Y{2EDWvW`GJSEKPa^$2y;>$)jbVqVDp<2Zf4U7vxb`nn(G14Ixsti zYs9lE@snARLltthNI$6m?8FBHfyiaej)Viakl_)wDEpzXIuR4>F)r+B9Nl@lxfEb; zrGPN(|(JoCAS1nLYd9W5f&hQW|LdL%UcUEHAm`R%#v+5I))4% zszDkkqJWx@IGD#FWJq`4Xz3G3DuYr}&-B@3!uLxhj_xMxhL@8Burm;&j<|dhvN9!n z7RwwTJHW?ZQ_DNF_<15Rf-6#5Oe<)1Es&m8Bg^W8@*L~;8mXvXOd5E0YwZt^Vj)Y=LiH&V?@GZM^>nQH6Hz*c4OoTrC4-J{z&JlZ`4d|UBdjN6^?Sv z@CU=#Gqi6Ze)$zi8RQ`wFEK>!@hxd2W){uuvr?GL3pPV`GnSCk`MRVWE%B0|F9VvV zb_UKSL77{)SR`SYx1O>B0Q*Z*>`Sv&-mv+7CdF*8(&pP}KG{ob)8Vu4y|tEs3of(| z#UHchdo{c)M^ki{Qr@Z_3ohB54+!^o2kwKB=oF9YOtU@}UIKzGMCgq8LPQs0-_8a3 zT0A{XVxF*zji)W11N_vQ#!@nQMsUfCl{YN{ew_?_$^76RgNpw0y*Y)sC%Jnx@7|qS zFC0Z)>VCNKqUN{ZxGMRYidU$tPECvZuXJS{ksT9XtP3b%GqY@GVp@m~irz{T(&Fs$ zj+c_xrN|YF;7b{+_wN30RPeh9j3S2VVlUR-9-jGQ==&yJ{ujN-JQ4kUe8dR3?V~{d zAt9vv`W1;yx!0#qRyim00uYMw0`~5thr;=!n=KCcJbK2nfLQAIWEbks9NjJW+e5MV@y2aYG(g zdfvjjD(li4Zi3%Z{37$d)*`Un(zBWkCgapIwy9N&o7-TNjkHOLmFR^E(!^{AhYI=;pMFWTO z1pXY^Ff#po-h*E}TSRbKxi=8JKVxM$l^J?Euqr$MG^-UO+ii&Z=%wj|kvZEGpwRBg zIlDs_Treql4s#5fpbESaD$u4Ilp#FTF$qmm>=z8L!{!)Dj_+$o?u)Z~=PG2)!$(x$tLg8&J>Mg0p zxkIq>%yfDRB9;|!3kma4i`STC&s1|WTsL%T-qrsq{Y1x;;DYnq_zSvHcH?>3w3h-E z5`VU2`*~ptS>B6G!p|itN|{T;0UyJsQYF*$xvqAedr z<;Y)(??5GjToXx_zag9wVVrn21m*U2(LN^!?VwlznZovsz*4eJ@uW~f%X)-V!0M10 z@OS2{N0h>1oEFVwg5(+(eTT;FJy4YPg{n|E;@jzcg0(}=_teVy&pr6|SpGbGucJCL z0x-iv@!!R%A($WFF?@{&IE8AXGQT1PSTqs;+hR`QpfgoC)`9dtK;V* zLOWxKUM;d9JobMl)t};Eow!irsd^F5!KMRf76Il>K%vU&orP&=WLt62W%)~?TC~Xl zVsK}6;{a}ivvLjfZZGEwc0_lLQ$n-asa-xX#~so{A?k#X|9u)uo)phE*R%`~G z2HdVsIWi;0Y9KLX$Eb*!F{PFbE0_sCQZf^I0p*-rBTRXP`d8;LZ>asG7!Dmx5>vO7 z60w`Wz$Qog+gn6gT-j;Uq z0fQfJh5?4rIV3-uL_Dz=k9lK^KTkw}1kw8XDKOH8q}R3Se5+?MK`6oRpGeg*Z6y{{SVs Bl=T1r literal 0 HcmV?d00001 diff --git a/OsmAnd-telegram/src/main/res/drawable-v24/ic_launcher_foreground.xml b/OsmAnd-telegram/res/drawable-v24/ic_launcher_foreground.xml similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-v24/ic_launcher_foreground.xml rename to OsmAnd-telegram/res/drawable-v24/ic_launcher_foreground.xml diff --git a/OsmAnd-telegram/src/main/res/drawable-xhdpi/ic_action_polygom_dark.png b/OsmAnd-telegram/res/drawable-xhdpi/ic_action_polygom_dark.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-xhdpi/ic_action_polygom_dark.png rename to OsmAnd-telegram/res/drawable-xhdpi/ic_action_polygom_dark.png diff --git a/OsmAnd-telegram/src/main/res/drawable-xhdpi/ic_action_rec_start.png b/OsmAnd-telegram/res/drawable-xhdpi/ic_action_rec_start.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-xhdpi/ic_action_rec_start.png rename to OsmAnd-telegram/res/drawable-xhdpi/ic_action_rec_start.png diff --git a/OsmAnd-telegram/src/main/res/drawable-xhdpi/ic_action_rec_stop.png b/OsmAnd-telegram/res/drawable-xhdpi/ic_action_rec_stop.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-xhdpi/ic_action_rec_stop.png rename to OsmAnd-telegram/res/drawable-xhdpi/ic_action_rec_stop.png diff --git a/OsmAnd-telegram/src/main/res/drawable-xhdpi/ic_group.png b/OsmAnd-telegram/res/drawable-xhdpi/ic_group.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-xhdpi/ic_group.png rename to OsmAnd-telegram/res/drawable-xhdpi/ic_group.png diff --git a/OsmAnd-telegram/src/main/res/drawable-xhdpi/ic_pause.png b/OsmAnd-telegram/res/drawable-xhdpi/ic_pause.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-xhdpi/ic_pause.png rename to OsmAnd-telegram/res/drawable-xhdpi/ic_pause.png diff --git a/OsmAnd-telegram/res/drawable-xhdpi/osmand_logo.png b/OsmAnd-telegram/res/drawable-xhdpi/osmand_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c68d31e900040f844353e1579642a95eb9a7de7d GIT binary patch literal 21062 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 literal 0 HcmV?d00001 diff --git a/OsmAnd-telegram/src/main/res/drawable-xxhdpi/ic_action_polygom_dark.png b/OsmAnd-telegram/res/drawable-xxhdpi/ic_action_polygom_dark.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-xxhdpi/ic_action_polygom_dark.png rename to OsmAnd-telegram/res/drawable-xxhdpi/ic_action_polygom_dark.png diff --git a/OsmAnd-telegram/src/main/res/drawable-xxhdpi/ic_action_rec_start.png b/OsmAnd-telegram/res/drawable-xxhdpi/ic_action_rec_start.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-xxhdpi/ic_action_rec_start.png rename to OsmAnd-telegram/res/drawable-xxhdpi/ic_action_rec_start.png diff --git a/OsmAnd-telegram/src/main/res/drawable-xxhdpi/ic_action_rec_stop.png b/OsmAnd-telegram/res/drawable-xxhdpi/ic_action_rec_stop.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-xxhdpi/ic_action_rec_stop.png rename to OsmAnd-telegram/res/drawable-xxhdpi/ic_action_rec_stop.png diff --git a/OsmAnd-telegram/src/main/res/drawable-xxhdpi/ic_group.png b/OsmAnd-telegram/res/drawable-xxhdpi/ic_group.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-xxhdpi/ic_group.png rename to OsmAnd-telegram/res/drawable-xxhdpi/ic_group.png diff --git a/OsmAnd-telegram/src/main/res/drawable-xxhdpi/ic_pause.png b/OsmAnd-telegram/res/drawable-xxhdpi/ic_pause.png similarity index 100% rename from OsmAnd-telegram/src/main/res/drawable-xxhdpi/ic_pause.png rename to OsmAnd-telegram/res/drawable-xxhdpi/ic_pause.png diff --git a/OsmAnd-telegram/res/drawable-xxhdpi/osmand_logo.png b/OsmAnd-telegram/res/drawable-xxhdpi/osmand_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f8f3f45291740782da2078d3990e43f805906173 GIT binary patch literal 31619 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 WlUaqzX7KNCvE`*zq^c!Mg8v^ + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd-telegram/src/main/res/layout/login_dialog.xml b/OsmAnd-telegram/res/layout/login_dialog.xml similarity index 100% rename from OsmAnd-telegram/src/main/res/layout/login_dialog.xml rename to OsmAnd-telegram/res/layout/login_dialog.xml diff --git a/OsmAnd-telegram/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/OsmAnd-telegram/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from OsmAnd-telegram/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to OsmAnd-telegram/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/OsmAnd-telegram/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/OsmAnd-telegram/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from OsmAnd-telegram/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to OsmAnd-telegram/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/OsmAnd-telegram/src/main/res/mipmap-hdpi/ic_launcher.png b/OsmAnd-telegram/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from OsmAnd-telegram/src/main/res/mipmap-hdpi/ic_launcher.png rename to OsmAnd-telegram/res/mipmap-hdpi/ic_launcher.png diff --git a/OsmAnd-telegram/src/main/res/mipmap-hdpi/ic_launcher_round.png b/OsmAnd-telegram/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from OsmAnd-telegram/src/main/res/mipmap-hdpi/ic_launcher_round.png rename to OsmAnd-telegram/res/mipmap-hdpi/ic_launcher_round.png diff --git a/OsmAnd-telegram/src/main/res/mipmap-mdpi/ic_launcher.png b/OsmAnd-telegram/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from OsmAnd-telegram/src/main/res/mipmap-mdpi/ic_launcher.png rename to OsmAnd-telegram/res/mipmap-mdpi/ic_launcher.png diff --git a/OsmAnd-telegram/src/main/res/mipmap-mdpi/ic_launcher_round.png b/OsmAnd-telegram/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from OsmAnd-telegram/src/main/res/mipmap-mdpi/ic_launcher_round.png rename to OsmAnd-telegram/res/mipmap-mdpi/ic_launcher_round.png diff --git a/OsmAnd-telegram/src/main/res/mipmap-xhdpi/ic_launcher.png b/OsmAnd-telegram/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from OsmAnd-telegram/src/main/res/mipmap-xhdpi/ic_launcher.png rename to OsmAnd-telegram/res/mipmap-xhdpi/ic_launcher.png diff --git a/OsmAnd-telegram/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/OsmAnd-telegram/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from OsmAnd-telegram/src/main/res/mipmap-xhdpi/ic_launcher_round.png rename to OsmAnd-telegram/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/OsmAnd-telegram/src/main/res/mipmap-xxhdpi/ic_launcher.png b/OsmAnd-telegram/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from OsmAnd-telegram/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to OsmAnd-telegram/res/mipmap-xxhdpi/ic_launcher.png diff --git a/OsmAnd-telegram/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/OsmAnd-telegram/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from OsmAnd-telegram/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to OsmAnd-telegram/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/OsmAnd-telegram/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/OsmAnd-telegram/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from OsmAnd-telegram/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to OsmAnd-telegram/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/OsmAnd-telegram/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/OsmAnd-telegram/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from OsmAnd-telegram/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to OsmAnd-telegram/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/OsmAnd-telegram/src/main/res/values/attrs.xml b/OsmAnd-telegram/res/values/attrs.xml similarity index 100% rename from OsmAnd-telegram/src/main/res/values/attrs.xml rename to OsmAnd-telegram/res/values/attrs.xml diff --git a/OsmAnd-telegram/src/main/res/values/colors.xml b/OsmAnd-telegram/res/values/colors.xml similarity index 87% rename from OsmAnd-telegram/src/main/res/values/colors.xml rename to OsmAnd-telegram/res/values/colors.xml index 47081acdc2..90dde03d70 100644 --- a/OsmAnd-telegram/src/main/res/values/colors.xml +++ b/OsmAnd-telegram/res/values/colors.xml @@ -11,4 +11,6 @@ #ff8f00 + #2f7af5 + diff --git a/OsmAnd-telegram/src/main/res/values/dimens.xml b/OsmAnd-telegram/res/values/dimens.xml similarity index 100% rename from OsmAnd-telegram/src/main/res/values/dimens.xml rename to OsmAnd-telegram/res/values/dimens.xml diff --git a/OsmAnd-telegram/src/main/res/values/strings.xml b/OsmAnd-telegram/res/values/strings.xml similarity index 93% rename from OsmAnd-telegram/src/main/res/values/strings.xml rename to OsmAnd-telegram/res/values/strings.xml index 7ba6672170..dcb2637d44 100644 --- a/OsmAnd-telegram/src/main/res/values/strings.xml +++ b/OsmAnd-telegram/res/values/strings.xml @@ -28,6 +28,9 @@ Start Stop OsmAnd Telegram location service + OsmAnd logo + You need to install free or paid version of OsmAnd first + Install OsmAnd yd ft diff --git a/OsmAnd-telegram/src/main/res/values/styles.xml b/OsmAnd-telegram/res/values/styles.xml similarity index 100% rename from OsmAnd-telegram/src/main/res/values/styles.xml rename to OsmAnd-telegram/res/values/styles.xml diff --git a/OsmAnd-telegram/src/androidTest/java/net/osmand/telegram/ExampleInstrumentedTest.kt b/OsmAnd-telegram/src/androidTest/java/net/osmand/telegram/ExampleInstrumentedTest.kt deleted file mode 100644 index 0c433d5740..0000000000 --- a/OsmAnd-telegram/src/androidTest/java/net/osmand/telegram/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package net.osmand.telegramtest - -import android.support.test.InstrumentationRegistry -import android.support.test.runner.AndroidJUnit4 - -import org.junit.Test -import org.junit.runner.RunWith - -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -@RunWith(AndroidJUnit4::class) -class ExampleInstrumentedTest { - @Test - fun useAppContext() { - // Context of the app under test. - val appContext = InstrumentationRegistry.getTargetContext() - assertEquals("net.osmand.telegram", appContext.packageName) - } -} diff --git a/OsmAnd-telegram/src/main/java/net/osmand/PlatformUtil.java b/OsmAnd-telegram/src/net/osmand/PlatformUtil.java similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/PlatformUtil.java rename to OsmAnd-telegram/src/net/osmand/PlatformUtil.java diff --git a/OsmAnd-telegram/src/net/osmand/aidl/IOsmAndAidlInterface.aidl b/OsmAnd-telegram/src/net/osmand/aidl/IOsmAndAidlInterface.aidl new file mode 100644 index 0000000000..64410a3f9f --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/IOsmAndAidlInterface.aidl @@ -0,0 +1,104 @@ +package net.osmand.aidl; + +import net.osmand.aidl.map.ALatLon; +import net.osmand.aidl.map.SetMapLocationParams; + +import net.osmand.aidl.favorite.group.AFavoriteGroup; +import net.osmand.aidl.favorite.group.AddFavoriteGroupParams; +import net.osmand.aidl.favorite.group.RemoveFavoriteGroupParams; +import net.osmand.aidl.favorite.group.UpdateFavoriteGroupParams; + +import net.osmand.aidl.favorite.AFavorite; +import net.osmand.aidl.favorite.AddFavoriteParams; +import net.osmand.aidl.favorite.RemoveFavoriteParams; +import net.osmand.aidl.favorite.UpdateFavoriteParams; + +import net.osmand.aidl.mapmarker.AMapMarker; +import net.osmand.aidl.mapmarker.AddMapMarkerParams; +import net.osmand.aidl.mapmarker.RemoveMapMarkerParams; +import net.osmand.aidl.mapmarker.UpdateMapMarkerParams; + +import net.osmand.aidl.calculateroute.CalculateRouteParams; + +import net.osmand.aidl.gpx.ImportGpxParams; +import net.osmand.aidl.gpx.ShowGpxParams; +import net.osmand.aidl.gpx.StartGpxRecordingParams; +import net.osmand.aidl.gpx.StopGpxRecordingParams; +import net.osmand.aidl.gpx.HideGpxParams; +import net.osmand.aidl.gpx.ASelectedGpxFile; + +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.maplayer.point.AMapPoint; +import net.osmand.aidl.maplayer.point.AddMapPointParams; +import net.osmand.aidl.maplayer.point.RemoveMapPointParams; +import net.osmand.aidl.maplayer.point.UpdateMapPointParams; +import net.osmand.aidl.maplayer.AMapLayer; +import net.osmand.aidl.maplayer.AddMapLayerParams; +import net.osmand.aidl.maplayer.RemoveMapLayerParams; +import net.osmand.aidl.maplayer.UpdateMapLayerParams; + +import net.osmand.aidl.navigation.NavigateParams; +import net.osmand.aidl.navigation.NavigateGpxParams; + +import net.osmand.aidl.note.TakePhotoNoteParams; +import net.osmand.aidl.note.StartVideoRecordingParams; +import net.osmand.aidl.note.StartAudioRecordingParams; +import net.osmand.aidl.note.StopRecordingParams; + +import net.osmand.aidl.gpx.RemoveGpxParams; + +// NOTE: Add new methods at the end of file!!! + +interface IOsmAndAidlInterface { + + boolean addMapMarker(in AddMapMarkerParams params); + boolean removeMapMarker(in RemoveMapMarkerParams params); + boolean updateMapMarker(in UpdateMapMarkerParams params); + + boolean addMapWidget(in AddMapWidgetParams params); + boolean removeMapWidget(in RemoveMapWidgetParams params); + boolean updateMapWidget(in UpdateMapWidgetParams params); + + boolean addMapPoint(in AddMapPointParams params); + boolean removeMapPoint(in RemoveMapPointParams params); + boolean updateMapPoint(in UpdateMapPointParams params); + + boolean addMapLayer(in AddMapLayerParams params); + boolean removeMapLayer(in RemoveMapLayerParams params); + boolean updateMapLayer(in UpdateMapLayerParams params); + + boolean importGpx(in ImportGpxParams params); + boolean showGpx(in ShowGpxParams params); + boolean hideGpx(in HideGpxParams params); + boolean getActiveGpx(out List files); + + boolean setMapLocation(in SetMapLocationParams params); + boolean calculateRoute(in CalculateRouteParams params); + + boolean refreshMap(); + + boolean addFavoriteGroup(in AddFavoriteGroupParams params); + boolean removeFavoriteGroup(in RemoveFavoriteGroupParams params); + boolean updateFavoriteGroup(in UpdateFavoriteGroupParams params); + + boolean addFavorite(in AddFavoriteParams params); + boolean removeFavorite(in RemoveFavoriteParams params); + boolean updateFavorite(in UpdateFavoriteParams params); + + boolean startGpxRecording(in StartGpxRecordingParams params); + boolean stopGpxRecording(in StopGpxRecordingParams params); + + boolean takePhotoNote(in TakePhotoNoteParams params); + boolean startVideoRecording(in StartVideoRecordingParams params); + boolean startAudioRecording(in StartAudioRecordingParams params); + boolean stopRecording(in StopRecordingParams params); + + boolean navigate(in NavigateParams params); + boolean navigateGpx(in NavigateGpxParams params); + + boolean removeGpx(in RemoveGpxParams params); +} \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/calculateroute/CalculateRouteParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/calculateroute/CalculateRouteParams.aidl new file mode 100644 index 0000000000..017dd5e944 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/calculateroute/CalculateRouteParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.calculateroute; + +parcelable CalculateRouteParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/calculateroute/CalculateRouteParams.java b/OsmAnd-telegram/src/net/osmand/aidl/calculateroute/CalculateRouteParams.java new file mode 100644 index 0000000000..3cc660ec8a --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/calculateroute/CalculateRouteParams.java @@ -0,0 +1,100 @@ +package net.osmand.aidl.calculateroute; + +import android.os.Parcel; +import android.os.Parcelable; + +import net.osmand.aidl.map.ALatLon; + +import java.util.ArrayList; +import java.util.List; + +public class CalculateRouteParams implements Parcelable { + + private ALatLon startPoint; + private String startPointName; + private ALatLon endPoint; + private String endPointName; + private List intermediatePoints = new ArrayList<>(); + private List intermediateNames = new ArrayList<>(); + + public CalculateRouteParams(ALatLon startPoint, String startPointName, + ALatLon endPoint, String endPointName, + List intermediatePoints, List intermediateNames) { + + if (endPoint == null) { + throw new IllegalArgumentException("endPoint cannot be null"); + } + + this.startPoint = startPoint; + this.startPointName = startPointName; + this.endPoint = endPoint; + this.endPointName = endPointName; + if (intermediatePoints != null) { + this.intermediatePoints.addAll(intermediatePoints); + } + if (intermediateNames != null) { + this.intermediateNames.addAll(intermediateNames); + } + } + + public CalculateRouteParams(Parcel in) { + readFromParcel(in); + } + + public static final Parcelable.Creator CREATOR = new + Parcelable.Creator() { + public CalculateRouteParams createFromParcel(Parcel in) { + return new CalculateRouteParams(in); + } + + public CalculateRouteParams[] newArray(int size) { + return new CalculateRouteParams[size]; + } + }; + + public ALatLon getStartPoint() { + return startPoint; + } + + public String getStartPointName() { + return startPointName; + } + + public ALatLon getEndPoint() { + return endPoint; + } + + public String getEndPointName() { + return endPointName; + } + + public List getIntermediatePoints() { + return intermediatePoints; + } + + public List getIntermediateNames() { + return intermediateNames; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(startPoint, flags); + out.writeString(startPointName); + out.writeParcelable(endPoint, flags); + out.writeString(endPointName); + out.writeTypedList(intermediatePoints); + out.writeStringList(intermediateNames); + } + + private void readFromParcel(Parcel in) { + startPoint = in.readParcelable(ALatLon.class.getClassLoader()); + startPointName = in.readString(); + endPoint = in.readParcelable(ALatLon.class.getClassLoader()); + endPointName = in.readString(); + in.readTypedList(intermediatePoints, ALatLon.CREATOR); + in.readStringList(intermediateNames); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/AFavorite.aidl b/OsmAnd-telegram/src/net/osmand/aidl/favorite/AFavorite.aidl new file mode 100644 index 0000000000..afd535fbe8 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/AFavorite.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.favorite; + +parcelable AFavorite; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/AFavorite.java b/OsmAnd-telegram/src/net/osmand/aidl/favorite/AFavorite.java new file mode 100644 index 0000000000..b7fc057249 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/AFavorite.java @@ -0,0 +1,96 @@ +package net.osmand.aidl.favorite; + +import android.os.Parcel; +import android.os.Parcelable; + +public class AFavorite implements Parcelable { + + private double lat; + private double lon; + private String name; + private String description; + private String category; + private String color; + private boolean visible; + + 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.category = category; + this.color = color; + this.visible = visible; + } + + public AFavorite(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public AFavorite createFromParcel(Parcel in) { + return new AFavorite(in); + } + + @Override + public AFavorite[] newArray(int size) { + return new AFavorite[size]; + } + }; + + public double getLat() { + return lat; + } + + public double getLon() { + return lon; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public String getCategory() { + return category; + } + + public String getColor() { + return color; + } + + public boolean isVisible() { + return visible; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeDouble(lat); + out.writeDouble(lon); + out.writeString(name); + out.writeString(description); + out.writeString(category); + out.writeString(color); + out.writeByte((byte) (visible ? 1 : 0)); + } + + private void readFromParcel(Parcel in) { + lat = in.readDouble(); + lon = in.readDouble(); + name = in.readString(); + description = in.readString(); + category = in.readString(); + color = in.readString(); + visible = in.readByte() != 0; + } + + @Override + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/AddFavoriteParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/favorite/AddFavoriteParams.aidl new file mode 100644 index 0000000000..c546992b10 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/AddFavoriteParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.favorite; + +parcelable AddFavoriteParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/AddFavoriteParams.java b/OsmAnd-telegram/src/net/osmand/aidl/favorite/AddFavoriteParams.java new file mode 100644 index 0000000000..87baeb5a99 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/AddFavoriteParams.java @@ -0,0 +1,47 @@ +package net.osmand.aidl.favorite; + +import android.os.Parcel; +import android.os.Parcelable; + +public class AddFavoriteParams implements Parcelable { + + private AFavorite favorite; + + public AddFavoriteParams(AFavorite favorite) { + this.favorite = favorite; + } + + public AddFavoriteParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public AddFavoriteParams createFromParcel(Parcel in) { + return new AddFavoriteParams(in); + } + + @Override + public AddFavoriteParams[] newArray(int size) { + return new AddFavoriteParams[size]; + } + }; + + public AFavorite getFavorite() { + return favorite; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(favorite, flags); + } + + private void readFromParcel(Parcel in) { + favorite = in.readParcelable(AFavorite.class.getClassLoader()); + } + + @Override + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/RemoveFavoriteParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/favorite/RemoveFavoriteParams.aidl new file mode 100644 index 0000000000..37c08cd374 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/RemoveFavoriteParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.favorite; + +parcelable RemoveFavoriteParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/RemoveFavoriteParams.java b/OsmAnd-telegram/src/net/osmand/aidl/favorite/RemoveFavoriteParams.java new file mode 100644 index 0000000000..15e2ca74bd --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/RemoveFavoriteParams.java @@ -0,0 +1,47 @@ +package net.osmand.aidl.favorite; + +import android.os.Parcel; +import android.os.Parcelable; + +public class RemoveFavoriteParams implements Parcelable { + + private AFavorite favorite; + + public RemoveFavoriteParams(AFavorite favorite) { + this.favorite = favorite; + } + + public RemoveFavoriteParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public RemoveFavoriteParams createFromParcel(Parcel in) { + return new RemoveFavoriteParams(in); + } + + @Override + public RemoveFavoriteParams[] newArray(int size) { + return new RemoveFavoriteParams[size]; + } + }; + + public AFavorite getFavorite() { + return favorite; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(favorite, flags); + } + + private void readFromParcel(Parcel in) { + favorite = in.readParcelable(AFavorite.class.getClassLoader()); + } + + @Override + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/UpdateFavoriteParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/favorite/UpdateFavoriteParams.aidl new file mode 100644 index 0000000000..ba4a9364d3 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/UpdateFavoriteParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.favorite; + +parcelable UpdateFavoriteParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/UpdateFavoriteParams.java b/OsmAnd-telegram/src/net/osmand/aidl/favorite/UpdateFavoriteParams.java new file mode 100644 index 0000000000..43fdfc13bd --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/UpdateFavoriteParams.java @@ -0,0 +1,55 @@ +package net.osmand.aidl.favorite; + +import android.os.Parcel; +import android.os.Parcelable; + +public class UpdateFavoriteParams implements Parcelable { + + private AFavorite favoritePrev; + private AFavorite favoriteNew; + + public UpdateFavoriteParams(AFavorite favoritePrev, AFavorite favoriteNew) { + this.favoritePrev = favoritePrev; + this.favoriteNew = favoriteNew; + } + + public UpdateFavoriteParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public UpdateFavoriteParams createFromParcel(Parcel in) { + return new UpdateFavoriteParams(in); + } + + @Override + public UpdateFavoriteParams[] newArray(int size) { + return new UpdateFavoriteParams[size]; + } + }; + + public AFavorite getFavoritePrev() { + return favoritePrev; + } + + public AFavorite getFavoriteNew() { + return favoriteNew; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(favoritePrev, flags); + out.writeParcelable(favoriteNew, flags); + } + + private void readFromParcel(Parcel in) { + favoritePrev = in.readParcelable(AFavorite.class.getClassLoader()); + favoriteNew = in.readParcelable(AFavorite.class.getClassLoader()); + } + + @Override + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AFavoriteGroup.aidl b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AFavoriteGroup.aidl new file mode 100644 index 0000000000..baec925474 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AFavoriteGroup.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.favorite.group; + +parcelable AFavoriteGroup; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AFavoriteGroup.java b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AFavoriteGroup.java new file mode 100644 index 0000000000..e9b6348468 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AFavoriteGroup.java @@ -0,0 +1,63 @@ +package net.osmand.aidl.favorite.group; + +import android.os.Parcel; +import android.os.Parcelable; + +public class AFavoriteGroup implements Parcelable { + + private String name; + private String color; + private boolean visible; + + public AFavoriteGroup(String name, String color, boolean visible) { + this.name = name; + this.color = color; + this.visible = visible; + } + + public AFavoriteGroup(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public AFavoriteGroup createFromParcel(Parcel in) { + return new AFavoriteGroup(in); + } + + @Override + public AFavoriteGroup[] newArray(int size) { + return new AFavoriteGroup[size]; + } + }; + + public String getName() { + return name; + } + + public String getColor() { + return color; + } + + public boolean isVisible() { + return visible; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeString(name); + out.writeString(color); + out.writeByte((byte) (visible ? 1 : 0)); + } + + private void readFromParcel(Parcel in) { + name = in.readString(); + color = in.readString(); + visible = in.readByte() != 0; + } + + @Override + public int describeContents() { + return 0; + } +} \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AddFavoriteGroupParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AddFavoriteGroupParams.aidl new file mode 100644 index 0000000000..5850b5cd34 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AddFavoriteGroupParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.favorite.group; + +parcelable AddFavoriteGroupParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AddFavoriteGroupParams.java b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AddFavoriteGroupParams.java new file mode 100644 index 0000000000..7cb3228572 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/AddFavoriteGroupParams.java @@ -0,0 +1,47 @@ +package net.osmand.aidl.favorite.group; + +import android.os.Parcel; +import android.os.Parcelable; + +public class AddFavoriteGroupParams implements Parcelable { + + private AFavoriteGroup favoriteGroup; + + public AddFavoriteGroupParams(AFavoriteGroup favoriteGroup) { + this.favoriteGroup = favoriteGroup; + } + + public AddFavoriteGroupParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public AddFavoriteGroupParams createFromParcel(Parcel in) { + return new AddFavoriteGroupParams(in); + } + + @Override + public AddFavoriteGroupParams[] newArray(int size) { + return new AddFavoriteGroupParams[size]; + } + }; + + public AFavoriteGroup getFavoriteGroup() { + return favoriteGroup; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(favoriteGroup, flags); + } + + private void readFromParcel(Parcel in) { + favoriteGroup = in.readParcelable(AFavoriteGroup.class.getClassLoader()); + } + + @Override + public int describeContents() { + return 0; + } +} \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/RemoveFavoriteGroupParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/RemoveFavoriteGroupParams.aidl new file mode 100644 index 0000000000..e8b0710a01 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/RemoveFavoriteGroupParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.favorite.group; + +parcelable RemoveFavoriteGroupParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/RemoveFavoriteGroupParams.java b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/RemoveFavoriteGroupParams.java new file mode 100644 index 0000000000..0b17274440 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/RemoveFavoriteGroupParams.java @@ -0,0 +1,47 @@ +package net.osmand.aidl.favorite.group; + +import android.os.Parcel; +import android.os.Parcelable; + +public class RemoveFavoriteGroupParams implements Parcelable { + + private AFavoriteGroup favoriteGroup; + + public RemoveFavoriteGroupParams(AFavoriteGroup favoriteGroup) { + this.favoriteGroup = favoriteGroup; + } + + public RemoveFavoriteGroupParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public RemoveFavoriteGroupParams createFromParcel(Parcel in) { + return new RemoveFavoriteGroupParams(in); + } + + @Override + public RemoveFavoriteGroupParams[] newArray(int size) { + return new RemoveFavoriteGroupParams[size]; + } + }; + + public AFavoriteGroup getFavoriteGroup() { + return favoriteGroup; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(favoriteGroup, flags); + } + + private void readFromParcel(Parcel in) { + favoriteGroup = in.readParcelable(AFavoriteGroup.class.getClassLoader()); + } + + @Override + public int describeContents() { + return 0; + } +} \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/UpdateFavoriteGroupParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/UpdateFavoriteGroupParams.aidl new file mode 100644 index 0000000000..e9001a8c5e --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/UpdateFavoriteGroupParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.favorite.group; + +parcelable UpdateFavoriteGroupParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/UpdateFavoriteGroupParams.java b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/UpdateFavoriteGroupParams.java new file mode 100644 index 0000000000..0ea52e1fda --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/favorite/group/UpdateFavoriteGroupParams.java @@ -0,0 +1,55 @@ +package net.osmand.aidl.favorite.group; + +import android.os.Parcel; +import android.os.Parcelable; + +public class UpdateFavoriteGroupParams implements Parcelable { + + private AFavoriteGroup favoriteGroupPrev; + private AFavoriteGroup favoriteGroupNew; + + public UpdateFavoriteGroupParams(AFavoriteGroup favoriteGroup, AFavoriteGroup favoriteGroupNew) { + this.favoriteGroupPrev = favoriteGroup; + this.favoriteGroupNew = favoriteGroupNew; + } + + public UpdateFavoriteGroupParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public UpdateFavoriteGroupParams createFromParcel(Parcel in) { + return new UpdateFavoriteGroupParams(in); + } + + @Override + public UpdateFavoriteGroupParams[] newArray(int size) { + return new UpdateFavoriteGroupParams[size]; + } + }; + + public AFavoriteGroup getFavoriteGroupPrev() { + return favoriteGroupPrev; + } + + public AFavoriteGroup getFavoriteGroupNew() { + return favoriteGroupNew; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(favoriteGroupPrev, flags); + out.writeParcelable(favoriteGroupNew, flags); + } + + private void readFromParcel(Parcel in) { + favoriteGroupPrev = in.readParcelable(AFavoriteGroup.class.getClassLoader()); + favoriteGroupNew = in.readParcelable(AFavoriteGroup.class.getClassLoader()); + } + + @Override + public int describeContents() { + return 0; + } +} \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/ASelectedGpxFile.aidl b/OsmAnd-telegram/src/net/osmand/aidl/gpx/ASelectedGpxFile.aidl new file mode 100644 index 0000000000..23fc3312b4 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/ASelectedGpxFile.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.gpx; + +parcelable ASelectedGpxFile; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/ASelectedGpxFile.java b/OsmAnd-telegram/src/net/osmand/aidl/gpx/ASelectedGpxFile.java new file mode 100644 index 0000000000..54d51bf882 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/ASelectedGpxFile.java @@ -0,0 +1,45 @@ +package net.osmand.aidl.gpx; + +import android.os.Parcel; +import android.os.Parcelable; + +public class ASelectedGpxFile implements Parcelable { + + private String fileName; + + public ASelectedGpxFile(String fileName) { + this.fileName = fileName; + } + + public ASelectedGpxFile(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + public ASelectedGpxFile createFromParcel(Parcel in) { + return new ASelectedGpxFile(in); + } + + public ASelectedGpxFile[] newArray(int size) { + return new ASelectedGpxFile[size]; + } + }; + + public String getFileName() { + return fileName; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeString(fileName); + } + + private void readFromParcel(Parcel in) { + fileName = in.readString(); + } + + public int describeContents() { + return 0; + } +} + diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/HideGpxParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/gpx/HideGpxParams.aidl new file mode 100644 index 0000000000..4c8992552c --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/HideGpxParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.gpx; + +parcelable HideGpxParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/HideGpxParams.java b/OsmAnd-telegram/src/net/osmand/aidl/gpx/HideGpxParams.java new file mode 100644 index 0000000000..5e37c66f80 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/HideGpxParams.java @@ -0,0 +1,45 @@ +package net.osmand.aidl.gpx; + +import android.os.Parcel; +import android.os.Parcelable; + +public class HideGpxParams implements Parcelable { + + private String fileName; + + public HideGpxParams(String fileName) { + this.fileName = fileName; + } + + public HideGpxParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + public HideGpxParams createFromParcel(Parcel in) { + return new HideGpxParams(in); + } + + public HideGpxParams[] newArray(int size) { + return new HideGpxParams[size]; + } + }; + + public String getFileName() { + return fileName; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeString(fileName); + } + + private void readFromParcel(Parcel in) { + fileName = in.readString(); + } + + public int describeContents() { + return 0; + } +} + diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/ImportGpxParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/gpx/ImportGpxParams.aidl new file mode 100644 index 0000000000..23ecdb6ff3 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/ImportGpxParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.gpx; + +parcelable ImportGpxParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/ImportGpxParams.java b/OsmAnd-telegram/src/net/osmand/aidl/gpx/ImportGpxParams.java new file mode 100644 index 0000000000..6d2ed2cb88 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/ImportGpxParams.java @@ -0,0 +1,106 @@ +package net.osmand.aidl.gpx; + +import android.net.Uri; +import android.os.Parcel; +import android.os.Parcelable; + +import java.io.File; + +public class ImportGpxParams implements Parcelable { + + private File gpxFile; + private Uri gpxUri; + private String sourceRawData; + private String destinationPath; + private String color; + private boolean show; + + public ImportGpxParams(File gpxFile, String destinationPath, String color, boolean show) { + this.gpxFile = gpxFile; + this.destinationPath = destinationPath; + this.color = color; + this.show = show; + } + + public ImportGpxParams(Uri gpxUri, String destinationPath, String color, boolean show) { + this.gpxUri = gpxUri; + this.destinationPath = destinationPath; + this.color = color; + this.show = show; + } + + public ImportGpxParams(String sourceRawData, String destinationPath, String color, boolean show) { + this.sourceRawData = sourceRawData; + this.destinationPath = destinationPath; + this.color = color; + this.show = show; + } + + public ImportGpxParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + public ImportGpxParams createFromParcel(Parcel in) { + return new ImportGpxParams(in); + } + + public ImportGpxParams[] newArray(int size) { + return new ImportGpxParams[size]; + } + }; + + public File getGpxFile() { + return gpxFile; + } + + public Uri getGpxUri() { + return gpxUri; + } + + public String getSourceRawData() { + return sourceRawData; + } + + public String getDestinationPath() { + return destinationPath; + } + + public String getColor() { + return color; + } + + public boolean isShow() { + return show; + } + + public void writeToParcel(Parcel out, int flags) { + if (gpxFile != null) { + out.writeString(gpxFile.getAbsolutePath()); + } else { + out.writeString(null); + } + out.writeParcelable(gpxUri, flags); + out.writeString(sourceRawData); + out.writeString(destinationPath); + out.writeString(color); + out.writeByte((byte) (show ? 1 : 0)); + } + + private void readFromParcel(Parcel in) { + String gpxAbsolutePath = in.readString(); + if (gpxAbsolutePath != null) { + gpxFile = new File(gpxAbsolutePath); + } + gpxUri = in.readParcelable(Uri.class.getClassLoader()); + sourceRawData = in.readString(); + destinationPath = in.readString(); + color = in.readString(); + show = in.readByte() == 1; + } + + public int describeContents() { + return 0; + } +} \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/RemoveGpxParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/gpx/RemoveGpxParams.aidl new file mode 100644 index 0000000000..e9025f7a19 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/RemoveGpxParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.gpx; + +parcelable RemoveGpxParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/RemoveGpxParams.java b/OsmAnd-telegram/src/net/osmand/aidl/gpx/RemoveGpxParams.java new file mode 100644 index 0000000000..2253fa3616 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/RemoveGpxParams.java @@ -0,0 +1,48 @@ +package net.osmand.aidl.gpx; + +import android.os.Parcel; +import android.os.Parcelable; + +public class RemoveGpxParams implements Parcelable { + + private String fileName; + + public RemoveGpxParams(String fileName) { + this.fileName = fileName; + } + + public RemoveGpxParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + @Override + public RemoveGpxParams createFromParcel(Parcel in) { + return new RemoveGpxParams(in); + } + + @Override + public RemoveGpxParams[] newArray(int size) { + return new RemoveGpxParams[size]; + } + }; + + public String getFileName() { + return fileName; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeString(fileName); + } + + private void readFromParcel(Parcel in) { + fileName = in.readString(); + } + + @Override + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/ShowGpxParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/gpx/ShowGpxParams.aidl new file mode 100644 index 0000000000..217f600c4e --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/ShowGpxParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.gpx; + +parcelable ShowGpxParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/ShowGpxParams.java b/OsmAnd-telegram/src/net/osmand/aidl/gpx/ShowGpxParams.java new file mode 100644 index 0000000000..4d385a65a4 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/ShowGpxParams.java @@ -0,0 +1,44 @@ +package net.osmand.aidl.gpx; + +import android.os.Parcel; +import android.os.Parcelable; + +public class ShowGpxParams implements Parcelable { + + private String fileName; + + public ShowGpxParams(String fileName) { + this.fileName = fileName; + } + + public ShowGpxParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + public ShowGpxParams createFromParcel(Parcel in) { + return new ShowGpxParams(in); + } + + public ShowGpxParams[] newArray(int size) { + return new ShowGpxParams[size]; + } + }; + + public String getFileName() { + return fileName; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeString(fileName); + } + + private void readFromParcel(Parcel in) { + fileName = in.readString(); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/StartGpxRecordingParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/gpx/StartGpxRecordingParams.aidl new file mode 100644 index 0000000000..14f4871540 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/StartGpxRecordingParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.gpx; + +parcelable StartGpxRecordingParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/StartGpxRecordingParams.java b/OsmAnd-telegram/src/net/osmand/aidl/gpx/StartGpxRecordingParams.java new file mode 100644 index 0000000000..139eac8ea3 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/StartGpxRecordingParams.java @@ -0,0 +1,40 @@ +package net.osmand.aidl.gpx; + +import android.os.Parcel; +import android.os.Parcelable; + +public class StartGpxRecordingParams implements Parcelable { + + public StartGpxRecordingParams() { + + } + + public StartGpxRecordingParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public StartGpxRecordingParams createFromParcel(Parcel in) { + return new StartGpxRecordingParams(in); + } + + @Override + public StartGpxRecordingParams[] newArray(int size) { + return new StartGpxRecordingParams[size]; + } + }; + + @Override + public void writeToParcel(Parcel out, int flags) { + } + + private void readFromParcel(Parcel in) { + + } + + @Override + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/StopGpxRecordingParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/gpx/StopGpxRecordingParams.aidl new file mode 100644 index 0000000000..db08f1811a --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/StopGpxRecordingParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.gpx; + +parcelable StopGpxRecordingParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/gpx/StopGpxRecordingParams.java b/OsmAnd-telegram/src/net/osmand/aidl/gpx/StopGpxRecordingParams.java new file mode 100644 index 0000000000..ada47db418 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/gpx/StopGpxRecordingParams.java @@ -0,0 +1,40 @@ +package net.osmand.aidl.gpx; + +import android.os.Parcel; +import android.os.Parcelable; + +public class StopGpxRecordingParams implements Parcelable { + + public StopGpxRecordingParams() { + + } + + public StopGpxRecordingParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public StopGpxRecordingParams createFromParcel(Parcel in) { + return new StopGpxRecordingParams(in); + } + + @Override + public StopGpxRecordingParams[] newArray(int size) { + return new StopGpxRecordingParams[size]; + } + }; + + @Override + public void writeToParcel(Parcel out, int flags) { + } + + private void readFromParcel(Parcel in) { + + } + + @Override + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/map/ALatLon.aidl b/OsmAnd-telegram/src/net/osmand/aidl/map/ALatLon.aidl new file mode 100644 index 0000000000..33d5930f02 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/map/ALatLon.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.map; + +parcelable ALatLon; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/map/ALatLon.java b/OsmAnd-telegram/src/net/osmand/aidl/map/ALatLon.java new file mode 100644 index 0000000000..377344fd6a --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/map/ALatLon.java @@ -0,0 +1,83 @@ +package net.osmand.aidl.map; + +import android.os.Parcel; +import android.os.Parcelable; + +public class ALatLon implements Parcelable { + + private double longitude; + private double latitude; + + public ALatLon(double latitude, double longitude) { + this.latitude = latitude; + this.longitude = longitude; + } + + public ALatLon(Parcel in) { + readFromParcel(in); + } + + public static final Parcelable.Creator CREATOR = new + Parcelable.Creator() { + public ALatLon createFromParcel(Parcel in) { + return new ALatLon(in); + } + + public ALatLon[] newArray(int size) { + return new ALatLon[size]; + } + }; + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + int temp; + temp = (int)Math.floor(latitude * 10000); + result = prime * result + temp; + temp = (int)Math.floor(longitude * 10000); + result = prime * result + temp; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + + ALatLon other = (ALatLon) obj; + return Math.abs(latitude - other.latitude) < 0.00001 + && Math.abs(longitude - other.longitude) < 0.00001; + } + + @Override + public String toString() { + return "Lat " + ((float)latitude) + " Lon " + ((float)longitude); + } + + public double getLatitude() { + return latitude; + } + + public double getLongitude() { + return longitude; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeDouble(latitude); + out.writeDouble(longitude); + } + + public void readFromParcel(Parcel in) { + latitude = in.readDouble(); + longitude = in.readDouble(); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/map/SetMapLocationParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/map/SetMapLocationParams.aidl new file mode 100644 index 0000000000..9edde4f616 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/map/SetMapLocationParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.map; + +parcelable SetMapLocationParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/map/SetMapLocationParams.java b/OsmAnd-telegram/src/net/osmand/aidl/map/SetMapLocationParams.java new file mode 100644 index 0000000000..929c817d9d --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/map/SetMapLocationParams.java @@ -0,0 +1,68 @@ +package net.osmand.aidl.map; + +import android.os.Parcel; +import android.os.Parcelable; + +public class SetMapLocationParams implements Parcelable { + + private double latitude; + private double longitude; + private int zoom; + private boolean animated; + + public SetMapLocationParams(double latitude, double longitude, int zoom, boolean animated) { + this.latitude = latitude; + this.longitude = longitude; + this.zoom = zoom; + this.animated = animated; + } + + public SetMapLocationParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + public SetMapLocationParams createFromParcel(Parcel in) { + return new SetMapLocationParams(in); + } + + public SetMapLocationParams[] newArray(int size) { + return new SetMapLocationParams[size]; + } + }; + + public double getLatitude() { + return latitude; + } + + public double getLongitude() { + return longitude; + } + + public int getZoom() { + return zoom; + } + + public boolean isAnimated() { + return animated; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeDouble(latitude); + out.writeDouble(longitude); + out.writeInt(zoom); + out.writeByte((byte) (animated ? 1 : 0)); + } + + private void readFromParcel(Parcel in) { + latitude = in.readDouble(); + longitude = in.readDouble(); + zoom = in.readInt(); + animated = in.readByte() != 0; + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/AMapLayer.aidl b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/AMapLayer.aidl new file mode 100644 index 0000000000..745f49f1a5 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/AMapLayer.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.maplayer; + +parcelable AMapLayer; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/AMapLayer.java b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/AMapLayer.java new file mode 100644 index 0000000000..79f82d97bc --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/AMapLayer.java @@ -0,0 +1,94 @@ +package net.osmand.aidl.maplayer; + +import android.os.Parcel; +import android.os.Parcelable; + +import net.osmand.aidl.maplayer.point.AMapPoint; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class AMapLayer implements Parcelable { + private String id; + private String name; + private float zOrder = 5.5f; + private Map points = new ConcurrentHashMap<>(); + + public AMapLayer(String id, String name, float zOrder, List pointList) { + this.id = id; + this.name = name; + this.zOrder = zOrder; + if (pointList != null) { + for (AMapPoint p : pointList) { + this.points.put(p.getId(), p); + } + } + } + + public AMapLayer(Parcel in) { + readFromParcel(in); + } + + public static final Parcelable.Creator CREATOR = new + Parcelable.Creator() { + public AMapLayer createFromParcel(Parcel in) { + return new AMapLayer(in); + } + + public AMapLayer[] newArray(int size) { + return new AMapLayer[size]; + } + }; + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + public float getZOrder() { + return zOrder; + } + + public List getPoints() { + return new ArrayList<>(points.values()); + } + + public boolean hasPoint(String pointId) { + return points.containsKey(pointId); + } + + public void putPoint(AMapPoint point) { + points.put(point.getId(), point); + } + + public void removePoint(String pointId) { + points.remove(pointId); + } + + public void writeToParcel(Parcel out, int flags) { + out.writeString(id); + out.writeString(name); + out.writeFloat(zOrder); + out.writeTypedList(new ArrayList<>(points.values())); + } + + private void readFromParcel(Parcel in) { + id = in.readString(); + name = in.readString(); + zOrder = in.readFloat(); + List pointList = new ArrayList<>(); + in.readTypedList(pointList, AMapPoint.CREATOR); + for (AMapPoint p : pointList) { + this.points.put(p.getId(), p); + } + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/AddMapLayerParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/AddMapLayerParams.aidl new file mode 100644 index 0000000000..8116760a45 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/AddMapLayerParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.maplayer; + +parcelable AddMapLayerParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/AddMapLayerParams.java b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/AddMapLayerParams.java new file mode 100644 index 0000000000..38e9e53667 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/AddMapLayerParams.java @@ -0,0 +1,44 @@ +package net.osmand.aidl.maplayer; + +import android.os.Parcel; +import android.os.Parcelable; +import android.os.Parcelable.Creator; + +public class AddMapLayerParams implements Parcelable { + private AMapLayer layer; + + public AddMapLayerParams(AMapLayer layer) { + this.layer = layer; + } + + public AddMapLayerParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + public AddMapLayerParams createFromParcel(Parcel in) { + return new AddMapLayerParams(in); + } + + public AddMapLayerParams[] newArray(int size) { + return new AddMapLayerParams[size]; + } + }; + + public AMapLayer getLayer() { + return layer; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(layer, flags); + } + + private void readFromParcel(Parcel in) { + layer = in.readParcelable(AMapLayer.class.getClassLoader()); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/RemoveMapLayerParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/RemoveMapLayerParams.aidl new file mode 100644 index 0000000000..20a972ee95 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/RemoveMapLayerParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.maplayer; + +parcelable RemoveMapLayerParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/RemoveMapLayerParams.java b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/RemoveMapLayerParams.java new file mode 100644 index 0000000000..3e87627445 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/RemoveMapLayerParams.java @@ -0,0 +1,44 @@ +package net.osmand.aidl.maplayer; + +import android.os.Parcel; +import android.os.Parcelable; +import android.os.Parcelable.Creator; + +public class RemoveMapLayerParams implements Parcelable { + private String id; + + public RemoveMapLayerParams(String id) { + this.id = id; + } + + public RemoveMapLayerParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + public RemoveMapLayerParams createFromParcel(Parcel in) { + return new RemoveMapLayerParams(in); + } + + public RemoveMapLayerParams[] newArray(int size) { + return new RemoveMapLayerParams[size]; + } + }; + + public String getId() { + return id; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeString(id); + } + + private void readFromParcel(Parcel in) { + id = in.readString(); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/UpdateMapLayerParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/UpdateMapLayerParams.aidl new file mode 100644 index 0000000000..eafe8ef464 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/UpdateMapLayerParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.maplayer; + +parcelable UpdateMapLayerParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/UpdateMapLayerParams.java b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/UpdateMapLayerParams.java new file mode 100644 index 0000000000..a2f6e16498 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/UpdateMapLayerParams.java @@ -0,0 +1,44 @@ +package net.osmand.aidl.maplayer; + +import android.os.Parcel; +import android.os.Parcelable; +import android.os.Parcelable.Creator; + +public class UpdateMapLayerParams implements Parcelable { + private AMapLayer layer; + + public UpdateMapLayerParams(AMapLayer layer) { + this.layer = layer; + } + + public UpdateMapLayerParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + public UpdateMapLayerParams createFromParcel(Parcel in) { + return new UpdateMapLayerParams(in); + } + + public UpdateMapLayerParams[] newArray(int size) { + return new UpdateMapLayerParams[size]; + } + }; + + public AMapLayer getLayer() { + return layer; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(layer, flags); + } + + private void readFromParcel(Parcel in) { + layer = in.readParcelable(AMapLayer.class.getClassLoader()); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AMapPoint.aidl b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AMapPoint.aidl new file mode 100644 index 0000000000..53fb86b788 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AMapPoint.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.maplayer.point; + +parcelable AMapPoint; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AMapPoint.java b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AMapPoint.java new file mode 100644 index 0000000000..1d0d2e01e8 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AMapPoint.java @@ -0,0 +1,99 @@ +package net.osmand.aidl.maplayer.point; + +import android.os.Parcel; +import android.os.Parcelable; + +import net.osmand.aidl.map.ALatLon; + +import java.util.ArrayList; +import java.util.List; + +public class AMapPoint implements Parcelable { + private String id; + private String shortName; + private String fullName; + private String typeName; + private int color; + private ALatLon location; + private List details = new ArrayList<>(); + + public AMapPoint(String id, String shortName, String fullName, String typeName, int color, + ALatLon location, List details) { + this.id = id; + this.shortName = shortName; + this.fullName = fullName; + this.typeName = typeName; + this.color = color; + this.location = location; + if (details != null) { + this.details.addAll(details); + } + } + + public AMapPoint(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + public AMapPoint createFromParcel(Parcel in) { + return new AMapPoint(in); + } + + public AMapPoint[] newArray(int size) { + return new AMapPoint[size]; + } + }; + + public String getId() { + return id; + } + + public String getShortName() { + return shortName; + } + + public String getFullName() { + return fullName; + } + + public String getTypeName() { + return typeName; + } + + public int getColor() { + return color; + } + + public ALatLon getLocation() { + return location; + } + + public List getDetails() { + return details; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeString(id); + out.writeString(shortName); + out.writeString(fullName); + out.writeString(typeName); + out.writeInt(color); + out.writeParcelable(location, flags); + out.writeStringList(details); + } + + private void readFromParcel(Parcel in) { + id = in.readString(); + shortName = in.readString(); + fullName = in.readString(); + typeName = in.readString(); + color = in.readInt(); + location = in.readParcelable(ALatLon.class.getClassLoader()); + in.readStringList(details); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AddMapPointParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AddMapPointParams.aidl new file mode 100644 index 0000000000..d41d6b69ca --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AddMapPointParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.maplayer.point; + +parcelable AddMapPointParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AddMapPointParams.java b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AddMapPointParams.java new file mode 100644 index 0000000000..0d575a38d9 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/AddMapPointParams.java @@ -0,0 +1,51 @@ +package net.osmand.aidl.maplayer.point; + +import android.os.Parcel; +import android.os.Parcelable; + +public class AddMapPointParams implements Parcelable { + private String layerId; + private AMapPoint point; + + public AddMapPointParams(String layerId, AMapPoint point) { + this.layerId = layerId; + this.point = point; + } + + public AddMapPointParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + public AddMapPointParams createFromParcel(Parcel in) { + return new AddMapPointParams(in); + } + + public AddMapPointParams[] newArray(int size) { + return new AddMapPointParams[size]; + } + }; + + public String getLayerId() { + return layerId; + } + + public AMapPoint getPoint() { + return point; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeString(layerId); + out.writeParcelable(point, flags); + } + + private void readFromParcel(Parcel in) { + layerId = in.readString(); + point = in.readParcelable(AMapPoint.class.getClassLoader()); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/RemoveMapPointParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/RemoveMapPointParams.aidl new file mode 100644 index 0000000000..68a5fdcf11 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/RemoveMapPointParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.maplayer.point; + +parcelable RemoveMapPointParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/RemoveMapPointParams.java b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/RemoveMapPointParams.java new file mode 100644 index 0000000000..797556b1e3 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/RemoveMapPointParams.java @@ -0,0 +1,51 @@ +package net.osmand.aidl.maplayer.point; + +import android.os.Parcel; +import android.os.Parcelable; + +public class RemoveMapPointParams implements Parcelable { + private String layerId; + private String pointId; + + public RemoveMapPointParams(String layerId, String pointId) { + this.layerId = layerId; + this.pointId = pointId; + } + + public RemoveMapPointParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + public RemoveMapPointParams createFromParcel(Parcel in) { + return new RemoveMapPointParams(in); + } + + public RemoveMapPointParams[] newArray(int size) { + return new RemoveMapPointParams[size]; + } + }; + + public String getLayerId() { + return layerId; + } + + public String getPointId() { + return pointId; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeString(layerId); + out.writeString(pointId); + } + + private void readFromParcel(Parcel in) { + layerId = in.readString(); + pointId = in.readString(); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/UpdateMapPointParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/UpdateMapPointParams.aidl new file mode 100644 index 0000000000..d81ea87253 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/UpdateMapPointParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.maplayer.point; + +parcelable UpdateMapPointParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/UpdateMapPointParams.java b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/UpdateMapPointParams.java new file mode 100644 index 0000000000..178af20b1d --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/maplayer/point/UpdateMapPointParams.java @@ -0,0 +1,51 @@ +package net.osmand.aidl.maplayer.point; + +import android.os.Parcel; +import android.os.Parcelable; + +public class UpdateMapPointParams implements Parcelable { + private String layerId; + private AMapPoint point; + + public UpdateMapPointParams(String layerId, AMapPoint point) { + this.layerId = layerId; + this.point = point; + } + + public UpdateMapPointParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new + Creator() { + public UpdateMapPointParams createFromParcel(Parcel in) { + return new UpdateMapPointParams(in); + } + + public UpdateMapPointParams[] newArray(int size) { + return new UpdateMapPointParams[size]; + } + }; + + public String getLayerId() { + return layerId; + } + + public AMapPoint getPoint() { + return point; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeString(layerId); + out.writeParcelable(point, flags); + } + + private void readFromParcel(Parcel in) { + layerId = in.readString(); + point = in.readParcelable(AMapPoint.class.getClassLoader()); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AMapMarker.aidl b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AMapMarker.aidl new file mode 100644 index 0000000000..4721b1812b --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AMapMarker.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.mapmarker; + +parcelable AMapMarker; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AMapMarker.java b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AMapMarker.java new file mode 100644 index 0000000000..083b5bbb37 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AMapMarker.java @@ -0,0 +1,63 @@ +package net.osmand.aidl.mapmarker; + +import android.os.Parcel; +import android.os.Parcelable; + +import net.osmand.aidl.map.ALatLon; + +public class AMapMarker implements Parcelable { + + private ALatLon latLon; + private String name; + + public AMapMarker(ALatLon latLon, String name) { + + if (latLon == null) { + throw new IllegalArgumentException("latLon cannot be null"); + } + + if (name == null) { + name = ""; + } + + this.latLon = latLon; + this.name = name; + } + + public AMapMarker(Parcel in) { + readFromParcel(in); + } + + public static final Parcelable.Creator CREATOR = new + Parcelable.Creator() { + public AMapMarker createFromParcel(Parcel in) { + return new AMapMarker(in); + } + + public AMapMarker[] newArray(int size) { + return new AMapMarker[size]; + } + }; + + public ALatLon getLatLon() { + return latLon; + } + + public String getName() { + return name; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(latLon, flags); + out.writeString(name); + } + + private void readFromParcel(Parcel in) { + latLon = in.readParcelable(ALatLon.class.getClassLoader()); + name = in.readString(); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AddMapMarkerParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AddMapMarkerParams.aidl new file mode 100644 index 0000000000..eef370b4e2 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AddMapMarkerParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.mapmarker; + +parcelable AddMapMarkerParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AddMapMarkerParams.java b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AddMapMarkerParams.java new file mode 100644 index 0000000000..cc707006e4 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/AddMapMarkerParams.java @@ -0,0 +1,44 @@ +package net.osmand.aidl.mapmarker; + +import android.os.Parcel; +import android.os.Parcelable; + +public class AddMapMarkerParams implements Parcelable { + + private AMapMarker marker; + + public AddMapMarkerParams(AMapMarker marker) { + this.marker = marker; + } + + public AddMapMarkerParams(Parcel in) { + readFromParcel(in); + } + + public static final Parcelable.Creator CREATOR = new + Parcelable.Creator() { + public AddMapMarkerParams createFromParcel(Parcel in) { + return new AddMapMarkerParams(in); + } + + public AddMapMarkerParams[] newArray(int size) { + return new AddMapMarkerParams[size]; + } + }; + + public AMapMarker getMarker() { + return marker; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(marker, flags); + } + + private void readFromParcel(Parcel in) { + marker = in.readParcelable(AMapMarker.class.getClassLoader()); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/RemoveMapMarkerParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/RemoveMapMarkerParams.aidl new file mode 100644 index 0000000000..e5b5b126ad --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/RemoveMapMarkerParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.mapmarker; + +parcelable RemoveMapMarkerParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/RemoveMapMarkerParams.java b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/RemoveMapMarkerParams.java new file mode 100644 index 0000000000..08f489922c --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/RemoveMapMarkerParams.java @@ -0,0 +1,44 @@ +package net.osmand.aidl.mapmarker; + +import android.os.Parcel; +import android.os.Parcelable; + +public class RemoveMapMarkerParams implements Parcelable { + + private AMapMarker marker; + + public RemoveMapMarkerParams(AMapMarker marker) { + this.marker = marker; + } + + public RemoveMapMarkerParams(Parcel in) { + readFromParcel(in); + } + + public static final Parcelable.Creator CREATOR = new + Parcelable.Creator() { + public RemoveMapMarkerParams createFromParcel(Parcel in) { + return new RemoveMapMarkerParams(in); + } + + public RemoveMapMarkerParams[] newArray(int size) { + return new RemoveMapMarkerParams[size]; + } + }; + + public AMapMarker getMarker() { + return marker; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(marker, flags); + } + + private void readFromParcel(Parcel in) { + marker = in.readParcelable(AMapMarker.class.getClassLoader()); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/UpdateMapMarkerParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/UpdateMapMarkerParams.aidl new file mode 100644 index 0000000000..2a17fa9369 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/UpdateMapMarkerParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.mapmarker; + +parcelable UpdateMapMarkerParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/UpdateMapMarkerParams.java b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/UpdateMapMarkerParams.java new file mode 100644 index 0000000000..d03bc0d7f6 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapmarker/UpdateMapMarkerParams.java @@ -0,0 +1,52 @@ +package net.osmand.aidl.mapmarker; + +import android.os.Parcel; +import android.os.Parcelable; + +public class UpdateMapMarkerParams implements Parcelable { + + private AMapMarker markerPrev; + private AMapMarker markerNew; + + public UpdateMapMarkerParams(AMapMarker markerPrev, AMapMarker markerNew) { + this.markerPrev = markerPrev; + this.markerNew = markerNew; + } + + public UpdateMapMarkerParams(Parcel in) { + readFromParcel(in); + } + + public static final Parcelable.Creator CREATOR = new + Parcelable.Creator() { + public UpdateMapMarkerParams createFromParcel(Parcel in) { + return new UpdateMapMarkerParams(in); + } + + public UpdateMapMarkerParams[] newArray(int size) { + return new UpdateMapMarkerParams[size]; + } + }; + + public AMapMarker getMarkerPrev() { + return markerPrev; + } + + public AMapMarker getMarkerNew() { + return markerNew; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(markerPrev, flags); + out.writeParcelable(markerNew, flags); + } + + private void readFromParcel(Parcel in) { + markerPrev = in.readParcelable(AMapMarker.class.getClassLoader()); + markerNew = in.readParcelable(AMapMarker.class.getClassLoader()); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AMapWidget.aidl b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AMapWidget.aidl new file mode 100644 index 0000000000..7798986483 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AMapWidget.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.mapwidget; + +parcelable AMapWidget; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AMapWidget.java b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AMapWidget.java new file mode 100644 index 0000000000..f6fac08942 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AMapWidget.java @@ -0,0 +1,110 @@ +package net.osmand.aidl.mapwidget; + +import android.content.Intent; +import android.os.Parcel; +import android.os.Parcelable; + +public class AMapWidget implements Parcelable { + private String id; + private String menuIconName; + private String menuTitle; + private String lightIconName; + private String darkIconName; + private String text; + private String description; + private int order; + private Intent intentOnClick; + + public AMapWidget(String id, String menuIconName, String menuTitle, + String lightIconName, String darkIconName, String text, String description, + int order, Intent intentOnClick) { + this.id = id; + this.menuIconName = menuIconName; + this.menuTitle = menuTitle; + this.lightIconName = lightIconName; + this.darkIconName = darkIconName; + this.text = text; + this.description = description; + this.order = order; + this.intentOnClick = intentOnClick; + } + + public AMapWidget(Parcel in) { + readFromParcel(in); + } + + public static final Parcelable.Creator CREATOR = new + Parcelable.Creator() { + public AMapWidget createFromParcel(Parcel in) { + return new AMapWidget(in); + } + + public AMapWidget[] newArray(int size) { + return new AMapWidget[size]; + } + }; + + public String getId() { + return id; + } + + public String getMenuIconName() { + return menuIconName; + } + + public String getMenuTitle() { + return menuTitle; + } + + public String getLightIconName() { + return lightIconName; + } + + public String getDarkIconName() { + return darkIconName; + } + + public String getText() { + return text; + } + + public String getDescription() { + return description; + } + + public int getOrder() { + return order; + } + + public Intent getIntentOnClick() { + return intentOnClick; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeString(id); + out.writeString(menuIconName); + out.writeString(menuTitle); + out.writeString(lightIconName); + out.writeString(darkIconName); + out.writeString(text); + out.writeString(description); + out.writeInt(order); + out.writeParcelable(intentOnClick, flags); + } + + private void readFromParcel(Parcel in) { + id = in.readString(); + menuIconName = in.readString(); + menuTitle = in.readString(); + lightIconName = in.readString(); + darkIconName = in.readString(); + text = in.readString(); + description = in.readString(); + order = in.readInt(); + intentOnClick = in.readParcelable(Intent.class.getClassLoader()); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AddMapWidgetParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AddMapWidgetParams.aidl new file mode 100644 index 0000000000..891d338eb8 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AddMapWidgetParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.mapwidget; + +parcelable AddMapWidgetParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AddMapWidgetParams.java b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AddMapWidgetParams.java new file mode 100644 index 0000000000..69b337209e --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/AddMapWidgetParams.java @@ -0,0 +1,43 @@ +package net.osmand.aidl.mapwidget; + +import android.os.Parcel; +import android.os.Parcelable; + +public class AddMapWidgetParams implements Parcelable { + private AMapWidget widget; + + public AddMapWidgetParams(AMapWidget widget) { + this.widget = widget; + } + + public AddMapWidgetParams(Parcel in) { + readFromParcel(in); + } + + public static final Parcelable.Creator CREATOR = new + Parcelable.Creator() { + public AddMapWidgetParams createFromParcel(Parcel in) { + return new AddMapWidgetParams(in); + } + + public AddMapWidgetParams[] newArray(int size) { + return new AddMapWidgetParams[size]; + } + }; + + public AMapWidget getWidget() { + return widget; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(widget, flags); + } + + private void readFromParcel(Parcel in) { + widget = in.readParcelable(AMapWidget.class.getClassLoader()); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/RemoveMapWidgetParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/RemoveMapWidgetParams.aidl new file mode 100644 index 0000000000..445b0c994d --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/RemoveMapWidgetParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.mapwidget; + +parcelable RemoveMapWidgetParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/RemoveMapWidgetParams.java b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/RemoveMapWidgetParams.java new file mode 100644 index 0000000000..e1433d530c --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/RemoveMapWidgetParams.java @@ -0,0 +1,43 @@ +package net.osmand.aidl.mapwidget; + +import android.os.Parcel; +import android.os.Parcelable; + +public class RemoveMapWidgetParams implements Parcelable { + private String id; + + public RemoveMapWidgetParams(String id) { + this.id = id; + } + + public RemoveMapWidgetParams(Parcel in) { + readFromParcel(in); + } + + public static final Parcelable.Creator CREATOR = new + Parcelable.Creator() { + public RemoveMapWidgetParams createFromParcel(Parcel in) { + return new RemoveMapWidgetParams(in); + } + + public RemoveMapWidgetParams[] newArray(int size) { + return new RemoveMapWidgetParams[size]; + } + }; + + public String getId() { + return id; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeString(id); + } + + private void readFromParcel(Parcel in) { + id = in.readString(); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/UpdateMapWidgetParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/UpdateMapWidgetParams.aidl new file mode 100644 index 0000000000..b92f94c008 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/UpdateMapWidgetParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.mapwidget; + +parcelable UpdateMapWidgetParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/UpdateMapWidgetParams.java b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/UpdateMapWidgetParams.java new file mode 100644 index 0000000000..07114ad16e --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/mapwidget/UpdateMapWidgetParams.java @@ -0,0 +1,43 @@ +package net.osmand.aidl.mapwidget; + +import android.os.Parcel; +import android.os.Parcelable; + +public class UpdateMapWidgetParams implements Parcelable { + private AMapWidget widget; + + public UpdateMapWidgetParams(AMapWidget widget) { + this.widget = widget; + } + + public UpdateMapWidgetParams(Parcel in) { + readFromParcel(in); + } + + public static final Parcelable.Creator CREATOR = new + Parcelable.Creator() { + public UpdateMapWidgetParams createFromParcel(Parcel in) { + return new UpdateMapWidgetParams(in); + } + + public UpdateMapWidgetParams[] newArray(int size) { + return new UpdateMapWidgetParams[size]; + } + }; + + public AMapWidget getWidget() { + return widget; + } + + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(widget, flags); + } + + private void readFromParcel(Parcel in) { + widget = in.readParcelable(AMapWidget.class.getClassLoader()); + } + + public int describeContents() { + return 0; + } +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateGpxParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateGpxParams.aidl new file mode 100644 index 0000000000..dea59ed048 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateGpxParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.navigation; + +parcelable NavigateGpxParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateGpxParams.java b/OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateGpxParams.java new file mode 100644 index 0000000000..6e8fb8efe7 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateGpxParams.java @@ -0,0 +1,69 @@ +package net.osmand.aidl.navigation; + +import android.net.Uri; +import android.os.Parcel; +import android.os.Parcelable; + +public class NavigateGpxParams implements Parcelable { + + private String data; + private Uri uri; + private boolean force; + + public NavigateGpxParams(String data, boolean force) { + this.data = data; + this.force = force; + } + + public NavigateGpxParams(Uri uri, boolean force) { + this.uri = uri; + this.force = force; + } + + public NavigateGpxParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public NavigateGpxParams createFromParcel(Parcel in) { + return new NavigateGpxParams(in); + } + + @Override + public NavigateGpxParams[] newArray(int size) { + return new NavigateGpxParams[size]; + } + }; + + public String getData() { + return data; + } + + public Uri getUri() { + return uri; + } + + public boolean isForce() { + return force; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeString(data); + out.writeParcelable(uri, flags); + out.writeByte((byte) (force ? 1 : 0)); + } + + private void readFromParcel(Parcel in) { + data = in.readString(); + uri = in.readParcelable(Uri.class.getClassLoader()); + force = in.readByte() != 0; + } + + @Override + public int describeContents() { + return 0; + } + +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateParams.aidl new file mode 100644 index 0000000000..f9b51d7a8c --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.navigation; + +parcelable NavigateParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateParams.java b/OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateParams.java new file mode 100644 index 0000000000..8b0bdeb1eb --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/navigation/NavigateParams.java @@ -0,0 +1,104 @@ +package net.osmand.aidl.navigation; + +import android.os.Parcel; +import android.os.Parcelable; + +public class NavigateParams implements Parcelable { + + private String startName; + private double startLat; + private double startLon; + private String destName; + private double destLat; + private double destLon; + private String profile; + private boolean force; + + 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; + this.destName = destName; + this.destLat = destLat; + this.destLon = destLon; + this.profile = profile; + this.force = force; + } + + public NavigateParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public NavigateParams createFromParcel(Parcel in) { + return new NavigateParams(in); + } + + @Override + public NavigateParams[] newArray(int size) { + return new NavigateParams[size]; + } + }; + + public String getStartName() { + return startName; + } + + public double getStartLat() { + return startLat; + } + + public double getStartLon() { + return startLon; + } + + public String getDestName() { + return destName; + } + + public double getDestLat() { + return destLat; + } + + public double getDestLon() { + return destLon; + } + + public String getProfile() { + return profile; + } + + public boolean isForce() { + return force; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeString(startName); + out.writeDouble(startLat); + out.writeDouble(startLon); + out.writeString(destName); + out.writeDouble(destLat); + out.writeDouble(destLon); + out.writeString(profile); + out.writeByte((byte) (force ? 1 : 0)); + } + + private void readFromParcel(Parcel in) { + startName = in.readString(); + startLat = in.readDouble(); + startLon = in.readDouble(); + destName = in.readString(); + destLat = in.readDouble(); + destLon = in.readDouble(); + profile = in.readString(); + force = in.readByte() != 0; + } + + @Override + public int describeContents() { + return 0; + } + +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/note/StartAudioRecordingParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/note/StartAudioRecordingParams.aidl new file mode 100644 index 0000000000..bb16dea140 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/note/StartAudioRecordingParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.note; + +parcelable StartAudioRecordingParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/note/StartAudioRecordingParams.java b/OsmAnd-telegram/src/net/osmand/aidl/note/StartAudioRecordingParams.java new file mode 100644 index 0000000000..c2800feb9c --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/note/StartAudioRecordingParams.java @@ -0,0 +1,56 @@ +package net.osmand.aidl.note; + +import android.os.Parcel; +import android.os.Parcelable; + +public class StartAudioRecordingParams implements Parcelable { + + private double latitude; + private double longitude; + + public StartAudioRecordingParams(double latitude, double longitude) { + this.latitude = latitude; + this.longitude = longitude; + } + + public StartAudioRecordingParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public StartAudioRecordingParams createFromParcel(Parcel in) { + return new StartAudioRecordingParams(in); + } + + @Override + public StartAudioRecordingParams[] newArray(int size) { + return new StartAudioRecordingParams[size]; + } + }; + + public double getLatitude() { + return latitude; + } + + public double getLongitude() { + return longitude; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeDouble(latitude); + out.writeDouble(longitude); + } + + private void readFromParcel(Parcel in) { + latitude = in.readDouble(); + longitude = in.readDouble(); + } + + @Override + public int describeContents() { + return 0; + } + +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/note/StartVideoRecordingParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/note/StartVideoRecordingParams.aidl new file mode 100644 index 0000000000..082b68e09c --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/note/StartVideoRecordingParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.note; + +parcelable StartVideoRecordingParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/note/StartVideoRecordingParams.java b/OsmAnd-telegram/src/net/osmand/aidl/note/StartVideoRecordingParams.java new file mode 100644 index 0000000000..aee86ea9de --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/note/StartVideoRecordingParams.java @@ -0,0 +1,56 @@ +package net.osmand.aidl.note; + +import android.os.Parcel; +import android.os.Parcelable; + +public class StartVideoRecordingParams implements Parcelable { + + private double latitude; + private double longitude; + + public StartVideoRecordingParams(double latitude, double longitude) { + this.latitude = latitude; + this.longitude = longitude; + } + + public StartVideoRecordingParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public StartVideoRecordingParams createFromParcel(Parcel in) { + return new StartVideoRecordingParams(in); + } + + @Override + public StartVideoRecordingParams[] newArray(int size) { + return new StartVideoRecordingParams[size]; + } + }; + + public double getLatitude() { + return latitude; + } + + public double getLongitude() { + return longitude; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeDouble(latitude); + out.writeDouble(longitude); + } + + private void readFromParcel(Parcel in) { + latitude = in.readDouble(); + longitude = in.readDouble(); + } + + @Override + public int describeContents() { + return 0; + } + +} diff --git a/OsmAnd-telegram/src/net/osmand/aidl/note/StopRecordingParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/note/StopRecordingParams.aidl new file mode 100644 index 0000000000..4111efbcb6 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/note/StopRecordingParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.note; + +parcelable StopRecordingParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/note/StopRecordingParams.java b/OsmAnd-telegram/src/net/osmand/aidl/note/StopRecordingParams.java new file mode 100644 index 0000000000..b56a42504b --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/note/StopRecordingParams.java @@ -0,0 +1,42 @@ +package net.osmand.aidl.note; + +import android.os.Parcel; +import android.os.Parcelable; + +public class StopRecordingParams implements Parcelable { + + public StopRecordingParams() { + + } + + public StopRecordingParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public StopRecordingParams createFromParcel(Parcel in) { + return new StopRecordingParams(in); + } + + @Override + public StopRecordingParams[] newArray(int size) { + return new StopRecordingParams[size]; + } + }; + + @Override + public void writeToParcel(Parcel out, int flags) { + + } + + private void readFromParcel(Parcel in) { + + } + + @Override + public int describeContents() { + return 0; + } + +} \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/note/TakePhotoNoteParams.aidl b/OsmAnd-telegram/src/net/osmand/aidl/note/TakePhotoNoteParams.aidl new file mode 100644 index 0000000000..3c09d62c41 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/note/TakePhotoNoteParams.aidl @@ -0,0 +1,3 @@ +package net.osmand.aidl.note; + +parcelable TakePhotoNoteParams; \ No newline at end of file diff --git a/OsmAnd-telegram/src/net/osmand/aidl/note/TakePhotoNoteParams.java b/OsmAnd-telegram/src/net/osmand/aidl/note/TakePhotoNoteParams.java new file mode 100644 index 0000000000..254516e080 --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/aidl/note/TakePhotoNoteParams.java @@ -0,0 +1,56 @@ +package net.osmand.aidl.note; + +import android.os.Parcel; +import android.os.Parcelable; + +public class TakePhotoNoteParams implements Parcelable { + + private double latitude; + private double longitude; + + public TakePhotoNoteParams(double latitude, double longitude) { + this.latitude = latitude; + this.longitude = longitude; + } + + public TakePhotoNoteParams(Parcel in) { + readFromParcel(in); + } + + public static final Creator CREATOR = new Creator() { + @Override + public TakePhotoNoteParams createFromParcel(Parcel in) { + return new TakePhotoNoteParams(in); + } + + @Override + public TakePhotoNoteParams[] newArray(int size) { + return new TakePhotoNoteParams[size]; + } + }; + + public double getLatitude() { + return latitude; + } + + public double getLongitude() { + return longitude; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeDouble(latitude); + out.writeDouble(longitude); + } + + private void readFromParcel(Parcel in) { + latitude = in.readDouble(); + longitude = in.readDouble(); + } + + @Override + public int describeContents() { + return 0; + } + +} diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/LocationService.kt b/OsmAnd-telegram/src/net/osmand/telegram/LocationService.kt similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/LocationService.kt rename to OsmAnd-telegram/src/net/osmand/telegram/LocationService.kt diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/LoginDialogFragment.kt b/OsmAnd-telegram/src/net/osmand/telegram/LoginDialogFragment.kt similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/LoginDialogFragment.kt rename to OsmAnd-telegram/src/net/osmand/telegram/LoginDialogFragment.kt diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/MainActivity.kt b/OsmAnd-telegram/src/net/osmand/telegram/MainActivity.kt similarity index 86% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/MainActivity.kt rename to OsmAnd-telegram/src/net/osmand/telegram/MainActivity.kt index b1795fecd1..ede5a2edb5 100644 --- a/OsmAnd-telegram/src/main/java/net/osmand/telegram/MainActivity.kt +++ b/OsmAnd-telegram/src/net/osmand/telegram/MainActivity.kt @@ -1,9 +1,14 @@ package net.osmand.telegram import android.Manifest +import android.app.Dialog +import android.content.Intent import android.content.pm.PackageManager +import android.net.Uri import android.os.Bundle import android.support.v4.app.ActivityCompat +import android.support.v4.app.DialogFragment +import android.support.v7.app.AlertDialog import android.support.v7.app.AppCompatActivity import android.support.v7.widget.* import android.view.* @@ -85,8 +90,10 @@ class MainActivity : AppCompatActivity(), TelegramListener { invalidateOptionsMenu() updateTitle() - if (settings.hasAnyChatToShareLocation() && AndroidUtils.isLocationPermissionAvailable(this)) { + if (settings.hasAnyChatToShareLocation() && !AndroidUtils.isLocationPermissionAvailable(this)) { requestLocationPermission() + } else if (settings.hasAnyChatToShowOnMap() && !app.osmandHelper.isOsmandBound()) { + showOsmandMissingDialog() } } @@ -273,24 +280,44 @@ class MainActivity : AppCompatActivity(), TelegramListener { } private fun requestLocationPermission() { - if (!AndroidUtils.isLocationPermissionAvailable(this)) { - ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), PERMISSION_REQUEST_LOCATION) - } + ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), PERMISSION_REQUEST_LOCATION) } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) - if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { - when (requestCode) { - PERMISSION_REQUEST_LOCATION -> { + when (requestCode) { + PERMISSION_REQUEST_LOCATION -> { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (settings.hasAnyChatToShareLocation()) { app.shareLocationHelper.startSharingLocation() } } + if (settings.hasAnyChatToShowOnMap() && app.osmandHelper.isOsmandBound()) { + showOsmandMissingDialog() + } } } } + fun showOsmandMissingDialog() { + OsmandMissingDialogFragment().show(supportFragmentManager, null) + } + + class OsmandMissingDialogFragment : DialogFragment() { + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val builder = AlertDialog.Builder(requireContext()) + builder.setView(R.layout.install_osmand_dialog) + .setNegativeButton("Cancel", null) + .setPositiveButton("Install", { _, _ -> + val intent = Intent() + intent.data = Uri.parse("market://details?id=net.osmand.plus") + startActivity(intent) + }) + return builder.create() + } + } + inner class ChatsAdapter : RecyclerView.Adapter() { @@ -322,7 +349,9 @@ class MainActivity : AppCompatActivity(), TelegramListener { settings.shareLocationToChat(chatTitle, isChecked) if (settings.hasAnyChatToShareLocation()) { if (!AndroidUtils.isLocationPermissionAvailable(view.context)) { - requestLocationPermission() + if (isChecked) { + requestLocationPermission() + } } else { app.shareLocationHelper.startSharingLocation() } @@ -336,7 +365,13 @@ class MainActivity : AppCompatActivity(), TelegramListener { holder.showOnMapSwitch?.setOnCheckedChangeListener { view, isChecked -> settings.showChatOnMap(chatTitle, isChecked) if (settings.hasAnyChatToShowOnMap()) { - //app.shareLocationHelper.startSharingLocation() + if (!app.osmandHelper.isOsmandBound()) { + if (isChecked) { + showOsmandMissingDialog() + } + } else { + //app.shareLocationHelper.startSharingLocation() + } } else { //app.shareLocationHelper.stopSharingLocation() } diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/TelegramApplication.kt b/OsmAnd-telegram/src/net/osmand/telegram/TelegramApplication.kt similarity index 94% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/TelegramApplication.kt rename to OsmAnd-telegram/src/net/osmand/telegram/TelegramApplication.kt index 892a8817df..affb055ff1 100644 --- a/OsmAnd-telegram/src/main/java/net/osmand/telegram/TelegramApplication.kt +++ b/OsmAnd-telegram/src/net/osmand/telegram/TelegramApplication.kt @@ -7,6 +7,7 @@ import android.net.ConnectivityManager import android.net.NetworkInfo import android.os.Build import android.os.Handler +import net.osmand.telegram.helpers.OsmandAidlHelper import net.osmand.telegram.helpers.ShareLocationHelper import net.osmand.telegram.helpers.TelegramHelper import net.osmand.telegram.notifications.NotificationHelper @@ -18,6 +19,7 @@ class TelegramApplication : Application() { lateinit var settings: TelegramSettings private set lateinit var shareLocationHelper: ShareLocationHelper private set lateinit var notificationHelper: NotificationHelper private set + lateinit var osmandHelper: OsmandAidlHelper private set var locationService: LocationService? = null @@ -33,6 +35,7 @@ class TelegramApplication : Application() { settings = TelegramSettings(this) shareLocationHelper = ShareLocationHelper(this) notificationHelper = NotificationHelper(this) + osmandHelper = OsmandAidlHelper(this) if (settings.hasAnyChatToShareLocation() && AndroidUtils.isLocationPermissionAvailable(this)) { shareLocationHelper.startSharingLocation() @@ -42,6 +45,7 @@ class TelegramApplication : Application() { override fun onTerminate() { super.onTerminate() // TODO close telegram api in appropriate place + osmandHelper.cleanupResources() telegramHelper.close() } diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/TelegramSettings.kt b/OsmAnd-telegram/src/net/osmand/telegram/TelegramSettings.kt similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/TelegramSettings.kt rename to OsmAnd-telegram/src/net/osmand/telegram/TelegramSettings.kt diff --git a/OsmAnd-telegram/src/net/osmand/telegram/helpers/OsmandAidlHelper.kt b/OsmAnd-telegram/src/net/osmand/telegram/helpers/OsmandAidlHelper.kt new file mode 100644 index 0000000000..ba37d519be --- /dev/null +++ b/OsmAnd-telegram/src/net/osmand/telegram/helpers/OsmandAidlHelper.kt @@ -0,0 +1,815 @@ +package net.osmand.telegram.helpers + +import android.app.Application +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.ServiceConnection +import android.net.Uri +import android.os.IBinder +import android.os.RemoteException +import android.widget.Toast +import net.osmand.aidl.IOsmAndAidlInterface +import net.osmand.aidl.favorite.AFavorite +import net.osmand.aidl.favorite.AddFavoriteParams +import net.osmand.aidl.favorite.RemoveFavoriteParams +import net.osmand.aidl.favorite.UpdateFavoriteParams +import net.osmand.aidl.favorite.group.AFavoriteGroup +import net.osmand.aidl.favorite.group.AddFavoriteGroupParams +import net.osmand.aidl.favorite.group.RemoveFavoriteGroupParams +import net.osmand.aidl.favorite.group.UpdateFavoriteGroupParams +import net.osmand.aidl.gpx.* +import net.osmand.aidl.map.ALatLon +import net.osmand.aidl.map.SetMapLocationParams +import net.osmand.aidl.maplayer.AMapLayer +import net.osmand.aidl.maplayer.AddMapLayerParams +import net.osmand.aidl.maplayer.RemoveMapLayerParams +import net.osmand.aidl.maplayer.UpdateMapLayerParams +import net.osmand.aidl.maplayer.point.AMapPoint +import net.osmand.aidl.maplayer.point.AddMapPointParams +import net.osmand.aidl.maplayer.point.RemoveMapPointParams +import net.osmand.aidl.maplayer.point.UpdateMapPointParams +import net.osmand.aidl.mapmarker.AMapMarker +import net.osmand.aidl.mapmarker.AddMapMarkerParams +import net.osmand.aidl.mapmarker.RemoveMapMarkerParams +import net.osmand.aidl.mapmarker.UpdateMapMarkerParams +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.navigation.NavigateGpxParams +import net.osmand.aidl.navigation.NavigateParams +import net.osmand.aidl.note.StartAudioRecordingParams +import net.osmand.aidl.note.StartVideoRecordingParams +import net.osmand.aidl.note.StopRecordingParams +import net.osmand.aidl.note.TakePhotoNoteParams +import java.io.File +import java.util.* + +class OsmandAidlHelper(private val app: Application) { + + companion object { + private const val OSMAND_FREE_PACKAGE_NAME = "net.osmand" + private const val OSMAND_PLUS_PACKAGE_NAME = "net.osmand.plus" + private var OSMAND_PACKAGE_NAME = OSMAND_PLUS_PACKAGE_NAME + } + + private var mIOsmAndAidlInterface: IOsmAndAidlInterface? = null + + /** + * Class for interacting with the main interface of the service. + */ + private val mConnection = object : ServiceConnection { + override fun onServiceConnected(className: ComponentName, + service: IBinder) { + // This is called when the connection with the service has been + // established, giving us the service object we can use to + // interact with the service. We are communicating with our + // service through an IDL interface, so get a client-side + // representation of that from the raw service object. + mIOsmAndAidlInterface = IOsmAndAidlInterface.Stub.asInterface(service) + Toast.makeText(app, "OsmAnd service connected", Toast.LENGTH_SHORT).show() + } + + override fun onServiceDisconnected(className: ComponentName) { + // This is called when the connection with the service has been + // unexpectedly disconnected -- that is, its process crashed. + mIOsmAndAidlInterface = null + Toast.makeText(app, "OsmAnd service disconnected", Toast.LENGTH_SHORT).show() + } + } + + fun isOsmandBound(): Boolean { + return mIOsmAndAidlInterface != null + } + + /** + * Get list of active GPX files. + * + * @return list of active gpx files. + */ + val activeGpxFiles: List? + get() { + if (mIOsmAndAidlInterface != null) { + try { + val res = ArrayList() + if (mIOsmAndAidlInterface!!.getActiveGpx(res)) { + return res + } + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return null + } + + init { + when { + bindService(OSMAND_PLUS_PACKAGE_NAME) -> OSMAND_PACKAGE_NAME = OSMAND_PLUS_PACKAGE_NAME + bindService(OSMAND_FREE_PACKAGE_NAME) -> OSMAND_PACKAGE_NAME = OSMAND_FREE_PACKAGE_NAME + else -> { + Toast.makeText(app, "OsmAnd service NOT bind", Toast.LENGTH_SHORT).show() + } + } + } + + private fun bindService(packageName: String): Boolean { + return if (mIOsmAndAidlInterface == null) { + val intent = Intent("net.osmand.aidl.OsmandAidlService") + intent.`package` = packageName + val res = app.bindService(intent, mConnection, Context.BIND_AUTO_CREATE) + if (res) { + Toast.makeText(app, "OsmAnd service bind", Toast.LENGTH_SHORT).show() + true + } else { + false + } + } else { + true + } + } + + fun cleanupResources() { + if (mIOsmAndAidlInterface != null) { + app.unbindService(mConnection) + } + } + + fun refreshMap(): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.refreshMap() + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Add favorite group with given params. + * + * @param name - group name. + * @param color - group color. Can be one of: "red", "orange", "yellow", + * "lightgreen", "green", "lightblue", "blue", "purple", "pink", "brown". + * @param visible - group visibility. + */ + fun addFavoriteGroup(name: String, color: String, visible: Boolean): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val favoriteGroup = AFavoriteGroup(name, color, visible) + return mIOsmAndAidlInterface!!.addFavoriteGroup(AddFavoriteGroupParams(favoriteGroup)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Update favorite group with given params. + * + * @param namePrev - group name (current). + * @param colorPrev - group color (current). + * @param visiblePrev - group visibility (current). + * @param nameNew - group name (new). + * @param colorNew - group color (new). + * @param visibleNew - group visibility (new). + */ + fun updateFavoriteGroup(namePrev: String, colorPrev: String, visiblePrev: Boolean, + nameNew: String, colorNew: String, visibleNew: Boolean): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val favoriteGroupPrev = AFavoriteGroup(namePrev, colorPrev, visiblePrev) + val favoriteGroupNew = AFavoriteGroup(nameNew, colorNew, visibleNew) + return mIOsmAndAidlInterface!!.updateFavoriteGroup(UpdateFavoriteGroupParams(favoriteGroupPrev, favoriteGroupNew)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Remove favorite group with given name. + * + * @param name - name of favorite group. + */ + fun removeFavoriteGroup(name: String): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val favoriteGroup = AFavoriteGroup(name, "", false) + return mIOsmAndAidlInterface!!.removeFavoriteGroup(RemoveFavoriteGroupParams(favoriteGroup)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Add favorite at given location with given params. + * + * @param lat - latitude. + * @param lon - longitude. + * @param name - name of favorite item. + * @param description - description of favorite item. + * @param category - category of favorite item. + * @param color - color of favorite item. Can be one of: "red", "orange", "yellow", + * "lightgreen", "green", "lightblue", "blue", "purple", "pink", "brown". + * @param visible - should favorite item be visible after creation. + */ + fun addFavorite(lat: Double, lon: Double, name: String, description: String, + category: String, color: String, visible: Boolean): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val favorite = AFavorite(lat, lon, name, description, category, color, visible) + return mIOsmAndAidlInterface!!.addFavorite(AddFavoriteParams(favorite)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Update favorite at given location with given params. + * + * @param latPrev - latitude (current favorite). + * @param lonPrev - longitude (current favorite). + * @param namePrev - name of favorite item (current favorite). + * @param categoryPrev - category of favorite item (current favorite). + * @param latNew - latitude (new favorite). + * @param lonNew - longitude (new favorite). + * @param nameNew - name of favorite item (new favorite). + * @param descriptionNew - description of favorite item (new favorite). + * @param categoryNew - category of favorite item (new favorite). Use only to create a new category, + * not to update an existing one. If you want to update an existing category, + * use the [.updateFavoriteGroup] method. + * @param colorNew - color of new category. Can be one of: "red", "orange", "yellow", + * "lightgreen", "green", "lightblue", "blue", "purple", "pink", "brown". + * @param visibleNew - should new category be visible after creation. + */ + fun updateFavorite(latPrev: Double, lonPrev: Double, namePrev: String, categoryPrev: String, + latNew: Double, lonNew: Double, nameNew: String, descriptionNew: String, + categoryNew: String, colorNew: String, visibleNew: Boolean): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val favoritePrev = AFavorite(latPrev, lonPrev, namePrev, "", categoryPrev, "", false) + val favoriteNew = AFavorite(latNew, lonNew, nameNew, descriptionNew, categoryNew, colorNew, visibleNew) + return mIOsmAndAidlInterface!!.updateFavorite(UpdateFavoriteParams(favoritePrev, favoriteNew)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Remove favorite at given location with given params. + * + * @param lat - latitude. + * @param lon - longitude. + * @param name - name of favorite item. + * @param category - category of favorite item. + */ + fun removeFavorite(lat: Double, lon: Double, name: String, category: String): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val favorite = AFavorite(lat, lon, name, "", category, "", false) + return mIOsmAndAidlInterface!!.removeFavorite(RemoveFavoriteParams(favorite)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Add map marker at given location. + * + * @param lat - latitude. + * @param lon - longitude. + * @param name - name. + */ + fun addMapMarker(lat: Double, lon: Double, name: String): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val marker = AMapMarker(ALatLon(lat, lon), name) + return mIOsmAndAidlInterface!!.addMapMarker(AddMapMarkerParams(marker)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Update map marker at given location with name. + * + * @param latPrev - latitude (current marker). + * @param lonPrev - longitude (current marker). + * @param namePrev - name (current marker). + * @param latNew - latitude (new marker). + * @param lonNew - longitude (new marker). + * @param nameNew - name (new marker). + */ + fun updateMapMarker(latPrev: Double, lonPrev: Double, namePrev: String, + latNew: Double, lonNew: Double, nameNew: String): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val markerPrev = AMapMarker(ALatLon(latPrev, lonPrev), namePrev) + val markerNew = AMapMarker(ALatLon(latNew, lonNew), nameNew) + return mIOsmAndAidlInterface!!.updateMapMarker(UpdateMapMarkerParams(markerPrev, markerNew)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Remove map marker at given location with name. + * + * @param lat - latitude. + * @param lon - longitude. + * @param name - name. + */ + fun removeMapMarker(lat: Double, lon: Double, name: String): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val marker = AMapMarker(ALatLon(lat, lon), name) + return mIOsmAndAidlInterface!!.removeMapMarker(RemoveMapMarkerParams(marker)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Add map widget to the right side of the main screen. + * Note: any specified icon should exist in OsmAnd app resources. + * + * @param id - widget id. + * @param menuIconName - icon name (configure map menu). + * @param menuTitle - widget name (configure map menu). + * @param lightIconName - icon name for the light theme (widget). + * @param darkIconName - icon name for the dark theme (widget). + * @param text - main widget text. + * @param description - sub text, like "km/h". + * @param order - order position in the widgets list. + * @param intentOnClick - onClick intent. Called after click on widget as startActivity(Intent intent). + */ + fun addMapWidget(id: String, menuIconName: String, menuTitle: String, + lightIconName: String, darkIconName: String, text: String, description: String, + order: Int, intentOnClick: Intent): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val widget = AMapWidget(id, menuIconName, menuTitle, lightIconName, + darkIconName, text, description, order, intentOnClick) + return mIOsmAndAidlInterface!!.addMapWidget(AddMapWidgetParams(widget)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Update map widget. + * Note: any specified icon should exist in OsmAnd app resources. + * + * @param id - widget id. + * @param menuIconName - icon name (configure map menu). + * @param menuTitle - widget name (configure map menu). + * @param lightIconName - icon name for the light theme (widget). + * @param darkIconName - icon name for the dark theme (widget). + * @param text - main widget text. + * @param description - sub text, like "km/h". + * @param order - order position in the widgets list. + * @param intentOnClick - onClick intent. Called after click on widget as startActivity(Intent intent). + */ + fun updateMapWidget(id: String, menuIconName: String, menuTitle: String, + lightIconName: String, darkIconName: String, text: String, description: String, + order: Int, intentOnClick: Intent): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val widget = AMapWidget(id, menuIconName, menuTitle, lightIconName, + darkIconName, text, description, order, intentOnClick) + return mIOsmAndAidlInterface!!.updateMapWidget(UpdateMapWidgetParams(widget)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Remove map widget. + * + * @param id - widget id. + */ + fun removeMapWidget(id: String): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.removeMapWidget(RemoveMapWidgetParams(id)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Add user layer on the map. + * + * @param id - layer id. + * @param name - layer name. + * @param zOrder - z-order position of layer. Default value is 5.5f + * @param points - initial list of points. Nullable. + */ + fun addMapLayer(id: String, name: String, zOrder: Float, points: List): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val layer = AMapLayer(id, name, zOrder, points) + return mIOsmAndAidlInterface!!.addMapLayer(AddMapLayerParams(layer)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Update user layer. + * + * @param id - layer id. + * @param name - layer name. + * @param zOrder - z-order position of layer. Default value is 5.5f + * @param points - list of points. Nullable. + */ + fun updateMapLayer(id: String, name: String, zOrder: Float, points: List): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val layer = AMapLayer(id, name, zOrder, points) + return mIOsmAndAidlInterface!!.updateMapLayer(UpdateMapLayerParams(layer)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Remove user layer. + * + * @param id - layer id. + */ + fun removeMapLayer(id: String): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.removeMapLayer(RemoveMapLayerParams(id)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Add point to user layer. + * + * @param layerId - layer id. Note: layer should be added first. + * @param pointId - point id. + * @param shortName - short name (single char). Displayed on the map. + * @param fullName - full name. Displayed in the context menu on first row. + * @param typeName - type name. Displayed in context menu on second row. + * @param color - color of circle's background. + * @param location - location of the point. + * @param details - list of details. Displayed under context menu. + */ + fun addMapPoint(layerId: String, pointId: String, shortName: String, fullName: String, + typeName: String, color: Int, location: ALatLon, details: List): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val point = AMapPoint(pointId, shortName, fullName, typeName, color, location, details) + return mIOsmAndAidlInterface!!.addMapPoint(AddMapPointParams(layerId, point)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Update point. + * + * @param layerId - layer id. + * @param pointId - point id. + * @param shortName - short name (single char). Displayed on the map. + * @param fullName - full name. Displayed in the context menu on first row. + * @param typeName - type name. Displayed in context menu on second row. + * @param color - color of circle's background. + * @param location - location of the point. + * @param details - list of details. Displayed under context menu. + */ + fun updateMapPoint(layerId: String, pointId: String, shortName: String, fullName: String, + typeName: String, color: Int, location: ALatLon, details: List): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + val point = AMapPoint(pointId, shortName, fullName, typeName, color, location, details) + return mIOsmAndAidlInterface!!.updateMapPoint(UpdateMapPointParams(layerId, point)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Remove point. + * + * @param layerId - layer id. + * @param pointId - point id. + */ + fun removeMapPoint(layerId: String, pointId: String): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.removeMapPoint(RemoveMapPointParams(layerId, pointId)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Import GPX file to OsmAnd. + * OsmAnd must have rights to access location. Not recommended. + * + * @param file - File which represents GPX track. + * @param fileName - Destination file name. May contain dirs. + * @param color - color of gpx. Can be one of: "red", "orange", "lightblue", "blue", "purple", + * "translucent_red", "translucent_orange", "translucent_lightblue", + * "translucent_blue", "translucent_purple" + * @param show - show track on the map after import + */ + fun importGpxFromFile(file: File, fileName: String, color: String, show: Boolean): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.importGpx(ImportGpxParams(file, fileName, color, show)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Import GPX file to OsmAnd. + * + * @param gpxUri - URI created by FileProvider. + * @param fileName - Destination file name. May contain dirs. + * @param color - color of gpx. Can be one of: "", "red", "orange", "lightblue", "blue", "purple", + * "translucent_red", "translucent_orange", "translucent_lightblue", + * "translucent_blue", "translucent_purple" + * @param show - show track on the map after import + */ + fun importGpxFromUri(gpxUri: Uri, fileName: String, color: String, show: Boolean): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + app.grantUriPermission(OSMAND_PACKAGE_NAME, gpxUri, Intent.FLAG_GRANT_READ_URI_PERMISSION) + return mIOsmAndAidlInterface!!.importGpx(ImportGpxParams(gpxUri, fileName, color, show)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + fun navigateGpxFromUri(gpxUri: Uri, force: Boolean): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + app.grantUriPermission(OSMAND_PACKAGE_NAME, gpxUri, Intent.FLAG_GRANT_READ_URI_PERMISSION) + return mIOsmAndAidlInterface!!.navigateGpx(NavigateGpxParams(gpxUri, force)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Import GPX file to OsmAnd. + * + * @param data - Raw contents of GPX file. Sent as intent's extra string parameter. + * @param fileName - Destination file name. May contain dirs. + * @param color - color of gpx. Can be one of: "red", "orange", "lightblue", "blue", "purple", + * "translucent_red", "translucent_orange", "translucent_lightblue", + * "translucent_blue", "translucent_purple" + * @param show - show track on the map after import + */ + fun importGpxFromData(data: String, fileName: String, color: String, show: Boolean): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.importGpx(ImportGpxParams(data, fileName, color, show)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + fun navigateGpxFromData(data: String, force: Boolean): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.navigateGpx(NavigateGpxParams(data, force)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Show GPX file on map. + * + * @param fileName - file name to show. Must be imported first. + */ + fun showGpx(fileName: String): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.showGpx(ShowGpxParams(fileName)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Hide GPX file. + * + * @param fileName - file name to hide. + */ + fun hideGpx(fileName: String): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.hideGpx(HideGpxParams(fileName)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Remove GPX file. + * + * @param fileName - file name to remove; + */ + fun removeGpx(fileName: String): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.removeGpx(RemoveGpxParams(fileName)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + /** + * Get list of active GPX files. + * + * @param latitude - latitude of new map center. + * @param longitude - longitude of new map center. + * @param zoom - map zoom level. Set 0 to keep zoom unchanged. + * @param animated - set true to animate changes. + */ + fun setMapLocation(latitude: Double, longitude: Double, zoom: Int, animated: Boolean): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.setMapLocation( + SetMapLocationParams(latitude, longitude, zoom, animated)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + fun startGpxRecording(params: StartGpxRecordingParams): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.startGpxRecording(params) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + fun stopGpxRecording(params: StopGpxRecordingParams): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.stopGpxRecording(params) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + fun takePhotoNote(lat: Double, lon: Double): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.takePhotoNote(TakePhotoNoteParams(lat, lon)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + fun startVideoRecording(lat: Double, lon: Double): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.startVideoRecording(StartVideoRecordingParams(lat, lon)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + fun startAudioRecording(lat: Double, lon: Double): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.startAudioRecording(StartAudioRecordingParams(lat, lon)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + fun stopRecording(): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.stopRecording(StopRecordingParams()) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } + + fun navigate(startName: String, startLat: Double, startLon: Double, destName: String, destLat: Double, destLon: Double, profile: String, force: Boolean): Boolean { + if (mIOsmAndAidlInterface != null) { + try { + return mIOsmAndAidlInterface!!.navigate(NavigateParams(startName, startLat, startLon, destName, destLat, destLon, profile, force)) + } catch (e: RemoteException) { + e.printStackTrace() + } + + } + return false + } +} diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/helpers/ShareLocationHelper.kt b/OsmAnd-telegram/src/net/osmand/telegram/helpers/ShareLocationHelper.kt similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/helpers/ShareLocationHelper.kt rename to OsmAnd-telegram/src/net/osmand/telegram/helpers/ShareLocationHelper.kt diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/helpers/TelegramHelper.kt b/OsmAnd-telegram/src/net/osmand/telegram/helpers/TelegramHelper.kt similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/helpers/TelegramHelper.kt rename to OsmAnd-telegram/src/net/osmand/telegram/helpers/TelegramHelper.kt diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/notifications/NotificationDismissReceiver.kt b/OsmAnd-telegram/src/net/osmand/telegram/notifications/NotificationDismissReceiver.kt similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/notifications/NotificationDismissReceiver.kt rename to OsmAnd-telegram/src/net/osmand/telegram/notifications/NotificationDismissReceiver.kt diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/notifications/NotificationHelper.kt b/OsmAnd-telegram/src/net/osmand/telegram/notifications/NotificationHelper.kt similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/notifications/NotificationHelper.kt rename to OsmAnd-telegram/src/net/osmand/telegram/notifications/NotificationHelper.kt diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/notifications/ShareLocationNotification.kt b/OsmAnd-telegram/src/net/osmand/telegram/notifications/ShareLocationNotification.kt similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/notifications/ShareLocationNotification.kt rename to OsmAnd-telegram/src/net/osmand/telegram/notifications/ShareLocationNotification.kt diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/notifications/TelegramNotification.kt b/OsmAnd-telegram/src/net/osmand/telegram/notifications/TelegramNotification.kt similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/notifications/TelegramNotification.kt rename to OsmAnd-telegram/src/net/osmand/telegram/notifications/TelegramNotification.kt diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/utils/AndroidUtils.kt b/OsmAnd-telegram/src/net/osmand/telegram/utils/AndroidUtils.kt similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/utils/AndroidUtils.kt rename to OsmAnd-telegram/src/net/osmand/telegram/utils/AndroidUtils.kt diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/utils/CancellableAsyncTask.kt b/OsmAnd-telegram/src/net/osmand/telegram/utils/CancellableAsyncTask.kt similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/utils/CancellableAsyncTask.kt rename to OsmAnd-telegram/src/net/osmand/telegram/utils/CancellableAsyncTask.kt diff --git a/OsmAnd-telegram/src/main/java/net/osmand/telegram/utils/OsmandFormatter.java b/OsmAnd-telegram/src/net/osmand/telegram/utils/OsmandFormatter.java similarity index 100% rename from OsmAnd-telegram/src/main/java/net/osmand/telegram/utils/OsmandFormatter.java rename to OsmAnd-telegram/src/net/osmand/telegram/utils/OsmandFormatter.java diff --git a/OsmAnd-telegram/src/test/java/net/osmand/telegramtest/ExampleUnitTest.kt b/OsmAnd-telegram/src/test/java/net/osmand/telegramtest/ExampleUnitTest.kt deleted file mode 100644 index 56a994f902..0000000000 --- a/OsmAnd-telegram/src/test/java/net/osmand/telegramtest/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package net.osmand.telegram - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml index 4d07852ba7..43c0151e5a 100644 --- a/OsmAnd/res/values-be/strings.xml +++ b/OsmAnd/res/values-be/strings.xml @@ -878,18 +878,18 @@ У напрамку компаса У напрамку руху Не варочаць (поўнач заўсёды ўверсе) - Абраць раўнаваньне мапы на экране. + Абраць раўнаваньне мапы. Арыентацыя мапы Падрабязнасьці маршруту - Выбраныя паспяхова імпартаваны - GPX файл з улюбёнымі ня знойдзены ў {0} - Улюбёныя пасьпяхова захаваны ў {0} + Улюблёныя імпартаваныя + GPX-файл з улюбёнымі ня знойдзены ў {0} + Улюбёныя захаваныя ў {0} Няма любімых месцаў для захоўваньня - Памылка пры загрузцы GPX + Не атрымалася загрузіць GPX Даслаць справаздачу Не атрымалася знайсці спампованых мап на картцы памяці. - Увядзіце запыт для пошуку POI + Надрукуйце для пошуку POI Усе Дзякуй Яндэксу за дарожную інфармацыю. @@ -903,7 +903,7 @@ Пошук POI Выкарыстоўвайце трэкбол для перамяшчэння мапы. Выкарыстоўвайце трэкбол - Задаць максімальны час чакання для кожнага фонавага вызначэння становішча. + Задае максімальна дазволены час чакання для кожнага фонавага вызначэння становішча. Максімальны час чаканьня вызначэньня каардынат Дзе я? @@ -914,9 +914,9 @@ хв. Абярыце інтэрвал абуджэння для фонавага рэжыму. Інтэрвал абуджэньня GPS - Абярыце крыніцу каардынат для выкарыстання фонавым сэрвісам. + Абяраць крыніцу месцазнаходжання для выкарыстання фонавым сэрвісам. Крыніца каардынат - Запускае OsmAnd ў фонавым рэжыме для адсочвання становішча пры выключаным экране. + Адсочвае ваша становішча пры адключаным экране. Запусьціць OsmAnd у фоне Фонаваму сэрвісу неабходная інфармацыя пра месцазнаходжаньне. Схаваць фільтр @@ -930,7 +930,8 @@ Непадтрымліваемая версія галасавых дадзеных Абраныя галасавыя дадзеныя пашкоджаны Абраныя галасавыя дадзеныя не даступныя - SD-карта не даступная.\nВы не зможаце бачыць мапу або штосьці знайсці. + Картка памяці не даступная. +\nВы не зможаце бачыць мапу або штосьці знайсці. Картка памяці толькі для чытання. \nЗараз можна ўбачыць толькі загружаную мапу, а не загружаць новуя вобласці. Файл распакоўваецца… @@ -944,7 +945,7 @@ Рухайцеся Далей Сьцягнуць рэгіёны - Пошук сігналу… + Чаканне сігналу… Шукаць побач з цяперашнім цэнтрам мапы Шукаць паблізу Па змаўчаньні @@ -952,7 +953,7 @@ Гарызантальная Арыентацыя экрану Вертыкальная, гарызантальная, ці як прылада. - Фармат гадзін працы не падтрымліваецца для рэдагаваньня + Фармат гадзін працы не можа быць зменены Дадаць новае правіла Маршруты Прыпынак @@ -969,13 +970,13 @@ Паказаць прыпынкі грамадзкага транспарту на мапе. Паказваць прыпынкі транспарту Навігацыйнае дастасаваньне OsmAnd - Дадзеныя POI былі пасьпяхова абноўленыя ({0} аб\'ектаў загружана) - Памылка падчас абнаўленьня лякальнага сьпісу POI - Памылка пры загрузцы дадзеных з сервера + Дадзеныя POI былі абноўленыя ({0} аб\'ектаў загружана) + Не атрымалася абнавіць лакальны POI-спіс + Не атрымалася загрузіць даных з сервера Для гэтай мясцовасьці адсутнічаюць лякальныя дадзеныя пра POI - Абнаўленьне POI не даступна для малых узроўняў маштабаваньня + Павелічэнне маштабу дазваляе вам абнавіць POI Абнавіць POI - Абнавіць лякальныя дадзеныя праз Інтэрнэт? + Абнавіць лякальныя даныя з Інтэрнэту? Горад: {0} Вуліца: {0}, {1} Скрыжаваньне: {0} х {1} праз {2} @@ -991,18 +992,18 @@ Пазасеціўны пошук Сеціўны пошук Максімальнае павелічэньне онлайн мапаў - Выберыце максімальны ўзровень павелічэння для сцягвання фрагментаў мапы з Інтэрнэту. + Не праглядаць онлайн фрагменты мапы для узроўняў маштабавання за межамі гэтага. Агульная адлегласьць %1$s, час у дарозе %2$d г. %3$d хв. Абраць сеціўны ці пазасеціўны сэрвіс навігацыі. Сэрвіс навігацыі - Каталёг на SD-карце недаступны для захоўваньня! + Каталог на карце памяці недаступны для захоўваньня! Сьцягнуць {0} - {1} ? - Лакальная мапа для {0} ужо існуе ({1}). Хочаце яе абнавіць ({2})? + Лакальная мапа для {0} ужо існуе ({1}). Абнавіць ({2})? Адрас Сьцягваецца сьпіс даступных рэгіёнаў… - Сьпіс даступных рэгіёнаў ня быў зладаваны з osmand.net. + Не ўдалося атрымаць спіс рэгіёнаў з https://osmand.net. Улюбёны пункт быў зьменены Няма ўпадабаных месцаў @@ -1027,17 +1028,17 @@ POI Не атрымалася захаваць GPX-файл - Памылка разьліку маршруту - Памылка падчас разьліку маршруту - Памылка: Разлічаны маршрут пусты + Не ўдалося разлічыць маршрут + Не ўдалося разлічыць маршрут + Разлічаны маршрут пусты Новы шлях разьлічаны, адлегласьць Вы прыбылі ў пункт прызначэньня - Каардынаты несапраўдныя! + Несапраўдныя каардынаты Вярнуцца да мапы OsmAnd Дадзеныя загружаюцца… Чытаньне лякальных зьвестак… Папярэдні старт OsmAnd скончыўся аварыйна. Хроніка запісаная ў файл {0}. Калі ласка, паведаміце пра праблему й прычапіце файл хронікі. - Захаваньне GPX-сьлядоў на SD… + Захаванне GPX-файла… Скончана @@ -1064,8 +1065,8 @@ Выбар паміж мясцовымі і ангельскімі назвамі. - Ангельскія назвы на мапе - Налады дастасаваньня + Выкарыстоўваць ангельскія назвы + Налады дастасавання Пошук адраса Абраць будынак Абраць вуліцу @@ -1083,8 +1084,8 @@ Паказаць ваша становішча - Паказаць GPS каардынаты на мапе - Выкарыстоўваць Інтэрнэт, каб сьцягваць фрагмэнты мапы, што адсутнічаюць + Паказаць GPS-каардынаты на мапе + Сцягнуць адсутныя фрагменты мапы Навігацыйнае дастасаваньне @@ -1098,9 +1099,9 @@ Выбраць рэгіён са сьпісу Абраць скрыжаваньне Бліжэйшыя паслугі - Аўтамабіль - Ровар - Пешаход + Ваджэнне + Язда на ровары + Хада У цэнтры Зьнізу Увядзіце шырату й даўгату ў абраным фармаце (D - градусы, M - хвіліны, S - сэкунды) @@ -1124,11 +1125,11 @@ Стварыць POI Калі ласка, увядзіце імя ўлюбёнага Улюбёнае - Улюбёнае месца \'\'{0}\'\' было дададзенае. + Улюбёная кропка «{0}» дададзеная. Рэдагаваньне ўлюбёнага Выдаліць улюбёнае Выдаліць улюбёную кропку \'%s\' з закладак? - Улюбёны пункт {0} быў пасьпяхова выдалены з закладак. + Улюбёная кропка {0} выдаленая. @@ -1153,9 +1154,9 @@ POI выдаленая дадаць зьмяніць - Дзеяньне {0} пасьпяхова завершана. - Нечаканая памылка пры выкананьні дзеяньня {0}. - Адбылася памылка ўводу/вываду пры выкананьні дзеяньня {0}. + Дзеянне {0} завершанае. + Не ўдалося выканаць дзеянне {0}. + Адбылася памылка ўводу/вываду падчас выкананні дзеяння {0}. Адбылася памылка пры чытаньні інфармацыі пра POI Гадзіны працы Каментар @@ -1169,7 +1170,7 @@ Фільтр {0} быў выдалены Фільтр {0} быў створаны - E-mail + e-mail Тып факусоўкі камеры Выберыце тып фокусу ўбудаванай камеры. Аўтафокус @@ -1666,7 +1667,7 @@ Правіць групу - Неабходна падключэньне да Інтэрнэту, каб усталяваць гэты модуль. + Вам неабходна падлучэнне да Інтэрнэту, каб усталяваць гэты дадатак. Атрымаць Лыжныя мапы Марскія мапы @@ -1932,11 +1933,11 @@ Аўтаматычныя абнаўленні Не ўдалося адаслаць Выдаліць зьмены - {0}/{1} пасьпяхова адасланыя + Адасланыя {0}/{1} Паўтарыць спробу Памылка: {0} Няма даступных абнаўленьняў - Нас вельмі цікавіць ваша меркаваньне і нам важна пачуць вас. + Нас цікавіць ваша меркаваньне і ваш водгук важны для нас. Тлусты абрыс Небяспека OsmAnd @@ -1969,8 +1970,8 @@ Працоўныя дні Нядаўнія месцы Улюбёныя -Пасьпяхова захаваны ў: %1$s -Паказаць GPX +Цяпер захаваны а %1$s +Паказаць GPX-даныя POI будуць выдаленыя, як толькі вы загрузіце вашы зьмены Паказваць пры запуску Колькасьць радкоў @@ -2007,12 +2008,12 @@ Сьцягваецца - %1$d файл Паказваць банер бясплатнай версіі нават у платнай версіі. Паказваць банэр бясплатнай вэрсіі - НАБЫЦЬ + Набыць Пазьней Паўнавартасная вэрсія Зацяненьне рэльефу адключана - Калі ласка, актывуйце модуль SRTM - Калі ласка, актывуйце модуль Марскія навігацыйныя знакі + Калі ласка, актывуйце дадатак «Контурныя лініі» + Калі ласка, актывуйце дадатак «Прагляд марской мапы» Рэгіёны Рэгіянальныя мапы @@ -2022,12 +2023,12 @@ Назва катэгорыі Дадаць новую катэгорыю Калі ласка, выкарыстоўваеце назву катэгорыі, якая яшчэ не існуе. - Вы ўпэўненыя, што хочаце сьцягнуць мапу аўтадарог, нават калі ў вас ёсць поўная мапа? + Мапа аўтадарог не патрэбная, бо вы маеце стандартную (поўную) мапу? Сцягнуць усё роўна? %1$.1f з %2$.1f Мб %.1f Мб Абнавіць усе (%1$s МБ) Выкарыстана бясплатных загрузак - Паказвае колькі бясплатных загрузак вы скарысталі. + Паказвае колькі бясплатных загрузак засталося. Адаслаць Выберыце, дзе вы хочаце захоўваць мапы і іншыя файлы са зьвесткамі. Падзяліцца месцазнаходжаньнем @@ -2050,7 +2051,7 @@ Модулі Часта задаваныя пытаньні Вэрсіі - Напішыце нам + Кантакты Легенда мапы Абнавіць Базавая мапа сьвету (якая пакрывае ўвесь сьвет пры малым маштабе) адсутнічае або састарэла. Калі ласка, загрузіце яе каб мець агляд усяго сьвету. @@ -2061,7 +2062,7 @@ Дапамажыце палепшыць OsmAnd Першы запуск Як загрузіць мапы, усталяваць асноўныя налады. - Налада навігацыі. + Налады навігацыі. Планаваньне паездкі Часта задаваныя пытаньні Агляд мапы @@ -2075,7 +2076,7 @@ Ніжненямецкая Заходнефрыская Альбанская (Тоская) - Вы сапраўды хочаце захаваць POI бяз тыпу? + Вы сапраўды хочаце захаваць POI без тыпу? Рэдагаваньні OSM апублікаваныя праз OsmAnd Месцазнаходжаньне Скапіявана ў буфер абмену @@ -2114,7 +2115,7 @@ Выкарыстоўваць панэль кіраваньня Панэль кіраваньня ці мэню Калі ласка, увядзіце правільны тып POI або прапусьціце яго. - Дадаўся выбар асноўнага элемэнту кіраваньня праграмаю праз панэль кіраваньня або статычнае мэню. Ваш выбар можа быць зьменены ў наладах галоўнага экрана. + Прапануецца выбар асноўнага элементу кіравання праграмаю праз панэль кіравання або статычнае меню. Ваш выбар можа быць зменены ў наладах галоўнага экрана. \\u2022 Новы кантэкстна-залежны інтэрфейс для выбару пазіцыі на мапе і на іншых экранах \n \n • Экран мапы цяпер запускаецца непасрэдна, калі вы не выбралі \"Паказваць панэль кіраваньня пры запуску\" @@ -2148,10 +2149,10 @@ Час: Конныя маршруты Абнавіць кожны - Сьцягваць толькі праз WiFi + Сьцягваць толькі праз Wi-Fi Аўтаабнаўленьне Абнавіць зараз -Праграма не мае дазволу на выкарыстаньне SD карткі +OsmAnd не мае дазволу на выкарыстанне карткі памяці Праграма не мае дазволу на выкарыстаньне GPS. Праграма не мае дазволу на выкарыстаньне камэры. Праграма не мае дазволу на выкарыстаньне мікрафону. @@ -2503,8 +2504,8 @@ Вы ўпэўненыя, што хочаце выдаліць дзеяньне \"%s\"? Месца Паказаць/схаваць улюбёныя - Паказаць Улюбёныя - Схаваць Улюбёныя + Паказаць улюбёныя + Схаваць улюбёныя Паказаць/схаваць POI Паказаць %1$s Схаваць %1$s @@ -2512,22 +2513,22 @@ Налада мапы Навігацыя Пакіньце пустым, каб прымяніць адрас або назву гораду. - Гэта паведамленьне будзе аўтаматычна запоўнена ў поле камэнтара. + Гэта паведамленьне уключанае ў поле камэнтара. Паведамленьне Выберыце катэгорыю, каб захаваць улюблёнае там. Пералік POI - Вы можаце дадаць адну або некалькі катэгорый POI для адлюстраваньня на мапе. + Дадаць адну або некалькі катэгорый POI для адлюстраваньня на мапе. Дадаць стыль мапы - Парамэтры не павінны быць пустымі + Запоўніце ўсе параметры Стылі мапы Крыніцы мапаў Дадаць крыніцу мапы Крыніца мапы была зьменена на \"%s\". Зьмяніць становішча кнопкі Назва дзеяньня -Стварыць гукавую нататку - Стварыць відэа-нататку - Стварыць фота-нататку +Новая гукавая нататка + Новая відэа-нататка + Новая фота-нататка Голас прыглушаны Голас актыўны Паказваць контуры і пункты глыбіні. @@ -2594,23 +2595,23 @@ Паказаць дыялёг улюбёных Назва перадусталёўкі Пры націсканні на кнопку дадасць маркер на мапу ў цэнтры экрана. - Пры націску на кнопку дзеяньня дадасьць GPX-кропку на мапу ў цэнтры экрана. - Пры націсканні на кнопку дадасць аўдыянататку на мапу ў цэнтры экрана. - Пры націсканні на кнопку дадасць відэанататку на мапу ў цэнтры экрана. - Пры націсканні на кнопку дадасць фотанататку на мапу ў цэнтры экрана. - Пры націсканні на кнопку дадасць OSM-нататку на мапу ў цэнтры экрана. - Пры націсканні на кнопку дадасць POI на мапу ў цэнтры экрана. - Пры націсканьні на кнопку адключыць ці ўключыць галасавыя падказкі пад час навігацыі. - Націск на кнопку дзеяньня дадасьць месца паркоўкі ў цэнтры экрана. + Пры націску на кнопку дадасьць GPX-кропку ў сярэдзіне экрана. + Пры націсканні на кнопку дадасць аўдыянататку на мапу ў сярэдзіне экрана. + Пры націсканні на кнопку дадасць відэанататку на мапу ў сярэдзіне экрана. + Пры націсканні на кнопку дадасць фотанататку на мапу ў сярэдзіне экрана. + Пры націсканні на кнопку дадасць OSM-нататку на мапу ў сярэдзіне экрана. + Пры націсканні на кнопку дадасць POI ў сярэдзіне экрана. + Пры націсканьні на кнопку адключыць ці ўключыць галасавыя падказкі падчас навігацыі. + Націск на кнопку дадасьць месца паркоўкі ў сярэдзіне экрана. Паказаць прамежкавы дыялёг " было захавана ў " - Назва для хуткага дзеяньня ўжо існуе. Дзеяньне будзе захована як %1$s каб пазбавіцца дубляваньня. + Назва для хуткага дзеяньня ўжо існуе. Назва будзе змененая на %1$s, каб пазбавіцца дубляваньня. Знойдзены дублікат назвы - Пры націсканьні на кнопку дзеяньня будуць паказаны ці схаваны ўлюбёныя кропкі на мапе. - Пры націсканні на кнопку пакажа ці схавае POI на мапе. + Націсканне на кнопку пакажа ці схавае ўлюбёныя кропкі на мапе. + Націсканне на кнопку пакажа ці схавае POI на мапе. Стварэнне элементаў Абярыце катэгорыю (апцыянальна). - Пры націсканні на кнопку будзе гартаць старонкі данага спісу. + Націсканне на кнопку гартае старонкі данага спісу. Змяніць мапу пакрыцця Мапа пакрыцця Дадаць мапу пакрыцця @@ -2720,7 +2721,7 @@ Калі ласка, дадайце прамежкавыя пункты, калі разлік не завяршыўся цягам 10 хвілін. Лыжня \nOsmAnd-дадатак лыжных мап дазваляе бачыць лыжныя трасы з узроўнем складанасці і некаторай дадатковай інфармацыяй, як размяшчэнне пад\'ёмнікаў і іншых аб\'ектаў. - Назва змяшчае занадта шмат вялікіх літар. Вы хочаце прадоўжыць? + Назва змяшчае занадта шмат вялікіх літар. Прадоўжыць? Мапа \n• Адлюстроўвае POI (пункт інтарэсаў) каля вас \n• Адаптуе мапу ў напрамку вашага руху (ці компаса) @@ -2878,7 +2879,7 @@ Націсніце гэтую кнопку, каб пачаць або скончыць навігацыю. Час буферызацыі для анлайн сачэньня Задае час буферызацыі для зьберажэньня месцаў для адпраўкі без злучэньня - Вам патрэбен Інтэрнэт для прагляду фатаграфій з Mapillary. + Вам патрэбна падлучэнне да Інтэрнэту для прагляду фатаграфій з Mapillary. Паўтарыць @@ -2906,14 +2907,14 @@ Абраць профіль навігацыі Дадаць кропкі маршруту Дадаць лінію - Дадаць і запісаць сляды - Запісаць ці імпартаваць сляды для прагляду. + Дадаць GPX-файлы + Запісаць GPX-файлы ці запісаныя сляды. Дадаць ва Ўлюбёныя Імпартаваць улюбёныя ці дадаць з дапамогай маркіроўкі пунктаў на мапе. - Імпартаваць сьлед + Імпартаваць GPX-файл Файл %1$s не зьмяшчае кропкі шляху, імпартаваць як сьлед? Перамясціць кропку - Дадаць у GPX-сьлед + Дадаць у GPX-файл Працягваць паказваць на мапе Выйсьці без захаваньня? Без анімацыі @@ -3089,11 +3090,11 @@ \n вых. Зімовы/лыжны - Турыстычны (кантраст і дэталі) + Турыстычны выгляд Марскі Адчыніцца заўтра а Капіяваць назву кропкі/POI - Месца не мае назвы + Месца без назвы Цяперашні Дадае прамежкавы прыпынак Дадае першы прыпынак @@ -3202,7 +3203,7 @@ Адкрыць артыкул анлайн Паглядзець артыкул у браўзеры. гэты рэгіён - Пошук неабходнага вікі-артыкула + Пошук адпаведнага вікі-артыкула Артыкул не знойдзены Як адкрыць артыкулы Вікіпэдыі? Перазапуск праграмы