forked from flutter-mapbox-gl/maps
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMapboxMapsPlugin.java
More file actions
104 lines (87 loc) · 3.36 KB
/
MapboxMapsPlugin.java
File metadata and controls
104 lines (87 loc) · 3.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package com.mapbox.mapboxgl;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Lifecycle;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.embedding.engine.plugins.lifecycle.HiddenLifecycleReference;
import io.flutter.plugin.common.MethodChannel;
/**
* Plugin for controlling a set of MapboxMap views to be shown as overlays on top of the Flutter
* view. The overlay should be hidden during transformations or while Flutter is rendering on top of
* the map. A Texture drawn using MapboxMap bitmap snapshots can then be shown instead of the
* overlay.
*/
public class MapboxMapsPlugin implements FlutterPlugin, ActivityAware {
private static final String VIEW_TYPE = "plugins.flutter.io/mapbox_gl";
private static final String CHANNEL_NAME = "plugins.flutter.io/mapbox_gl";
static FlutterAssets flutterAssets;
@Nullable private Lifecycle lifecycle;
@Nullable private MethodChannel methodChannel;
public MapboxMapsPlugin() {
// no-op
}
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
flutterAssets = binding.getFlutterAssets();
methodChannel = new MethodChannel(binding.getBinaryMessenger(), CHANNEL_NAME);
methodChannel.setMethodCallHandler(new GlobalMethodHandler(binding));
binding
.getPlatformViewRegistry()
.registerViewFactory(
VIEW_TYPE,
new MapboxMapFactory(
binding.getBinaryMessenger(),
new LifecycleProvider() {
@Nullable
@Override
public Lifecycle getLifecycle() {
return lifecycle;
}
}));
}
@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
if (methodChannel != null) {
methodChannel.setMethodCallHandler(null);
methodChannel = null;
}
// flutterAssets is static; leave as-is or null it if you prefer.
}
@Override
public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {
lifecycle = FlutterLifecycleAdapter.getActivityLifecycle(binding);
}
@Override
public void onDetachedFromActivityForConfigChanges() {
onDetachedFromActivity();
}
@Override
public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {
onAttachedToActivity(binding);
}
@Override
public void onDetachedFromActivity() {
lifecycle = null;
}
interface LifecycleProvider {
@Nullable
Lifecycle getLifecycle();
}
/** Provides a static method for extracting lifecycle objects from Flutter plugin bindings. */
public static class FlutterLifecycleAdapter {
/**
* Returns the lifecycle object for the activity a plugin is bound to.
*
* <p>Returns null if the Flutter engine version does not include the lifecycle extraction code
* (this probably means the Flutter engine version is too old).
*/
@NonNull
public static Lifecycle getActivityLifecycle(@NonNull ActivityPluginBinding activityPluginBinding) {
HiddenLifecycleReference reference =
(HiddenLifecycleReference) activityPluginBinding.getLifecycle();
return reference.getLifecycle();
}
}
}