summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yin-Chia Yeh <yinchiayeh@google.com> 2018-03-09 15:48:16 -0800
committer Emilian Peev <epeev@google.com> 2018-03-28 12:59:49 +0100
commitf8aa7bc15271d06136683c2fc47eb2f235ce647b (patch)
treec0a45994b6262b458625555c29e8180fa9e4bab9
parentb133cbfd0b5afb0217ee45c8e26847465c6a717a (diff)
Camera: sort getCameraIdList output
Since API1 camera ID (int) can now be used as array index of getCameraIdList output. Test: mix internal/external camera and try CtsVerifier tests Bug: 72261912 Change-Id: I7cc28f47d100424ebe1ce6f7b61f60c233688538
-rw-r--r--core/java/android/hardware/camera2/CameraManager.java34
1 files changed, 34 insertions, 0 deletions
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java
index 4124536d6adc..7ebe0f9a8d8d 100644
--- a/core/java/android/hardware/camera2/CameraManager.java
+++ b/core/java/android/hardware/camera2/CameraManager.java
@@ -43,6 +43,9 @@ import android.util.ArrayMap;
import android.util.Log;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionException;
@@ -924,6 +927,37 @@ public final class CameraManager {
idCount++;
}
}
+
+ // The sort logic must match the logic in
+ // libcameraservice/common/CameraProviderManager.cpp::getAPI1CompatibleCameraDeviceIds
+ Arrays.sort(cameraIds, new Comparator<String>() {
+ @Override
+ public int compare(String s1, String s2) {
+ int s1Int = 0, s2Int = 0;
+ try {
+ s1Int = Integer.parseInt(s1);
+ } catch (NumberFormatException e) {
+ s1Int = -1;
+ }
+
+ try {
+ s2Int = Integer.parseInt(s2);
+ } catch (NumberFormatException e) {
+ s2Int = -1;
+ }
+
+ // Uint device IDs first
+ if (s1Int >= 0 && s2Int >= 0) {
+ return s1Int - s2Int;
+ } else if (s1Int >= 0) {
+ return -1;
+ } else if (s2Int >= 0) {
+ return 1;
+ } else {
+ // Simple string compare if both id are not uint
+ return s1.compareTo(s2);
+ }
+ }});
return cameraIds;
}