Merge "Throw and log on some conditions that are error prone." into androidx-main
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraDevices.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraDevices.kt
index 9a687b9..9736e8b 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraDevices.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/CameraDevices.kt
@@ -103,8 +103,17 @@
     fun awaitMetadata(camera: CameraId): CameraMetadata
 }
 
+/**
+ * CameraId represents a typed identifier for a camera represented as a non-blank String.
+ */
 @JvmInline
 value class CameraId(val value: String) {
+    init {
+        require(value.isNotBlank()) {
+            "CameraId cannot be null or blank!"
+        }
+    }
+
     companion object {
         inline fun fromCamera2Id(value: String): CameraId = CameraId(value)
         inline fun fromCamera1Id(value: Int): CameraId = CameraId("$value")
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt
index d533838..e61a66e 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CameraMetadata.kt
@@ -172,9 +172,11 @@
             } else {
                 try {
                     Debug.trace("Camera-${camera.value}#physicalCameraIds") {
+                        val ids = Api28Compat.getPhysicalCameraIds(characteristics)
+                        Log.info { "Loaded physicalCameraIds from $camera: $ids" }
+
                         @Suppress("UselessCallOnNotNull")
-                        Api28Compat.getPhysicalCameraIds(characteristics)
-                            .orEmpty()
+                        ids.orEmpty()
                             .map { CameraId(it) }
                             .toSet()
                     }
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2DeviceCache.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2DeviceCache.kt
index bee2f49..bfaf688 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2DeviceCache.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2DeviceCache.kt
@@ -42,7 +42,7 @@
     @GuardedBy("lock")
     private var openableCameras: List<CameraId>? = null
 
-    suspend fun getCameraIds(): List<CameraId>? {
+    suspend fun getCameraIds(): List<CameraId> {
         val cameras = synchronized(lock) { openableCameras }
         if (!cameras.isNullOrEmpty()) {
             return cameras
@@ -79,9 +79,10 @@
         val cameraIdArray =
             try {
                 // WARNING: This method can, at times, return an empty list of cameras on devices
-                // that
-                //  will normally return a valid list of cameras (b/159052778)
-                cameraManager.cameraIdList
+                // that will normally return a valid list of cameras (b/159052778)
+                val ids = cameraManager.cameraIdList
+                Log.info { "Loaded CameraIdList $ids" }
+                ids
             } catch (e: CameraAccessException) {
                 Log.warn(e) { "Failed to query CameraManager#getCameraIdList!" }
                 return null
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt
index aa1a8e40..73a1a99 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2MetadataCache.kt
@@ -89,6 +89,7 @@
 
         return Debug.trace("Camera-${cameraId.value}#readCameraMetadata") {
             try {
+                Log.debug { "Loading metadata for $cameraId" }
                 val cameraManager =
                     cameraPipeContext.getSystemService(Context.CAMERA_SERVICE) as CameraManager
                 val characteristics = cameraManager.getCameraCharacteristics(cameraId.value)