diff --git a/android/src/main/java/flutter/plugins/screen/screen/ScreenPlugin.java b/android/src/main/java/flutter/plugins/screen/screen/ScreenPlugin.java index e98a2a7..005d451 100644 --- a/android/src/main/java/flutter/plugins/screen/screen/ScreenPlugin.java +++ b/android/src/main/java/flutter/plugins/screen/screen/ScreenPlugin.java @@ -3,53 +3,66 @@ import android.provider.Settings; import android.view.WindowManager; + +import androidx.annotation.NonNull; + +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.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.flutter.plugin.common.MethodChannel.MethodCallHandler; import io.flutter.plugin.common.MethodChannel.Result; -import io.flutter.plugin.common.MethodCall; -import io.flutter.plugin.common.PluginRegistry.Registrar; +import io.flutter.plugin.common.PluginRegistry; /** * ScreenPlugin */ -public class ScreenPlugin implements MethodCallHandler { +public class ScreenPlugin implements FlutterPlugin, MethodCallHandler, ActivityAware { - private ScreenPlugin(Registrar registrar){ - this._registrar = registrar; - } - private Registrar _registrar; +// public ScreenPlugin(PluginRegistry.Registrar registrar){ +// this._registrar = registrar; +// } - public static void registerWith(Registrar registrar) { - final MethodChannel channel = new MethodChannel(registrar.messenger(), "github.com/clovisnicolas/flutter_screen"); - channel.setMethodCallHandler(new ScreenPlugin(registrar)); + public ScreenPlugin(){ } +// private PluginRegistry.Registrar _registrar; + private MethodChannel channel; + private FlutterPluginBinding flutterPluginBinding; + private ActivityPluginBinding activityPluginBinding; + +// public static void registerWith(@NonNull PluginRegistry.Registrar registrar) { +// final MethodChannel channel = new MethodChannel(registrar.messenger(), "github.com/clovisnicolas/flutter_screen"); +// channel.setMethodCallHandler(new ScreenPlugin(registrar)); +// } @Override - public void onMethodCall(MethodCall call, Result result) { + public void onMethodCall(@NonNull MethodCall call, Result result) { + switch(call.method){ case "brightness": result.success(getBrightness()); break; case "setBrightness": double brightness = call.argument("brightness"); - WindowManager.LayoutParams layoutParams = _registrar.activity().getWindow().getAttributes(); + WindowManager.LayoutParams layoutParams = activityPluginBinding.getActivity().getWindow().getAttributes(); layoutParams.screenBrightness = (float)brightness; - _registrar.activity().getWindow().setAttributes(layoutParams); + activityPluginBinding.getActivity().getWindow().setAttributes(layoutParams); result.success(null); break; case "isKeptOn": - int flags = _registrar.activity().getWindow().getAttributes().flags; + int flags = activityPluginBinding.getActivity().getWindow().getAttributes().flags; result.success((flags & WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) != 0) ; break; case "keepOn": Boolean on = call.argument("on"); if (on) { System.out.println("Keeping screen on "); - _registrar.activity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + activityPluginBinding.getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } else{ System.out.println("Not keeping screen on"); - _registrar.activity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + activityPluginBinding.getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } result.success(null); break; @@ -61,10 +74,10 @@ public void onMethodCall(MethodCall call, Result result) { } private float getBrightness(){ - float result = _registrar.activity().getWindow().getAttributes().screenBrightness; + float result = activityPluginBinding.getActivity().getWindow().getAttributes().screenBrightness; if (result < 0) { // the application is using the system brightness try { - result = Settings.System.getInt(_registrar.context().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS) / (float)255; + result = Settings.System.getInt(flutterPluginBinding.getApplicationContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS) / (float)255; } catch (Settings.SettingNotFoundException e) { result = 1.0f; e.printStackTrace(); @@ -73,4 +86,35 @@ private float getBrightness(){ return result; } + @Override + public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { + flutterPluginBinding=binding; + channel = new MethodChannel(binding.getBinaryMessenger(), "github.com/clovisnicolas/flutter_screen"); + channel.setMethodCallHandler(this); + } + + @Override + public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { + + } + + @Override + public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) { + activityPluginBinding = binding; + } + + @Override + public void onDetachedFromActivityForConfigChanges() { + + } + + @Override + public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) { + + } + + @Override + public void onDetachedFromActivity() { + + } } diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index e3cb76f..42ff9d2 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -15,9 +15,10 @@ additional functionality it is fine to subclass or reimplement FlutterApplication and put your custom class here. --> + android:icon="@mipmap/ic_launcher" + android:allowBackup="false"> - + + diff --git a/example/android/app/src/main/java/flutter/plugins/screen/screenexample/MainActivity.java b/example/android/app/src/main/java/flutter/plugins/screen/screenexample/MainActivity.java index 89e1199..f060834 100644 --- a/example/android/app/src/main/java/flutter/plugins/screen/screenexample/MainActivity.java +++ b/example/android/app/src/main/java/flutter/plugins/screen/screenexample/MainActivity.java @@ -2,13 +2,15 @@ import android.os.Bundle; -import io.flutter.app.FlutterActivity; -import io.flutter.plugins.GeneratedPluginRegistrant; +import androidx.annotation.NonNull; + +import io.flutter.embedding.android.FlutterActivity; +import io.flutter.embedding.engine.FlutterEngine; public class MainActivity extends FlutterActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - GeneratedPluginRegistrant.registerWith(this); - } + + @Override + public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { + super.configureFlutterEngine(flutterEngine); + } } diff --git a/example/android/app/src/main/res/drawable/normal_background.xml b/example/android/app/src/main/res/drawable/normal_background.xml new file mode 100644 index 0000000..9ab37b0 --- /dev/null +++ b/example/android/app/src/main/res/drawable/normal_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml index 00fa441..4a24632 100644 --- a/example/android/app/src/main/res/values/styles.xml +++ b/example/android/app/src/main/res/values/styles.xml @@ -5,4 +5,8 @@ Flutter draws its first frame --> @drawable/launch_background + + diff --git a/example/android/build.gradle b/example/android/build.gradle index 7801b38..3b267c7 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.3.1' + classpath 'com.android.tools.build:gradle:7.0.2' } } diff --git a/example/android/gradle.properties b/example/android/gradle.properties index 8bd86f6..ad8917e 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -1 +1,2 @@ org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true \ No newline at end of file diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index 2819f02..b8793d3 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 91bd273..e6d3a7c 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -1,6 +1,9 @@ name: screen_example description: Demonstrates how to use the screen plugin. +environment: + sdk: ">=2.10.0 <3.0.0" + flutter: ">=2.0.0" dependencies: flutter: sdk: flutter diff --git a/pubspec.yaml b/pubspec.yaml index c3531d0..e9addb9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,8 @@ author: Clovis Nicolas homepage: https://github.com/clovisnicolas/flutter_screen environment: - sdk: '>=2.0.0 <3.0.0' + sdk: ">=2.10.0 <3.0.0" + flutter: ">=2.0.0" dependencies: flutter: