diff options
author | 2018-04-03 17:13:39 +0000 | |
---|---|---|
committer | 2018-04-03 17:13:39 +0000 | |
commit | 3275d9a004a45f4a2a9e30bbe7c662955ebdb9ff (patch) | |
tree | 51d76d314dc2d2648d38bd1c7d0142c0713e0c01 | |
parent | 3e57c9f52573fdf15414fdda50bd988776e8ea3d (diff) | |
parent | f8aa7bc15271d06136683c2fc47eb2f235ce647b (diff) |
Merge "Camera: sort getCameraIdList output" into pi-dev
-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; } |