Skip to content

Commit 51da157

Browse files
committed
Finish non cam2 wrpaping
1 parent 886706b commit 51da157

File tree

9 files changed

+2078
-1442
lines changed

9 files changed

+2078
-1442
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@
1515
* <p>This class may handle adding native instances that are attached to a Dart instance or passing
1616
* arguments of callbacks methods to a Dart instance.
1717
*/
18-
public class FocusMeteringActionFlutterApiWrapper {
18+
public class FocusMeteringActionFlutterApiImpl {
1919
private final BinaryMessenger binaryMessenger;
2020
private final InstanceManager instanceManager;
2121
private FocusMeteringActionFlutterApi focusMeteringActionFlutterApi;
2222

2323
/**
24-
* Constructs a {@link FocusMeteringActionFlutterApiWrapper}.
24+
* Constructs a {@link FocusMeteringActionFlutterApiImpl}.
2525
*
2626
* @param binaryMessenger used to communicate with Dart over asynchronous messages
2727
* @param instanceManager maintains instances stored to communicate with attached Dart objects
2828
*/
29-
public FocusMeteringActionFlutterApiWrapper(
29+
public FocusMeteringActionFlutterApiImpl(
3030
@NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) {
3131
this.binaryMessenger = binaryMessenger;
3232
this.instanceManager = instanceManager;

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

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -32,29 +32,35 @@ public class FocusMeteringActionHostApiImpl implements FocusMeteringActionHostAp
3232
public static class FocusMeteringActionProxy {
3333
/** Creates an instance of {@link FocusMeteringAction}. */
3434
public @NonNull FocusMeteringAction create(
35-
@NonNull MeteringPoint meteringPoint, @Nullable meteringMode) {
36-
FocusMeteringAction.Builder focusMeteringActionBuilder;
37-
if (meteringMode == null) {
38-
focusMeteringActionBuilder = new FocusMeteringAction.Builder(meteringPoint);
39-
} else {
40-
focusMeteringActionBuilder = new FocusMeteringAction.Builder(meteringPoint, meteringMode);
35+
@NonNull List<MeteringPoint> meteringPoints, @NonNull List<Integer> meteringPointModes) {
36+
if (meteringPoints.size() != meteringPointModes.size()) {
37+
throw new IllegalArgumentException("The number of specified metering points must match the number of specified metering point modes.");
4138
}
39+
FocusMeteringAction.Builder focusMeteringActionBuilder;
4240

43-
return focusMeteringActionBuilder.build();
44-
}
41+
for (int i = 0; i < meteringPoints.size(); i++) {
42+
MeteringPoint meteringPoint = meteringPoints.get(i);
43+
Integer meteringMode = meteringPointModes.get(i);
44+
if (i == 0) {
45+
// On the first iteration, create the builder to add points to.
46+
if (meteringMode == null) {
47+
focusMeteringActionBuilder = new FocusMeteringAction.Builder(meteringPoint);
48+
} else {
49+
focusMeteringActionBuilder = new FocusMeteringAction.Builder(meteringPoint, meteringMode);
50+
}
51+
continue;
52+
}
4553

46-
public @NonNull FocusMeteringAction create(
47-
@NonNull FocusMeteringAction focusMeteringAction,
48-
@NonNull MeteringPoint meteringPoint, @Nullable meteringMode) {
49-
FocusMetering newFocusMeteringAction;
54+
// For any i(teration) > 0, add metering points in order as specified by input lists.
5055
if (meteringMode == null) {
51-
newFocusMeteringAction = focusMeteringAction.addPoint(meteringPoint);
52-
} else {
53-
newFocusMeteringAction = focusMeteringAction.addPoint(meteringPoint, meteringMode);
56+
focusMeteringActionBuilder.add(meteringPoint);
57+
} else {
58+
focusMeteringActionBuilder.add(meteringPoint, meteringMode);
59+
}
5460
}
5561

56-
return newFocusMeteringAction;
57-
}
62+
return focusMeteringActionBuilder.build();
63+
}
5864
}
5965

6066
/**
@@ -80,18 +86,15 @@ public FocusMeteringActionHostApiImpl(@NonNull InstanceManager instanceManager)
8086

8187

8288
@Override
83-
public void create(@NonNull Long identifier, @NonNull Long meteringPointId, @Nullable Long meteringMode) {
89+
public void create(@NonNull Long identifier, @NonNull List<MeteringPointInfo> meteringPointInfos) {
90+
final List<MeteringPoint> meteringPoints = new ArrayList<MeteringPoint>();
91+
final List<Integer> meteringPointModes = new ArrayList<int>();
92+
for (MeteringPointInfo meteringPointInfo : meteringPointInfos) {
93+
meteringPoint.add(instanceManager.getInstance(meteringPointInfo.getMeteringPointId()));
94+
meteringPointModes.add(meteringPointIngo.getMeteringMode().intValue());
95+
}
96+
8497
instanceManager.addDartCreatedInstance(
85-
proxy.create(Objects.requireNonNull(instanceManager.getInstance(meteringPointId)), meteringMode), identifier);
98+
proxy.create(meteringPoints, meteringPointModes), identifier);
8699
}
87-
88-
@Override
89-
@NonNull
90-
Long addPoint(@NonNull Long identifier, @NonNull Long meteringPointId, @Nullable Long meteringMode) {
91-
FocusMeteringAction newFocusMeteringAction = proxy.addPoint(Objects.requireNonNull(instanceManager.getInstance(identifier)), Objects.requireNonNull(instanceManager.getInstance(meteringPointId)), meteringMode);
92-
final FocusMeteringActionFlutterApiImpl flutterApi =
93-
new FocusMeteringActionFlutterApiImpl(binaryMessenger, instanceManager);
94-
flutterApi.create(newFocusMeteringAction, reply -> {});
95-
return instanceManager.getIdentifierForStrongReference(newFocusMeteringAction);
96-
}
97100
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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.annotation.VisibleForTesting;
9+
import io.flutter.plugin.common.BinaryMessenger;
10+
import io.flutter.plugins.camerax.GeneratedCameraXLibrary.FocusMeteringResultFlutterApi;
11+
12+
/**
13+
* Flutter API implementation for {@link FocusMeteringResult}.
14+
*
15+
* <p>This class may handle adding native instances that are attached to a Dart instance or passing
16+
* arguments of callbacks methods to a Dart instance.
17+
*/
18+
public class FocusMeteringResultFlutterApiImpl {
19+
private final BinaryMessenger binaryMessenger;
20+
private final InstanceManager instanceManager;
21+
private FocusMeteringResultFlutterApi focusMeteringResultFlutterApi;
22+
23+
/**
24+
* Constructs a {@link FocusMeteringResultFlutterApiImpl}.
25+
*
26+
* @param binaryMessenger used to communicate with Dart over asynchronous messages
27+
* @param instanceManager maintains instances stored to communicate with attached Dart objects
28+
*/
29+
public FocusMeteringResultFlutterApiImpl(
30+
@NonNull BinaryMessenger binaryMessenger, @NonNull InstanceManager instanceManager) {
31+
this.binaryMessenger = binaryMessenger;
32+
this.instanceManager = instanceManager;
33+
focusMeteringResultFlutterApi = new FocusMeteringResultFlutterApi(binaryMessenger);
34+
}
35+
36+
/**
37+
* Stores the {@link FocusMeteringResult} instance and notifies Dart to create and store a new
38+
* {@link FocusMeteringResult} instance that is attached to this one. If {@code instance} has
39+
* already been added, this method does nothing.
40+
*/
41+
public void create(
42+
@NonNull FocusMeteringResult instance,
43+
@NonNull Reply<Void> callback) {
44+
if (!instanceManager.containsInstance(instance)) {
45+
FocusMeteringResultFlutterApi.create(
46+
instanceManager.addHostCreatedInstance(instance), callback);
47+
}
48+
}
49+
50+
/** Sets the Flutter API used to send messages to Dart. */
51+
@VisibleForTesting
52+
void setApi(@NonNull FocusMeteringResultFlutterApi api) {
53+
this.focusMeteringResultFlutterApi = api;
54+
}
55+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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 android.util.Size;
8+
import androidx.annotation.NonNull;
9+
import androidx.annotation.Nullable;
10+
import androidx.annotation.VisibleForTesting;
11+
import io.flutter.plugins.camerax.GeneratedCameraXLibrary.FocusMeteringResultHostApi;
12+
import io.flutter.plugins.camerax.GeneratedCameraXLibrary.ResolutionInfo;
13+
import io.flutter.plugins.camerax.GeneratedCameraXLibrary.VideoQuality;
14+
import io.flutter.plugins.camerax.GeneratedCameraXLibrary.VideoQualityData;
15+
import java.util.ArrayList;
16+
import java.util.List;
17+
import java.util.Objects;
18+
19+
/**
20+
* Host API implementation for {@link FocusMeteringResult}.
21+
*
22+
* <p>This class may handle instantiating and adding native object instances that are attached to a
23+
* Dart instance or handle method calls on the associated native class or an instance of the class.
24+
*/
25+
public class FocusMeteringResultHostApiImpl implements FocusMeteringResultHostApi {
26+
private final InstanceManager instanceManager;
27+
28+
private final FocusMeteringResultProxy proxy;
29+
30+
/** Proxy for constructors and static method of {@link FocusMeteringResult}. */
31+
@VisibleForTesting
32+
public static class FocusMeteringResultProxy {
33+
/** Returns whether or not the {@link FocusMeteringResult} was successful. */
34+
public @NonNull
35+
public Boolean isFocusSuccessful(@NonNull FocusMeteringResult focusMeteringResult) {
36+
return focusMeteringResult.isFocusSuccessful();
37+
}
38+
}
39+
40+
/**
41+
* Constructs a {@link FocusMeteringResultHostApiImpl}.
42+
*
43+
* @param instanceManager maintains instances stored to communicate with attached Dart objects
44+
*/
45+
public FocusMeteringResultHostApiImpl(@NonNull InstanceManager instanceManager) {
46+
this(instanceManager, new FocusMeteringResultProxy());
47+
}
48+
49+
/**
50+
* Constructs a {@link FocusMeteringResultHostApiImpl}.
51+
*
52+
* @param instanceManager maintains instances stored to communicate with attached Dart objects
53+
* @param proxy proxy for constructors and static method of {@link FocusMeteringResult}
54+
*/
55+
FocusMeteringResultHostApiImpl(
56+
@NonNull InstanceManager instanceManager, @NonNull FocusMeteringResultProxy proxy) {
57+
this.instanceManager = instanceManager;
58+
this.proxy = proxy;
59+
}
60+
61+
62+
@Override
63+
@NonNull
64+
public Boolean isFocusSuccessful(@NonNull Long identifier) {
65+
return proxy.isFocusSuccessful(instanceManager.getInstance(identifier));
66+
}
67+
}

0 commit comments

Comments
 (0)