Aperture: Stop parsing sensor informations

* We were using those for zoom ratio, now CameraX does that for us

Change-Id: Ib11b4e1d8e6423ac698fa348745ea8ef7a07847b
diff --git a/app/src/main/java/org/lineageos/aperture/RectExt.kt b/app/src/main/java/org/lineageos/aperture/RectExt.kt
deleted file mode 100644
index 912922a..0000000
--- a/app/src/main/java/org/lineageos/aperture/RectExt.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2022 The LineageOS Project
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package org.lineageos.aperture
-
-import android.graphics.Rect
-import android.util.Size
-
-fun Rect.toSize() = Size(width(), height())
diff --git a/app/src/main/java/org/lineageos/aperture/SizeExt.kt b/app/src/main/java/org/lineageos/aperture/SizeExt.kt
deleted file mode 100644
index 9b093cf..0000000
--- a/app/src/main/java/org/lineageos/aperture/SizeExt.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2022 The LineageOS Project
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package org.lineageos.aperture
-
-import android.util.Size
-
-internal fun Size.reversed() = Size(height, width)
diff --git a/app/src/main/java/org/lineageos/aperture/SizeFExt.kt b/app/src/main/java/org/lineageos/aperture/SizeFExt.kt
deleted file mode 100644
index e8dda10..0000000
--- a/app/src/main/java/org/lineageos/aperture/SizeFExt.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2022 The LineageOS Project
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package org.lineageos.aperture
-
-import android.util.SizeF
-
-internal fun SizeF.reversed() = SizeF(height, width)
diff --git a/app/src/main/java/org/lineageos/aperture/utils/Camera.kt b/app/src/main/java/org/lineageos/aperture/utils/Camera.kt
index 6b6af99..6ef8f0a 100644
--- a/app/src/main/java/org/lineageos/aperture/utils/Camera.kt
+++ b/app/src/main/java/org/lineageos/aperture/utils/Camera.kt
@@ -8,8 +8,6 @@
 import android.hardware.camera2.CameraCharacteristics
 import android.hardware.camera2.CameraMetadata
 import android.os.Build
-import android.util.Size
-import android.util.SizeF
 import androidx.camera.camera2.interop.Camera2CameraInfo
 import androidx.camera.core.CameraInfo
 import androidx.camera.core.CameraSelector
@@ -17,7 +15,6 @@
 import androidx.camera.video.QualitySelector
 import org.lineageos.aperture.getSupportedModes
 import org.lineageos.aperture.physicalCameraIds
-import org.lineageos.aperture.toSize
 import kotlin.reflect.safeCast
 
 /**
@@ -42,34 +39,7 @@
     val exposureCompensationRange = cameraInfo.exposureState.exposureCompensationRange
     val hasFlashUnit = cameraInfo.hasFlashUnit()
 
-    /**
-     * A list of sensors this camera is made of.
-     * If it contains a single sensor, this means this is a physical camera device,
-     * else it's a logical camera device.
-     * This list may be empty if information parsing failed (this can happen with
-     * external cameras).
-     */
-    val sensors = mutableListOf<Sensor>().apply {
-        val physicalCameraIds = camera2CameraInfo.physicalCameraIds
-
-        if (physicalCameraIds.isNotEmpty()) {
-            for (physicalCameraId in physicalCameraIds) {
-                runCatching {
-                    val camera2CameraCharacteristics =
-                        cameraManager.camera2CameraManager.getCameraCharacteristics(
-                            physicalCameraId
-                        )
-                    this@apply.add(Camera2Sensor(camera2CameraCharacteristics))
-                }
-            }
-        } else {
-            runCatching { CameraXSensor(camera2CameraInfo) }.getOrNull()?.let {
-                add(it)
-            }
-        }
-    }.toList()
-
-    val isLogical = sensors.size > 1
+    val isLogical = camera2CameraInfo.physicalCameraIds.size > 1
 
     val intrinsicZoomRatio = cameraInfo.intrinsicZoomRatio
     val logicalZoomRatios = cameraManager.getLogicalZoomRatios(cameraId)
@@ -132,50 +102,4 @@
             else -> true
         }
     }
-
-    private class Camera2Sensor(private val cameraCharacteristics: CameraCharacteristics) : Sensor {
-        override val activeArraySize: Size
-            get() = cameraCharacteristics.get(
-                CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE
-            )!!.toSize()
-        override val availableFocalLengths: List<Float>
-            get() = cameraCharacteristics.get(
-                CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-            )!!.toList()
-        override val orientation: Int
-            get() = cameraCharacteristics.get(
-                CameraCharacteristics.SENSOR_ORIENTATION
-            )!!
-        override val pixelArraySize: Size
-            get() = cameraCharacteristics.get(
-                CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE
-            )!!
-        override val size: SizeF
-            get() = cameraCharacteristics.get(
-                CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE
-            )!!
-    }
-
-    private class CameraXSensor(private val camera2CameraInfo: Camera2CameraInfo) : Sensor {
-        override val activeArraySize: Size
-            get() = camera2CameraInfo.getCameraCharacteristic(
-                CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE
-            )!!.toSize()
-        override val availableFocalLengths: List<Float>
-            get() = camera2CameraInfo.getCameraCharacteristic(
-                CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-            )!!.toList()
-        override val orientation: Int
-            get() = camera2CameraInfo.getCameraCharacteristic(
-                CameraCharacteristics.SENSOR_ORIENTATION
-            )!!
-        override val pixelArraySize: Size
-            get() = camera2CameraInfo.getCameraCharacteristic(
-                CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE
-            )!!
-        override val size: SizeF
-            get() = camera2CameraInfo.getCameraCharacteristic(
-                CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE
-            )!!
-    }
 }
diff --git a/app/src/main/java/org/lineageos/aperture/utils/CameraManager.kt b/app/src/main/java/org/lineageos/aperture/utils/CameraManager.kt
index fa6693a..5322293 100644
--- a/app/src/main/java/org/lineageos/aperture/utils/CameraManager.kt
+++ b/app/src/main/java/org/lineageos/aperture/utils/CameraManager.kt
@@ -15,16 +15,12 @@
 import org.lineageos.aperture.getStringArray
 import java.util.concurrent.ExecutorService
 import java.util.concurrent.Executors
-import android.hardware.camera2.CameraManager as Camera2CameraManager
 
 /**
  * Class managing an app camera session
  */
 @androidx.camera.camera2.interop.ExperimentalCamera2Interop
 class CameraManager(context: Context) {
-    val camera2CameraManager: Camera2CameraManager =
-        context.getSystemService(Camera2CameraManager::class.java)
-
     private val cameraProvider = ProcessCameraProvider.getInstance(context).get()
     val extensionsManager = ExtensionsManager.getInstanceAsync(context, cameraProvider).get()!!
     val cameraController = LifecycleCameraController(context)
diff --git a/app/src/main/java/org/lineageos/aperture/utils/Sensor.kt b/app/src/main/java/org/lineageos/aperture/utils/Sensor.kt
deleted file mode 100644
index e0b4da7..0000000
--- a/app/src/main/java/org/lineageos/aperture/utils/Sensor.kt
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2022 The LineageOS Project
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package org.lineageos.aperture.utils
-
-import android.util.Size
-import android.util.SizeF
-import androidx.annotation.IntRange
-import org.lineageos.aperture.reversed
-import kotlin.math.atan
-
-/**
- * An interface representing a sensor.
- */
-interface Sensor {
-    /**
-     * The area of the image sensor which corresponds to
-     * active pixels after any geometric distortion correction has been applied.
-     * Units: Pixel coordinates on the image sensor
-     */
-    val activeArraySize: Size
-
-    /**
-     * List of focal lengths that are supported by this sensor.
-     */
-    val availableFocalLengths: List<Float>
-
-    /**
-     * Clockwise angle through which the output image needs to be rotated
-     * to be upright on the device screen in its native orientation.
-     */
-    val orientation: Int
-
-    /**
-     * The pixel count of the full pixel array of the image sensor,
-     * which covers android.sensor.info.physicalSize area.
-     * This represents the full pixel dimensions of the raw buffers produced by this sensor.
-     * Units: Pixels
-     */
-    val pixelArraySize: Size
-
-    /**
-     * The physical dimensions of the full pixel array.
-     * This is the physical size of the sensor pixel array defined by
-     * android.sensor.info.pixelArraySize.
-     * Units: Millimeters
-     */
-    val size: SizeF
-
-    /**
-     * Gets the angle of view of a camera.
-     */
-    val viewAngleDegrees: Int
-        get() = focalLengthToViewAngleDegrees(
-            availableFocalLengths.first(),
-            horizontalLength
-        )
-
-    /**
-     * Gets the length of the horizontal side of the sensor.
-     *
-     * The horizontal side is the width of the sensor size after rotated by the sensor
-     * orientation.
-     */
-    private val horizontalLength: Float
-        get() {
-            var sensorSize = size
-            var activeArraySize = activeArraySize
-            var pixelArraySize = pixelArraySize
-
-            if (is90or270(orientation)) {
-                sensorSize = sensorSize.reversed()
-                activeArraySize = activeArraySize.reversed()
-                pixelArraySize = pixelArraySize.reversed()
-            }
-
-            return sensorSize.width * activeArraySize.width / pixelArraySize.width
-        }
-
-    companion object {
-        /**
-         * Calculates view angle by focal length and sensor length.
-         *
-         * The returned view angle is inexact and might not be hundred percent accurate comparing
-         * to the output image.
-         *
-         * The returned view angle should between 0 and 360.
-         */
-        @IntRange(from = 0, to = 360)
-        private fun focalLengthToViewAngleDegrees(focalLength: Float, sensorLength: Float): Int {
-            assert(focalLength > 0) { "Focal length should be positive." }
-            assert(sensorLength > 0) { "Sensor length should be positive." }
-
-            val viewAngleDegrees = Math.toDegrees(
-                2 * atan((sensorLength / (2 * focalLength)).toDouble())
-            ).toInt()
-
-            assert(viewAngleDegrees in 0..360) {
-                "The provided focal length and sensor length" +
-                        "result in an invalid view angle degrees."
-            }
-
-            return viewAngleDegrees
-        }
-
-        private fun is90or270(rotationDegrees: Int) =
-            when (rotationDegrees) {
-                0 -> false
-                90 -> true
-                180 -> false
-                270 -> true
-                else -> throw IllegalArgumentException("Invalid rotation degrees: $rotationDegrees")
-            }
-    }
-}