From 635375bb9dfda5423d19ab3c7842d00a0a1a7993 Mon Sep 17 00:00:00 2001 From: Camille Simon Date: Wed, 14 May 2025 04:20:25 -0700 Subject: [PATCH 1/8] add debugging logging --- .../flutter/plugins/camerax/DeviceOrientationManager.java | 8 ++++++++ .../lib/src/surface_texture_rotated_preview.dart | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java index bbc0b7d7ca7..07f2f1e6623 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java @@ -17,6 +17,8 @@ import io.flutter.embedding.engine.systemchannels.PlatformChannel.DeviceOrientation; import java.util.Objects; +import android.util.Log; + /** * Support class to help to determine the media orientation based on the orientation of the device. */ @@ -53,8 +55,11 @@ public void start() { broadcastReceiver = new BroadcastReceiver() { + int i = 0; @Override public void onReceive(Context context, Intent intent) { + Log.e("CAMILLE::ONRECEIVE", "onReceive + " + Integer.toString(i)); + i++; handleUIOrientationChange(); } }; @@ -137,6 +142,9 @@ PlatformChannel.DeviceOrientation getUIOrientation() { final int rotation = getDefaultRotation(); final int orientation = getContext().getResources().getConfiguration().orientation; + Log.e("CAMILLE", "rotation: " + Integer.toString(rotation)); + Log.e("CAMILLE", "orientation: " + Integer.toString(orientation)); + switch (orientation) { case Configuration.ORIENTATION_PORTRAIT: if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) { diff --git a/packages/camera/camera_android_camerax/lib/src/surface_texture_rotated_preview.dart b/packages/camera/camera_android_camerax/lib/src/surface_texture_rotated_preview.dart index 976fd0fa575..b4ae632811b 100644 --- a/packages/camera/camera_android_camerax/lib/src/surface_texture_rotated_preview.dart +++ b/packages/camera/camera_android_camerax/lib/src/surface_texture_rotated_preview.dart @@ -58,6 +58,9 @@ final class _SurfaceTextureRotatedPreviewState Future _getCurrentDefaultDisplayRotationQuarterTurns() async { final int currentDefaultDisplayRotationQuarterTurns = await widget.deviceOrientationManager.getDefaultDisplayRotation(); + final String uiOrientation = + await widget.deviceOrientationManager.getUiOrientation(); + print('>>>>>>>>>>>>>>>>CAMILLE uiOrientation: $uiOrientation'); return getQuarterTurnsFromSurfaceRotationConstant( currentDefaultDisplayRotationQuarterTurns); } @@ -78,6 +81,7 @@ final class _SurfaceTextureRotatedPreviewState } setState(() { + print('>>>>>>>>>>>>CAMILLE new device orientation event: $event'); preappliedRotationQuarterTurns = getPreAppliedQuarterTurnsRotationFromDeviceOrientation(event); defaultDisplayRotationQuarterTurns = @@ -104,6 +108,8 @@ final class _SurfaceTextureRotatedPreviewState // (see camera/camera/lib/src/camera_preview.dart) that is not // correct for this plugin. final int currentDefaultDisplayRotation = snapshot.data!; + print( + '>>>>>>>>>>>>>>>>>CAMILLE currentDefaultDisplayRotation: $currentDefaultDisplayRotation'); final int rotationCorrection = currentDefaultDisplayRotation - preappliedRotationQuarterTurns; From fd36ab62a31b2f4520bb637a658090a3fa0cef7d Mon Sep 17 00:00:00 2001 From: Camille Simon Date: Fri, 16 May 2025 06:30:40 -0700 Subject: [PATCH 2/8] clean up fix + add tests --- .../camerax/DeviceOrientationManager.java | 54 +++++++++---------- .../camerax/DeviceOrientationManagerTest.java | 44 +++++++++------ .../src/surface_texture_rotated_preview.dart | 6 --- 3 files changed, 52 insertions(+), 52 deletions(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java index 07f2f1e6623..6acc4904ce2 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java @@ -10,15 +10,15 @@ import android.content.IntentFilter; import android.content.res.Configuration; import android.view.Display; +import android.view.OrientationEventListener; import android.view.Surface; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import io.flutter.embedding.engine.systemchannels.PlatformChannel; import io.flutter.embedding.engine.systemchannels.PlatformChannel.DeviceOrientation; import java.util.Objects; -import android.util.Log; - /** * Support class to help to determine the media orientation based on the orientation of the device. */ @@ -30,6 +30,8 @@ public class DeviceOrientationManager { private PlatformChannel.DeviceOrientation lastOrientation; private BroadcastReceiver broadcastReceiver; + @VisibleForTesting @Nullable protected OrientationEventListener orientationEventListener; + DeviceOrientationManager(DeviceOrientationManagerProxyApi api) { this.api = api; } @@ -40,42 +42,40 @@ Context getContext() { } /** - * Starts listening to the device's sensors or UI for orientation updates. + * Starts listening to the device's sensors for device orientation updates. * *

When orientation information is updated, the callback method of the {@link * DeviceOrientationManagerProxyApi} is called with the new orientation. - * - *

If the device's ACCELEROMETER_ROTATION setting is enabled the {@link - * DeviceOrientationManager} will report orientation updates based on the sensor information. If - * the ACCELEROMETER_ROTATION is disabled the {@link DeviceOrientationManager} will fallback to - * the deliver orientation updates based on the UI orientation. */ public void start() { stop(); - broadcastReceiver = - new BroadcastReceiver() { - int i = 0; - @Override - public void onReceive(Context context, Intent intent) { - Log.e("CAMILLE::ONRECEIVE", "onReceive + " + Integer.toString(i)); - i++; - handleUIOrientationChange(); - } - }; - getContext().registerReceiver(broadcastReceiver, orientationIntentFilter); - broadcastReceiver.onReceive(getContext(), null); + // Listen for changes in device orientation at the default rate that is suitable for monitoring + // typical screen orientation changes. + orientationEventListener = createOrientationEventListener(); + orientationEventListener.enable(); + } + + @VisibleForTesting + @NonNull + protected OrientationEventListener createOrientationEventListener() { + return new OrientationEventListener(getContext()) { + @Override + public void onOrientationChanged(int orientation) { + handleUIOrientationChange(); + } + }; } /** Stops listening for orientation updates. */ public void stop() { - if (broadcastReceiver == null) { + if (orientationEventListener == null) { return; } - getContext().unregisterReceiver(broadcastReceiver); - broadcastReceiver = null; - lastOrientation = null; + + orientationEventListener.disable(); + orientationEventListener = null; } /** @@ -92,8 +92,7 @@ void handleUIOrientationChange() { } /** - * Handles orientation changes coming from either the device's sensors or the - * OrientationIntentFilter. + * Handles orientation changes coming from either the device's sensors. * *

This method is visible for testing purposes only and should never be used outside this * class. @@ -142,9 +141,6 @@ PlatformChannel.DeviceOrientation getUIOrientation() { final int rotation = getDefaultRotation(); final int orientation = getContext().getResources().getConfiguration().orientation; - Log.e("CAMILLE", "rotation: " + Integer.toString(rotation)); - Log.e("CAMILLE", "orientation: " + Integer.toString(orientation)); - switch (orientation) { case Configuration.ORIENTATION_PORTRAIT: if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) { diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java index b75774f5e21..85f36ae36cf 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java @@ -7,9 +7,10 @@ import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -18,15 +19,14 @@ import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; -import android.provider.Settings; import android.view.Display; +import android.view.OrientationEventListener; import android.view.Surface; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import io.flutter.embedding.engine.systemchannels.PlatformChannel.DeviceOrientation; import org.junit.Before; import org.junit.Test; -import org.mockito.MockedStatic; public class DeviceOrientationManagerTest { private Activity mockActivity; @@ -63,23 +63,33 @@ Display getDisplay() { } @Test - public void handleUIOrientationChange_shouldSendMessageWhenSensorAccessIsAllowed() { - try (MockedStatic mockedSystem = mockStatic(Settings.System.class)) { - mockedSystem - .when( - () -> - Settings.System.getInt(any(), eq(Settings.System.ACCELEROMETER_ROTATION), eq(0))) - .thenReturn(0); - setUpUIOrientationMocks(Configuration.ORIENTATION_LANDSCAPE, Surface.ROTATION_0); - - deviceOrientationManager.handleUIOrientationChange(); - } + public void start_createsExpectedOrientationEventListener() { + DeviceOrientationManager deviceOrientationManagerSpy = spy(deviceOrientationManager); - verify(mockApi, times(1)) - .onDeviceOrientationChanged( - eq(deviceOrientationManager), eq(DeviceOrientation.LANDSCAPE_LEFT.toString()), any()); + doNothing().when(deviceOrientationManagerSpy).handleUIOrientationChange(); + + deviceOrientationManagerSpy.start(); + deviceOrientationManagerSpy.orientationEventListener.onOrientationChanged(3); + + verify(deviceOrientationManagerSpy).handleUIOrientationChange(); + } + + @Test + public void start_enablesOrientationEventListener() { + DeviceOrientationManager deviceOrientationManagerSpy = spy(deviceOrientationManager); + OrientationEventListener mockOrientationEventListener = mock(OrientationEventListener.class); + + when(deviceOrientationManagerSpy.createOrientationEventListener()) + .thenReturn(mockOrientationEventListener); + + deviceOrientationManagerSpy.start(); + + verify(mockOrientationEventListener).enable(); } + @Test + public void stop_disablesOrientationListenerAndClearsLastOrientation() {} + @Test public void handleOrientationChange_shouldSendMessageWhenOrientationIsUpdated() { DeviceOrientation previousOrientation = DeviceOrientation.PORTRAIT_UP; diff --git a/packages/camera/camera_android_camerax/lib/src/surface_texture_rotated_preview.dart b/packages/camera/camera_android_camerax/lib/src/surface_texture_rotated_preview.dart index b4ae632811b..976fd0fa575 100644 --- a/packages/camera/camera_android_camerax/lib/src/surface_texture_rotated_preview.dart +++ b/packages/camera/camera_android_camerax/lib/src/surface_texture_rotated_preview.dart @@ -58,9 +58,6 @@ final class _SurfaceTextureRotatedPreviewState Future _getCurrentDefaultDisplayRotationQuarterTurns() async { final int currentDefaultDisplayRotationQuarterTurns = await widget.deviceOrientationManager.getDefaultDisplayRotation(); - final String uiOrientation = - await widget.deviceOrientationManager.getUiOrientation(); - print('>>>>>>>>>>>>>>>>CAMILLE uiOrientation: $uiOrientation'); return getQuarterTurnsFromSurfaceRotationConstant( currentDefaultDisplayRotationQuarterTurns); } @@ -81,7 +78,6 @@ final class _SurfaceTextureRotatedPreviewState } setState(() { - print('>>>>>>>>>>>>CAMILLE new device orientation event: $event'); preappliedRotationQuarterTurns = getPreAppliedQuarterTurnsRotationFromDeviceOrientation(event); defaultDisplayRotationQuarterTurns = @@ -108,8 +104,6 @@ final class _SurfaceTextureRotatedPreviewState // (see camera/camera/lib/src/camera_preview.dart) that is not // correct for this plugin. final int currentDefaultDisplayRotation = snapshot.data!; - print( - '>>>>>>>>>>>>>>>>>CAMILLE currentDefaultDisplayRotation: $currentDefaultDisplayRotation'); final int rotationCorrection = currentDefaultDisplayRotation - preappliedRotationQuarterTurns; From b1f2ab8a711799b264f3f67d274ff57dcd20d684 Mon Sep 17 00:00:00 2001 From: Camille Simon Date: Fri, 16 May 2025 06:41:05 -0700 Subject: [PATCH 3/8] add missing test + doc --- .../plugins/camerax/DeviceOrientationManager.java | 6 ++++++ .../plugins/camerax/DeviceOrientationManagerTest.java | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java index 6acc4904ce2..3c8fce7d533 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java @@ -58,6 +58,12 @@ public void start() { @VisibleForTesting @NonNull + /** + * Createa an {@link OrientationEventListener} that will call the callback method of the {@link + * DeviceOrientationManagerProxyApi} whenever it is notified of a new device orientation and this + * {@DeviceOrientationManager} instance determines that the orientation of the device {@link + * Configuration} has changed. + */ protected OrientationEventListener createOrientationEventListener() { return new OrientationEventListener(getContext()) { @Override diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java index 85f36ae36cf..e40a337235e 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java @@ -5,6 +5,7 @@ package io.flutter.plugins.camerax; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doNothing; @@ -88,7 +89,15 @@ public void start_enablesOrientationEventListener() { } @Test - public void stop_disablesOrientationListenerAndClearsLastOrientation() {} + public void stop_disablesOrientationListener() { + OrientationEventListener mockOrientationEventListener = mock(OrientationEventListener.class); + deviceOrientationManager.orientationEventListener = mockOrientationEventListener; + + deviceOrientationManager.stop(); + + verify(mockOrientationEventListener).disable(); + assertNull(deviceOrientationManager.orientationEventListener); + } @Test public void handleOrientationChange_shouldSendMessageWhenOrientationIsUpdated() { From 98fb0db4c4aa23c70b018846db72d4cf3652602d Mon Sep 17 00:00:00 2001 From: Camille Simon Date: Fri, 16 May 2025 06:54:20 -0700 Subject: [PATCH 4/8] fix typo + bump version --- packages/camera/camera_android_camerax/CHANGELOG.md | 6 ++++++ .../flutter/plugins/camerax/DeviceOrientationManager.java | 2 +- packages/camera/camera_android_camerax/pubspec.yaml | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index ad47eaa6b88..913a5eeadbb 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.6.17 + +* Replaces `BroadcastReceiver` usage with an `OrientationEventListener` to detect changes in device + orientation to fix issue where some devices do not report changes in device configuration if it + is rotated between the same sort of orientation (landscape/portrait). + ## 0.6.16 * Fixes incorrect camera preview rotation for landscape-oriented devices. diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java index 3c8fce7d533..07902fb03ac 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java @@ -59,7 +59,7 @@ public void start() { @VisibleForTesting @NonNull /** - * Createa an {@link OrientationEventListener} that will call the callback method of the {@link + * Create an {@link OrientationEventListener} that will call the callback method of the {@link * DeviceOrientationManagerProxyApi} whenever it is notified of a new device orientation and this * {@DeviceOrientationManager} instance determines that the orientation of the device {@link * Configuration} has changed. diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index 8eb65f428cf..2b1df1be215 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android_camerax description: Android implementation of the camera plugin using the CameraX library. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.6.16 +version: 0.6.17 environment: sdk: ^3.6.0 From e45c5830d66ef3e55f523742f391a40dc11ef503 Mon Sep 17 00:00:00 2001 From: Camille Simon Date: Fri, 16 May 2025 06:56:21 -0700 Subject: [PATCH 5/8] fix doc --- .../io/flutter/plugins/camerax/DeviceOrientationManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java index 07902fb03ac..2f6ae074290 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java @@ -61,7 +61,7 @@ public void start() { /** * Create an {@link OrientationEventListener} that will call the callback method of the {@link * DeviceOrientationManagerProxyApi} whenever it is notified of a new device orientation and this - * {@DeviceOrientationManager} instance determines that the orientation of the device {@link + * {@code DeviceOrientationManager} instance determines that the orientation of the device {@link * Configuration} has changed. */ protected OrientationEventListener createOrientationEventListener() { From ca82952956ee55120ac84851282d4e26c0f79706 Mon Sep 17 00:00:00 2001 From: Camille Simon Date: Fri, 16 May 2025 07:31:54 -0700 Subject: [PATCH 6/8] typo --- .../io/flutter/plugins/camerax/DeviceOrientationManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java index 2f6ae074290..610c3b2b605 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java @@ -59,7 +59,7 @@ public void start() { @VisibleForTesting @NonNull /** - * Create an {@link OrientationEventListener} that will call the callback method of the {@link + * Creates an {@link OrientationEventListener} that will call the callback method of the {@link * DeviceOrientationManagerProxyApi} whenever it is notified of a new device orientation and this * {@code DeviceOrientationManager} instance determines that the orientation of the device {@link * Configuration} has changed. From 3e84f11fb6615ccda6f0ee136414118e94056d8f Mon Sep 17 00:00:00 2001 From: Camille Simon Date: Fri, 16 May 2025 07:33:50 -0700 Subject: [PATCH 7/8] add comment --- .../flutter/plugins/camerax/DeviceOrientationManagerTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java index e40a337235e..56456cf4ecc 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/DeviceOrientationManagerTest.java @@ -70,7 +70,8 @@ public void start_createsExpectedOrientationEventListener() { doNothing().when(deviceOrientationManagerSpy).handleUIOrientationChange(); deviceOrientationManagerSpy.start(); - deviceOrientationManagerSpy.orientationEventListener.onOrientationChanged(3); + deviceOrientationManagerSpy.orientationEventListener.onOrientationChanged( + /* some device orientation */ 3); verify(deviceOrientationManagerSpy).handleUIOrientationChange(); } From 7b5481bf753182eee3d0315d6b8be03ffe5e5676 Mon Sep 17 00:00:00 2001 From: Camille Simon <43054281+camsim99@users.noreply.github.com> Date: Mon, 19 May 2025 14:55:12 -0700 Subject: [PATCH 8/8] Update packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java Co-authored-by: jesswrd --- .../io/flutter/plugins/camerax/DeviceOrientationManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java index 610c3b2b605..382dd2de8fb 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/DeviceOrientationManager.java @@ -98,7 +98,7 @@ void handleUIOrientationChange() { } /** - * Handles orientation changes coming from either the device's sensors. + * Handles orientation changes coming from the device's sensors. * *

This method is visible for testing purposes only and should never be used outside this * class.