diff options
author | 2018-03-09 15:48:16 -0800 | |
---|---|---|
committer | 2018-03-28 12:59:49 +0100 | |
commit | f8aa7bc15271d06136683c2fc47eb2f235ce647b (patch) | |
tree | c0a45994b6262b458625555c29e8180fa9e4bab9 | |
parent | b133cbfd0b5afb0217ee45c8e26847465c6a717a (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.java | 34 |
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; } |