Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit 1181376

Browse files
authored
Merge branch 'flutter:main' into main
2 parents 53e2e03 + 7d4cdf2 commit 1181376

File tree

74 files changed

+2417
-568
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+2417
-568
lines changed

.ci/flutter_master.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4cd734ae3a1cc0c8f132ba07e6d2e0a3253c53e7
1+
c07af53b3cb2182d7735f022969efb00f2ddbd27

.ci/flutter_stable.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ffccd96b62ee8cec7740dab303538c5fc26ac543
1+
e3c29ec00c9c825c891d75054c63fcc46454dca1

.cirrus.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ macos_intel_template: &MACOS_INTEL_TEMPLATE
6464
macos_arm_template: &MACOS_ARM_TEMPLATE
6565
<< : *MACOS_TEMPLATE
6666
macos_instance:
67-
image: ghcr.io/cirruslabs/macos-monterey-xcode:13.4
67+
image: ghcr.io/cirruslabs/macos-ventura-xcode:14
6868

6969
# Light-workload Linux tasks.
7070
# These use default machines, with fewer CPUs, to reduce pressure on the

.github/workflows/scorecards-analysis.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ jobs:
1717
security-events: write
1818
actions: read
1919
contents: read
20+
# Needed to access OIDC token.
21+
id-token: write
2022

2123
steps:
2224
- name: "Checkout code"
@@ -25,7 +27,7 @@ jobs:
2527
persist-credentials: false
2628

2729
- name: "Run analysis"
28-
uses: ossf/scorecard-action@ce330fde6b1a5c9c75b417e7efc510b822a35564
30+
uses: ossf/scorecard-action@865b4092859256271290c77adbd10a43f4779972
2931
with:
3032
results_file: results.sarif
3133
results_format: sarif

packages/camera/camera_android/lib/src/android_camera.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,11 @@ class AndroidCamera extends CameraPlatform {
138138
'cameraId': cameraId,
139139
'imageFormatGroup': imageFormatGroup.name(),
140140
},
141-
)
142-
// TODO(srawlins): This should return a value of the future's type. This
143-
// will fail upcoming analysis checks with
144-
// https://github.com/flutter/flutter/issues/105750.
145-
// ignore: body_might_complete_normally_catch_error
146-
.catchError(
141+
).catchError(
142+
// TODO(srawlins): This should return a value of the future's type. This
143+
// will fail upcoming analysis checks with
144+
// https://github.com/flutter/flutter/issues/105750.
145+
// ignore: body_might_complete_normally_catch_error
147146
(Object error, StackTrace stackTrace) {
148147
if (error is! PlatformException) {
149148
throw error;

packages/camera/camera_android_camerax/AUTHORS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
# to the Flutter project. Names should be added to the list like so:
33
#
44
# Name/Organization <email address>
5+
6+
Google Inc.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
## NEXT
22

33
* Creates camera_android_camerax plugin for development.
4+
* Adds CameraInfo class and removes unnecessary code from plugin.

packages/camera/camera_android_camerax/android/build.gradle

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,39 @@ rootProject.allprojects {
2222
apply plugin: 'com.android.library'
2323

2424
android {
25-
compileSdkVersion 31
25+
// CameraX dependencies require compilation against version 33 or later.
26+
compileSdkVersion 33
2627

2728
compileOptions {
2829
sourceCompatibility JavaVersion.VERSION_1_8
2930
targetCompatibility JavaVersion.VERSION_1_8
3031
}
3132

3233
defaultConfig {
33-
minSdkVersion 16
34+
// Many of the CameraX APIs require API 21.
35+
minSdkVersion 21
36+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
37+
}
38+
39+
dependencies {
40+
// CameraX core library using the camera2 implementation must use same version number.
41+
def camerax_version = "1.2.0-beta01"
42+
implementation "androidx.camera:camera-core:${camerax_version}"
43+
implementation "androidx.camera:camera-camera2:${camerax_version}"
44+
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
45+
testImplementation 'junit:junit:4.13.2'
46+
testImplementation 'org.mockito:mockito-inline:4.7.0'
47+
testImplementation 'androidx.test:core:1.4.0'
48+
}
49+
testOptions {
50+
unitTests.includeAndroidResources = true
51+
unitTests.returnDefaultValues = true
52+
unitTests.all {
53+
testLogging {
54+
events "passed", "skipped", "failed", "standardOut", "standardError"
55+
outputs.upToDateWhen {false}
56+
showStandardStreams = true
57+
}
58+
}
3459
}
3560
}

packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraAndroidCameraxPlugin.java

Lines changed: 53 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,69 @@
44

55
package io.flutter.plugins.camerax;
66

7+
import android.content.Context;
78
import androidx.annotation.NonNull;
89
import io.flutter.embedding.engine.plugins.FlutterPlugin;
9-
import io.flutter.plugin.common.MethodCall;
10-
import io.flutter.plugin.common.MethodChannel;
11-
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
12-
import io.flutter.plugin.common.MethodChannel.Result;
13-
14-
/** CameraAndroidCameraxPlugin */
15-
public class CameraAndroidCameraxPlugin implements FlutterPlugin, MethodCallHandler {
16-
/// The MethodChannel that will the communication between Flutter and native Android
17-
///
18-
/// This local reference serves to register the plugin with the Flutter Engine and unregister it
19-
/// when the Flutter Engine is detached from the Activity
20-
private MethodChannel channel;
10+
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
11+
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
12+
import io.flutter.plugin.common.BinaryMessenger;
13+
14+
/** Platform implementation of the camera_plugin implemented with the CameraX library. */
15+
public final class CameraAndroidCameraxPlugin implements FlutterPlugin, ActivityAware {
16+
private InstanceManager instanceManager;
17+
private FlutterPluginBinding pluginBinding;
18+
19+
/**
20+
* Initialize this within the {@code #configureFlutterEngine} of a Flutter activity or fragment.
21+
*
22+
* <p>See {@code io.flutter.plugins.camera.MainActivity} for an example.
23+
*/
24+
public CameraAndroidCameraxPlugin() {}
25+
26+
void setUp(BinaryMessenger binaryMessenger, Context context) {
27+
// Set up instance manager.
28+
instanceManager =
29+
InstanceManager.open(
30+
identifier -> {
31+
new GeneratedCameraXLibrary.JavaObjectFlutterApi(binaryMessenger)
32+
.dispose(identifier, reply -> {});
33+
});
34+
35+
// Set up Host APIs.
36+
GeneratedCameraXLibrary.CameraInfoHostApi.setup(
37+
binaryMessenger, new CameraInfoHostApiImpl(instanceManager));
38+
GeneratedCameraXLibrary.JavaObjectHostApi.setup(
39+
binaryMessenger, new JavaObjectHostApiImpl(instanceManager));
40+
}
2141

2242
@Override
2343
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
24-
channel =
25-
new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "camera_android_camerax");
26-
channel.setMethodCallHandler(this);
44+
pluginBinding = flutterPluginBinding;
45+
(new CameraAndroidCameraxPlugin())
46+
.setUp(
47+
flutterPluginBinding.getBinaryMessenger(),
48+
flutterPluginBinding.getApplicationContext());
2749
}
2850

2951
@Override
30-
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
31-
if (call.method.equals("getPlatformVersion")) {
32-
result.success("Android " + android.os.Build.VERSION.RELEASE);
33-
} else {
34-
result.notImplemented();
52+
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
53+
if (instanceManager != null) {
54+
instanceManager.close();
3555
}
3656
}
3757

58+
// Activity Lifecycle methods:
59+
3860
@Override
39-
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
40-
channel.setMethodCallHandler(null);
41-
}
61+
public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) {}
62+
63+
@Override
64+
public void onDetachedFromActivityForConfigChanges() {}
65+
66+
@Override
67+
public void onReattachedToActivityForConfigChanges(
68+
@NonNull ActivityPluginBinding activityPluginBinding) {}
69+
70+
@Override
71+
public void onDetachedFromActivity() {}
4272
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
package io.flutter.plugins.camerax;
6+
7+
import androidx.camera.core.CameraInfo;
8+
import io.flutter.plugin.common.BinaryMessenger;
9+
import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraInfoFlutterApi;
10+
11+
public class CameraInfoFlutterApiImpl extends CameraInfoFlutterApi {
12+
private final InstanceManager instanceManager;
13+
14+
public CameraInfoFlutterApiImpl(
15+
BinaryMessenger binaryMessenger, InstanceManager instanceManager) {
16+
super(binaryMessenger);
17+
this.instanceManager = instanceManager;
18+
}
19+
20+
void create(CameraInfo cameraInfo, Reply<Void> reply) {
21+
instanceManager.addHostCreatedInstance(cameraInfo);
22+
create(instanceManager.getIdentifierForStrongReference(cameraInfo), reply);
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
package io.flutter.plugins.camerax;
6+
7+
import androidx.annotation.NonNull;
8+
import androidx.camera.core.CameraInfo;
9+
import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraInfoHostApi;
10+
11+
public class CameraInfoHostApiImpl implements CameraInfoHostApi {
12+
private final InstanceManager instanceManager;
13+
14+
public CameraInfoHostApiImpl(InstanceManager instanceManager) {
15+
this.instanceManager = instanceManager;
16+
}
17+
18+
@Override
19+
public Long getSensorRotationDegrees(@NonNull Long identifier) {
20+
CameraInfo cameraInfo = (CameraInfo) instanceManager.getInstance(identifier);
21+
return Long.valueOf(cameraInfo.getSensorRotationDegrees());
22+
}
23+
}

0 commit comments

Comments
 (0)