diff --git a/packages/sensors_plus/sensors_plus/CHANGELOG.md b/packages/sensors_plus/sensors_plus/CHANGELOG.md index c6e2255bd9..8b0291454f 100644 --- a/packages/sensors_plus/sensors_plus/CHANGELOG.md +++ b/packages/sensors_plus/sensors_plus/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.3.0 + +- Android: Migrate to Kotlin +- Android: Update dependencies, build config updates + ## 1.2.2 - Fix example embedding issues diff --git a/packages/sensors_plus/sensors_plus/README.md b/packages/sensors_plus/sensors_plus/README.md index 5278df0ee9..b53c508563 100644 --- a/packages/sensors_plus/sensors_plus/README.md +++ b/packages/sensors_plus/sensors_plus/README.md @@ -1,12 +1,11 @@ -# sensors +# Sensors Plus [![Flutter Community: sensors_plus](https://fluttercommunity.dev/_github/header/sensors_plus)](https://github.com/fluttercommunity/community) -[![pub package](https://img.shields.io/pub/v/sensors_plus.svg)](https://pub.dev/packages/sensors_plus) +[![sensors_plus](https://github.com/fluttercommunity/plus_plugins/actions/workflows/sensors_plus.yaml/badge.svg)](https://github.com/fluttercommunity/plus_plugins/actions/workflows/sensors_plus.yaml) +[![pub package](https://img.shields.io/pub/v/battery_plus.svg)](https://pub.dev/packages/battery_plus) -

-

build
-

+build A Flutter plugin to access the accelerometer, gyroscope, and magnetometer sensors. @@ -70,9 +69,3 @@ Also see the `example` subdirectory for an example application that uses the sensor data. Check out our website to learn more: [Plus Plugins documentation](https://plus.fluttercommunity.dev/docs/overview) - -**Important:** As of January 2021, the Flutter team is no longer accepting -non-critical PRs for the original set of plugins in `flutter/plugins`, and -instead they should be submitted in this project. -[You can read more about this announcement here](https://github.com/flutter/plugins/blob/master/CONTRIBUTING.md#important-note) -as well as [in the Flutter 2 announcement blog post](https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65). diff --git a/packages/sensors_plus/sensors_plus/android/build.gradle b/packages/sensors_plus/sensors_plus/android/build.gradle index 99f54fe8b3..ee8047d168 100644 --- a/packages/sensors_plus/sensors_plus/android/build.gradle +++ b/packages/sensors_plus/sensors_plus/android/build.gradle @@ -2,13 +2,15 @@ group 'io.flutter.plugins.sensors' version '1.0-SNAPSHOT' buildscript { + ext.kotlin_version = '1.6.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.2' + classpath 'com.android.tools.build:gradle:7.1.1' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -20,6 +22,7 @@ rootProject.allprojects { } apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' android { compileSdkVersion 31 @@ -31,4 +34,8 @@ android { lintOptions { disable 'InvalidPackage' } + + dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + } } diff --git a/packages/sensors_plus/sensors_plus/android/src/main/AndroidManifest.xml b/packages/sensors_plus/sensors_plus/android/src/main/AndroidManifest.xml index 8b4504ee4c..36c24719f0 100644 --- a/packages/sensors_plus/sensors_plus/android/src/main/AndroidManifest.xml +++ b/packages/sensors_plus/sensors_plus/android/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - - + diff --git a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java b/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java deleted file mode 100644 index 0418741057..0000000000 --- a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package dev.fluttercommunity.plus.sensors; - -import android.content.Context; -import android.hardware.Sensor; -import android.hardware.SensorManager; -import androidx.annotation.NonNull; -import io.flutter.embedding.engine.plugins.FlutterPlugin; -import io.flutter.plugin.common.BinaryMessenger; -import io.flutter.plugin.common.EventChannel; - -/** SensorsPlugin */ -public class SensorsPlugin implements FlutterPlugin { - private static final String ACCELEROMETER_CHANNEL_NAME = - "dev.fluttercommunity.plus/sensors/accelerometer"; - private static final String GYROSCOPE_CHANNEL_NAME = - "dev.fluttercommunity.plus/sensors/gyroscope"; - private static final String USER_ACCELEROMETER_CHANNEL_NAME = - "dev.fluttercommunity.plus/sensors/user_accel"; - private static final String MAGNETOMETER_CHANNEL_NAME = - "dev.fluttercommunity.plus/sensors/magnetometer"; - - private EventChannel accelerometerChannel; - private EventChannel userAccelChannel; - private EventChannel gyroscopeChannel; - private EventChannel magnetometerChannel; - - @Override - public void onAttachedToEngine(FlutterPluginBinding binding) { - final Context context = binding.getApplicationContext(); - setupEventChannels(context, binding.getBinaryMessenger()); - } - - @Override - public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { - teardownEventChannels(); - } - - private void setupEventChannels(Context context, BinaryMessenger messenger) { - accelerometerChannel = new EventChannel(messenger, ACCELEROMETER_CHANNEL_NAME); - final StreamHandlerImpl accelerationStreamHandler = - new StreamHandlerImpl( - (SensorManager) context.getSystemService(Context.SENSOR_SERVICE), - Sensor.TYPE_ACCELEROMETER); - accelerometerChannel.setStreamHandler(accelerationStreamHandler); - - userAccelChannel = new EventChannel(messenger, USER_ACCELEROMETER_CHANNEL_NAME); - final StreamHandlerImpl linearAccelerationStreamHandler = - new StreamHandlerImpl( - (SensorManager) context.getSystemService(Context.SENSOR_SERVICE), - Sensor.TYPE_LINEAR_ACCELERATION); - userAccelChannel.setStreamHandler(linearAccelerationStreamHandler); - - gyroscopeChannel = new EventChannel(messenger, GYROSCOPE_CHANNEL_NAME); - final StreamHandlerImpl gyroScopeStreamHandler = - new StreamHandlerImpl( - (SensorManager) context.getSystemService(Context.SENSOR_SERVICE), - Sensor.TYPE_GYROSCOPE); - gyroscopeChannel.setStreamHandler(gyroScopeStreamHandler); - - magnetometerChannel = new EventChannel(messenger, MAGNETOMETER_CHANNEL_NAME); - final StreamHandlerImpl magnetometerStreamHandler = - new StreamHandlerImpl( - (SensorManager) context.getSystemService(Context.SENSOR_SERVICE), - Sensor.TYPE_MAGNETIC_FIELD); - magnetometerChannel.setStreamHandler(magnetometerStreamHandler); - } - - private void teardownEventChannels() { - accelerometerChannel.setStreamHandler(null); - userAccelChannel.setStreamHandler(null); - gyroscopeChannel.setStreamHandler(null); - magnetometerChannel.setStreamHandler(null); - } -} diff --git a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.java b/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.java deleted file mode 100644 index 6a860ce1da..0000000000 --- a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.java +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package dev.fluttercommunity.plus.sensors; - -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; -import android.hardware.SensorManager; -import io.flutter.plugin.common.EventChannel; - -class StreamHandlerImpl implements EventChannel.StreamHandler { - - private SensorEventListener sensorEventListener; - private final SensorManager sensorManager; - private final Sensor sensor; - - StreamHandlerImpl(SensorManager sensorManager, int sensorType) { - this.sensorManager = sensorManager; - sensor = sensorManager.getDefaultSensor(sensorType); - } - - @Override - public void onListen(Object arguments, EventChannel.EventSink events) { - sensorEventListener = createSensorEventListener(events); - sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL); - } - - @Override - public void onCancel(Object arguments) { - sensorManager.unregisterListener(sensorEventListener); - } - - SensorEventListener createSensorEventListener(final EventChannel.EventSink events) { - return new SensorEventListener() { - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) {} - - @Override - public void onSensorChanged(SensorEvent event) { - double[] sensorValues = new double[event.values.length]; - for (int i = 0; i < event.values.length; i++) { - sensorValues[i] = event.values[i]; - } - events.success(sensorValues); - } - }; - } -} diff --git a/packages/sensors_plus/sensors_plus/android/src/main/kotlin/dev/fluttercommunity/plus/sensors/SensorsPlugin.kt b/packages/sensors_plus/sensors_plus/android/src/main/kotlin/dev/fluttercommunity/plus/sensors/SensorsPlugin.kt new file mode 100644 index 0000000000..ed9f7647c0 --- /dev/null +++ b/packages/sensors_plus/sensors_plus/android/src/main/kotlin/dev/fluttercommunity/plus/sensors/SensorsPlugin.kt @@ -0,0 +1,71 @@ +package dev.fluttercommunity.plus.sensors + +import android.content.Context +import android.hardware.Sensor +import android.hardware.SensorManager +import io.flutter.embedding.engine.plugins.FlutterPlugin +import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding +import io.flutter.plugin.common.BinaryMessenger +import io.flutter.plugin.common.EventChannel + +/** SensorsPlugin */ +class SensorsPlugin : FlutterPlugin { + private lateinit var accelerometerChannel: EventChannel + private lateinit var userAccelChannel: EventChannel + private lateinit var gyroscopeChannel: EventChannel + private lateinit var magnetometerChannel: EventChannel + + override fun onAttachedToEngine(binding: FlutterPluginBinding) { + setupEventChannels(binding.applicationContext, binding.binaryMessenger) + } + + override fun onDetachedFromEngine(binding: FlutterPluginBinding) { + teardownEventChannels() + } + + private fun setupEventChannels(context: Context, messenger: BinaryMessenger) { + val sensorsManager = context.getSystemService(Context.SENSOR_SERVICE) as SensorManager + + accelerometerChannel = EventChannel(messenger, ACCELEROMETER_CHANNEL_NAME) + val accelerationStreamHandler = StreamHandlerImpl( + sensorsManager, + Sensor.TYPE_ACCELEROMETER + ) + accelerometerChannel.setStreamHandler(accelerationStreamHandler) + + userAccelChannel = EventChannel(messenger, USER_ACCELEROMETER_CHANNEL_NAME) + val linearAccelerationStreamHandler = StreamHandlerImpl( + sensorsManager, + Sensor.TYPE_LINEAR_ACCELERATION + ) + userAccelChannel.setStreamHandler(linearAccelerationStreamHandler) + + gyroscopeChannel = EventChannel(messenger, GYROSCOPE_CHANNEL_NAME) + val gyroScopeStreamHandler = StreamHandlerImpl( + sensorsManager, + Sensor.TYPE_GYROSCOPE + ) + gyroscopeChannel.setStreamHandler(gyroScopeStreamHandler) + + magnetometerChannel = EventChannel(messenger, MAGNETOMETER_CHANNEL_NAME) + val magnetometerStreamHandler = StreamHandlerImpl( + sensorsManager, + Sensor.TYPE_MAGNETIC_FIELD + ) + magnetometerChannel.setStreamHandler(magnetometerStreamHandler) + } + + private fun teardownEventChannels() { + accelerometerChannel.setStreamHandler(null) + userAccelChannel.setStreamHandler(null) + gyroscopeChannel.setStreamHandler(null) + magnetometerChannel.setStreamHandler(null) + } + + companion object { + private const val ACCELEROMETER_CHANNEL_NAME = "dev.fluttercommunity.plus/sensors/accelerometer" + private const val GYROSCOPE_CHANNEL_NAME = "dev.fluttercommunity.plus/sensors/gyroscope" + private const val USER_ACCELEROMETER_CHANNEL_NAME = "dev.fluttercommunity.plus/sensors/user_accel" + private const val MAGNETOMETER_CHANNEL_NAME = "dev.fluttercommunity.plus/sensors/magnetometer" + } +} diff --git a/packages/sensors_plus/sensors_plus/android/src/main/kotlin/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.kt b/packages/sensors_plus/sensors_plus/android/src/main/kotlin/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.kt new file mode 100644 index 0000000000..521e9243e9 --- /dev/null +++ b/packages/sensors_plus/sensors_plus/android/src/main/kotlin/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.kt @@ -0,0 +1,42 @@ +package dev.fluttercommunity.plus.sensors + +import android.hardware.Sensor +import android.hardware.SensorEvent +import android.hardware.SensorEventListener +import android.hardware.SensorManager +import io.flutter.plugin.common.EventChannel +import io.flutter.plugin.common.EventChannel.EventSink + +internal class StreamHandlerImpl( + private val sensorManager: SensorManager, + sensorType: Int +) : EventChannel.StreamHandler { + private lateinit var sensorEventListener: SensorEventListener + + private val sensor: Sensor by lazy { + sensorManager.getDefaultSensor(sensorType) + } + + override fun onListen(arguments: Any?, events: EventSink) { + sensorEventListener = createSensorEventListener(events) + sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL) + } + + override fun onCancel(arguments: Any?) { + sensorManager.unregisterListener(sensorEventListener) + } + + private fun createSensorEventListener(events: EventSink): SensorEventListener { + return object : SensorEventListener { + override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {} + + override fun onSensorChanged(event: SensorEvent) { + val sensorValues = DoubleArray(event.values.size) + event.values.forEachIndexed { index, value -> + sensorValues[index] = value.toDouble() + } + events.success(sensorValues) + } + } + } +} diff --git a/packages/sensors_plus/sensors_plus/example/android/gradle.properties b/packages/sensors_plus/sensors_plus/example/android/gradle.properties index 94adc3a3f9..d9cf55df7c 100644 --- a/packages/sensors_plus/sensors_plus/example/android/gradle.properties +++ b/packages/sensors_plus/sensors_plus/example/android/gradle.properties @@ -1,3 +1,2 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true -android.enableJetifier=true diff --git a/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties index cb2d28054d..c17f829cd3 100644 --- a/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Oct 05 15:47:01 CEST 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/packages/sensors_plus/sensors_plus/pubspec.yaml b/packages/sensors_plus/sensors_plus/pubspec.yaml index dff3e792ea..a19cab6a79 100644 --- a/packages/sensors_plus/sensors_plus/pubspec.yaml +++ b/packages/sensors_plus/sensors_plus/pubspec.yaml @@ -2,7 +2,7 @@ name: sensors_plus description: > Flutter plugin for accessing accelerometer, gyroscope, and magnetometer sensors. -version: 1.2.2 +version: 1.3.0 homepage: https://plus.fluttercommunity.dev/ repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/