From 726cbe1730b4c3c7b95189ac32ea360a68b7830b Mon Sep 17 00:00:00 2001 From: Dmitriy Prodchenko Date: Wed, 24 Jan 2018 18:34:15 +0200 Subject: [PATCH 01/15] Add lines for Release notes 2.0 --- OsmAnd/res/values/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index b7a71054b4..2c1a371aef 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -346,6 +346,9 @@ \u2022 Notes: added sorting by type and date\n\n \u2022 OSM edits: show an icon and a name of the POI category, display completed actions\n\n \u2022 New quick coordinate input screen for quick markers creation\n\n + \u2022 Detection of stop signs now considers driving direction\n\n + \u2022 New algorithm providing meaningful ascent/descent values for GPX tracks\n\n + \u2022 Terrain (ascent) aware hiking time (Naismith\'s rule)\n\n Auto-split recordings after gap Start new segment after gap of 6 min, new track after gap of 2 h, or new file after a longer gap if the date has changed. From b789a731e7569ea47d6771fa5ea0611e041ca97a Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Mon, 29 Jan 2018 13:51:44 +0200 Subject: [PATCH 02/15] Fix #4877 --- .../controllers/MapDataMenuController.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/MapDataMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/MapDataMenuController.java index 5d0df3abc6..2b51c08ac7 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/MapDataMenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/MapDataMenuController.java @@ -25,6 +25,7 @@ import net.osmand.plus.download.DownloadIndexesThread; import net.osmand.plus.download.DownloadValidationManager; import net.osmand.plus.download.IndexItem; import net.osmand.plus.helpers.FileNameTranslationHelper; +import net.osmand.plus.liveupdates.LiveUpdatesHelper; import net.osmand.plus.mapcontextmenu.MenuBuilder; import net.osmand.plus.mapcontextmenu.MenuController; import net.osmand.plus.srtmplugin.SRTMPlugin; @@ -107,9 +108,10 @@ public class MapDataMenuController extends MenuController { Toast.makeText(mapActivity, mapActivity.getString(R.string.activate_srtm_plugin), Toast.LENGTH_SHORT).show(); } - } else { - new DownloadValidationManager(getMapActivity().getMyApplication()) - .startDownload(getMapActivity(), indexItem); + } else if (!downloaded || indexItem.isOutdated()) { + new DownloadValidationManager(app).startDownload(mapActivity, indexItem); + } else if (isLiveUpdatesOn()) { + LiveUpdatesHelper.runLiveUpdate(mapActivity, indexItem.getTargetFileName(), true); } } } @@ -179,6 +181,10 @@ public class MapDataMenuController extends MenuController { updateData(); } + private boolean isLiveUpdatesOn() { + return getMapActivity().getMyApplication().getSettings().IS_LIVE_UPDATES_ON.get(); + } + @Override public boolean displayDistanceDirection() { return true; @@ -380,6 +386,8 @@ public class MapDataMenuController extends MenuController { leftDownloadButtonController.caption = getMapActivity().getString(R.string.shared_string_update); } else if (!downloaded) { leftDownloadButtonController.caption = getMapActivity().getString(R.string.shared_string_download); + } else if (isLiveUpdatesOn()) { + leftDownloadButtonController.caption = getMapActivity().getString(R.string.live_update); } else { leftDownloadButtonController.visible = false; } From 60354edc7242cd4ec8c05a3bbf7316a25b88c8f9 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Mon, 29 Jan 2018 18:43:44 +0200 Subject: [PATCH 03/15] Add the ability to delete gpx file with aidl --- .../net/osmand/aidl/IOsmAndAidlInterface.aidl | 3 ++ OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java | 18 +++++++ .../net/osmand/aidl/OsmandAidlService.java | 9 ++++ .../net/osmand/aidl/gpx/RemoveGpxParams.aidl | 3 ++ .../net/osmand/aidl/gpx/RemoveGpxParams.java | 48 +++++++++++++++++++ 5 files changed, 81 insertions(+) create mode 100644 OsmAnd/src/net/osmand/aidl/gpx/RemoveGpxParams.aidl create mode 100644 OsmAnd/src/net/osmand/aidl/gpx/RemoveGpxParams.java diff --git a/OsmAnd/src/net/osmand/aidl/IOsmAndAidlInterface.aidl b/OsmAnd/src/net/osmand/aidl/IOsmAndAidlInterface.aidl index 78beb7ca96..64410a3f9f 100644 --- a/OsmAnd/src/net/osmand/aidl/IOsmAndAidlInterface.aidl +++ b/OsmAnd/src/net/osmand/aidl/IOsmAndAidlInterface.aidl @@ -49,6 +49,8 @@ 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 { @@ -98,4 +100,5 @@ interface IOsmAndAidlInterface { 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/src/net/osmand/aidl/OsmandAidlApi.java b/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java index 5736d71f13..892c23ef1a 100644 --- a/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java +++ b/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java @@ -1135,6 +1135,24 @@ public class OsmandAidlApi { return false; } + boolean removeGpx(String fileName) { + if (!Algorithms.isEmpty(fileName)) { + final File f = app.getAppPath(IndexConstants.GPX_INDEX_DIR + fileName); + if (f.exists()) { + new AsyncTask() { + + @Override + protected Void doInBackground(File... files) { + Algorithms.removeAllFiles(f); + app.getGpxDatabase().remove(f); + return null; + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, f); + } + } + return false; + } + boolean setMapLocation(double latitude, double longitude, int zoom, boolean animated) { Intent intent = new Intent(); intent.setAction(AIDL_SET_MAP_LOCATION); diff --git a/OsmAnd/src/net/osmand/aidl/OsmandAidlService.java b/OsmAnd/src/net/osmand/aidl/OsmandAidlService.java index d7826cdbd0..0b4edf77bf 100644 --- a/OsmAnd/src/net/osmand/aidl/OsmandAidlService.java +++ b/OsmAnd/src/net/osmand/aidl/OsmandAidlService.java @@ -15,6 +15,7 @@ import net.osmand.aidl.favorite.group.UpdateFavoriteGroupParams; import net.osmand.aidl.gpx.ASelectedGpxFile; import net.osmand.aidl.gpx.HideGpxParams; import net.osmand.aidl.gpx.ImportGpxParams; +import net.osmand.aidl.gpx.RemoveGpxParams; import net.osmand.aidl.gpx.ShowGpxParams; import net.osmand.aidl.gpx.StartGpxRecordingParams; import net.osmand.aidl.gpx.StopGpxRecordingParams; @@ -269,6 +270,14 @@ public class OsmandAidlService extends Service { return getApi().getActiveGpx(files); } + @Override + public boolean removeGpx(RemoveGpxParams params) throws RemoteException { + if (params != null && params.getFileName() != null) { + return getApi().removeGpx(params.getFileName()); + } + return false; + } + @Override public boolean setMapLocation(SetMapLocationParams params) throws RemoteException { if (params != null) { diff --git a/OsmAnd/src/net/osmand/aidl/gpx/RemoveGpxParams.aidl b/OsmAnd/src/net/osmand/aidl/gpx/RemoveGpxParams.aidl new file mode 100644 index 0000000000..e9025f7a19 --- /dev/null +++ b/OsmAnd/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/src/net/osmand/aidl/gpx/RemoveGpxParams.java b/OsmAnd/src/net/osmand/aidl/gpx/RemoveGpxParams.java new file mode 100644 index 0000000000..2253fa3616 --- /dev/null +++ b/OsmAnd/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; + } +} From 4cb0a98e9b1a88b94aeeecbbba44304e197cf1ee Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Tue, 30 Jan 2018 13:08:12 +0200 Subject: [PATCH 04/15] Delete only gpx added with API --- OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java | 20 ++++---- OsmAnd/src/net/osmand/plus/GPXDatabase.java | 46 +++++++++++++++---- 2 files changed, 49 insertions(+), 17 deletions(-) diff --git a/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java b/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java index 892c23ef1a..cdeb30e7c6 100644 --- a/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java +++ b/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java @@ -944,6 +944,7 @@ public class OsmandAidlApi { app.getRendererRegistry().getCurrentSelectedRenderer(), color); if (!destinationExists) { GpxDataItem gpxDataItem = new GpxDataItem(destination, col); + gpxDataItem.setApiImported(true); app.getGpxDatabase().add(gpxDataItem); } else { GpxDataItem item = app.getGpxDatabase().getItem(destination); @@ -1139,15 +1140,18 @@ public class OsmandAidlApi { if (!Algorithms.isEmpty(fileName)) { final File f = app.getAppPath(IndexConstants.GPX_INDEX_DIR + fileName); if (f.exists()) { - new AsyncTask() { + GpxDataItem item = app.getGpxDatabase().getItem(f); + if (item != null && item.isApiImported()) { + new AsyncTask() { - @Override - protected Void doInBackground(File... files) { - Algorithms.removeAllFiles(f); - app.getGpxDatabase().remove(f); - return null; - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, f); + @Override + protected Void doInBackground(File... files) { + Algorithms.removeAllFiles(f); + app.getGpxDatabase().remove(f); + return null; + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, f); + } } } return false; diff --git a/OsmAnd/src/net/osmand/plus/GPXDatabase.java b/OsmAnd/src/net/osmand/plus/GPXDatabase.java index a4dc6305f7..a037e31a65 100644 --- a/OsmAnd/src/net/osmand/plus/GPXDatabase.java +++ b/OsmAnd/src/net/osmand/plus/GPXDatabase.java @@ -15,7 +15,7 @@ import java.util.List; public class GPXDatabase { private static final String DB_NAME = "gpx_database"; - private static final int DB_VERSION = 5; + private static final int DB_VERSION = 6; private static final String GPX_TABLE_NAME = "gpxTable"; private static final String GPX_COL_NAME = "fileName"; private static final String GPX_COL_DIR = "fileDir"; @@ -45,6 +45,8 @@ public class GPXDatabase { private static final String GPX_COL_SPLIT_TYPE = "splitType"; private static final String GPX_COL_SPLIT_INTERVAL = "splitInterval"; + private static final String GPX_COL_API_IMPORTED = "apiImported"; + public static final int GPX_SPLIT_TYPE_NO_SPLIT = -1; public static final int GPX_SPLIT_TYPE_DISTANCE = 1; public static final int GPX_SPLIT_TYPE_TIME = 2; @@ -74,7 +76,8 @@ public class GPXDatabase { GPX_COL_COLOR + " TEXT, " + GPX_COL_FILE_LAST_MODIFIED_TIME + " long, " + GPX_COL_SPLIT_TYPE + " int, " + - GPX_COL_SPLIT_INTERVAL + " double);"; + GPX_COL_SPLIT_INTERVAL + " double, " + + GPX_COL_API_IMPORTED + " int);"; // 1 = true, 0 = false private static final String GPX_TABLE_SELECT = "SELECT " + GPX_COL_NAME + ", " + @@ -98,7 +101,8 @@ public class GPXDatabase { GPX_COL_COLOR + ", " + GPX_COL_FILE_LAST_MODIFIED_TIME + ", " + GPX_COL_SPLIT_TYPE + ", " + - GPX_COL_SPLIT_INTERVAL + + GPX_COL_SPLIT_INTERVAL + ", " + + GPX_COL_API_IMPORTED + " FROM " + GPX_TABLE_NAME; private OsmandApplication context; @@ -110,6 +114,7 @@ public class GPXDatabase { private long fileLastModifiedTime; private int splitType; private double splitInterval; + private boolean apiImported; public GpxDataItem(File file, GPXTrackAnalysis analysis) { this.file = file; @@ -144,6 +149,14 @@ public class GPXDatabase { public double getSplitInterval() { return splitInterval; } + + public boolean isApiImported() { + return apiImported; + } + + public void setApiImported(boolean apiImported) { + this.apiImported = apiImported; + } } public GPXDatabase(OsmandApplication app) { @@ -224,6 +237,13 @@ public class GPXDatabase { db.execSQL("ALTER TABLE " + GPX_TABLE_NAME + " ADD " + GPX_COL_SPLIT_INTERVAL + " double"); } } + + if (oldVersion < 6) { + db.execSQL("ALTER TABLE " + GPX_TABLE_NAME + " ADD " + GPX_COL_API_IMPORTED + " int"); + db.execSQL("UPDATE " + GPX_TABLE_NAME + + " SET " + GPX_COL_API_IMPORTED + " = ? " + + "WHERE " + GPX_COL_API_IMPORTED + " IS NULL", new Object[]{0}); + } } private boolean updateLastModifiedTime(GpxDataItem item) { @@ -362,16 +382,22 @@ public class GPXDatabase { } if (a != null) { db.execSQL( - "INSERT INTO " + GPX_TABLE_NAME + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO " + GPX_TABLE_NAME + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", new Object[]{ fileName, fileDir, a.totalDistance, a.totalTracks, a.startTime, a.endTime, a.timeSpan, a.timeMoving, a.totalDistanceMoving, a.diffElevationUp, a.diffElevationDown, a.avgElevation, a.minElevation, a.maxElevation, a.maxSpeed, a.avgSpeed, a.points, a.wptPoints, - color, item.file.lastModified(), item.splitType, item.splitInterval }); + color, item.file.lastModified(), item.splitType, item.splitInterval, item.apiImported ? 1 : 0}); } else { - db.execSQL( - "INSERT INTO " + GPX_TABLE_NAME + "(" + GPX_COL_NAME + ", " + GPX_COL_DIR + ", " + - GPX_COL_COLOR + ", " + GPX_COL_FILE_LAST_MODIFIED_TIME + ", " + GPX_COL_SPLIT_TYPE + ", " + GPX_COL_SPLIT_INTERVAL + ") VALUES (?, ?, ?, ?, ?, ?)", - new Object[]{ fileName, fileDir, color, 0, item.splitType, item.splitInterval }); + db.execSQL("INSERT INTO " + GPX_TABLE_NAME + "(" + + GPX_COL_NAME + ", " + + GPX_COL_DIR + ", " + + GPX_COL_COLOR + ", " + + GPX_COL_FILE_LAST_MODIFIED_TIME + ", " + + GPX_COL_SPLIT_TYPE + ", " + + GPX_COL_SPLIT_INTERVAL + ", " + + GPX_COL_API_IMPORTED + + ") VALUES (?, ?, ?, ?, ?, ?, ?)", + new Object[]{fileName, fileDir, color, 0, item.splitType, item.splitInterval, item.apiImported ? 1 : 0}); } } @@ -436,6 +462,7 @@ public class GPXDatabase { long fileLastModifiedTime = query.getLong(19); int splitType = (int)query.getInt(20); double splitInterval = query.getDouble(21); + boolean apiImported = query.getInt(22) == 1; GPXTrackAnalysis a = new GPXTrackAnalysis(); a.totalDistance = totalDistance; @@ -471,6 +498,7 @@ public class GPXDatabase { item.fileLastModifiedTime = fileLastModifiedTime; item.splitType = splitType; item.splitInterval = splitInterval; + item.apiImported = apiImported; return item; } From 11a4e3cc58f022e5f150a3618ac4a05657e30878 Mon Sep 17 00:00:00 2001 From: PaulStets Date: Tue, 30 Jan 2018 13:10:41 +0200 Subject: [PATCH 05/15] Fixed time picker for lanscape --- .../layout-land/parking_set_time_limit.xml | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 OsmAnd/res/layout-land/parking_set_time_limit.xml diff --git a/OsmAnd/res/layout-land/parking_set_time_limit.xml b/OsmAnd/res/layout-land/parking_set_time_limit.xml new file mode 100644 index 0000000000..dbdf4edfbd --- /dev/null +++ b/OsmAnd/res/layout-land/parking_set_time_limit.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + From b3085b38cbfd22ba35eade2b78b6ab888b0eb6f4 Mon Sep 17 00:00:00 2001 From: PaulStets Date: Tue, 30 Jan 2018 13:20:20 +0200 Subject: [PATCH 06/15] Made time picker for lanscape scrollable --- .../layout-land/parking_set_time_limit.xml | 60 ++++++++++--------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/OsmAnd/res/layout-land/parking_set_time_limit.xml b/OsmAnd/res/layout-land/parking_set_time_limit.xml index dbdf4edfbd..9565af5655 100644 --- a/OsmAnd/res/layout-land/parking_set_time_limit.xml +++ b/OsmAnd/res/layout-land/parking_set_time_limit.xml @@ -1,30 +1,33 @@ - - + - + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingBottom="@dimen/dialog_content_bottom_margin" + android:paddingLeft="@dimen/dialog_content_margin" + android:paddingRight="@dimen/dialog_content_margin" + android:paddingTop="@dimen/dialog_content_bottom_margin"> + + + + android:layout_height="0dp" + android:layout_gravity="center_horizontal" + android:layout_weight="1" + android:orientation="horizontal">> - - - + + + + From a29596d81ef12a13e194c2fff2dc6cf09b9c708e Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Tue, 30 Jan 2018 14:17:49 +0200 Subject: [PATCH 07/15] Fix #4868 --- .../src/net/osmand/plus/mapillary/MapillaryImageDialog.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryImageDialog.java b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryImageDialog.java index 775ae2b11c..950a01ee3c 100644 --- a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryImageDialog.java +++ b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryImageDialog.java @@ -12,11 +12,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.webkit.ConsoleMessage; import android.webkit.JavascriptInterface; -import android.webkit.WebChromeClient; -import android.webkit.WebResourceError; -import android.webkit.WebResourceRequest; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.FrameLayout; @@ -237,7 +233,7 @@ public class MapillaryImageDialog extends ContextMenuCardDialog { view.setLayoutParams(lp); webView.setWebViewClient(new WebViewClient() { @Override - public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { + public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { webView.loadUrl("about:blank"); noInternetView.setVisibility(View.VISIBLE); } From e785ef232a28e97c95bd8b024805097e6485753b Mon Sep 17 00:00:00 2001 From: Dmitriy Prodchenko Date: Tue, 30 Jan 2018 14:24:49 +0200 Subject: [PATCH 08/15] Resolve merge conflict in strings --- OsmAnd/res/values/strings.xml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index a9402dfdc4..a6bd3c28f5 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -344,20 +344,10 @@ \u2022 Updated the context menu: show when the POI opens / closes\n\n \u2022 Transport menu: all available routes are now at the top\n\n \u2022 Wikipedia: added the button to open the original article, updated the appearance of articles\n\n -<<<<<<< HEAD - \u2022 Route: added possibility to swap start and end points in one tap\n\n - \u2022 Notes: added sorting by type and date\n\n - \u2022 OSM edits: show an icon and a name of the POI category, display completed actions\n\n - \u2022 New quick coordinate input screen for quick markers creation\n\n - \u2022 Detection of stop signs now considers driving direction\n\n - \u2022 New algorithm providing meaningful ascent/descent values for GPX tracks\n\n - \u2022 Terrain (ascent) aware hiking time (Naismith\'s rule)\n\n -======= \u2022 Route: added possibility to swap start and end points in one tap\n\n \u2022 Notes: added sorting by type and date\n\n \u2022 OSM edits: show an icon and a name of the POI category, display completed actions\n\n \u2022 New quick coordinate input screen for quick markers creation\n\n ->>>>>>> 0db64b7abd3b8633241f75ebec0593544eab678b Auto-split recordings after gap Start new segment after gap of 6 min, new track after gap of 2 h, or new file after a longer gap if the date has changed. From 3dfed6f29e9f0682a3f0a748b82e95f9be861139 Mon Sep 17 00:00:00 2001 From: Dmitriy Prodchenko Date: Tue, 30 Jan 2018 14:33:13 +0200 Subject: [PATCH 09/15] Add Warnings icons for Tunnels --- .../res/drawable-hdpi/list_warnings_tunnel.png | Bin 0 -> 1873 bytes .../drawable-hdpi/list_warnings_tunnel_us.png | Bin 0 -> 1684 bytes OsmAnd/res/drawable-hdpi/warnings_tunnel.png | Bin 0 -> 6627 bytes OsmAnd/res/drawable-hdpi/warnings_tunnel_us.png | Bin 0 -> 4022 bytes .../res/drawable-mdpi/list_warnings_tunnel.png | Bin 0 -> 1492 bytes .../drawable-mdpi/list_warnings_tunnel_us.png | Bin 0 -> 1369 bytes OsmAnd/res/drawable-mdpi/warnings_tunnel.png | Bin 0 -> 4554 bytes OsmAnd/res/drawable-mdpi/warnings_tunnel_us.png | Bin 0 -> 3118 bytes .../res/drawable-xhdpi/list_warnings_tunnel.png | Bin 0 -> 2145 bytes .../drawable-xhdpi/list_warnings_tunnel_us.png | Bin 0 -> 1802 bytes OsmAnd/res/drawable-xhdpi/warnings_tunnel.png | Bin 0 -> 8971 bytes .../res/drawable-xhdpi/warnings_tunnel_us.png | Bin 0 -> 4558 bytes .../drawable-xxhdpi/list_warnings_tunnel.png | Bin 0 -> 2913 bytes .../drawable-xxhdpi/list_warnings_tunnel_us.png | Bin 0 -> 2274 bytes OsmAnd/res/drawable-xxhdpi/warnings_tunnel.png | Bin 0 -> 13660 bytes .../res/drawable-xxhdpi/warnings_tunnel_us.png | Bin 0 -> 7043 bytes 16 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 OsmAnd/res/drawable-hdpi/list_warnings_tunnel.png create mode 100644 OsmAnd/res/drawable-hdpi/list_warnings_tunnel_us.png create mode 100644 OsmAnd/res/drawable-hdpi/warnings_tunnel.png create mode 100644 OsmAnd/res/drawable-hdpi/warnings_tunnel_us.png create mode 100644 OsmAnd/res/drawable-mdpi/list_warnings_tunnel.png create mode 100644 OsmAnd/res/drawable-mdpi/list_warnings_tunnel_us.png create mode 100644 OsmAnd/res/drawable-mdpi/warnings_tunnel.png create mode 100644 OsmAnd/res/drawable-mdpi/warnings_tunnel_us.png create mode 100644 OsmAnd/res/drawable-xhdpi/list_warnings_tunnel.png create mode 100644 OsmAnd/res/drawable-xhdpi/list_warnings_tunnel_us.png create mode 100644 OsmAnd/res/drawable-xhdpi/warnings_tunnel.png create mode 100644 OsmAnd/res/drawable-xhdpi/warnings_tunnel_us.png create mode 100644 OsmAnd/res/drawable-xxhdpi/list_warnings_tunnel.png create mode 100644 OsmAnd/res/drawable-xxhdpi/list_warnings_tunnel_us.png create mode 100644 OsmAnd/res/drawable-xxhdpi/warnings_tunnel.png create mode 100644 OsmAnd/res/drawable-xxhdpi/warnings_tunnel_us.png diff --git a/OsmAnd/res/drawable-hdpi/list_warnings_tunnel.png b/OsmAnd/res/drawable-hdpi/list_warnings_tunnel.png new file mode 100644 index 0000000000000000000000000000000000000000..04f82eaea604a10224b39167fd8d4bf182b8cebb GIT binary patch literal 1873 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 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-hdpi/warnings_tunnel.png b/OsmAnd/res/drawable-hdpi/warnings_tunnel.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e1e69c7d612e613bd6071aea50e2e953571d7e GIT binary patch literal 6627 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 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-mdpi/list_warnings_tunnel_us.png b/OsmAnd/res/drawable-mdpi/list_warnings_tunnel_us.png new file mode 100644 index 0000000000000000000000000000000000000000..f3977586c9dbc168d3e70feec4d094e8d53d6838 GIT binary patch literal 1369 zcmbVMeN5bB7%v=y4MA}l#>XXe-G~n9_2WKUIpB5$xxq2UNVr9&>$UH34P0B=vOCB! zge`CbGtn((cdNUPnC`(-Z(3w6B;IN00R!u57=6pvI@!WA)EHxL0D3&$dzqDsfy$f{jh-y32K zfmc@Cv>#1cJh9GL3o*I|eF|*z;TCC8ov4@)F_S;#Z*Xk+~boZGGCEb1TIHvD~M`A3V`iezq+CdQNLA z|L4nzFaDUJPy9Y}x=gIEn})*G8PnfaR~C#P+FtwSma93>@Y@dL=aJ^~rT2d%(o1ij zAbyxnBT=(_ z`4@BijAwQ+XU@3clo)gj2&M=LofL*j$}Xn-AB6@eU_2ihwI|6 zbRc1*iMt9c>jSXGjF|jx2)lwdF0)Z=e`aki^Jq{-_er~oTDXs zMRw@U_O`(@FSd;b2ELT{m6@kXKlr2}iRO-V6*YdmrKvu>`cTQRDLzRS4jsFk4qu0u XxBY38@6Vq!es;c^M&`r4M+W`@({tBs literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-mdpi/warnings_tunnel.png b/OsmAnd/res/drawable-mdpi/warnings_tunnel.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f9a8c9d030405b95e9b5426e867fe49da6727a GIT binary patch literal 4554 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 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xhdpi/list_warnings_tunnel.png b/OsmAnd/res/drawable-xhdpi/list_warnings_tunnel.png new file mode 100644 index 0000000000000000000000000000000000000000..e912550dbb1c366071a27d6911f29d916df5e4d1 GIT binary patch literal 2145 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 G{C@!V{;#>%w12M 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 J@~JKSzW|#u>AwH~ literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xhdpi/warnings_tunnel_us.png b/OsmAnd/res/drawable-xhdpi/warnings_tunnel_us.png new file mode 100644 index 0000000000000000000000000000000000000000..cf921af26bf4dad4372c25f5bb9dc67c8a25c7e8 GIT binary patch literal 4558 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 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xxhdpi/list_warnings_tunnel_us.png b/OsmAnd/res/drawable-xxhdpi/list_warnings_tunnel_us.png new file mode 100644 index 0000000000000000000000000000000000000000..67e91a68eddc2c77e06d16b7219c5fef4ca02749 GIT binary patch literal 2274 zcmbVOYg7|w8V*Fk2E5rXrX1?3|Jn!?pmvbg- zRdC=;(tHwuK$s~J3uX8yHoY?}@NdYoQ-S#4fQiDeHM(dlL7_(oekxrQ0!TE97(|9B zREhD;h%bRaG^*ucSeP^jR_Zh~g~^6y)Sx(;K=9=oQH63Nf&o!Tj9Sa14A<6C0JVxo z31vzdQq&)bRg07K$eN^JxiV>^lB=TdmjS*;7$?vmm;x|r;0TeK4VVo1 zuZ+)H8{~;7LYE;1-6p*f&quWD6c~@)Upq1x;%eZPdNrODMVwHl+@wLYm_*2<;3qVd zS_Ok#kn6={LsSrg6jVs%t)g-vrGl!81|bHdL_h_?p5pl&9%8W}NEE;f5DL9PP{j5V zas2&QULcFf=6Hb|))ZEvHDC&@5}ER?#(hs>z5fym`|A+}rqj!Hy11z-SQV?obcR?R z3i$h*vd#wFr3$55Yua35O4P@D3lY6~GolL6>omZJNW<#SsEA@Il~9ydG?m3>s;J(| zC%333=LHUohmZ^|TI_5VhYj*Ft3%H@B`XKD+tNz?RGGvJF)?SyFY9@68@ z@*7W9NFYonNQ8cJ%-GxWe~fHg zTz_Wm>>40(V@YLZ^2o}icJhhRc9}G;O1>aSG_rC5#jWw(Nr`&-v;|vp7hcjB&ZhJ% z%-(W-@ImV!`_!om#0c&F{k8XAo%DLm-}CRp+@m88RRV`q76oRA;JpiwfH{oAw&0nl zxcVnoOYPwA;%5&KuG_U4OzSDt;>>brGp^U|8rqgu&Yo!<)-4t*SHEOp<$cS+8Txjp$} zxm$m46e70RjU-W~ogQf>A&JPj9qnOJ&Vnf;yVlxQ{cG8wLq+z`%Wf7^2 zoME*D1jrmGaTZ~JLsquR$^DB19C1Kee#2@JWKm<=s`Ocbj>Z@`9^!!1r+wXb@^+*p zKSot~HN^8rTB@(*`FUW{m9fO19RlacRHfd%PXymiD{#Yo>=LLO`h=BMJ2^Y`(081< z;y>mrd475QaT}YrzutD|@U0`Jcc-tN{^;h0v4+t+vbG&MI&06lTW?3=+Q*v~x6EuQ zzL$8u+?l^^eEreFlw0r}aNR*iv!)Y2QSS)$ol#(c_w+;IZ9z=|CtlS%J?H;(UQ0oz z`@y=0^_@Ktd9<#&DoM?p(+4fYXO+HH=Fe;DM(+GAwClu#{#do#t>{bFOK&P2J%2lF zjyb-qkP~d2OUMoxJ)S4}ySMHj4yVY{D)>ufNPO$PiU)g-n?QZRM7F^rcW# z`D@9JfIVj=!?$t93D(0Mg1SmV@*sWi8U4zIV&4M}Rhi9&D zzDS?26?_>tlXG4tF$J;KPFQ-2UE$Hf4@W zXnX7g7jijhwOM~a|J9SEOsgz%6I^;u+|5~QUP1Z&%4##{6?~Vp+p50v(20Tme=HVO zCOUsRdTjSo&m`xk*4H;x{^9ZN47Ea2V`(Wu0B@uV0IR;mzewn*>plP1{M*qq;nYS}I z+tAbMelT*V1%5s%(Dz$be-bjUj>^8o+HDTIn V8G4!aqQLamArS=&k1vnh{vW}yntlKP literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xxhdpi/warnings_tunnel.png b/OsmAnd/res/drawable-xxhdpi/warnings_tunnel.png new file mode 100644 index 0000000000000000000000000000000000000000..55fc31f26f76e278729bfd251e202d6f686591ac GIT binary patch literal 13660 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 Gu>S*z6Q9@s literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xxhdpi/warnings_tunnel_us.png b/OsmAnd/res/drawable-xxhdpi/warnings_tunnel_us.png new file mode 100644 index 0000000000000000000000000000000000000000..694220aa633fd42bdbfb40d0ddd6310371d362f2 GIT binary patch literal 7043 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 G?tcKn5cli= literal 0 HcmV?d00001 From dafe7e8fdc12f9f6220e02845743f6ca17ec8029 Mon Sep 17 00:00:00 2001 From: Alexey Kulish Date: Tue, 30 Jan 2018 16:09:19 +0300 Subject: [PATCH 10/15] Fix context menu scroll --- .../mapcontextmenu/BaseMenuController.java | 2 +- .../plus/mapcontextmenu/MapContextMenu.java | 7 +++ .../MapContextMenuFragment.java | 54 ++++++++++++------ .../plus/mapcontextmenu/MenuBuilder.java | 57 ++++++++++++------- .../plus/mapcontextmenu/MenuController.java | 11 +++- .../builders/AmenityMenuBuilder.java | 4 +- 6 files changed, 93 insertions(+), 42 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/BaseMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/BaseMenuController.java index 0d7cb6393e..bd2323d4ef 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/BaseMenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/BaseMenuController.java @@ -51,7 +51,7 @@ public abstract class BaseMenuController { } public float getHalfScreenMaxHeightKoef() { - return .7f; + return .75f; } public int getSlideInAnimation() { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java index 6638225c95..6a17c4b1a9 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java @@ -521,6 +521,13 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL }, timeout); } + public void updateLayout() { + WeakReference fragmentRef = findMenuFragment(); + if (fragmentRef != null) { + fragmentRef.get().updateLayout(); + } + } + public void updateMenuUI() { WeakReference fragmentRef = findMenuFragment(); if (fragmentRef != null) { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java index 66311a283b..50092e95c9 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java @@ -98,6 +98,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo private int markerPaddingPx; private int markerPaddingXPx; + private int topScreenPosY; private OsmandMapTileView map; private LatLon mapCenter; @@ -112,7 +113,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo private boolean wasDrawerDisabled; private boolean zoomIn; - private float skipHalfScreenStateLimit; + private float skipScreenStateLimit; private int screenOrientation; private boolean created; @@ -125,6 +126,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo markerPaddingPx = dpToPx(MARKER_PADDING_DP); markerPaddingXPx = dpToPx(MARKER_PADDING_X_DP); + topScreenPosY = -dpToPx(SHADOW_HEIGHT_TOP_DP); menu = getMapActivity().getContextMenu(); view = inflater.inflate(R.layout.map_context_menu_fragment, container, false); @@ -327,8 +329,8 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo velocity.recycle(); - boolean skipHalfScreenState = Math.abs(currentY - dyMain) > skipHalfScreenStateLimit; - changeMenuState(currentY, skipHalfScreenState, slidingUp, slidingDown); + boolean skipScreenState = Math.abs(currentY - dyMain) > skipScreenStateLimit; + changeMenuState(currentY, skipScreenState, slidingUp, slidingDown); } break; @@ -487,7 +489,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo detailsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - menu.openMenuFullScreen(); + openMenuHalfScreen(); } }); TextView directionsButton = (TextView) view.findViewById(R.id.context_menu_directions_button); @@ -543,7 +545,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo if (showShowHideButton) { openMenuHeaderOnly(); } else { - openMenuFullScreen(); + openMenuHalfScreen(); } } }); @@ -575,7 +577,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo private void processScreenHeight(ViewParent parent) { View container = (View)parent; screenHeight = container.getHeight() + AndroidUtils.getStatusBarHeight(getActivity()); - skipHalfScreenStateLimit = screenHeight * SKIP_HALF_SCREEN_STATE_KOEF; + skipScreenStateLimit = screenHeight * SKIP_HALF_SCREEN_STATE_KOEF; viewHeight = screenHeight - AndroidUtils.getStatusBarHeight(getMapActivity()); } @@ -596,19 +598,22 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo } } - private void changeMenuState(int currentY, boolean skipHalfScreenState, + private void changeMenuState(int currentY, boolean skipScreenState, boolean slidingUp, boolean slidingDown) { boolean needCloseMenu = false; int oldMenuState = menu.getCurrentMenuState(); + if (slidingDown && !skipScreenState && oldMenuState == MenuState.FULL_SCREEN && currentY < topScreenPosY) { + slidingDown = false; + } if (menuBottomViewHeight > 0 && slidingUp) { menu.slideUp(); - if (skipHalfScreenState) { + if (skipScreenState) { menu.slideUp(); } } else if (slidingDown) { needCloseMenu = !menu.slideDown(); - if (!needCloseMenu && skipHalfScreenState) { + if (!needCloseMenu && skipScreenState) { menu.slideDown(); } } @@ -1240,6 +1245,19 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo } } + private void updateZoomButtonsVisibility(int menuState) { + boolean zoomButtonsVisible = menu.zoomButtonsVisible() && menuState == MenuState.HEADER_ONLY; + if (zoomButtonsVisible) { + if (zoomButtonsView.getVisibility() != View.VISIBLE) { + zoomButtonsView.setVisibility(View.VISIBLE); + } + } else { + if (zoomButtonsView.getVisibility() == View.VISIBLE) { + zoomButtonsView.setVisibility(View.INVISIBLE); + } + } + } + private int getPosY() { return getPosY(CURRENT_Y_UNDEFINED, false); } @@ -1256,22 +1274,23 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo minHalfY = viewHeight - (int) (viewHeight * menu.getHalfScreenMaxHeightKoef()); } else { destinationState = MenuState.HEADER_ONLY; - minHalfY = viewHeight; + minHalfY = viewHeight - (int) (viewHeight * .75f); } + updateZoomButtonsVisibility(destinationState); + int posY = 0; switch (destinationState) { case MenuState.HEADER_ONLY: posY = viewHeight - menuTitleHeight; break; case MenuState.HALF_SCREEN: - posY = viewHeight - menuFullHeightMax; - posY = Math.max(posY, minHalfY); + posY = minHalfY; break; case MenuState.FULL_SCREEN: if (currentY != CURRENT_Y_UNDEFINED) { int maxPosY = viewHeight - menuFullHeightMax; - int minPosY = Math.max(maxPosY, minHalfY); + int minPosY = addStatusBarHeightIfNeeded(topScreenPosY); if (maxPosY > minPosY) { maxPosY = minPosY; } @@ -1283,8 +1302,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo posY = currentY; } } else { - posY = -dpToPx(SHADOW_HEIGHT_TOP_DP); - posY = addStatusBarHeightIfNeeded(posY); + posY = addStatusBarHeightIfNeeded(topScreenPosY); } break; default: @@ -1417,7 +1435,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo } private void doLayoutMenu() { - final int posY = getPosY(); + final int posY = getPosY(getViewY(), false); setViewY(posY, true, !initLayout || !centered); updateMainViewLayout(posY); } @@ -1432,6 +1450,10 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo } } + public void updateLayout() { + runLayoutListener(); + } + public void refreshTitle() { setAddressLocation(); runLayoutListener(); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java index 995fd76267..a795e68072 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java @@ -95,10 +95,16 @@ public class MenuBuilder { private CardsRowBuilder onlinePhotoCardsRow; private List onlinePhotoCards; + private CollapseExpandListener collapseExpandListener; + private String preferredMapLang; private String preferredMapAppLang; private boolean transliterateNames; + public interface CollapseExpandListener { + void onCollapseExpand(boolean collapsed); + } + public class PlainMenuItem { private int iconId; private String buttonText; @@ -158,22 +164,22 @@ public class MenuBuilder { public static class CollapsableView { private View contenView; + private MenuBuilder menuBuilder; private OsmandPreference collapsedPref; private boolean collapsed; - private OnCollExpListener onCollExpListener; + private CollapseExpandListener collapseExpandListener; - public interface OnCollExpListener { - void onCollapseExpand(boolean collapsed); - } - - public CollapsableView(@NonNull View contenView, @NonNull OsmandPreference collapsedPref) { + public CollapsableView(@NonNull View contenView, @NonNull MenuBuilder menuBuilder, + @NonNull OsmandPreference collapsedPref) { this.contenView = contenView; + this.menuBuilder = menuBuilder; this.collapsedPref = collapsedPref; } - public CollapsableView(@NonNull View contenView, boolean collapsed) { + public CollapsableView(@NonNull View contenView, @NonNull MenuBuilder menuBuilder, boolean collapsed) { this.contenView = contenView; this.collapsed = collapsed; + this.menuBuilder = menuBuilder; } public View getContenView() { @@ -194,17 +200,20 @@ public class MenuBuilder { } else { this.collapsed = collapsed; } - if (onCollExpListener != null) { - onCollExpListener.onCollapseExpand(collapsed); + if (collapseExpandListener != null) { + collapseExpandListener.onCollapseExpand(collapsed); + } + if (menuBuilder.collapseExpandListener != null) { + menuBuilder.collapseExpandListener.onCollapseExpand(collapsed); } } - public OnCollExpListener getOnCollExpListener() { - return onCollExpListener; + public CollapseExpandListener getCollapseExpandListener() { + return collapseExpandListener; } - public void setOnCollExpListener(OnCollExpListener onCollExpListener) { - this.onCollExpListener = onCollExpListener; + public void setCollapseExpandListener(CollapseExpandListener collapseExpandListener) { + this.collapseExpandListener = collapseExpandListener; } } @@ -221,6 +230,10 @@ public class MenuBuilder { transliterateNames = app.getSettings().MAP_TRANSLITERATE_NAMES.get(); } + public void setCollapseExpandListener(CollapseExpandListener collapseExpandListener) { + this.collapseExpandListener = collapseExpandListener; + } + public void setRoutes(List routes) { this.routes = routes; } @@ -378,9 +391,9 @@ public class MenuBuilder { boolean needUpdateOnly = onlinePhotoCardsRow != null && onlinePhotoCardsRow.getMenuBuilder() == this; onlinePhotoCardsRow = new CardsRowBuilder(this, view, false); onlinePhotoCardsRow.build(); - CollapsableView collapsableView = new CollapsableView(onlinePhotoCardsRow.getContentView(), + CollapsableView collapsableView = new CollapsableView(onlinePhotoCardsRow.getContentView(), this, app.getSettings().ONLINE_PHOTOS_ROW_COLLAPSED); - collapsableView.setOnCollExpListener(new CollapsableView.OnCollExpListener() { + collapsableView.setCollapseExpandListener(new CollapseExpandListener() { @Override public void onCollapseExpand(boolean collapsed) { if (!collapsed && onlinePhotoCards == null) { @@ -584,13 +597,13 @@ public class MenuBuilder { @Override public void onClick(View v) { if (collapsableView.getContenView().getVisibility() == View.VISIBLE) { - collapsableView.setCollapsed(true); collapsableView.getContenView().setVisibility(View.GONE); iconViewCollapse.setImageDrawable(getCollapseIcon(true)); + collapsableView.setCollapsed(true); } else { - collapsableView.setCollapsed(false); collapsableView.getContenView().setVisibility(View.VISIBLE); iconViewCollapse.setImageDrawable(getCollapseIcon(false)); + collapsableView.setCollapsed(false); } } }); @@ -844,7 +857,7 @@ public class MenuBuilder { buildTransportRouteRow(view, r, listener, showDivider); } - return new CollapsableView(view, collapsed); + return new CollapsableView(view, this, collapsed); } protected CollapsableView getCollapsableTextView(Context context, boolean collapsed, String text) { @@ -857,7 +870,7 @@ public class MenuBuilder { textView.setTextSize(16); textView.setTextColor(app.getResources().getColor(light ? R.color.ctx_menu_bottom_view_text_color_light : R.color.ctx_menu_bottom_view_text_color_dark)); textView.setText(text); - return new CollapsableView(textView, collapsed); + return new CollapsableView(textView, this, collapsed); } protected CollapsableView getCollapsableFavouritesView(final Context context, boolean collapsed, @NonNull final FavoriteGroup group, FavouritePoint selectedPoint) { @@ -901,7 +914,7 @@ public class MenuBuilder { view.addView(button); } - return new CollapsableView(view, collapsed); + return new CollapsableView(view, this, collapsed); } protected CollapsableView getCollapsableWaypointsView(final Context context, boolean collapsed, @NonNull final GPXFile gpxFile, WptPt selectedPoint) { @@ -944,7 +957,7 @@ public class MenuBuilder { view.addView(button); } - return new CollapsableView(view, collapsed); + return new CollapsableView(view, this, collapsed); } protected CollapsableView getCollapsableWikiView(Context context, boolean collapsed) { @@ -966,7 +979,7 @@ public class MenuBuilder { view.addView(button); } - return new CollapsableView(view, collapsed); + return new CollapsableView(view, this, collapsed); } protected LinearLayout buildCollapsableContentView(Context context, boolean collapsed, boolean needMargin) { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java index 9491e2daec..f6086484db 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java @@ -42,6 +42,7 @@ import net.osmand.plus.download.DownloadIndexesThread; import net.osmand.plus.download.DownloadValidationManager; import net.osmand.plus.download.IndexItem; import net.osmand.plus.helpers.SearchHistoryHelper; +import net.osmand.plus.mapcontextmenu.MenuBuilder.CollapseExpandListener; import net.osmand.plus.mapcontextmenu.controllers.AMapPointMenuController; import net.osmand.plus.mapcontextmenu.controllers.AmenityMenuController; import net.osmand.plus.mapcontextmenu.controllers.FavouritePointMenuController; @@ -81,7 +82,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; -public abstract class MenuController extends BaseMenuController { +public abstract class MenuController extends BaseMenuController implements CollapseExpandListener { public static class MenuState { public static final int HEADER_ONLY = 1; @@ -124,10 +125,18 @@ public abstract class MenuController extends BaseMenuController { super(mapActivity); this.pointDescription = pointDescription; this.builder = builder; + this.builder.setCollapseExpandListener(this); this.currentMenuState = getInitialMenuState(); this.builder.setLight(isLight()); } + @Override + public void onCollapseExpand(boolean collapsed) { + if (mapContextMenu != null) { + mapContextMenu.updateMenuUI(); + } + } + public String getPreferredMapLang() { return builder.getPreferredMapLang(); } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java index 19d176fe5f..7529738871 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java @@ -200,13 +200,13 @@ public class AmenityMenuBuilder extends MenuBuilder { @Override public void onClick(View v) { if (collapsableView.getContenView().getVisibility() == View.VISIBLE) { - collapsableView.setCollapsed(true); collapsableView.getContenView().setVisibility(View.GONE); iconViewCollapse.setImageDrawable(getCollapseIcon(true)); + collapsableView.setCollapsed(true); } else { - collapsableView.setCollapsed(false); collapsableView.getContenView().setVisibility(View.VISIBLE); iconViewCollapse.setImageDrawable(getCollapseIcon(false)); + collapsableView.setCollapsed(false); } } }); From f58c95d70ab5ec683d7f1871177758be8c060cb5 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Tue, 30 Jan 2018 15:22:30 +0200 Subject: [PATCH 11/15] Remove unnecessary Async Task --- OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java b/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java index cdeb30e7c6..0cec2802de 100644 --- a/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java +++ b/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java @@ -1142,15 +1142,8 @@ public class OsmandAidlApi { if (f.exists()) { GpxDataItem item = app.getGpxDatabase().getItem(f); if (item != null && item.isApiImported()) { - new AsyncTask() { - - @Override - protected Void doInBackground(File... files) { - Algorithms.removeAllFiles(f); - app.getGpxDatabase().remove(f); - return null; - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, f); + Algorithms.removeAllFiles(f); + app.getGpxDatabase().remove(f); } } } From 019343424790e96ffc453c8a68af95b4ddd563bc Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Tue, 30 Jan 2018 15:26:33 +0200 Subject: [PATCH 12/15] Return true if gpx removed or hided --- OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java b/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java index 0cec2802de..c5edd678c9 100644 --- a/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java +++ b/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java @@ -1113,6 +1113,7 @@ public class OsmandAidlApi { if (selectedGpxFile != null) { app.getSelectedGpxHelper().selectGpxFile(selectedGpxFile.getGpxFile(), false, false); refreshMap(); + return true; } } return false; @@ -1144,6 +1145,7 @@ public class OsmandAidlApi { if (item != null && item.isApiImported()) { Algorithms.removeAllFiles(f); app.getGpxDatabase().remove(f); + return true; } } } From 2fa410947dd44a36be7e3896a703828ee6550712 Mon Sep 17 00:00:00 2001 From: Alexey Kulish Date: Tue, 30 Jan 2018 17:31:36 +0300 Subject: [PATCH 13/15] Fix context menu landscape mode --- .../MapContextMenuFragment.java | 59 +++++++++++-------- .../plus/mapcontextmenu/MenuController.java | 29 +++++++++ 2 files changed, 63 insertions(+), 25 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java index 50092e95c9..f9d3980cf5 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java @@ -126,7 +126,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo markerPaddingPx = dpToPx(MARKER_PADDING_DP); markerPaddingXPx = dpToPx(MARKER_PADDING_X_DP); - topScreenPosY = -dpToPx(SHADOW_HEIGHT_TOP_DP); + topScreenPosY = addStatusBarHeightIfNeeded(-dpToPx(SHADOW_HEIGHT_TOP_DP)); menu = getMapActivity().getContextMenu(); view = inflater.inflate(R.layout.map_context_menu_fragment, container, false); @@ -272,11 +272,10 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo openMenuHalfScreen(); return true; } - - if (menu.isLandscapeLayout()) { - if (swipeDetector.onTouchEvent(event)) { - menu.close(); - } + } + if (menu.isLandscapeLayout()) { + if (swipeDetector.onTouchEvent(event)) { + menu.close(); return true; } } @@ -301,6 +300,9 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo hasMoved = true; float y = event.getY(); float newY = getViewY() + (y - dy); + if (menu.isLandscapeLayout() && newY > 0) { + newY = 0; + } setViewY((int) newY, false, false); menuFullHeight = view.getHeight() - (int) newY + 10; @@ -309,11 +311,14 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo mainView.setLayoutParams(lp); mainView.requestLayout(); - velocity.addMovement(event); - velocity.computeCurrentVelocity(1000); - velocityY = Math.abs(velocity.getYVelocity()); - if (velocityY > maxVelocityY) - maxVelocityY = velocityY; + if (velocity != null) { + velocity.addMovement(event); + velocity.computeCurrentVelocity(1000); + velocityY = Math.abs(velocity.getYVelocity()); + if (velocityY > maxVelocityY) { + maxVelocityY = velocityY; + } + } } break; @@ -327,7 +332,9 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo slidingUp = Math.abs(maxVelocityY) > 500 && (currentY - dyMain) < -50; slidingDown = Math.abs(maxVelocityY) > 500 && (currentY - dyMain) > 50; - velocity.recycle(); + if (velocity != null) { + velocity.recycle(); + } boolean skipScreenState = Math.abs(currentY - dyMain) > skipScreenStateLimit; changeMenuState(currentY, skipScreenState, slidingUp, slidingDown); @@ -603,18 +610,20 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo boolean needCloseMenu = false; int oldMenuState = menu.getCurrentMenuState(); - if (slidingDown && !skipScreenState && oldMenuState == MenuState.FULL_SCREEN && currentY < topScreenPosY) { - slidingDown = false; - } - if (menuBottomViewHeight > 0 && slidingUp) { - menu.slideUp(); - if (skipScreenState) { - menu.slideUp(); + if (!menu.isLandscapeLayout()) { + if (slidingDown && !skipScreenState && oldMenuState == MenuState.FULL_SCREEN && currentY < topScreenPosY) { + slidingDown = false; } - } else if (slidingDown) { - needCloseMenu = !menu.slideDown(); - if (!needCloseMenu && skipScreenState) { - menu.slideDown(); + if (menuBottomViewHeight > 0 && slidingUp) { + menu.slideUp(); + if (skipScreenState) { + menu.slideUp(); + } + } else if (slidingDown) { + needCloseMenu = !menu.slideDown(); + if (!needCloseMenu && skipScreenState) { + menu.slideDown(); + } } } int newMenuState = menu.getCurrentMenuState(); @@ -1290,7 +1299,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo case MenuState.FULL_SCREEN: if (currentY != CURRENT_Y_UNDEFINED) { int maxPosY = viewHeight - menuFullHeightMax; - int minPosY = addStatusBarHeightIfNeeded(topScreenPosY); + int minPosY = topScreenPosY; if (maxPosY > minPosY) { maxPosY = minPosY; } @@ -1302,7 +1311,7 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo posY = currentY; } } else { - posY = addStatusBarHeightIfNeeded(topScreenPosY); + posY = topScreenPosY; } break; default: diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java index f6086484db..be62359549 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuController.java @@ -130,6 +130,34 @@ public abstract class MenuController extends BaseMenuController implements Colla this.builder.setLight(isLight()); } + public void onCreated() { + /* + toolbarController = new ContextMenuToolbarController(this); + toolbarController.setTitle(getNameStr()); + toolbarController.setOnBackButtonClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mapContextMenu != null) { + mapContextMenu.backToolbarAction(MenuController.this); + } + } + }); + toolbarController.setOnTitleClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + } + }); + toolbarController.setOnCloseButtonClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mapContextMenu != null) { + mapContextMenu.close(); + } + } + }); + */ + } + @Override public void onCollapseExpand(boolean collapsed) { if (mapContextMenu != null) { @@ -217,6 +245,7 @@ public abstract class MenuController extends BaseMenuController implements Colla } menuController.menuType = menuType; menuController.setLatLon(latLon); + menuController.onCreated(); return menuController; } From ed99ee8c732670c50d73350b5a3c960731cced46 Mon Sep 17 00:00:00 2001 From: xmd5a Date: Tue, 30 Jan 2018 17:34:47 +0300 Subject: [PATCH 14/15] Add phrase --- OsmAnd/res/values-ru/phrases.xml | 2 ++ OsmAnd/res/values/phrases.xml | 1 + 2 files changed, 3 insertions(+) diff --git a/OsmAnd/res/values-ru/phrases.xml b/OsmAnd/res/values-ru/phrases.xml index 13184a236b..3220e7c2cf 100644 --- a/OsmAnd/res/values-ru/phrases.xml +++ b/OsmAnd/res/values-ru/phrases.xml @@ -3726,4 +3726,6 @@ Сельскохозяйственный магазин + Магазин каминов + diff --git a/OsmAnd/res/values/phrases.xml b/OsmAnd/res/values/phrases.xml index 91c7c1c70b..dd43fb2776 100644 --- a/OsmAnd/res/values/phrases.xml +++ b/OsmAnd/res/values/phrases.xml @@ -3702,5 +3702,6 @@ Agricultural store + Fireplace store From 519097e762679326963b5861bd56106e480d47a2 Mon Sep 17 00:00:00 2001 From: Dmitriy Prodchenko Date: Tue, 30 Jan 2018 18:03:03 +0200 Subject: [PATCH 15/15] Add icon for simple file type --- OsmAnd/res/drawable-hdpi/ic_type_file.png | Bin 0 -> 1156 bytes OsmAnd/res/drawable-mdpi/ic_type_file.png | Bin 0 -> 1106 bytes OsmAnd/res/drawable-xhdpi/ic_type_file.png | Bin 0 -> 1207 bytes OsmAnd/res/drawable-xxhdpi/ic_type_file.png | Bin 0 -> 1291 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 OsmAnd/res/drawable-hdpi/ic_type_file.png create mode 100644 OsmAnd/res/drawable-mdpi/ic_type_file.png create mode 100644 OsmAnd/res/drawable-xhdpi/ic_type_file.png create mode 100644 OsmAnd/res/drawable-xxhdpi/ic_type_file.png diff --git a/OsmAnd/res/drawable-hdpi/ic_type_file.png b/OsmAnd/res/drawable-hdpi/ic_type_file.png new file mode 100644 index 0000000000000000000000000000000000000000..1fc6a16b5174d8adbf2d34390ecfaf63aaa09822 GIT binary patch literal 1156 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 LF7f6Ak39Z2jkUGf literal 0 HcmV?d00001