From 451505d10e1295528b872a768468a15162cc038d Mon Sep 17 00:00:00 2001 From: Gray Mackall Date: Tue, 16 May 2023 10:21:56 -0700 Subject: [PATCH 01/16] upgrading roboelectric --- packages/camera/camera_android/android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android/android/build.gradle b/packages/camera/camera_android/android/build.gradle index ef8d9e29767..ecebf8ddc1b 100644 --- a/packages/camera/camera_android/android/build.gradle +++ b/packages/camera/camera_android/android/build.gradle @@ -65,5 +65,5 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-inline:5.0.0' testImplementation 'androidx.test:core:1.4.0' - testImplementation 'org.robolectric:robolectric:4.5' + testImplementation 'org.robolectric:robolectric:4.8.1' } From 5f1486103259f78e2fd15ffca7f3ab0b45657414 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 6 Jun 2023 11:04:17 -0700 Subject: [PATCH 02/16] Try mockStatic for encoderProfiles --- .../camera/features/resolution/ResolutionFeatureTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java index dbc352d697a..d76ff416a83 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java @@ -91,7 +91,7 @@ public void beforeLegacy() { public void before() { mockProfileLow = mock(EncoderProfiles.class); EncoderProfiles mockProfile = mock(EncoderProfiles.class); - EncoderProfiles.VideoProfile mockVideoProfile = mock(EncoderProfiles.VideoProfile.class); + EncoderProfiles.VideoProfile mockVideoProfile = mockStatic(EncoderProfiles.VideoProfile.class); List mockVideoProfilesList = List.of(mockVideoProfile); mockedStaticProfile From 041fc974e6c81863c702a00868d5995dbf40badc Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 6 Jun 2023 14:10:52 -0700 Subject: [PATCH 03/16] Fix fix for encoder profiles --- .../camera/features/resolution/ResolutionFeatureTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java index d76ff416a83..1695fb81757 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java @@ -91,8 +91,9 @@ public void beforeLegacy() { public void before() { mockProfileLow = mock(EncoderProfiles.class); EncoderProfiles mockProfile = mock(EncoderProfiles.class); - EncoderProfiles.VideoProfile mockVideoProfile = mockStatic(EncoderProfiles.VideoProfile.class); - List mockVideoProfilesList = List.of(mockVideoProfile); + List mockVideoProfilesList = new ArrayList(); + // Cannot mock EncoderProfiles.VideoProfile values to test. + mockVideoProfilesList.add(null); mockedStaticProfile .when(() -> CamcorderProfile.getAll("1", CamcorderProfile.QUALITY_HIGH)) @@ -117,8 +118,6 @@ public void before() { .thenReturn(mockProfileLow); when(mockProfile.getVideoProfiles()).thenReturn(mockVideoProfilesList); - when(mockVideoProfile.getHeight()).thenReturn(100); - when(mockVideoProfile.getWidth()).thenReturn(100); } @After From 0afa57a5524f806176e5e0aee499a41b83912b1c Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 6 Jun 2023 14:24:22 -0700 Subject: [PATCH 04/16] Try adding gradle properties --- packages/camera/camera_android/android/gradle.properties | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/camera/camera_android/android/gradle.properties diff --git a/packages/camera/camera_android/android/gradle.properties b/packages/camera/camera_android/android/gradle.properties new file mode 100644 index 00000000000..95b4763a847 --- /dev/null +++ b/packages/camera/camera_android/android/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx4G From 2cc831ce5ffdb1ef30ae503347ff4895741fe39f Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 6 Jun 2023 14:40:39 -0700 Subject: [PATCH 05/16] Bump both jvmargs for test --- packages/camera/camera_android/android/gradle.properties | 2 +- .../camera/camera_android/example/android/gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_android/android/gradle.properties b/packages/camera/camera_android/android/gradle.properties index 95b4763a847..692442238d7 100644 --- a/packages/camera/camera_android/android/gradle.properties +++ b/packages/camera/camera_android/android/gradle.properties @@ -1 +1 @@ -org.gradle.jvmargs=-Xmx4G +org.gradle.jvmargs=-Xmx8G diff --git a/packages/camera/camera_android/example/android/gradle.properties b/packages/camera/camera_android/example/android/gradle.properties index bfb7805f566..d2bdcca4cc1 100644 --- a/packages/camera/camera_android/example/android/gradle.properties +++ b/packages/camera/camera_android/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4G +org.gradle.jvmargs=-Xmx8G android.useAndroidX=true android.enableJetifier=false From b7710d25a79136c7320d1916438d3a9771939542 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 6 Jun 2023 15:14:08 -0700 Subject: [PATCH 06/16] Change constructors for encoderprofile subclasses and bump heap size --- .../camera_android/android/gradle.properties | 2 +- .../camera/media/MediaRecorderBuilder.java | 1 - .../media/MediaRecorderBuilderTest.java | 36 ++++++++++++++++--- .../example/android/gradle.properties | 2 +- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/packages/camera/camera_android/android/gradle.properties b/packages/camera/camera_android/android/gradle.properties index 692442238d7..2a35c973ec9 100644 --- a/packages/camera/camera_android/android/gradle.properties +++ b/packages/camera/camera_android/android/gradle.properties @@ -1 +1 @@ -org.gradle.jvmargs=-Xmx8G +org.gradle.jvmargs=-Xmx16G diff --git a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/media/MediaRecorderBuilder.java b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/media/MediaRecorderBuilder.java index f55552edf89..966019bb143 100644 --- a/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/media/MediaRecorderBuilder.java +++ b/packages/camera/camera_android/android/src/main/java/io/flutter/plugins/camera/media/MediaRecorderBuilder.java @@ -92,7 +92,6 @@ public MediaRecorder build() throws IOException, NullPointerException, IndexOutO mediaRecorder.setVideoEncodingBitRate(videoProfile.getBitrate()); mediaRecorder.setVideoFrameRate(videoProfile.getFrameRate()); mediaRecorder.setVideoSize(videoProfile.getWidth(), videoProfile.getHeight()); - mediaRecorder.setVideoSize(videoProfile.getWidth(), videoProfile.getHeight()); } else if (camcorderProfile != null) { mediaRecorder.setOutputFormat(camcorderProfile.fileFormat); if (enableAudio) { diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/media/MediaRecorderBuilderTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/media/MediaRecorderBuilderTest.java index 6cc58ee823d..5e68145ec92 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/media/MediaRecorderBuilderTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/media/MediaRecorderBuilderTest.java @@ -78,9 +78,9 @@ public void build_shouldSetValuesInCorrectOrderWhenAudioIsDisabledLegacy() throw public void build_shouldSetValuesInCorrectOrderWhenAudioIsDisabled() throws IOException { EncoderProfiles recorderProfile = mock(EncoderProfiles.class); List mockVideoProfiles = - List.of(mock(EncoderProfiles.VideoProfile.class)); + List.of(getEmptyEncoderProfilesVideoProfile()); List mockAudioProfiles = - List.of(mock(EncoderProfiles.AudioProfile.class)); + List.of(getEmptyEncoderProfilesAudioProfile()); MediaRecorderBuilder.MediaRecorderFactory mockFactory = mock(MediaRecorderBuilder.MediaRecorderFactory.class); MediaRecorder mockMediaRecorder = mock(MediaRecorder.class); @@ -172,9 +172,9 @@ public void build_shouldSetValuesInCorrectOrderWhenAudioIsEnabledLegacy() throws public void build_shouldSetValuesInCorrectOrderWhenAudioIsEnabled() throws IOException { EncoderProfiles recorderProfile = mock(EncoderProfiles.class); List mockVideoProfiles = - List.of(mock(EncoderProfiles.VideoProfile.class)); + List.of(getEmptyEncoderProfilesVideoProfile()); List mockAudioProfiles = - List.of(mock(EncoderProfiles.AudioProfile.class)); + List.of(getEmptyEncoderProfilesAudioProfile()); MediaRecorderBuilder.MediaRecorderFactory mockFactory = mock(MediaRecorderBuilder.MediaRecorderFactory.class); MediaRecorder mockMediaRecorder = mock(MediaRecorder.class); @@ -224,4 +224,32 @@ private CamcorderProfile getEmptyCamcorderProfile() { return null; } + + private EncoderProfiles.VideoProfile getEmptyEncoderProfilesVideoProfile() { + try { + Constructor constructor = + EncoderProfiles.VideoProfile .class.getDeclaredConstructor( + int.class, int.class, int.class, int.class, int.class, int.class); + + constructor.setAccessible(true); + return constructor.newInstance(0, 0, 0, 0, 0, 0); + } catch (Exception ignored) { + } + + return null; + } + + private EncoderProfiles.AudioProfile getEmptyEncoderProfilesAudioProfile() { + try { + Constructor constructor = + EncoderProfiles.AudioProfile .class.getDeclaredConstructor( + int.class, int.class, int.class, int.class, int.class); + + constructor.setAccessible(true); + return constructor.newInstance(0, 0, 0, 0, 0); + } catch (Exception ignored) { + } + + return null; + } } diff --git a/packages/camera/camera_android/example/android/gradle.properties b/packages/camera/camera_android/example/android/gradle.properties index d2bdcca4cc1..463a43180a1 100644 --- a/packages/camera/camera_android/example/android/gradle.properties +++ b/packages/camera/camera_android/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx8G +org.gradle.jvmargs=-Xmx16G android.useAndroidX=true android.enableJetifier=false From 3eaf0b4e4e148c139c386f270997eca9d6048f15 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 6 Jun 2023 15:34:04 -0700 Subject: [PATCH 07/16] Fix before call --- .../camera/features/resolution/ResolutionFeatureTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java index 1695fb81757..d7c730dc2a1 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java @@ -92,7 +92,6 @@ public void before() { mockProfileLow = mock(EncoderProfiles.class); EncoderProfiles mockProfile = mock(EncoderProfiles.class); List mockVideoProfilesList = new ArrayList(); - // Cannot mock EncoderProfiles.VideoProfile values to test. mockVideoProfilesList.add(null); mockedStaticProfile @@ -385,7 +384,7 @@ public void computeBestPreviewSize_shouldUseLegacyBehaviorWhenEncoderProfilesNul @Config(minSdk = 31) @Test public void resolutionFeatureShouldUseLegacyBehaviorWhenEncoderProfilesNull() { - beforeLegacy(); + before(); try (MockedStatic mockedResolutionFeature = mockStatic(ResolutionFeature.class)) { mockedResolutionFeature From ae75de296fded2a07071043bed148b0daee1906b Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 6 Jun 2023 15:53:18 -0700 Subject: [PATCH 08/16] Undo change to example, test gradle.properties --- packages/camera/camera_android/android/gradle.properties | 2 +- .../camera/camera_android/example/android/gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera_android/android/gradle.properties b/packages/camera/camera_android/android/gradle.properties index 2a35c973ec9..20535a3de21 100644 --- a/packages/camera/camera_android/android/gradle.properties +++ b/packages/camera/camera_android/android/gradle.properties @@ -1 +1 @@ -org.gradle.jvmargs=-Xmx16G +org.gradle.jvmargs=-Xmx16Gheheheheheh diff --git a/packages/camera/camera_android/example/android/gradle.properties b/packages/camera/camera_android/example/android/gradle.properties index 463a43180a1..fe8baba4ccb 100644 --- a/packages/camera/camera_android/example/android/gradle.properties +++ b/packages/camera/camera_android/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx16G +org.gradle.jvmargs=-Xmx4sG android.useAndroidX=true android.enableJetifier=false From 4e8254ae8f857da05c6a00b1e25785964de430a3 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Tue, 6 Jun 2023 15:55:57 -0700 Subject: [PATCH 09/16] Undo wrong heap size --- .../camera/camera_android/example/android/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android/example/android/gradle.properties b/packages/camera/camera_android/example/android/gradle.properties index fe8baba4ccb..bfb7805f566 100644 --- a/packages/camera/camera_android/example/android/gradle.properties +++ b/packages/camera/camera_android/example/android/gradle.properties @@ -1,3 +1,3 @@ -org.gradle.jvmargs=-Xmx4sG +org.gradle.jvmargs=-Xmx4G android.useAndroidX=true android.enableJetifier=false From 5f4af4020dda9fbee505c8b1e288723f3519374b Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 7 Jun 2023 09:04:31 -0700 Subject: [PATCH 10/16] Try modifying linux memory --- .cirrus.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cirrus.yml b/.cirrus.yml index c8a7af48cce..bf6d05e0be1 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -226,7 +226,7 @@ task: zone: us-central1-a namespace: default cpu: 4 - memory: 16G + memory: 20G matrix: ### Platform-agnostic tasks ### - name: dart_unit_tests From 57c66bb33c3efb09c0fcdd227ab5fedd43abdc28 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 7 Jun 2023 09:35:59 -0700 Subject: [PATCH 11/16] try adding more heap space in gradle file --- .cirrus.yml | 2 +- packages/camera/camera_android/android/build.gradle | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.cirrus.yml b/.cirrus.yml index bf6d05e0be1..c8a7af48cce 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -226,7 +226,7 @@ task: zone: us-central1-a namespace: default cpu: 4 - memory: 20G + memory: 16G matrix: ### Platform-agnostic tasks ### - name: dart_unit_tests diff --git a/packages/camera/camera_android/android/build.gradle b/packages/camera/camera_android/android/build.gradle index ecebf8ddc1b..9301b0479c6 100644 --- a/packages/camera/camera_android/android/build.gradle +++ b/packages/camera/camera_android/android/build.gradle @@ -51,6 +51,7 @@ android { unitTests.includeAndroidResources = true unitTests.returnDefaultValues = true unitTests.all { + jvmArgs "-Xmx4g" testLogging { events "passed", "skipped", "failed", "standardOut", "standardError" outputs.upToDateWhen {false} From 7021ee810800752771519327a2188055779eb568 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 7 Jun 2023 09:42:16 -0700 Subject: [PATCH 12/16] Empty commit for test From 8dbfb2a498cbe57acd4c958df0a595837fc1fd43 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 7 Jun 2023 11:03:25 -0700 Subject: [PATCH 13/16] Try 1 gig --- packages/camera/camera_android/android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera_android/android/build.gradle b/packages/camera/camera_android/android/build.gradle index 9301b0479c6..b38433204de 100644 --- a/packages/camera/camera_android/android/build.gradle +++ b/packages/camera/camera_android/android/build.gradle @@ -51,7 +51,7 @@ android { unitTests.includeAndroidResources = true unitTests.returnDefaultValues = true unitTests.all { - jvmArgs "-Xmx4g" + jvmArgs "-Xmx1g" testLogging { events "passed", "skipped", "failed", "standardOut", "standardError" outputs.upToDateWhen {false} From 2024f1fa216b04f6cb877e3b4371f6397ef0cf44 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 7 Jun 2023 11:04:44 -0700 Subject: [PATCH 14/16] Formatting --- .../camera/features/resolution/ResolutionFeatureTest.java | 3 ++- .../plugins/camera/media/MediaRecorderBuilderTest.java | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java index d7c730dc2a1..fe4dcd795fe 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/features/resolution/ResolutionFeatureTest.java @@ -91,7 +91,8 @@ public void beforeLegacy() { public void before() { mockProfileLow = mock(EncoderProfiles.class); EncoderProfiles mockProfile = mock(EncoderProfiles.class); - List mockVideoProfilesList = new ArrayList(); + List mockVideoProfilesList = + new ArrayList(); mockVideoProfilesList.add(null); mockedStaticProfile diff --git a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/media/MediaRecorderBuilderTest.java b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/media/MediaRecorderBuilderTest.java index 5e68145ec92..f37de01f5e7 100644 --- a/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/media/MediaRecorderBuilderTest.java +++ b/packages/camera/camera_android/android/src/test/java/io/flutter/plugins/camera/media/MediaRecorderBuilderTest.java @@ -228,7 +228,7 @@ private CamcorderProfile getEmptyCamcorderProfile() { private EncoderProfiles.VideoProfile getEmptyEncoderProfilesVideoProfile() { try { Constructor constructor = - EncoderProfiles.VideoProfile .class.getDeclaredConstructor( + EncoderProfiles.VideoProfile.class.getDeclaredConstructor( int.class, int.class, int.class, int.class, int.class, int.class); constructor.setAccessible(true); @@ -242,7 +242,7 @@ private EncoderProfiles.VideoProfile getEmptyEncoderProfilesVideoProfile() { private EncoderProfiles.AudioProfile getEmptyEncoderProfilesAudioProfile() { try { Constructor constructor = - EncoderProfiles.AudioProfile .class.getDeclaredConstructor( + EncoderProfiles.AudioProfile.class.getDeclaredConstructor( int.class, int.class, int.class, int.class, int.class); constructor.setAccessible(true); From 442acd7c83ef3795ef9f7092362d6b66c7d759e2 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 7 Jun 2023 11:20:59 -0700 Subject: [PATCH 15/16] Bump to 4.10.3 and add next entry for mediarecorderbuilder change --- packages/camera/camera_android/CHANGELOG.md | 1 + packages/camera/camera_android/android/build.gradle | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera_android/CHANGELOG.md b/packages/camera/camera_android/CHANGELOG.md index 8bfdd7f0b1f..c853b8a4b1b 100644 --- a/packages/camera/camera_android/CHANGELOG.md +++ b/packages/camera/camera_android/CHANGELOG.md @@ -1,6 +1,7 @@ ## NEXT * Fixes unawaited_futures violations. +* Removes duplicate line in `MediaRecorderBuilder.java`. ## 0.10.8+2 diff --git a/packages/camera/camera_android/android/build.gradle b/packages/camera/camera_android/android/build.gradle index b38433204de..24a736e0e90 100644 --- a/packages/camera/camera_android/android/build.gradle +++ b/packages/camera/camera_android/android/build.gradle @@ -66,5 +66,5 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-inline:5.0.0' testImplementation 'androidx.test:core:1.4.0' - testImplementation 'org.robolectric:robolectric:4.8.1' + testImplementation 'org.robolectric:robolectric:4.10.3' } From ba936a8069a35ae42931fb996f87b76aa093bb44 Mon Sep 17 00:00:00 2001 From: camsim99 Date: Wed, 7 Jun 2023 14:18:10 -0700 Subject: [PATCH 16/16] Remove test --- packages/camera/camera_android/android/gradle.properties | 1 - 1 file changed, 1 deletion(-) delete mode 100644 packages/camera/camera_android/android/gradle.properties diff --git a/packages/camera/camera_android/android/gradle.properties b/packages/camera/camera_android/android/gradle.properties deleted file mode 100644 index 20535a3de21..00000000000 --- a/packages/camera/camera_android/android/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -org.gradle.jvmargs=-Xmx16Gheheheheheh