Skip to content

Commit 3523016

Browse files
authored
Merge pull request flutter#7 from bottlepay/android-rework-fix-tests
Fix tests after feature refactor
2 parents 1acf379 + 367d496 commit 3523016

37 files changed

+692
-764
lines changed

packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java

Lines changed: 73 additions & 51 deletions
Large diffs are not rendered by default.

packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraCaptureCallback.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// Copyright 2019 The Chromium 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+
15
package io.flutter.plugins.camera;
26

37
import android.hardware.camera2.CameraCaptureSession;

packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraProperties.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// Copyright 2019 The Chromium 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+
15
package io.flutter.plugins.camera;
26

37
import android.graphics.Rect;

packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/CameraState.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// Copyright 2019 The Chromium 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+
15
package io.flutter.plugins.camera;
26

37
/**

packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/ImageSaver.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// Copyright 2019 The Chromium 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+
15
package io.flutter.plugins.camera;
26

37
import android.media.Image;

packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/MethodCallHandlerImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import io.flutter.plugin.common.MethodChannel;
1616
import io.flutter.plugin.common.MethodChannel.Result;
1717
import io.flutter.plugins.camera.CameraPermissions.PermissionsRegistry;
18+
import io.flutter.plugins.camera.features.CameraFeatureFactoryImpl;
1819
import io.flutter.plugins.camera.features.autofocus.FocusMode;
1920
import io.flutter.plugins.camera.features.exposurelock.ExposureMode;
2021
import io.flutter.plugins.camera.features.flash.FlashMode;
@@ -364,6 +365,7 @@ private void instantiateCamera(MethodCall call, Result result) throws CameraAcce
364365
new Camera(
365366
activity,
366367
flutterSurfaceTexture,
368+
new CameraFeatureFactoryImpl(),
367369
dartMessenger,
368370
cameraProperties,
369371
resolutionPreset,

packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/PictureCaptureRequest.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,6 @@ class PictureCaptureRequest {
4242
*/
4343
private long preCaptureStartTime;
4444

45-
private final Runnable timeoutCallback =
46-
() -> {
47-
error("captureTimeout", "Picture capture request timed out", null);
48-
};
49-
5045
/**
5146
* Factory method to create a picture capture request.
5247
*
Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1+
// Copyright 2019 The Chromium 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+
15
package io.flutter.plugins.camera.features;
26

37
import android.hardware.camera2.CaptureRequest;
8+
import androidx.annotation.NonNull;
49
import io.flutter.plugins.camera.CameraProperties;
510

611
/**
@@ -11,35 +16,42 @@
1116
*
1217
* @param <T>
1318
*/
14-
public interface CameraFeature<T> {
19+
public abstract class CameraFeature<T> {
20+
protected final CameraProperties cameraProperties;
21+
22+
23+
protected CameraFeature(@NonNull CameraProperties cameraProperties) {
24+
this.cameraProperties = cameraProperties;
25+
}
26+
1527
/** Debug name for this feature. */
16-
public String getDebugName();
28+
public abstract String getDebugName();
1729

1830
/**
1931
* Get the current value of this feature's setting.
2032
*
2133
* @return
2234
*/
23-
public T getValue();
35+
public abstract T getValue();
2436

2537
/**
2638
* Set a new value for this feature's setting.
2739
*
2840
* @param value
2941
*/
30-
public void setValue(T value);
42+
public abstract void setValue(T value);
3143

3244
/**
33-
* Returns whether or not this feature is supported on the given camera properties.
45+
* Returns whether or not this feature is supported.
3446
*
3547
* @return
3648
*/
37-
public boolean checkIsSupported(CameraProperties cameraProperties);
49+
public abstract boolean checkIsSupported();
3850

3951
/**
4052
* Update the setting in a provided request builder.
4153
*
4254
* @param requestBuilder
4355
*/
44-
public void updateBuilder(CaptureRequest.Builder requestBuilder);
56+
public abstract void updateBuilder(CaptureRequest.Builder requestBuilder);
4557
}
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
// Copyright 2019 The Chromium 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.camera.features;
6+
7+
import android.app.Activity;
8+
import android.hardware.camera2.CaptureRequest;
9+
import androidx.annotation.NonNull;
10+
import io.flutter.plugins.camera.CameraProperties;
11+
import io.flutter.plugins.camera.DartMessenger;
12+
import io.flutter.plugins.camera.features.autofocus.AutoFocusFeature;
13+
import io.flutter.plugins.camera.features.exposurelock.ExposureLockFeature;
14+
import io.flutter.plugins.camera.features.exposureoffset.ExposureOffsetFeature;
15+
import io.flutter.plugins.camera.features.exposurepoint.ExposurePointFeature;
16+
import io.flutter.plugins.camera.features.flash.FlashFeature;
17+
import io.flutter.plugins.camera.features.focuspoint.FocusPointFeature;
18+
import io.flutter.plugins.camera.features.fpsrange.FpsRangeFeature;
19+
import io.flutter.plugins.camera.features.noisereduction.NoiseReductionFeature;
20+
import io.flutter.plugins.camera.features.regionboundaries.CameraRegions;
21+
import io.flutter.plugins.camera.features.regionboundaries.RegionBoundariesFeature;
22+
import io.flutter.plugins.camera.features.resolution.ResolutionFeature;
23+
import io.flutter.plugins.camera.features.resolution.ResolutionPreset;
24+
import io.flutter.plugins.camera.features.sensororientation.SensorOrientationFeature;
25+
import io.flutter.plugins.camera.features.zoomlevel.ZoomLevelFeature;
26+
import java.util.concurrent.Callable;
27+
28+
public interface CameraFeatureFactory {
29+
30+
/**
31+
* Creates a new instance of the auto focus feature.
32+
*
33+
* @param cameraProperties instance of the CameraProperties class containing information about the cameras features.
34+
* @param recordingVideo indicates if the camera is currently recording.
35+
* @return newly created instance of the AutoFocusFeature class.
36+
*/
37+
AutoFocusFeature createAutoFocusFeature(
38+
@NonNull CameraProperties cameraProperties,
39+
boolean recordingVideo);
40+
41+
/**
42+
* Creates a new instance of the exposure lock feature.
43+
*
44+
* @param cameraProperties instance of the CameraProperties class containing information about the cameras features.
45+
* @return newly created instance of the ExposureLockFeature class.
46+
*/
47+
ExposureLockFeature createExposureLockFeature(@NonNull CameraProperties cameraProperties);
48+
49+
/**
50+
* Creates a new instance of the exposure offset feature.
51+
*
52+
* @param cameraProperties instance of the CameraProperties class containing information about the cameras features.
53+
* @return newly created instance of the ExposureOffsetFeature class.
54+
*/
55+
ExposureOffsetFeature createExposureOffsetFeature(@NonNull CameraProperties cameraProperties);
56+
57+
/**
58+
* Creates a new instance of the flash feature.
59+
*
60+
* @param cameraProperties instance of the CameraProperties class containing information about the cameras features.
61+
* @return newly created instance of the FlashFeature class.
62+
*/
63+
FlashFeature createFlashFeature(@NonNull CameraProperties cameraProperties);
64+
65+
/**
66+
* Creates a new instance of the resolution feature.
67+
*
68+
* @param cameraProperties instance of the CameraProperties class containing information about the cameras features.
69+
* @param initialSetting initial resolution preset.
70+
* @param cameraName the name of the camera which can be used to identify the camera device.
71+
* @return newly created instance of the ResolutionFeature class.
72+
*/
73+
ResolutionFeature createResolutionFeature(
74+
@NonNull CameraProperties cameraProperties,
75+
ResolutionPreset initialSetting,
76+
String cameraName);
77+
78+
/**
79+
* Creates a new instance of the focus point feature.
80+
*
81+
* @param cameraProperties instance of the CameraProperties class containing information about the cameras features.
82+
* @param getCameraRegions function which is used to retrieve the current camera regions.
83+
* @return newly created instance of the FocusPointFeature class.
84+
*/
85+
FocusPointFeature createFocusPointFeature(
86+
@NonNull CameraProperties cameraProperties,
87+
Callable<CameraRegions> getCameraRegions);
88+
89+
/**
90+
* Creates a new instance of the FPS range feature.
91+
*
92+
* @param cameraProperties instance of the CameraProperties class containing information about the cameras features.
93+
* @return newly created instance of the FpsRangeFeature class.
94+
*/
95+
FpsRangeFeature createFpsRangeFeature(@NonNull CameraProperties cameraProperties);
96+
97+
/**
98+
* Creates a new instance of the sensor orientation feature.
99+
*
100+
* @param cameraProperties instance of the CameraProperties class containing information about the cameras features.
101+
* @param activity current activity associated with the camera plugin.
102+
* @param dartMessenger instance of the DartMessenger class, used to send state updates back to Dart.
103+
* @return newly created instance of the SensorOrientationFeature class.
104+
*/
105+
SensorOrientationFeature createSensorOrientationFeature(
106+
@NonNull CameraProperties cameraProperties,
107+
@NonNull Activity activity,
108+
@NonNull DartMessenger dartMessenger);
109+
110+
/**
111+
* Creates a new instance of the zoom level feature.
112+
*
113+
* @param cameraProperties instance of the CameraProperties class containing information about the cameras features.
114+
* @return newly created instance of the ZoomLevelFeature class.
115+
*/
116+
ZoomLevelFeature createZoomLevelFeature(@NonNull CameraProperties cameraProperties);
117+
118+
/**
119+
* Creates a new instance of the region boundaries feature.
120+
*
121+
* @param cameraProperties instance of the CameraProperties class containing information about the cameras features.
122+
* @param requestBuilder instance of the CaptureRequest.Builder class, used to inform the Camera2 API that the settings are updated.
123+
* @return newly created instance of the RegionBoundariesFeature class.
124+
*/
125+
RegionBoundariesFeature createRegionBoundariesFeature(
126+
@NonNull CameraProperties cameraProperties,
127+
@NonNull CaptureRequest.Builder requestBuilder);
128+
129+
/**
130+
* Creates a new instance of the exposure point feature.
131+
*
132+
* @param cameraProperties instance of the CameraProperties class containing information about the cameras features.
133+
* @param getCameraRegions function which is used to retrieve the current camera regions.
134+
* @return newly created instance of the ExposurePointFeature class.
135+
*/
136+
ExposurePointFeature createExposurePointFeature(
137+
@NonNull CameraProperties cameraProperties,
138+
@NonNull Callable<CameraRegions> getCameraRegions);
139+
140+
/**
141+
* Creates a new instance of the noise reduction feature.
142+
*
143+
* @param cameraProperties instance of the CameraProperties class containing information about the cameras features.
144+
* @return newly created instance of the NoiseReductionFeature class.
145+
*/
146+
NoiseReductionFeature createNoiseReductionFeature(
147+
@NonNull CameraProperties cameraProperties);
148+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// Copyright 2019 The Chromium 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.camera.features;
6+
7+
import android.app.Activity;
8+
import android.hardware.camera2.CaptureRequest;
9+
import androidx.annotation.NonNull;
10+
import io.flutter.plugins.camera.CameraProperties;
11+
import io.flutter.plugins.camera.DartMessenger;
12+
import io.flutter.plugins.camera.features.autofocus.AutoFocusFeature;
13+
import io.flutter.plugins.camera.features.exposurelock.ExposureLockFeature;
14+
import io.flutter.plugins.camera.features.exposureoffset.ExposureOffsetFeature;
15+
import io.flutter.plugins.camera.features.exposurepoint.ExposurePointFeature;
16+
import io.flutter.plugins.camera.features.flash.FlashFeature;
17+
import io.flutter.plugins.camera.features.focuspoint.FocusPointFeature;
18+
import io.flutter.plugins.camera.features.fpsrange.FpsRangeFeature;
19+
import io.flutter.plugins.camera.features.noisereduction.NoiseReductionFeature;
20+
import io.flutter.plugins.camera.features.regionboundaries.CameraRegions;
21+
import io.flutter.plugins.camera.features.regionboundaries.RegionBoundariesFeature;
22+
import io.flutter.plugins.camera.features.resolution.ResolutionFeature;
23+
import io.flutter.plugins.camera.features.resolution.ResolutionPreset;
24+
import io.flutter.plugins.camera.features.sensororientation.SensorOrientationFeature;
25+
import io.flutter.plugins.camera.features.zoomlevel.ZoomLevelFeature;
26+
import java.util.concurrent.Callable;
27+
28+
public class CameraFeatureFactoryImpl implements CameraFeatureFactory {
29+
30+
@Override
31+
public AutoFocusFeature createAutoFocusFeature(
32+
@NonNull CameraProperties cameraProperties,
33+
boolean recordingVideo) {
34+
return new AutoFocusFeature(cameraProperties, recordingVideo);
35+
}
36+
37+
@Override
38+
public ExposureLockFeature createExposureLockFeature(@NonNull CameraProperties cameraProperties) {
39+
return new ExposureLockFeature(cameraProperties);
40+
}
41+
42+
@Override
43+
public ExposureOffsetFeature createExposureOffsetFeature(
44+
@NonNull CameraProperties cameraProperties) {
45+
return new ExposureOffsetFeature(cameraProperties);
46+
}
47+
48+
@Override
49+
public FlashFeature createFlashFeature(@NonNull CameraProperties cameraProperties) {
50+
return new FlashFeature(cameraProperties);
51+
}
52+
53+
@Override
54+
public ResolutionFeature createResolutionFeature(
55+
@NonNull CameraProperties cameraProperties,
56+
ResolutionPreset initialSetting,
57+
String cameraName) {
58+
return new ResolutionFeature(cameraProperties, initialSetting, cameraName);
59+
}
60+
61+
@Override
62+
public FocusPointFeature createFocusPointFeature(
63+
@NonNull CameraProperties cameraProperties,
64+
Callable<CameraRegions> getCameraRegions) {
65+
return new FocusPointFeature(cameraProperties, getCameraRegions);
66+
}
67+
68+
@Override
69+
public FpsRangeFeature createFpsRangeFeature(@NonNull CameraProperties cameraProperties) {
70+
return new FpsRangeFeature(cameraProperties);
71+
}
72+
73+
@Override
74+
public SensorOrientationFeature createSensorOrientationFeature(
75+
@NonNull CameraProperties cameraProperties,
76+
@NonNull Activity activity,
77+
@NonNull DartMessenger dartMessenger) {
78+
return new SensorOrientationFeature(cameraProperties, activity, dartMessenger);
79+
}
80+
81+
@Override
82+
public ZoomLevelFeature createZoomLevelFeature(@NonNull CameraProperties cameraProperties) {
83+
return new ZoomLevelFeature(cameraProperties);
84+
}
85+
86+
@Override
87+
public RegionBoundariesFeature createRegionBoundariesFeature(
88+
@NonNull CameraProperties cameraProperties,
89+
@NonNull CaptureRequest.Builder requestBuilder) {
90+
return new RegionBoundariesFeature(cameraProperties, requestBuilder);
91+
}
92+
93+
@Override
94+
public ExposurePointFeature createExposurePointFeature(
95+
@NonNull CameraProperties cameraProperties,
96+
@NonNull Callable<CameraRegions> getCameraRegions) {
97+
return new ExposurePointFeature(cameraProperties, getCameraRegions);
98+
}
99+
100+
@Override
101+
public NoiseReductionFeature createNoiseReductionFeature(
102+
@NonNull CameraProperties cameraProperties) {
103+
return new NoiseReductionFeature(cameraProperties);
104+
}
105+
}

packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/features/CameraFeatures.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// Copyright 2019 The Chromium 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+
15
package io.flutter.plugins.camera.features;
26

37
/**
@@ -24,13 +28,6 @@ public enum CameraFeatures {
2428
this.strValue = strValue;
2529
}
2630

27-
public static CameraFeatures getValueForString(String modeStr) {
28-
for (CameraFeatures value : values()) {
29-
if (value.strValue.equals(modeStr)) return value;
30-
}
31-
return null;
32-
}
33-
3431
@Override
3532
public String toString() {
3633
return strValue;

0 commit comments

Comments
 (0)