From a8501ef3928718068df85715cde15f8fafaf6fdc Mon Sep 17 00:00:00 2001 From: Abhishek Shroff Date: Tue, 29 Dec 2020 22:38:12 +0530 Subject: [PATCH] [offline][android] Merge offline regions --- .../mapbox/mapboxgl/GlobalMethodHandler.java | 4 ++++ .../mapbox/mapboxgl/OfflineManagerUtils.java | 19 +++++++++++++++++++ lib/src/global.dart | 15 +++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/android/src/main/java/com/mapbox/mapboxgl/GlobalMethodHandler.java b/android/src/main/java/com/mapbox/mapboxgl/GlobalMethodHandler.java index 818dcad8d..96274e514 100644 --- a/android/src/main/java/com/mapbox/mapboxgl/GlobalMethodHandler.java +++ b/android/src/main/java/com/mapbox/mapboxgl/GlobalMethodHandler.java @@ -59,6 +59,10 @@ public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) { installOfflineMapTiles(tilesDb); result.success(null); break; + case "mergeOfflineRegions": + OfflineManagerUtils.mergeRegions(result, context, methodCall.argument("path")); + break; + case "downloadOfflineRegion": // Get download region arguments from caller OfflineRegionData regionData = new Gson().fromJson(methodCall.argument("region").toString(), OfflineRegionData.class); diff --git a/android/src/main/java/com/mapbox/mapboxgl/OfflineManagerUtils.java b/android/src/main/java/com/mapbox/mapboxgl/OfflineManagerUtils.java index f105a710b..85f762d70 100644 --- a/android/src/main/java/com/mapbox/mapboxgl/OfflineManagerUtils.java +++ b/android/src/main/java/com/mapbox/mapboxgl/OfflineManagerUtils.java @@ -23,6 +23,25 @@ abstract class OfflineManagerUtils { private static final String TAG = "OfflineManagerUtils"; + static void mergeRegions(MethodChannel.Result result, Context context, String path) { + OfflineManager.getInstance(context).mergeOfflineRegions(path, new OfflineManager.MergeOfflineRegionsCallback() { + public void onMerge(OfflineRegion[] offlineRegions) { + if (result == null) return; + List regionsArgs = new ArrayList<>(); + for (OfflineRegion offlineRegion : offlineRegions) { + regionsArgs.add(OfflineRegionData.fromOfflineRegion(offlineRegion)); + } + String json = new Gson().toJson(regionsArgs); + result.success(json); + } + + public void onError(String error) { + if (result == null) return; + result.error("mergeOfflineRegions Error", error, null); + } + }); + } + static void downloadRegion( MethodChannel.Result result, Context context, diff --git a/lib/src/global.dart b/lib/src/global.dart index 354c2db02..cd3ea51c4 100644 --- a/lib/src/global.dart +++ b/lib/src/global.dart @@ -18,6 +18,21 @@ Future installOfflineMapTiles(String tilesDb) async { ); } +Future> mergeOfflineRegions( + String path, { + String accessToken, +}) async { + String regionsJson = await _globalChannel.invokeMethod( + 'mergeOfflineRegions', + { + 'path': path, + 'accessToken': accessToken, + }, + ); + Iterable regions = json.decode(regionsJson); + return regions.map((region) => OfflineRegion.fromJson(region)).toList(); +} + Future> getListOfRegions({String accessToken}) async { String regionsJson = await _globalChannel.invokeMethod( 'getListOfRegions',