Skip to content

Commit 3bc6d96

Browse files
authored
Add base Control class, add easy setters and CameraOptions APIs (google#105)
1 parent 33162f0 commit 3bc6d96

File tree

15 files changed

+168
-124
lines changed

15 files changed

+168
-124
lines changed

cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraOptions1Test.java

Lines changed: 48 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.junit.runner.RunWith;
1010

1111
import java.util.Arrays;
12+
import java.util.Collection;
1213
import java.util.Collections;
1314
import java.util.HashSet;
1415
import java.util.List;
@@ -109,25 +110,6 @@ public void testPictureAspectRatio() {
109110
}
110111
}
111112

112-
@Test
113-
public void testFacing() {
114-
Set<Integer> supported = new HashSet<>();
115-
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
116-
for (int i = 0, count = Camera.getNumberOfCameras(); i < count; i++) {
117-
Camera.getCameraInfo(i, cameraInfo);
118-
supported.add(cameraInfo.facing);
119-
}
120-
121-
CameraOptions o = new CameraOptions(mock(Camera.Parameters.class), false);
122-
Mapper m = new Mapper.Mapper1();
123-
Set<Facing> s = o.getSupportedFacing();
124-
assertEquals(o.getSupportedFacing().size(), supported.size());
125-
for (Facing facing : s) {
126-
assertTrue(supported.contains(m.<Integer>map(facing)));
127-
assertTrue(o.supports(facing));
128-
}
129-
}
130-
131113
@Test
132114
public void testGestureActions() {
133115
Camera.Parameters params = mock(Camera.Parameters.class);
@@ -145,6 +127,41 @@ public void testGestureActions() {
145127
assertFalse(o.supports(GestureAction.EXPOSURE_CORRECTION));
146128
}
147129

130+
@Test
131+
public void testAlwaysSupportedControls() {
132+
// Grid, VideoQuality, SessionType and Audio are always supported.
133+
Camera.Parameters params = mock(Camera.Parameters.class);
134+
CameraOptions o = new CameraOptions(params, false);
135+
136+
Collection<Grid> grids = o.getSupportedControls(Grid.class);
137+
Collection<VideoQuality> video = o.getSupportedControls(VideoQuality.class);
138+
Collection<SessionType> sessions = o.getSupportedControls(SessionType.class);
139+
Collection<Audio> audio = o.getSupportedControls(Audio.class);
140+
assertEquals(grids.size(), Grid.values().length);
141+
assertEquals(video.size(), VideoQuality.values().length);
142+
assertEquals(sessions.size(), SessionType.values().length);
143+
assertEquals(audio.size(), Audio.values().length);
144+
}
145+
146+
@Test
147+
public void testFacing() {
148+
Set<Integer> supported = new HashSet<>();
149+
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
150+
for (int i = 0, count = Camera.getNumberOfCameras(); i < count; i++) {
151+
Camera.getCameraInfo(i, cameraInfo);
152+
supported.add(cameraInfo.facing);
153+
}
154+
155+
CameraOptions o = new CameraOptions(mock(Camera.Parameters.class), false);
156+
Mapper m = new Mapper.Mapper1();
157+
Collection<Facing> s = o.getSupportedControls(Facing.class);
158+
assertEquals(s.size(), supported.size());
159+
for (Facing facing : s) {
160+
assertTrue(supported.contains(m.<Integer>map(facing)));
161+
assertTrue(o.supports(facing));
162+
}
163+
}
164+
148165
@Test
149166
public void testWhiteBalance() {
150167
Camera.Parameters params = mock(Camera.Parameters.class);
@@ -155,9 +172,10 @@ public void testWhiteBalance() {
155172
));
156173

157174
CameraOptions o = new CameraOptions(params, false);
158-
assertEquals(o.getSupportedWhiteBalance().size(), 2);
159-
assertTrue(o.getSupportedWhiteBalance().contains(WhiteBalance.AUTO));
160-
assertTrue(o.getSupportedWhiteBalance().contains(WhiteBalance.CLOUDY));
175+
Collection<WhiteBalance> w = o.getSupportedControls(WhiteBalance.class);
176+
assertEquals(w.size(), 2);
177+
assertTrue(w.contains(WhiteBalance.AUTO));
178+
assertTrue(w.contains(WhiteBalance.CLOUDY));
161179
assertTrue(o.supports(WhiteBalance.AUTO));
162180
assertTrue(o.supports(WhiteBalance.CLOUDY));
163181
}
@@ -172,9 +190,10 @@ public void testFlash() {
172190
));
173191

174192
CameraOptions o = new CameraOptions(params, false);
175-
assertEquals(o.getSupportedFlash().size(), 2);
176-
assertTrue(o.getSupportedFlash().contains(Flash.AUTO));
177-
assertTrue(o.getSupportedFlash().contains(Flash.TORCH));
193+
Collection<Flash> f = o.getSupportedControls(Flash.class);
194+
assertEquals(f.size(), 2);
195+
assertTrue(f.contains(Flash.AUTO));
196+
assertTrue(f.contains(Flash.TORCH));
178197
assertTrue(o.supports(Flash.AUTO));
179198
assertTrue(o.supports(Flash.TORCH));
180199
}
@@ -189,9 +208,10 @@ public void testHdr() {
189208
));
190209

191210
CameraOptions o = new CameraOptions(params, false);
192-
assertEquals(o.getSupportedHdr().size(), 2);
193-
assertTrue(o.getSupportedHdr().contains(Hdr.OFF));
194-
assertTrue(o.getSupportedHdr().contains(Hdr.ON));
211+
Collection<Hdr> h = o.getSupportedControls(Hdr.class);
212+
assertEquals(h.size(), 2);
213+
assertTrue(h.contains(Hdr.OFF));
214+
assertTrue(h.contains(Hdr.ON));
195215
assertTrue(o.supports(Hdr.OFF));
196216
assertTrue(o.supports(Hdr.ON));
197217
}

cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewTest.java

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -471,34 +471,23 @@ public void testSetJpegQuality_illegal() {
471471

472472
@Test
473473
public void testSetFlash() {
474-
cameraView.setFlash(Flash.TORCH);
474+
cameraView.set(Flash.TORCH);
475475
assertEquals(cameraView.getFlash(), Flash.TORCH);
476-
cameraView.setFlash(Flash.OFF);
477-
assertEquals(cameraView.getFlash(), Flash.OFF);
478-
}
479-
480-
@Test
481-
public void testToggleFlash() {
482-
cameraView.setFlash(Flash.OFF);
483-
cameraView.toggleFlash();
484-
assertEquals(cameraView.getFlash(), Flash.ON);
485-
cameraView.toggleFlash();
486-
assertEquals(cameraView.getFlash(), Flash.AUTO);
487-
cameraView.toggleFlash();
476+
cameraView.set(Flash.OFF);
488477
assertEquals(cameraView.getFlash(), Flash.OFF);
489478
}
490479

491480
@Test
492481
public void testSetFacing() {
493-
cameraView.setFacing(Facing.FRONT);
482+
cameraView.set(Facing.FRONT);
494483
assertEquals(cameraView.getFacing(), Facing.FRONT);
495-
cameraView.setFacing(Facing.BACK);
484+
cameraView.set(Facing.BACK);
496485
assertEquals(cameraView.getFacing(), Facing.BACK);
497486
}
498487

499488
@Test
500489
public void testToggleFacing() {
501-
cameraView.setFacing(Facing.FRONT);
490+
cameraView.set(Facing.FRONT);
502491
cameraView.toggleFacing();
503492
assertEquals(cameraView.getFacing(), Facing.BACK);
504493
cameraView.toggleFacing();
@@ -507,49 +496,49 @@ public void testToggleFacing() {
507496

508497
@Test
509498
public void testSetGrid() {
510-
cameraView.setGrid(Grid.DRAW_3X3);
499+
cameraView.set(Grid.DRAW_3X3);
511500
assertEquals(cameraView.getGrid(), Grid.DRAW_3X3);
512-
cameraView.setGrid(Grid.OFF);
501+
cameraView.set(Grid.OFF);
513502
assertEquals(cameraView.getGrid(), Grid.OFF);
514503
}
515504

516505
@Test
517506
public void testSetWhiteBalance() {
518-
cameraView.setWhiteBalance(WhiteBalance.CLOUDY);
507+
cameraView.set(WhiteBalance.CLOUDY);
519508
assertEquals(cameraView.getWhiteBalance(), WhiteBalance.CLOUDY);
520-
cameraView.setWhiteBalance(WhiteBalance.AUTO);
509+
cameraView.set(WhiteBalance.AUTO);
521510
assertEquals(cameraView.getWhiteBalance(), WhiteBalance.AUTO);
522511
}
523512

524513
@Test
525514
public void testSessionType() {
526-
cameraView.setSessionType(SessionType.VIDEO);
515+
cameraView.set(SessionType.VIDEO);
527516
assertEquals(cameraView.getSessionType(), SessionType.VIDEO);
528-
cameraView.setSessionType(SessionType.PICTURE);
517+
cameraView.set(SessionType.PICTURE);
529518
assertEquals(cameraView.getSessionType(), SessionType.PICTURE);
530519
}
531520

532521
@Test
533522
public void testHdr() {
534-
cameraView.setHdr(Hdr.ON);
523+
cameraView.set(Hdr.ON);
535524
assertEquals(cameraView.getHdr(), Hdr.ON);
536-
cameraView.setHdr(Hdr.OFF);
525+
cameraView.set(Hdr.OFF);
537526
assertEquals(cameraView.getHdr(), Hdr.OFF);
538527
}
539528

540529
@Test
541530
public void testAudio() {
542-
cameraView.setAudio(Audio.ON);
531+
cameraView.set(Audio.ON);
543532
assertEquals(cameraView.getAudio(), Audio.ON);
544-
cameraView.setAudio(Audio.OFF);
533+
cameraView.set(Audio.OFF);
545534
assertEquals(cameraView.getAudio(), Audio.OFF);
546535
}
547536

548537
@Test
549538
public void testVideoQuality() {
550-
cameraView.setVideoQuality(VideoQuality.MAX_1080P);
539+
cameraView.set(VideoQuality.MAX_1080P);
551540
assertEquals(cameraView.getVideoQuality(), VideoQuality.MAX_1080P);
552-
cameraView.setVideoQuality(VideoQuality.LOWEST);
541+
cameraView.set(VideoQuality.LOWEST);
553542
assertEquals(cameraView.getVideoQuality(), VideoQuality.LOWEST);
554543
}
555544

cameraview/src/main/java/com/otaliastudios/cameraview/CameraListener.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public void onCameraError(@NonNull CameraException exception) {
6060
*/
6161
@UiThread
6262
public void onPictureTaken(byte[] jpeg) {
63-
63+
// TODO v2: use a PictureResult.
6464
}
6565

6666

@@ -76,7 +76,7 @@ public void onPictureTaken(byte[] jpeg) {
7676
*/
7777
@UiThread
7878
public void onVideoTaken(File video) {
79-
79+
// TODO v2: use a VideoResult.
8080
}
8181

8282

cameraview/src/main/java/com/otaliastudios/cameraview/CameraOptions.java

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
import android.hardware.camera2.CameraCharacteristics;
77
import android.support.annotation.NonNull;
88

9+
import java.util.ArrayList;
10+
import java.util.Arrays;
11+
import java.util.Collection;
912
import java.util.Collections;
1013
import java.util.HashSet;
1114
import java.util.List;
@@ -100,46 +103,13 @@ public class CameraOptions {
100103

101104

102105
/**
103-
* Shorthand for getSupportedFacing().contains(value).
106+
* Shorthand for getSupported*().contains(value).
104107
*
105-
* @param facing value
108+
* @param control value to check
106109
* @return whether it's supported
107110
*/
108-
public boolean supports(Facing facing) {
109-
return getSupportedFacing().contains(facing);
110-
}
111-
112-
113-
/**
114-
* Shorthand for getSupportedFlash().contains(value).
115-
*
116-
* @param flash value
117-
* @return whether it's supported
118-
*/
119-
public boolean supports(Flash flash) {
120-
return getSupportedFlash().contains(flash);
121-
}
122-
123-
124-
/**
125-
* Shorthand for getSupportedWhiteBalance().contains(value).
126-
*
127-
* @param whiteBalance value
128-
* @return whether it's supported
129-
*/
130-
public boolean supports(WhiteBalance whiteBalance) {
131-
return getSupportedWhiteBalance().contains(whiteBalance);
132-
}
133-
134-
135-
/**
136-
* Shorthand for getSupportedHdr().contains(value).
137-
*
138-
* @param hdr value
139-
* @return whether it's supported
140-
*/
141-
public boolean supports(Hdr hdr) {
142-
return getSupportedHdr().contains(hdr);
111+
public boolean supports(Control control) {
112+
return getSupportedControls(control.getClass()).contains(control);
143113
}
144114

145115

@@ -166,26 +136,55 @@ public boolean supports(GestureAction action) {
166136
return false;
167137
}
168138

139+
140+
@SuppressWarnings("unchecked")
141+
public <T extends Control> Collection<T> getSupportedControls(@NonNull Class<T> controlClass) {
142+
if (controlClass.equals(Audio.class)) {
143+
return (Collection<T>) Arrays.asList(Audio.values());
144+
} else if (controlClass.equals(Facing.class)) {
145+
return (Collection<T>) getSupportedFacing();
146+
} else if (controlClass.equals(Flash.class)) {
147+
return (Collection<T>) getSupportedFlash();
148+
} else if (controlClass.equals(Grid.class)) {
149+
return (Collection<T>) Arrays.asList(Grid.values());
150+
} else if (controlClass.equals(Hdr.class)) {
151+
return (Collection<T>) getSupportedHdr();
152+
} else if (controlClass.equals(SessionType.class)) {
153+
return (Collection<T>) Arrays.asList(SessionType.values());
154+
} else if (controlClass.equals(VideoQuality.class)) {
155+
return (Collection<T>) Arrays.asList(VideoQuality.values());
156+
} else if (controlClass.equals(WhiteBalance.class)) {
157+
return (Collection<T>) getSupportedWhiteBalance();
158+
}
159+
// Unrecognized control.
160+
return Collections.emptyList();
161+
}
162+
163+
169164
/**
170165
* Set of supported picture sizes for the currently opened camera.
171166
*
172167
* @return a set of supported values.
173168
*/
174169
@NonNull
175170
public Set<Size> getSupportedPictureSizes() {
171+
// TODO v2: return a Collection
176172
return Collections.unmodifiableSet(supportedPictureSizes);
177173
}
178174

175+
179176
/**
180177
* Set of supported picture aspect ratios for the currently opened camera.
181178
*
182179
* @return a set of supported values.
183180
*/
184181
@NonNull
185182
public Set<AspectRatio> getSupportedPictureAspectRatios() {
183+
// TODO v2: return a Collection
186184
return Collections.unmodifiableSet(supportedPictureAspectRatio);
187185
}
188186

187+
189188
/**
190189
* Set of supported facing values.
191190
*
@@ -195,6 +194,7 @@ public Set<AspectRatio> getSupportedPictureAspectRatios() {
195194
*/
196195
@NonNull
197196
public Set<Facing> getSupportedFacing() {
197+
// TODO v2: return a Collection
198198
return Collections.unmodifiableSet(supportedFacing);
199199
}
200200

@@ -210,6 +210,7 @@ public Set<Facing> getSupportedFacing() {
210210
*/
211211
@NonNull
212212
public Set<Flash> getSupportedFlash() {
213+
// TODO v2: return a Collection
213214
return Collections.unmodifiableSet(supportedFlash);
214215
}
215216

@@ -226,6 +227,7 @@ public Set<Flash> getSupportedFlash() {
226227
*/
227228
@NonNull
228229
public Set<WhiteBalance> getSupportedWhiteBalance() {
230+
// TODO v2: return a Collection
229231
return Collections.unmodifiableSet(supportedWhiteBalance);
230232
}
231233

@@ -239,6 +241,7 @@ public Set<WhiteBalance> getSupportedWhiteBalance() {
239241
*/
240242
@NonNull
241243
public Set<Hdr> getSupportedHdr() {
244+
// TODO v2: return a Collection
242245
return Collections.unmodifiableSet(supportedHdr);
243246
}
244247

0 commit comments

Comments
 (0)