Skip to content

Commit 6646396

Browse files
committed
feat: Migrate to Android V2 embedding
2023. 04. 14 - Update to analysis_options.yaml - Update to android/build.gradle - Update to android/gradle.properties - Update to android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java - Update to example/android/app/src/main/java/com/yourcompany/flutter_webview_plugin_example/MainActivity.java - Update to example/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java - Update to example/ios/Runner/GeneratedPluginRegistrant.h - Update to example/ios/Runner/GeneratedPluginRegistrant.m
1 parent 6ab3a30 commit 6646396

File tree

8 files changed

+119
-38
lines changed

8 files changed

+119
-38
lines changed

analysis_options.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ linter:
1212
# - always_specify_types
1313
- annotate_overrides
1414
# - avoid_annotating_with_dynamic # conflicts with always_specify_types
15-
- avoid_as
15+
# - avoid_as
1616
# - avoid_bool_literals_in_conditional_expressions # not yet tested
1717
# - avoid_catches_without_on_clauses # we do this commonly
1818
# - avoid_catching_errors # we do this commonly
@@ -71,7 +71,7 @@ linter:
7171
# - parameter_assignments # we do this commonly
7272
- prefer_adjacent_string_concatenation
7373
- prefer_asserts_in_initializer_lists
74-
- prefer_bool_in_asserts
74+
# - prefer_bool_in_asserts
7575
- prefer_collection_literals
7676
- prefer_conditional_assignment
7777
- prefer_const_constructors
@@ -97,7 +97,7 @@ linter:
9797
- slash_for_doc_comments
9898
- sort_constructors_first
9999
- sort_unnamed_constructors_first
100-
- super_goes_last
100+
# - super_goes_last
101101
- test_types_in_equals
102102
- throw_in_finally
103103
# - type_annotate_public_apis # subset of always_specify_types

android/build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ allprojects {
3434
apply plugin: 'com.android.library'
3535

3636
android {
37-
compileSdkVersion 28
37+
// compileSdkVersion 28
38+
compileSdkVersion 30
3839

3940
defaultConfig {
4041
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
4142
// NOTE(jeffmikels): When targetSdkVersion or minSdkVersion is not set or < 4, gradle adds
4243
// additional scary permissions such as WRITE_EXTERNAL_STORAGE and READ_PHONE_STATE.
4344
minSdkVersion 16
45+
targetSdkVersion 30
4446
}
4547
lintOptions {
4648
disable 'InvalidPackage'

android/gradle.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
org.gradle.jvmargs=-Xmx1536M
22
android.enableR8=true
3+
android.useAndroidX=true
4+
android.enableJetifier=true

android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java

Lines changed: 66 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,86 @@
2020
import io.flutter.plugin.common.MethodChannel;
2121
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
2222
import io.flutter.plugin.common.PluginRegistry;
23+
import io.flutter.embedding.engine.plugins.FlutterPlugin;
24+
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
25+
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
26+
import io.flutter.plugin.common.BinaryMessenger;
2327

2428
/**
2529
* FlutterWebviewPlugin
2630
*/
27-
public class FlutterWebviewPlugin implements MethodCallHandler, PluginRegistry.ActivityResultListener {
31+
public class FlutterWebviewPlugin implements MethodCallHandler, FlutterPlugin, ActivityAware, PluginRegistry.ActivityResultListener {
32+
// private Activity activity;
33+
// private WebviewManager webViewManager;
34+
// private Context context;
35+
// static MethodChannel channel;
36+
// private static final String CHANNEL_NAME = "flutter_webview_plugin";
37+
// private static final String JS_CHANNEL_NAMES_FIELD = "javascriptChannelNames";
38+
39+
// public static void registerWith(PluginRegistry.Registrar registrar) {
40+
// if (registrar.activity() != null) {
41+
// channel = new MethodChannel(registrar.messenger(), CHANNEL_NAME);
42+
// final FlutterWebviewPlugin instance = new FlutterWebviewPlugin(registrar.activity(), registrar.activeContext());
43+
// registrar.addActivityResultListener(instance);
44+
// channel.setMethodCallHandler(instance);
45+
// }
46+
// }
47+
48+
// FlutterWebviewPlugin(Activity activity, Context context) {
49+
// this.activity = activity;
50+
// this.context = context;
51+
// }
52+
2853
private Activity activity;
2954
private WebviewManager webViewManager;
3055
private Context context;
3156
static MethodChannel channel;
3257
private static final String CHANNEL_NAME = "flutter_webview_plugin";
3358
private static final String JS_CHANNEL_NAMES_FIELD = "javascriptChannelNames";
3459

35-
public static void registerWith(PluginRegistry.Registrar registrar) {
36-
if (registrar.activity() != null) {
37-
channel = new MethodChannel(registrar.messenger(), CHANNEL_NAME);
38-
final FlutterWebviewPlugin instance = new FlutterWebviewPlugin(registrar.activity(), registrar.activeContext());
39-
registrar.addActivityResultListener(instance);
40-
channel.setMethodCallHandler(instance);
60+
@Override
61+
public void onAttachedToEngine(FlutterPluginBinding binding) {
62+
BinaryMessenger messenger = binding.getBinaryMessenger();
63+
channel = new MethodChannel(messenger, CHANNEL_NAME);
64+
channel.setMethodCallHandler(this);
65+
}
66+
67+
@Override
68+
public void onDetachedFromEngine(FlutterPluginBinding binding) {
69+
if (channel != null) {
70+
channel.setMethodCallHandler(null);
71+
channel = null;
4172
}
4273
}
4374

44-
FlutterWebviewPlugin(Activity activity, Context context) {
45-
this.activity = activity;
46-
this.context = context;
75+
@Override
76+
public void onAttachedToActivity(ActivityPluginBinding binding) {
77+
activity = binding.getActivity();
78+
context = activity.getApplicationContext();
79+
binding.addActivityResultListener(this);
80+
}
81+
82+
@Override
83+
public void onDetachedFromActivityForConfigChanges() {
84+
if (activity != null) {
85+
activity = null;
86+
context = null;
87+
}
88+
}
89+
90+
@Override
91+
public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) {
92+
activity = binding.getActivity();
93+
context = activity.getApplicationContext();
94+
binding.addActivityResultListener(this);
95+
}
96+
97+
@Override
98+
public void onDetachedFromActivity() {
99+
if (activity != null) {
100+
activity = null;
101+
context = null;
102+
}
47103
}
48104

49105
@Override
Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
1-
package com.yourcompany.flutter_webview_plugin_example;
1+
// package com.yourcompany.flutter_webview_plugin_example;
2+
3+
// import android.os.Bundle;
4+
5+
// import io.flutter.app.FlutterActivity;
6+
// import io.flutter.plugins.GeneratedPluginRegistrant;
27

3-
import android.os.Bundle;
8+
// public class MainActivity extends FlutterActivity {
9+
// @Override
10+
// protected void onCreate(Bundle savedInstanceState) {
11+
// super.onCreate(savedInstanceState);
12+
// GeneratedPluginRegistrant.registerWith(this);
13+
// }
14+
// }
15+
16+
package com.yourcompany.flutter_webview_plugin_example;
417

5-
import io.flutter.app.FlutterActivity;
6-
import io.flutter.plugins.GeneratedPluginRegistrant;
18+
import io.flutter.embedding.android.FlutterActivity;
719

820
public class MainActivity extends FlutterActivity {
9-
@Override
10-
protected void onCreate(Bundle savedInstanceState) {
11-
super.onCreate(savedInstanceState);
12-
GeneratedPluginRegistrant.registerWith(this);
13-
}
1421
}
Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,35 @@
11
package io.flutter.plugins;
22

3-
import io.flutter.plugin.common.PluginRegistry;
3+
// import io.flutter.plugin.common.PluginRegistry;
4+
import androidx.annotation.NonNull;
5+
import io.flutter.embedding.engine.FlutterEngine;
6+
import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry;
47
import com.flutter_webview_plugin.FlutterWebviewPlugin;
58

69
/**
710
* Generated file. Do not edit.
811
*/
9-
public final class GeneratedPluginRegistrant {
10-
public static void registerWith(PluginRegistry registry) {
11-
if (alreadyRegisteredWith(registry)) {
12-
return;
13-
}
14-
FlutterWebviewPlugin.registerWith(registry.registrarFor("com.flutter_webview_plugin.FlutterWebviewPlugin"));
15-
}
12+
// public final class GeneratedPluginRegistrant {
13+
// public static void registerWith(PluginRegistry registry) {
14+
// if (alreadyRegisteredWith(registry)) {
15+
// return;
16+
// }
17+
// FlutterWebviewPlugin.registerWith(registry.registrarFor("com.flutter_webview_plugin.FlutterWebviewPlugin"));
18+
// }
1619

17-
private static boolean alreadyRegisteredWith(PluginRegistry registry) {
18-
final String key = GeneratedPluginRegistrant.class.getCanonicalName();
19-
if (registry.hasPlugin(key)) {
20-
return true;
21-
}
22-
registry.registrarFor(key);
23-
return false;
20+
// private static boolean alreadyRegisteredWith(PluginRegistry registry) {
21+
// final String key = GeneratedPluginRegistrant.class.getCanonicalName();
22+
// if (registry.hasPlugin(key)) {
23+
// return true;
24+
// }
25+
// registry.registrarFor(key);
26+
// return false;
27+
// }
28+
// }
29+
30+
public final class GeneratedPluginRegistrant {
31+
public static void registerWith(@NonNull FlutterEngine flutterEngine) {
32+
ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine);
33+
FlutterWebviewPlugin.registerWith(shimPluginRegistry.registrarFor("com.flutter_webview_plugin.FlutterWebviewPlugin"));
2434
}
2535
}

example/ios/Runner/GeneratedPluginRegistrant.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// Generated file. Do not edit.
33
//
44

5+
// clang-format off
6+
57
#ifndef GeneratedPluginRegistrant_h
68
#define GeneratedPluginRegistrant_h
79

example/ios/Runner/GeneratedPluginRegistrant.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// Generated file. Do not edit.
33
//
44

5+
// clang-format off
6+
57
#import "GeneratedPluginRegistrant.h"
68

79
#if __has_include(<flutter_webview_plugin/FlutterWebviewPlugin.h>)

0 commit comments

Comments
 (0)