Merge branch 'lineage-21.0' of https://github.com/LineageOS/android_packages_apps_Aperture into leaf-3.2

Change-Id: Ib76c1063705267b9627b2de4b204c92dc8233350
diff --git a/app/Android.bp b/app/Android.bp
index 63a537e..42c6c78 100644
--- a/app/Android.bp
+++ b/app/Android.bp
@@ -20,6 +20,8 @@
     product_specific: true,
     overrides: ["Camera2"],
 
+    use_embedded_native_libs: true,
+
     required: [
         "ApertureFrameworksBaseOverlay",
         "ApertureLensLauncher",
@@ -40,6 +42,7 @@
         "Aperture_androidx.camera_camera-lifecycle",
         "Aperture_androidx.camera_camera-video",
         "Aperture_androidx.camera_camera-view",
+        "Aperture_androidx.camera_camera-viewfinder",
         "Aperture_androidx.camera_camera-extensions",
         "Aperture_androidx.media3_media3-exoplayer",
         "Aperture_androidx.media3_media3-ui",
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index cb5ac39..4654e64 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -18,7 +18,7 @@
 
 buildscript {
     repositories {
-        maven("https://raw.githubusercontent.com/lineage-next/gradle-generatebp/v1.7/.m2")
+        maven("https://raw.githubusercontent.com/lineage-next/gradle-generatebp/v1.9/.m2")
     }
 
     dependencies {
@@ -84,7 +84,7 @@
     implementation("com.google.android.material:material:1.9.0")
 
     // CameraX core library using the camera2 implementation
-    val cameraxVersion = "1.4.0-alpha04"
+    val cameraxVersion = "1.4.0-beta01"
     // The following line is optional, as the core library is included indirectly by camera-camera2
     implementation("androidx.camera:camera-core:${cameraxVersion}")
     implementation("androidx.camera:camera-camera2:${cameraxVersion}")
@@ -94,6 +94,8 @@
     implementation("androidx.camera:camera-video:${cameraxVersion}")
     // If you want to additionally use the CameraX View class
     implementation("androidx.camera:camera-view:${cameraxVersion}")
+    // If you want to additionally use the CameraX Viewfinder class
+    implementation("androidx.camera:camera-viewfinder:1.4.0-alpha06")
     // If you want to additionally use the CameraX Extensions library
     implementation("androidx.camera:camera-extensions:${cameraxVersion}")
 
diff --git a/app/libs/Android.bp b/app/libs/Android.bp
index 29ddf1b..538b852 100644
--- a/app/libs/Android.bp
+++ b/app/libs/Android.bp
@@ -7,7 +7,7 @@
 
 android_library_import {
     name: "Aperture_androidx.camera_camera-camera2-nodeps",
-    aars: ["androidx/camera/camera-camera2/1.4.0-alpha04/camera-camera2-1.4.0-alpha04.aar"],
+    aars: ["androidx/camera/camera-camera2/1.4.0-beta01/camera-camera2-1.4.0-beta01.aar"],
     sdk_version: "34",
     min_sdk_version: "14",
     apex_available: [
@@ -32,7 +32,7 @@
         "//apex_available:platform",
         "//apex_available:anyapex",
     ],
-    manifest: "androidx/camera/camera-camera2/1.4.0-alpha04/AndroidManifest.xml",
+    manifest: "androidx/camera/camera-camera2/1.4.0-beta01/AndroidManifest.xml",
     static_libs: [
         "Aperture_androidx.camera_camera-camera2-nodeps",
         "Aperture_androidx.camera_camera-core",
@@ -47,7 +47,7 @@
 
 android_library_import {
     name: "Aperture_androidx.camera_camera-core-nodeps",
-    aars: ["androidx/camera/camera-core/1.4.0-alpha04/camera-core-1.4.0-alpha04.aar"],
+    aars: ["androidx/camera/camera-core/1.4.0-beta01/camera-core-1.4.0-beta01.aar"],
     sdk_version: "34",
     min_sdk_version: "14",
     apex_available: [
@@ -59,13 +59,16 @@
         "androidx.annotation_annotation",
         "androidx.annotation_annotation-experimental",
         "androidx.concurrent_concurrent-futures",
+        "androidx.concurrent_concurrent-futures-ktx",
         "androidx.core_core",
         "androidx.exifinterface_exifinterface",
         "androidx.lifecycle_lifecycle-livedata",
         "auto_value_annotations",
         "guava",
         "kotlin-stdlib",
+        "kotlinx-coroutines-android",
     ],
+    extract_jni: true,
 }
 
 android_library {
@@ -76,26 +79,28 @@
         "//apex_available:platform",
         "//apex_available:anyapex",
     ],
-    manifest: "androidx/camera/camera-core/1.4.0-alpha04/AndroidManifest.xml",
+    manifest: "androidx/camera/camera-core/1.4.0-beta01/AndroidManifest.xml",
     static_libs: [
         "Aperture_androidx.camera_camera-core-nodeps",
         "Aperture_androidx.lifecycle_lifecycle-common",
         "androidx.annotation_annotation",
         "androidx.annotation_annotation-experimental",
         "androidx.concurrent_concurrent-futures",
+        "androidx.concurrent_concurrent-futures-ktx",
         "androidx.core_core",
         "androidx.exifinterface_exifinterface",
         "androidx.lifecycle_lifecycle-livedata",
         "auto_value_annotations",
         "guava",
         "kotlin-stdlib",
+        "kotlinx-coroutines-android",
     ],
     java_version: "1.7",
 }
 
 android_library_import {
     name: "Aperture_androidx.camera_camera-extensions-nodeps",
-    aars: ["androidx/camera/camera-extensions/1.4.0-alpha04/camera-extensions-1.4.0-alpha04.aar"],
+    aars: ["androidx/camera/camera-extensions/1.4.0-beta01/camera-extensions-1.4.0-beta01.aar"],
     sdk_version: "34",
     min_sdk_version: "14",
     apex_available: [
@@ -119,7 +124,7 @@
         "//apex_available:platform",
         "//apex_available:anyapex",
     ],
-    manifest: "androidx/camera/camera-extensions/1.4.0-alpha04/AndroidManifest.xml",
+    manifest: "androidx/camera/camera-extensions/1.4.0-beta01/AndroidManifest.xml",
     static_libs: [
         "Aperture_androidx.camera_camera-extensions-nodeps",
         "Aperture_androidx.camera_camera-core",
@@ -133,7 +138,7 @@
 
 android_library_import {
     name: "Aperture_androidx.camera_camera-lifecycle-nodeps",
-    aars: ["androidx/camera/camera-lifecycle/1.4.0-alpha04/camera-lifecycle-1.4.0-alpha04.aar"],
+    aars: ["androidx/camera/camera-lifecycle/1.4.0-beta01/camera-lifecycle-1.4.0-beta01.aar"],
     sdk_version: "34",
     min_sdk_version: "14",
     apex_available: [
@@ -144,9 +149,11 @@
         "Aperture_androidx.camera_camera-core",
         "Aperture_androidx.lifecycle_lifecycle-common",
         "androidx.concurrent_concurrent-futures",
+        "androidx.concurrent_concurrent-futures-ktx",
         "androidx.core_core",
         "auto_value_annotations",
         "guava",
+        "kotlinx-coroutines-android",
     ],
 }
 
@@ -158,22 +165,24 @@
         "//apex_available:platform",
         "//apex_available:anyapex",
     ],
-    manifest: "androidx/camera/camera-lifecycle/1.4.0-alpha04/AndroidManifest.xml",
+    manifest: "androidx/camera/camera-lifecycle/1.4.0-beta01/AndroidManifest.xml",
     static_libs: [
         "Aperture_androidx.camera_camera-lifecycle-nodeps",
         "Aperture_androidx.camera_camera-core",
         "Aperture_androidx.lifecycle_lifecycle-common",
         "androidx.concurrent_concurrent-futures",
+        "androidx.concurrent_concurrent-futures-ktx",
         "androidx.core_core",
         "auto_value_annotations",
         "guava",
+        "kotlinx-coroutines-android",
     ],
     java_version: "1.7",
 }
 
 android_library_import {
     name: "Aperture_androidx.camera_camera-video-nodeps",
-    aars: ["androidx/camera/camera-video/1.4.0-alpha04/camera-video-1.4.0-alpha04.aar"],
+    aars: ["androidx/camera/camera-video/1.4.0-beta01/camera-video-1.4.0-beta01.aar"],
     sdk_version: "34",
     min_sdk_version: "14",
     apex_available: [
@@ -197,7 +206,7 @@
         "//apex_available:platform",
         "//apex_available:anyapex",
     ],
-    manifest: "androidx/camera/camera-video/1.4.0-alpha04/AndroidManifest.xml",
+    manifest: "androidx/camera/camera-video/1.4.0-beta01/AndroidManifest.xml",
     static_libs: [
         "Aperture_androidx.camera_camera-video-nodeps",
         "Aperture_androidx.camera_camera-core",
@@ -211,7 +220,7 @@
 
 android_library_import {
     name: "Aperture_androidx.camera_camera-view-nodeps",
-    aars: ["androidx/camera/camera-view/1.4.0-alpha04/camera-view-1.4.0-alpha04.aar"],
+    aars: ["androidx/camera/camera-view/1.4.0-beta01/camera-view-1.4.0-beta01.aar"],
     sdk_version: "34",
     min_sdk_version: "14",
     apex_available: [
@@ -241,7 +250,7 @@
         "//apex_available:platform",
         "//apex_available:anyapex",
     ],
-    manifest: "androidx/camera/camera-view/1.4.0-alpha04/AndroidManifest.xml",
+    manifest: "androidx/camera/camera-view/1.4.0-beta01/AndroidManifest.xml",
     static_libs: [
         "Aperture_androidx.camera_camera-view-nodeps",
         "Aperture_androidx.camera_camera-core",
@@ -259,6 +268,108 @@
     java_version: "1.7",
 }
 
+android_library_import {
+    name: "Aperture_androidx.camera_camera-viewfinder-nodeps",
+    aars: ["androidx/camera/camera-viewfinder/1.4.0-alpha06/camera-viewfinder-1.4.0-alpha06.aar"],
+    sdk_version: "34",
+    min_sdk_version: "14",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    static_libs: [
+        "Aperture_androidx.camera_camera-viewfinder-core",
+        "androidx.annotation_annotation",
+        "androidx.annotation_annotation-experimental",
+        "androidx.appcompat_appcompat",
+        "androidx.concurrent_concurrent-futures",
+        "androidx.concurrent_concurrent-futures-ktx",
+        "androidx.core_core",
+        "androidx.test.espresso.idling-resource",
+        "auto_value_annotations",
+        "guava",
+        "kotlinx-coroutines-android",
+        "kotlinx-coroutines-core",
+    ],
+}
+
+android_library {
+    name: "Aperture_androidx.camera_camera-viewfinder",
+    sdk_version: "34",
+    min_sdk_version: "14",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    manifest: "androidx/camera/camera-viewfinder/1.4.0-alpha06/AndroidManifest.xml",
+    static_libs: [
+        "Aperture_androidx.camera_camera-viewfinder-nodeps",
+        "Aperture_androidx.camera_camera-viewfinder-core",
+        "androidx.annotation_annotation",
+        "androidx.annotation_annotation-experimental",
+        "androidx.appcompat_appcompat",
+        "androidx.concurrent_concurrent-futures",
+        "androidx.concurrent_concurrent-futures-ktx",
+        "androidx.core_core",
+        "androidx.test.espresso.idling-resource",
+        "auto_value_annotations",
+        "guava",
+        "kotlinx-coroutines-android",
+        "kotlinx-coroutines-core",
+    ],
+    java_version: "1.7",
+}
+
+android_library_import {
+    name: "Aperture_androidx.camera_camera-viewfinder-core-nodeps",
+    aars: ["androidx/camera/camera-viewfinder-core/1.4.0-alpha06/camera-viewfinder-core-1.4.0-alpha06.aar"],
+    sdk_version: "34",
+    min_sdk_version: "14",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    static_libs: [
+        "androidx.annotation_annotation",
+        "androidx.annotation_annotation-experimental",
+        "androidx.appcompat_appcompat",
+        "androidx.concurrent_concurrent-futures",
+        "androidx.concurrent_concurrent-futures-ktx",
+        "androidx.core_core",
+        "androidx.test.espresso.idling-resource",
+        "auto_value_annotations",
+        "guava",
+        "kotlinx-coroutines-android",
+        "kotlinx-coroutines-core",
+    ],
+}
+
+android_library {
+    name: "Aperture_androidx.camera_camera-viewfinder-core",
+    sdk_version: "34",
+    min_sdk_version: "14",
+    apex_available: [
+        "//apex_available:platform",
+        "//apex_available:anyapex",
+    ],
+    manifest: "androidx/camera/camera-viewfinder-core/1.4.0-alpha06/AndroidManifest.xml",
+    static_libs: [
+        "Aperture_androidx.camera_camera-viewfinder-core-nodeps",
+        "androidx.annotation_annotation",
+        "androidx.annotation_annotation-experimental",
+        "androidx.appcompat_appcompat",
+        "androidx.concurrent_concurrent-futures",
+        "androidx.concurrent_concurrent-futures-ktx",
+        "androidx.core_core",
+        "androidx.test.espresso.idling-resource",
+        "auto_value_annotations",
+        "guava",
+        "kotlinx-coroutines-android",
+        "kotlinx-coroutines-core",
+    ],
+    java_version: "1.7",
+}
+
 java_import {
     name: "Aperture_androidx.lifecycle_lifecycle-common-nodeps",
     jars: ["androidx/lifecycle/lifecycle-common/2.6.2/lifecycle-common-2.6.2.jar"],
diff --git a/app/libs/androidx/camera/camera-camera2/1.4.0-alpha04/camera-camera2-1.4.0-alpha04.aar b/app/libs/androidx/camera/camera-camera2/1.4.0-alpha04/camera-camera2-1.4.0-alpha04.aar
deleted file mode 100644
index 012924a..0000000
--- a/app/libs/androidx/camera/camera-camera2/1.4.0-alpha04/camera-camera2-1.4.0-alpha04.aar
+++ /dev/null
Binary files differ
diff --git a/app/libs/androidx/camera/camera-camera2/1.4.0-alpha04/AndroidManifest.xml b/app/libs/androidx/camera/camera-camera2/1.4.0-beta01/AndroidManifest.xml
similarity index 96%
rename from app/libs/androidx/camera/camera-camera2/1.4.0-alpha04/AndroidManifest.xml
rename to app/libs/androidx/camera/camera-camera2/1.4.0-beta01/AndroidManifest.xml
index ac4e478..13fc0c5 100644
--- a/app/libs/androidx/camera/camera-camera2/1.4.0-alpha04/AndroidManifest.xml
+++ b/app/libs/androidx/camera/camera-camera2/1.4.0-beta01/AndroidManifest.xml
@@ -18,7 +18,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     package="androidx.camera.camera2" >
 
-    <uses-sdk android:minSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="21" />
 
     <application>
         <service
diff --git a/app/libs/androidx/camera/camera-camera2/1.4.0-alpha04/AndroidManifest.xml.license b/app/libs/androidx/camera/camera-camera2/1.4.0-beta01/AndroidManifest.xml.license
similarity index 100%
rename from app/libs/androidx/camera/camera-camera2/1.4.0-alpha04/AndroidManifest.xml.license
rename to app/libs/androidx/camera/camera-camera2/1.4.0-beta01/AndroidManifest.xml.license
diff --git a/app/libs/androidx/camera/camera-camera2/1.4.0-beta01/camera-camera2-1.4.0-beta01.aar b/app/libs/androidx/camera/camera-camera2/1.4.0-beta01/camera-camera2-1.4.0-beta01.aar
new file mode 100644
index 0000000..152e65c
--- /dev/null
+++ b/app/libs/androidx/camera/camera-camera2/1.4.0-beta01/camera-camera2-1.4.0-beta01.aar
Binary files differ
diff --git a/app/libs/androidx/camera/camera-camera2/1.4.0-alpha04/camera-camera2-1.4.0-alpha04.aar.license b/app/libs/androidx/camera/camera-camera2/1.4.0-beta01/camera-camera2-1.4.0-beta01.aar.license
similarity index 100%
rename from app/libs/androidx/camera/camera-camera2/1.4.0-alpha04/camera-camera2-1.4.0-alpha04.aar.license
rename to app/libs/androidx/camera/camera-camera2/1.4.0-beta01/camera-camera2-1.4.0-beta01.aar.license
diff --git a/app/libs/androidx/camera/camera-core/1.4.0-alpha04/camera-core-1.4.0-alpha04.aar b/app/libs/androidx/camera/camera-core/1.4.0-alpha04/camera-core-1.4.0-alpha04.aar
deleted file mode 100644
index eecf60b..0000000
--- a/app/libs/androidx/camera/camera-core/1.4.0-alpha04/camera-core-1.4.0-alpha04.aar
+++ /dev/null
Binary files differ
diff --git a/app/libs/androidx/camera/camera-core/1.4.0-alpha04/AndroidManifest.xml b/app/libs/androidx/camera/camera-core/1.4.0-beta01/AndroidManifest.xml
similarity index 96%
rename from app/libs/androidx/camera/camera-core/1.4.0-alpha04/AndroidManifest.xml
rename to app/libs/androidx/camera/camera-core/1.4.0-beta01/AndroidManifest.xml
index 1a10035..ab739d0 100644
--- a/app/libs/androidx/camera/camera-core/1.4.0-alpha04/AndroidManifest.xml
+++ b/app/libs/androidx/camera/camera-core/1.4.0-beta01/AndroidManifest.xml
@@ -18,7 +18,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     package="androidx.camera.core" >
 
-    <uses-sdk android:minSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="21" />
 
     <application>
 
diff --git a/app/libs/androidx/camera/camera-core/1.4.0-alpha04/AndroidManifest.xml.license b/app/libs/androidx/camera/camera-core/1.4.0-beta01/AndroidManifest.xml.license
similarity index 100%
rename from app/libs/androidx/camera/camera-core/1.4.0-alpha04/AndroidManifest.xml.license
rename to app/libs/androidx/camera/camera-core/1.4.0-beta01/AndroidManifest.xml.license
diff --git a/app/libs/androidx/camera/camera-core/1.4.0-beta01/camera-core-1.4.0-beta01.aar b/app/libs/androidx/camera/camera-core/1.4.0-beta01/camera-core-1.4.0-beta01.aar
new file mode 100644
index 0000000..23afec3
--- /dev/null
+++ b/app/libs/androidx/camera/camera-core/1.4.0-beta01/camera-core-1.4.0-beta01.aar
Binary files differ
diff --git a/app/libs/androidx/camera/camera-core/1.4.0-alpha04/camera-core-1.4.0-alpha04.aar.license b/app/libs/androidx/camera/camera-core/1.4.0-beta01/camera-core-1.4.0-beta01.aar.license
similarity index 100%
rename from app/libs/androidx/camera/camera-core/1.4.0-alpha04/camera-core-1.4.0-alpha04.aar.license
rename to app/libs/androidx/camera/camera-core/1.4.0-beta01/camera-core-1.4.0-beta01.aar.license
diff --git a/app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/camera-extensions-1.4.0-alpha04.aar b/app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/camera-extensions-1.4.0-alpha04.aar
deleted file mode 100644
index c560935..0000000
--- a/app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/camera-extensions-1.4.0-alpha04.aar
+++ /dev/null
Binary files differ
diff --git a/app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/AndroidManifest.xml b/app/libs/androidx/camera/camera-extensions/1.4.0-beta01/AndroidManifest.xml
similarity index 95%
rename from app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/AndroidManifest.xml
rename to app/libs/androidx/camera/camera-extensions/1.4.0-beta01/AndroidManifest.xml
index 945450c..5b60f00 100644
--- a/app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/AndroidManifest.xml
+++ b/app/libs/androidx/camera/camera-extensions/1.4.0-beta01/AndroidManifest.xml
@@ -17,7 +17,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="androidx.camera.extensions" >
 
-    <uses-sdk android:minSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="21" />
 
     <queries>
         <intent>
diff --git a/app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/AndroidManifest.xml.license b/app/libs/androidx/camera/camera-extensions/1.4.0-beta01/AndroidManifest.xml.license
similarity index 100%
rename from app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/AndroidManifest.xml.license
rename to app/libs/androidx/camera/camera-extensions/1.4.0-beta01/AndroidManifest.xml.license
diff --git a/app/libs/androidx/camera/camera-extensions/1.4.0-beta01/camera-extensions-1.4.0-beta01.aar b/app/libs/androidx/camera/camera-extensions/1.4.0-beta01/camera-extensions-1.4.0-beta01.aar
new file mode 100644
index 0000000..3055756
--- /dev/null
+++ b/app/libs/androidx/camera/camera-extensions/1.4.0-beta01/camera-extensions-1.4.0-beta01.aar
Binary files differ
diff --git a/app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/camera-extensions-1.4.0-alpha04.aar.license b/app/libs/androidx/camera/camera-extensions/1.4.0-beta01/camera-extensions-1.4.0-beta01.aar.license
similarity index 100%
rename from app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/camera-extensions-1.4.0-alpha04.aar.license
rename to app/libs/androidx/camera/camera-extensions/1.4.0-beta01/camera-extensions-1.4.0-beta01.aar.license
diff --git a/app/libs/androidx/camera/camera-lifecycle/1.4.0-alpha04/camera-lifecycle-1.4.0-alpha04.aar b/app/libs/androidx/camera/camera-lifecycle/1.4.0-alpha04/camera-lifecycle-1.4.0-alpha04.aar
deleted file mode 100644
index 633851e..0000000
--- a/app/libs/androidx/camera/camera-lifecycle/1.4.0-alpha04/camera-lifecycle-1.4.0-alpha04.aar
+++ /dev/null
Binary files differ
diff --git a/app/libs/androidx/camera/camera-lifecycle/1.4.0-alpha04/AndroidManifest.xml b/app/libs/androidx/camera/camera-lifecycle/1.4.0-beta01/AndroidManifest.xml
similarity index 78%
rename from app/libs/androidx/camera/camera-lifecycle/1.4.0-alpha04/AndroidManifest.xml
rename to app/libs/androidx/camera/camera-lifecycle/1.4.0-beta01/AndroidManifest.xml
index a311364..a57761e 100644
--- a/app/libs/androidx/camera/camera-lifecycle/1.4.0-alpha04/AndroidManifest.xml
+++ b/app/libs/androidx/camera/camera-lifecycle/1.4.0-beta01/AndroidManifest.xml
@@ -2,6 +2,6 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="androidx.camera.lifecycle" >
 
-    <uses-sdk android:minSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="21" />
 
 </manifest>
\ No newline at end of file
diff --git a/app/libs/androidx/camera/camera-lifecycle/1.4.0-alpha04/AndroidManifest.xml.license b/app/libs/androidx/camera/camera-lifecycle/1.4.0-beta01/AndroidManifest.xml.license
similarity index 100%
rename from app/libs/androidx/camera/camera-lifecycle/1.4.0-alpha04/AndroidManifest.xml.license
rename to app/libs/androidx/camera/camera-lifecycle/1.4.0-beta01/AndroidManifest.xml.license
diff --git a/app/libs/androidx/camera/camera-lifecycle/1.4.0-beta01/camera-lifecycle-1.4.0-beta01.aar b/app/libs/androidx/camera/camera-lifecycle/1.4.0-beta01/camera-lifecycle-1.4.0-beta01.aar
new file mode 100644
index 0000000..a6f20e6
--- /dev/null
+++ b/app/libs/androidx/camera/camera-lifecycle/1.4.0-beta01/camera-lifecycle-1.4.0-beta01.aar
Binary files differ
diff --git a/app/libs/androidx/camera/camera-lifecycle/1.4.0-alpha04/camera-lifecycle-1.4.0-alpha04.aar.license b/app/libs/androidx/camera/camera-lifecycle/1.4.0-beta01/camera-lifecycle-1.4.0-beta01.aar.license
similarity index 100%
rename from app/libs/androidx/camera/camera-lifecycle/1.4.0-alpha04/camera-lifecycle-1.4.0-alpha04.aar.license
rename to app/libs/androidx/camera/camera-lifecycle/1.4.0-beta01/camera-lifecycle-1.4.0-beta01.aar.license
diff --git a/app/libs/androidx/camera/camera-video/1.4.0-alpha04/camera-video-1.4.0-alpha04.aar b/app/libs/androidx/camera/camera-video/1.4.0-alpha04/camera-video-1.4.0-alpha04.aar
deleted file mode 100644
index 2c6d190..0000000
--- a/app/libs/androidx/camera/camera-video/1.4.0-alpha04/camera-video-1.4.0-alpha04.aar
+++ /dev/null
Binary files differ
diff --git a/app/libs/androidx/camera/camera-video/1.4.0-alpha04/AndroidManifest.xml b/app/libs/androidx/camera/camera-video/1.4.0-beta01/AndroidManifest.xml
similarity index 78%
rename from app/libs/androidx/camera/camera-video/1.4.0-alpha04/AndroidManifest.xml
rename to app/libs/androidx/camera/camera-video/1.4.0-beta01/AndroidManifest.xml
index 20f51b3..fdaa9c9 100644
--- a/app/libs/androidx/camera/camera-video/1.4.0-alpha04/AndroidManifest.xml
+++ b/app/libs/androidx/camera/camera-video/1.4.0-beta01/AndroidManifest.xml
@@ -2,6 +2,6 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="androidx.camera.video" >
 
-    <uses-sdk android:minSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="21" />
 
 </manifest>
\ No newline at end of file
diff --git a/app/libs/androidx/camera/camera-video/1.4.0-alpha04/AndroidManifest.xml.license b/app/libs/androidx/camera/camera-video/1.4.0-beta01/AndroidManifest.xml.license
similarity index 100%
rename from app/libs/androidx/camera/camera-video/1.4.0-alpha04/AndroidManifest.xml.license
rename to app/libs/androidx/camera/camera-video/1.4.0-beta01/AndroidManifest.xml.license
diff --git a/app/libs/androidx/camera/camera-video/1.4.0-beta01/camera-video-1.4.0-beta01.aar b/app/libs/androidx/camera/camera-video/1.4.0-beta01/camera-video-1.4.0-beta01.aar
new file mode 100644
index 0000000..28dbbd5
--- /dev/null
+++ b/app/libs/androidx/camera/camera-video/1.4.0-beta01/camera-video-1.4.0-beta01.aar
Binary files differ
diff --git a/app/libs/androidx/camera/camera-video/1.4.0-alpha04/camera-video-1.4.0-alpha04.aar.license b/app/libs/androidx/camera/camera-video/1.4.0-beta01/camera-video-1.4.0-beta01.aar.license
similarity index 100%
rename from app/libs/androidx/camera/camera-video/1.4.0-alpha04/camera-video-1.4.0-alpha04.aar.license
rename to app/libs/androidx/camera/camera-video/1.4.0-beta01/camera-video-1.4.0-beta01.aar.license
diff --git a/app/libs/androidx/camera/camera-view/1.4.0-alpha04/camera-view-1.4.0-alpha04.aar b/app/libs/androidx/camera/camera-view/1.4.0-alpha04/camera-view-1.4.0-alpha04.aar
deleted file mode 100644
index f03cfe9..0000000
--- a/app/libs/androidx/camera/camera-view/1.4.0-alpha04/camera-view-1.4.0-alpha04.aar
+++ /dev/null
Binary files differ
diff --git a/app/libs/androidx/camera/camera-view/1.4.0-alpha04/AndroidManifest.xml b/app/libs/androidx/camera/camera-view/1.4.0-beta01/AndroidManifest.xml
similarity index 78%
rename from app/libs/androidx/camera/camera-view/1.4.0-alpha04/AndroidManifest.xml
rename to app/libs/androidx/camera/camera-view/1.4.0-beta01/AndroidManifest.xml
index ef780fc..3c71adb 100644
--- a/app/libs/androidx/camera/camera-view/1.4.0-alpha04/AndroidManifest.xml
+++ b/app/libs/androidx/camera/camera-view/1.4.0-beta01/AndroidManifest.xml
@@ -2,6 +2,6 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="androidx.camera.view" >
 
-    <uses-sdk android:minSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="21" />
 
 </manifest>
\ No newline at end of file
diff --git a/app/libs/androidx/camera/camera-view/1.4.0-alpha04/AndroidManifest.xml.license b/app/libs/androidx/camera/camera-view/1.4.0-beta01/AndroidManifest.xml.license
similarity index 100%
rename from app/libs/androidx/camera/camera-view/1.4.0-alpha04/AndroidManifest.xml.license
rename to app/libs/androidx/camera/camera-view/1.4.0-beta01/AndroidManifest.xml.license
diff --git a/app/libs/androidx/camera/camera-view/1.4.0-beta01/camera-view-1.4.0-beta01.aar b/app/libs/androidx/camera/camera-view/1.4.0-beta01/camera-view-1.4.0-beta01.aar
new file mode 100644
index 0000000..5e98d35
--- /dev/null
+++ b/app/libs/androidx/camera/camera-view/1.4.0-beta01/camera-view-1.4.0-beta01.aar
Binary files differ
diff --git a/app/libs/androidx/camera/camera-view/1.4.0-alpha04/camera-view-1.4.0-alpha04.aar.license b/app/libs/androidx/camera/camera-view/1.4.0-beta01/camera-view-1.4.0-beta01.aar.license
similarity index 100%
rename from app/libs/androidx/camera/camera-view/1.4.0-alpha04/camera-view-1.4.0-alpha04.aar.license
rename to app/libs/androidx/camera/camera-view/1.4.0-beta01/camera-view-1.4.0-beta01.aar.license
diff --git a/app/libs/androidx/camera/camera-viewfinder-core/1.4.0-alpha06/AndroidManifest.xml b/app/libs/androidx/camera/camera-viewfinder-core/1.4.0-alpha06/AndroidManifest.xml
new file mode 100644
index 0000000..15f9973
--- /dev/null
+++ b/app/libs/androidx/camera/camera-viewfinder-core/1.4.0-alpha06/AndroidManifest.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="androidx.camera.viewfinder.core" >
+
+    <uses-sdk android:minSdkVersion="21" />
+
+</manifest>
\ No newline at end of file
diff --git a/app/libs/androidx/camera/camera-viewfinder-core/1.4.0-alpha06/AndroidManifest.xml.license b/app/libs/androidx/camera/camera-viewfinder-core/1.4.0-alpha06/AndroidManifest.xml.license
new file mode 100644
index 0000000..7744a52
--- /dev/null
+++ b/app/libs/androidx/camera/camera-viewfinder-core/1.4.0-alpha06/AndroidManifest.xml.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2023-2024 The Android Open Source Project
+
+SPDX-License-Identifier: Apache-2.0
diff --git a/app/libs/androidx/camera/camera-viewfinder-core/1.4.0-alpha06/camera-viewfinder-core-1.4.0-alpha06.aar b/app/libs/androidx/camera/camera-viewfinder-core/1.4.0-alpha06/camera-viewfinder-core-1.4.0-alpha06.aar
new file mode 100644
index 0000000..55fc402
--- /dev/null
+++ b/app/libs/androidx/camera/camera-viewfinder-core/1.4.0-alpha06/camera-viewfinder-core-1.4.0-alpha06.aar
Binary files differ
diff --git a/app/libs/androidx/camera/camera-viewfinder-core/1.4.0-alpha06/camera-viewfinder-core-1.4.0-alpha06.aar.license b/app/libs/androidx/camera/camera-viewfinder-core/1.4.0-alpha06/camera-viewfinder-core-1.4.0-alpha06.aar.license
new file mode 100644
index 0000000..7744a52
--- /dev/null
+++ b/app/libs/androidx/camera/camera-viewfinder-core/1.4.0-alpha06/camera-viewfinder-core-1.4.0-alpha06.aar.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2023-2024 The Android Open Source Project
+
+SPDX-License-Identifier: Apache-2.0
diff --git a/app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/AndroidManifest.xml b/app/libs/androidx/camera/camera-viewfinder/1.4.0-alpha06/AndroidManifest.xml
similarity index 60%
copy from app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/AndroidManifest.xml
copy to app/libs/androidx/camera/camera-viewfinder/1.4.0-alpha06/AndroidManifest.xml
index 945450c..ab9e6ff 100644
--- a/app/libs/androidx/camera/camera-extensions/1.4.0-alpha04/AndroidManifest.xml
+++ b/app/libs/androidx/camera/camera-viewfinder/1.4.0-alpha06/AndroidManifest.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-  Copyright 2019 The Android Open Source Project
+  Copyright 2022 The Android Open Source Project
 
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
@@ -15,20 +15,8 @@
   limitations under the License.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="androidx.camera.extensions" >
+    package="androidx.camera.viewfinder" >
 
-    <uses-sdk android:minSdkVersion="19" />
-
-    <queries>
-        <intent>
-            <action android:name="androidx.camera.extensions.action.VENDOR_ACTION" />
-        </intent>
-    </queries>
-
-    <application>
-        <uses-library
-            android:name="androidx.camera.extensions.impl"
-            android:required="false" />
-    </application>
+    <uses-sdk android:minSdkVersion="21" />
 
 </manifest>
\ No newline at end of file
diff --git a/app/libs/androidx/camera/camera-viewfinder/1.4.0-alpha06/AndroidManifest.xml.license b/app/libs/androidx/camera/camera-viewfinder/1.4.0-alpha06/AndroidManifest.xml.license
new file mode 100644
index 0000000..9673da8
--- /dev/null
+++ b/app/libs/androidx/camera/camera-viewfinder/1.4.0-alpha06/AndroidManifest.xml.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2022-2024 The Android Open Source Project
+
+SPDX-License-Identifier: Apache-2.0
diff --git a/app/libs/androidx/camera/camera-viewfinder/1.4.0-alpha06/camera-viewfinder-1.4.0-alpha06.aar b/app/libs/androidx/camera/camera-viewfinder/1.4.0-alpha06/camera-viewfinder-1.4.0-alpha06.aar
new file mode 100644
index 0000000..3a8e283
--- /dev/null
+++ b/app/libs/androidx/camera/camera-viewfinder/1.4.0-alpha06/camera-viewfinder-1.4.0-alpha06.aar
Binary files differ
diff --git a/app/libs/androidx/camera/camera-viewfinder/1.4.0-alpha06/camera-viewfinder-1.4.0-alpha06.aar.license b/app/libs/androidx/camera/camera-viewfinder/1.4.0-alpha06/camera-viewfinder-1.4.0-alpha06.aar.license
new file mode 100644
index 0000000..9673da8
--- /dev/null
+++ b/app/libs/androidx/camera/camera-viewfinder/1.4.0-alpha06/camera-viewfinder-1.4.0-alpha06.aar.license
@@ -0,0 +1,3 @@
+SPDX-FileCopyrightText: 2022-2024 The Android Open Source Project
+
+SPDX-License-Identifier: Apache-2.0
diff --git a/app/src/main/java/androidx/camera/viewfinder/core/ZoomGestureDetector.kt b/app/src/main/java/androidx/camera/viewfinder/core/ZoomGestureDetector.kt
deleted file mode 100644
index 0b7d4ae..0000000
--- a/app/src/main/java/androidx/camera/viewfinder/core/ZoomGestureDetector.kt
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * Copyright 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.camera.viewfinder.core
-
-import android.annotation.SuppressLint
-import android.content.Context
-import android.view.GestureDetector
-import android.view.MotionEvent
-import android.view.View
-import android.view.ViewConfiguration
-import androidx.annotation.IntDef
-import androidx.annotation.RequiresApi
-import androidx.annotation.RestrictTo
-import androidx.annotation.UiThread
-import androidx.camera.viewfinder.core.ZoomGestureDetector.OnZoomGestureListener
-import kotlin.math.abs
-import kotlin.math.hypot
-
-/**
- * Detector that interprets [MotionEvent]s and notify users when a zooming gesture has occurred.
- *
- * To use this class to do pinch-to-zoom on the viewfinder:
- * - In the [OnZoomGestureListener.onZoomEvent], get the [scaleFactor] and set it to
- * `CameraControl.setZoomRatio` if the factor is in the range of `ZoomState.getMinZoomRatio` and
- * `ZoomState.getMaxZoomRatio`. Then create an instance of the `ZoomGestureDetector` with the
- * [OnZoomGestureListener].
- * - In the [View.onTouchEvent], call [onTouchEvent] and pass the [MotionEvent]s to the
- * `ZoomGestureDetector`.
- *
- * @constructor Creates a ZoomGestureDetector for detecting zooming gesture.
- * @param context The application context.
- * @param spanSlop The distance in pixels touches can wander before a gesture to be interpreted
- * as zooming.
- * @param minSpan The distance in pixels between touches that must be reached for a gesture to be
- * interpreted as zooming.
- * @param listener The listener to receive the callback.
- * @sample androidx.camera.viewfinder.core.samples.onTouchEventSample
- */
-@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
-class ZoomGestureDetector @SuppressLint("ExecutorRegistration") @JvmOverloads constructor(
-    private val context: Context,
-    private val spanSlop: Int = ViewConfiguration.get(context).scaledTouchSlop * 2,
-    private val minSpan: Int = DEFAULT_MIN_SPAN,
-    private val listener: OnZoomGestureListener
-) {
-    /**
-     * The listener for receiving notifications when gestures occur.
-     *
-     * An application will receive events in the following order:
-     * - One [ZOOM_GESTURE_BEGIN]
-     * - Zero or more [ZOOM_GESTURE_MOVE]
-     * - One [ZOOM_GESTURE_END]
-     */
-    fun interface OnZoomGestureListener {
-        /**
-         * Responds to the events of a zooming gesture.
-         *
-         * Return `true` to indicate the event is handled by the listener.
-         * - For [ZOOM_GESTURE_MOVE] events, the detector will continue to accumulate movement if
-         * it's not handled. This can be useful if an application, for example, only wants to update
-         * scaling factors if the change is greater than `0.01`.
-         * - For [ZOOM_GESTURE_BEGIN] events, the detector will ignore the rest of the gesture if
-         * it's not handled. For example, if a gesture is beginning with a focal point outside of a
-         * region where it makes sense, [ZOOM_GESTURE_BEGIN] event may return `false` to ignore the
-         * rest of the gesture.
-         * - For [ZOOM_GESTURE_END] events, the return value is ignored and the zoom gesture will
-         * end regardless of what is returned.
-         *
-         * Once receiving [ZOOM_GESTURE_END] event, [focusX] and [focusY] will return focal point of
-         * the pointers remaining on the screen.
-         *
-         * @param type The type of the event. Possible values include [ZOOM_GESTURE_MOVE],
-         * [ZOOM_GESTURE_BEGIN] and [ZOOM_GESTURE_END].
-         * @param detector The detector reporting the event - use this to retrieve extended info
-         * about event state.
-         * @return Whether or not the detector should consider this event as handled.
-         */
-        @UiThread
-        fun onZoomEvent(@ZoomGesture type: Int, detector: ZoomGestureDetector): Boolean
-    }
-
-    /**
-     * The X coordinate of the current gesture's focal point in pixels. If a gesture is in progress,
-     * the focal point is between each of the pointers forming the gesture.
-     *
-     * If [isInProgress] would return `false`, the result of this function is undefined.
-     */
-    var focusX = 0f
-        private set
-
-    /**
-     * The Y coordinate of the current gesture's focal point in pixels. If a gesture is in progress,
-     * the focal point is between each of the pointers forming the gesture.
-     *
-     * If [isInProgress] would return `false`, the result of this function is undefined.
-     */
-    var focusY = 0f
-        private set
-
-    /**
-     * Whether the quick zoom gesture, in which the user performs a double tap followed by a swipe,
-     * should perform zooming.
-     *
-     * If not set, this is enabled by default.
-     */
-    var isQuickZoomEnabled: Boolean = true
-
-    /**
-     * Whether the stylus zoom gesture, in which the user uses a stylus and presses the button,
-     * should perform zooming.
-     *
-     * If not set, this is enabled by default.
-     */
-    var isStylusZoomEnabled = true
-
-    /**
-     * The average distance in pixels between each of the pointers forming the gesture in progress
-     * through the focal point.
-     */
-    private var currentSpan = 0f
-
-    /**
-     * The previous average distance in pixels between each of the pointers forming the gesture in
-     * progress through the focal point.
-     */
-    private var previousSpan = 0f
-
-    /**
-     * The average X distance in pixels between each of the pointers forming the gesture in progress
-     * through the focal point.
-     */
-    private var currentSpanX = 0f
-
-    /**
-     * The average Y distance in pixels between each of the pointers forming the gesture in progress
-     * through the focal point.
-     */
-    private var currentSpanY = 0f
-
-    /**
-     * The previous average X distance in pixels between each of the pointers forming the gesture in
-     * progress through the focal point.
-     */
-    private var previousSpanX = 0f
-
-    /**
-     * The previous average Y distance in pixels between each of the pointers forming the gesture in
-     * progress through the focal point.
-     */
-    private var previousSpanY = 0f
-
-    /**
-     * The event time in milliseconds of the current event being processed.
-     */
-    var eventTime: Long = 0
-        private set
-
-    /**
-     * Whether a zoom gesture is in progress.
-     */
-    var isInProgress = false
-        private set
-
-    private var initialSpan = 0f
-    private var prevTime: Long = 0
-    private var anchoredZoomStartX = 0f
-    private var anchoredZoomStartY = 0f
-    private var anchoredZoomMode = ANCHORED_ZOOM_MODE_NONE
-    private var gestureDetector: GestureDetector =
-        GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
-            override fun onDoubleTap(e: MotionEvent): Boolean {
-                // Double tap: start watching for a swipe
-                anchoredZoomStartX = e.x
-                anchoredZoomStartY = e.y
-                anchoredZoomMode = ANCHORED_ZOOM_MODE_DOUBLE_TAP
-                return true
-            }
-        })
-    private var eventBeforeOrAboveStartingGestureEvent = false
-
-    /**
-     * Accepts [MotionEvent]s and dispatches events to a [OnZoomGestureListener] when appropriate.
-     *
-     * Applications should pass a complete and consistent event stream to this method.
-     *
-     * A complete and consistent event stream involves all [MotionEvent]s from the initial
-     * [MotionEvent.ACTION_DOWN] to the final [MotionEvent.ACTION_UP] or
-     * [MotionEvent.ACTION_CANCEL].
-     *
-     * @param event The event to process.
-     * @return `true` if the event was processed and the detector wants to receive the
-     * rest of the [MotionEvent]s in this event stream. Return it in the [View.onTouchEvent] for a
-     * normal use case.
-     */
-    @UiThread
-    fun onTouchEvent(event: MotionEvent): Boolean {
-        eventTime = event.eventTime
-
-        val action = event.actionMasked
-
-        // Forward the event to check for double tap gesture
-        if (isQuickZoomEnabled) {
-            gestureDetector.onTouchEvent(event)
-        }
-
-        val count = event.pointerCount
-        val isStylusButtonDown = (event.buttonState and MotionEvent.BUTTON_STYLUS_PRIMARY) != 0
-
-        val anchoredZoomCancelled =
-            anchoredZoomMode == ANCHORED_ZOOM_MODE_STYLUS && !isStylusButtonDown
-        val streamComplete = action == MotionEvent.ACTION_UP ||
-                action == MotionEvent.ACTION_CANCEL ||
-                anchoredZoomCancelled
-
-        if (action == MotionEvent.ACTION_DOWN || streamComplete) {
-            // Reset any scale in progress with the listener.
-            // If it's an ACTION_DOWN we're beginning a new event stream.
-            // This means the app probably didn't give us all the events.
-            if (isInProgress) {
-                listener.onZoomEvent(ZOOM_GESTURE_END, this)
-                isInProgress = false
-                initialSpan = 0f
-                anchoredZoomMode = ANCHORED_ZOOM_MODE_NONE
-            } else if (inAnchoredZoomMode() && streamComplete) {
-                isInProgress = false
-                initialSpan = 0f
-                anchoredZoomMode = ANCHORED_ZOOM_MODE_NONE
-            }
-            if (streamComplete) {
-                return true
-            }
-        }
-
-        if (!isInProgress &&
-            isStylusZoomEnabled &&
-            !inAnchoredZoomMode() &&
-            !streamComplete &&
-            isStylusButtonDown) {
-            // Start of a button zoom gesture
-            anchoredZoomStartX = event.x
-            anchoredZoomStartY = event.y
-            anchoredZoomMode = ANCHORED_ZOOM_MODE_STYLUS
-            initialSpan = 0f
-        }
-
-        val configChanged = action == MotionEvent.ACTION_DOWN ||
-                action == MotionEvent.ACTION_POINTER_UP ||
-                action == MotionEvent.ACTION_POINTER_DOWN ||
-                anchoredZoomCancelled
-
-        val pointerUp = action == MotionEvent.ACTION_POINTER_UP
-        val skipIndex = if (pointerUp) event.actionIndex else -1
-
-        // Determine focal point
-        var sumX = 0f
-        var sumY = 0f
-        val div = if (pointerUp) count - 1 else count
-        val focusX: Float
-        val focusY: Float
-        if (inAnchoredZoomMode()) {
-            // In anchored scale mode, the focal pt is always where the double tap
-            // or button down gesture started
-            focusX = anchoredZoomStartX
-            focusY = anchoredZoomStartY
-            eventBeforeOrAboveStartingGestureEvent = if (event.y < focusY) {
-                true
-            } else {
-                false
-            }
-        } else {
-            for (i in 0 until count) {
-                if (skipIndex == i) continue
-                sumX += event.getX(i)
-                sumY += event.getY(i)
-            }
-            focusX = sumX / div
-            focusY = sumY / div
-        }
-
-        // Determine average deviation from focal point
-        var devSumX = 0f
-        var devSumY = 0f
-        for (i in 0 until count) {
-            if (skipIndex == i) continue
-
-            // Convert the resulting diameter into a radius.
-            devSumX += abs(event.getX(i) - focusX)
-            devSumY += abs(event.getY(i) - focusY)
-        }
-        val devX = devSumX / div
-        val devY = devSumY / div
-
-        // Span is the average distance between touch points through the focal point;
-        // i.e. the diameter of the circle with a radius of the average deviation from
-        // the focal point.
-        val spanX = devX * 2
-        val spanY = devY * 2
-        val span: Float = if (inAnchoredZoomMode()) {
-            spanY
-        } else {
-            hypot(spanX, spanY)
-        }
-
-        // Dispatch begin/end events as needed.
-        // If the configuration changes, notify the app to reset its current state by beginning
-        // a fresh zoom event stream.
-        val wasInProgress = isInProgress
-        this.focusX = focusX
-        this.focusY = focusY
-        if (!inAnchoredZoomMode() && isInProgress && (span < minSpan || configChanged)) {
-            listener.onZoomEvent(ZOOM_GESTURE_END, this)
-            isInProgress = false
-            initialSpan = span
-        }
-        if (configChanged) {
-            currentSpanX = spanX
-            previousSpanX = currentSpanX
-            currentSpanY = spanY
-            previousSpanY = currentSpanY
-            currentSpan = span
-            previousSpan = currentSpan
-            initialSpan = previousSpan
-        }
-        val minSpan = if (inAnchoredZoomMode()) spanSlop else minSpan
-        if (!isInProgress &&
-            span >= minSpan &&
-            (wasInProgress || abs(span - initialSpan) > spanSlop)) {
-            currentSpanX = spanX
-            previousSpanX = currentSpanX
-            currentSpanY = spanY
-            previousSpanY = currentSpanY
-            currentSpan = span
-            previousSpan = currentSpan
-            prevTime = eventTime
-            isInProgress = listener.onZoomEvent(ZOOM_GESTURE_BEGIN, this)
-        }
-
-        // Handle motion; focal point and span/scale factor are changing.
-        if (action == MotionEvent.ACTION_MOVE) {
-            currentSpanX = spanX
-            currentSpanY = spanY
-            currentSpan = span
-
-            var updatePrev = true
-
-            if (isInProgress) {
-                updatePrev = listener.onZoomEvent(ZOOM_GESTURE_MOVE, this)
-            }
-
-            if (updatePrev) {
-                previousSpanX = currentSpanX
-                previousSpanY = currentSpanY
-                previousSpan = currentSpan
-                prevTime = eventTime
-            }
-        }
-        return true
-    }
-
-    private fun inAnchoredZoomMode(): Boolean {
-        return anchoredZoomMode != ANCHORED_ZOOM_MODE_NONE
-    }
-
-    val scaleFactor: Float
-        /**
-         * Returns the scaling factor from the previous zoom event to the current event. This value
-         * is defined as ([currentSpan] / [previousSpan]).
-         *
-         * @return The current scaling factor.
-         */
-        get() {
-            if (inAnchoredZoomMode()) {
-                // Drag is moving up; the further away from the gesture start, the smaller the span
-                // should be, the closer, the larger the span, and therefore the larger the scale
-                val scaleUp = eventBeforeOrAboveStartingGestureEvent &&
-                        currentSpan < previousSpan ||
-                        !eventBeforeOrAboveStartingGestureEvent &&
-                        currentSpan > previousSpan
-                val spanDiff = (abs(1 - currentSpan / previousSpan) * SCALE_FACTOR)
-                return if (previousSpan <= spanSlop) 1.0f
-                else if (scaleUp) 1.0f + spanDiff
-                else 1.0f - spanDiff
-            }
-            return if (previousSpan > 0) currentSpan / previousSpan else 1.0f
-        }
-
-    val timeDelta: Long
-        /**
-         * Returns the time difference in milliseconds between the previous accepted zooming event
-         * and the current zooming event.
-         *
-         * @return Time difference since the last zooming event in milliseconds.
-         */
-        get() = eventTime - prevTime
-
-    @IntDef(ZOOM_GESTURE_MOVE, ZOOM_GESTURE_BEGIN, ZOOM_GESTURE_END)
-    @Retention(AnnotationRetention.SOURCE)
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    annotation class ZoomGesture
-
-    companion object {
-        /** The moving events of a gesture in progress. Reported by pointer motion. */
-        const val ZOOM_GESTURE_MOVE = 0
-        /** The beginning of a zoom gesture. Reported by new pointers going down. */
-        const val ZOOM_GESTURE_BEGIN = 1
-        /** The end of a zoom gesture. Reported by existing pointers going up. */
-        const val ZOOM_GESTURE_END = 2
-
-        // The default minimum span that the detector interprets a zooming event with. It's set to 0
-        // to give the most responsiveness.
-        // TODO(b/314702145): define a different span if appropriate.
-        private const val DEFAULT_MIN_SPAN = 0
-        private const val SCALE_FACTOR = .5f
-        private const val ANCHORED_ZOOM_MODE_NONE = 0
-        private const val ANCHORED_ZOOM_MODE_DOUBLE_TAP = 1
-        private const val ANCHORED_ZOOM_MODE_STYLUS = 2
-    }
-}
diff --git a/app/src/main/java/org/lineageos/aperture/ApertureApplication.kt b/app/src/main/java/org/lineageos/aperture/ApertureApplication.kt
index 71e6a9b..0a564eb 100644
--- a/app/src/main/java/org/lineageos/aperture/ApertureApplication.kt
+++ b/app/src/main/java/org/lineageos/aperture/ApertureApplication.kt
@@ -1,18 +1,27 @@
 /*
- * SPDX-FileCopyrightText: 2023 The LineageOS Project
+ * SPDX-FileCopyrightText: 2023-2024 The LineageOS Project
  * SPDX-License-Identifier: Apache-2.0
  */
 
 package org.lineageos.aperture
 
+import android.annotation.SuppressLint
 import android.app.Application
+import androidx.camera.camera2.internal.CameraIdUtil
 import com.google.android.material.color.DynamicColors
+import org.lineageos.aperture.ext.getStringArray
 
 class ApertureApplication : Application() {
+    @SuppressLint("RestrictedApi")
     override fun onCreate() {
         super.onCreate()
 
         // Observe dynamic colors changes
         DynamicColors.applyToActivitiesIfAvailable(this)
+
+        // Set backward compatible camera ids
+        CameraIdUtil.setBackwardCompatibleCameraIds(
+            resources.getStringArray(this, R.array.config_backwardCompatibleCameraIds).asList()
+        )
     }
 }
diff --git a/app/src/main/java/org/lineageos/aperture/CameraActivity.kt b/app/src/main/java/org/lineageos/aperture/CameraActivity.kt
index 1f5203b..78ad6dc 100644
--- a/app/src/main/java/org/lineageos/aperture/CameraActivity.kt
+++ b/app/src/main/java/org/lineageos/aperture/CameraActivity.kt
@@ -288,15 +288,26 @@
         })
     }
     private val zoomGestureDetector by lazy {
-        ZoomGestureDetector(this) { type, detector ->
-            if (type == ZoomGestureDetector.ZOOM_GESTURE_MOVE) {
-                cameraController.onPinchToZoom(detector.scaleFactor)
-                handler.removeMessages(MSG_ON_PINCH_TO_ZOOM)
-                handler.sendMessageDelayed(handler.obtainMessage(MSG_ON_PINCH_TO_ZOOM), 500)
+        ZoomGestureDetector(this) {
+            when (it) {
+                is ZoomGestureDetector.ZoomEvent.Begin -> {
+                    zoomGestureDetectorIsInProgress = true
+                }
+
+                is ZoomGestureDetector.ZoomEvent.Move -> {
+                    cameraController.onPinchToZoom(it.scaleFactor)
+                    handler.removeMessages(MSG_ON_PINCH_TO_ZOOM)
+                    handler.sendMessageDelayed(handler.obtainMessage(MSG_ON_PINCH_TO_ZOOM), 500)
+                }
+
+                is ZoomGestureDetector.ZoomEvent.End -> {
+                    zoomGestureDetectorIsInProgress = false
+                }
             }
             true
         }
     }
+    private var zoomGestureDetectorIsInProgress = false
 
     private val handler = object : Handler(Looper.getMainLooper()) {
         override fun handleMessage(msg: Message) {
@@ -542,7 +553,7 @@
         // Hide the status bars
         window.updateBarsVisibility(
             WindowInsetsControllerCompat.BEHAVIOR_DEFAULT,
-            statusBars = true,
+            statusBars = false,
         )
 
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1
@@ -696,7 +707,7 @@
 
         // Observe manual focus
         viewFinder.setOnTouchListener { _, event ->
-            if (zoomGestureDetector.onTouchEvent(event) && zoomGestureDetector.isInProgress) {
+            if (zoomGestureDetector.onTouchEvent(event) && zoomGestureDetectorIsInProgress) {
                 return@setOnTouchListener true
             }
             return@setOnTouchListener gestureDetector.onTouchEvent(event)
diff --git a/app/src/main/java/org/lineageos/aperture/camera/BaseCamera.kt b/app/src/main/java/org/lineageos/aperture/camera/BaseCamera.kt
new file mode 100644
index 0000000..7f52c32
--- /dev/null
+++ b/app/src/main/java/org/lineageos/aperture/camera/BaseCamera.kt
@@ -0,0 +1,60 @@
+/*
+ * SPDX-FileCopyrightText: 2024 The LineageOS Project
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package org.lineageos.aperture.camera
+
+import androidx.camera.camera2.interop.Camera2CameraInfo
+import androidx.camera.core.CameraInfo
+import androidx.camera.core.CameraSelector
+import org.lineageos.aperture.models.CameraFacing
+import org.lineageos.aperture.models.CameraType
+import org.lineageos.aperture.viewmodels.CameraViewModel
+import kotlin.reflect.safeCast
+
+/**
+ * A generic camera device.
+ * The only contract in place is that the camera ID must be unique also between different
+ * implementations (guaranteed by Android).
+ */
+@androidx.camera.camera2.interop.ExperimentalCamera2Interop
+@androidx.camera.core.ExperimentalLensFacing
+abstract class BaseCamera(cameraInfo: CameraInfo, model: CameraViewModel) {
+    /**
+     * The [CameraSelector] for this camera.
+     */
+    abstract val cameraSelector: CameraSelector
+
+    /**
+     * The [Camera2CameraInfo] of this camera.
+     */
+    protected val camera2CameraInfo = Camera2CameraInfo.from(cameraInfo)
+
+    /**
+     * Camera2's camera ID.
+     */
+    val cameraId = camera2CameraInfo.cameraId
+
+    /**
+     * The [CameraFacing] of this camera.
+     */
+    val cameraFacing = when (cameraInfo.lensFacing) {
+        CameraSelector.LENS_FACING_UNKNOWN -> CameraFacing.UNKNOWN
+        CameraSelector.LENS_FACING_FRONT -> CameraFacing.FRONT
+        CameraSelector.LENS_FACING_BACK -> CameraFacing.BACK
+        CameraSelector.LENS_FACING_EXTERNAL -> CameraFacing.EXTERNAL
+        else -> throw Exception("Unknown lens facing value")
+    }
+
+    /**
+     * The [CameraType] of this camera.
+     */
+    val cameraType = cameraFacing.cameraType
+
+    override fun equals(other: Any?) = this::class.safeCast(other)?.let {
+        this.cameraId == it.cameraId
+    } ?: false
+
+    override fun hashCode() = this::class.qualifiedName.hashCode() + cameraId.hashCode()
+}
diff --git a/app/src/main/java/org/lineageos/aperture/camera/Camera.kt b/app/src/main/java/org/lineageos/aperture/camera/Camera.kt
index 2c820b0..556575b 100644
--- a/app/src/main/java/org/lineageos/aperture/camera/Camera.kt
+++ b/app/src/main/java/org/lineageos/aperture/camera/Camera.kt
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+ * SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
  * SPDX-License-Identifier: Apache-2.0
  */
 
@@ -8,9 +8,7 @@
 import android.hardware.camera2.CameraCharacteristics
 import android.hardware.camera2.CameraMetadata
 import android.os.Build
-import androidx.camera.camera2.interop.Camera2CameraInfo
 import androidx.camera.core.CameraInfo
-import androidx.camera.core.CameraSelector
 import androidx.camera.video.Recorder
 import org.lineageos.aperture.ext.*
 import org.lineageos.aperture.models.CameraFacing
@@ -27,7 +25,6 @@
 import org.lineageos.aperture.models.VideoQualityInfo
 import org.lineageos.aperture.models.VideoStabilizationMode
 import org.lineageos.aperture.viewmodels.CameraViewModel
-import kotlin.reflect.safeCast
 
 /**
  * Class representing a device camera
@@ -35,26 +32,16 @@
 @androidx.camera.camera2.interop.ExperimentalCamera2Interop
 @androidx.camera.core.ExperimentalLensFacing
 @androidx.camera.core.ExperimentalZeroShutterLag
-class Camera(cameraInfo: CameraInfo, model: CameraViewModel) {
-    val cameraSelector = cameraInfo.cameraSelector
-
-    private val camera2CameraInfo = Camera2CameraInfo.from(cameraInfo)
-    val cameraId = camera2CameraInfo.cameraId
-
-    val cameraFacing = when (cameraInfo.lensFacing) {
-        CameraSelector.LENS_FACING_UNKNOWN -> CameraFacing.UNKNOWN
-        CameraSelector.LENS_FACING_FRONT -> CameraFacing.FRONT
-        CameraSelector.LENS_FACING_BACK -> CameraFacing.BACK
-        CameraSelector.LENS_FACING_EXTERNAL -> CameraFacing.EXTERNAL
-        else -> throw Exception("Unknown lens facing value")
-    }
-
-    val cameraType = cameraFacing.cameraType
+class Camera(cameraInfo: CameraInfo, model: CameraViewModel) : BaseCamera(cameraInfo, model) {
+    override val cameraSelector = cameraInfo.cameraSelector
 
     val exposureCompensationRange = cameraInfo.exposureState.exposureCompensationRange
     private val hasFlashUnit = cameraInfo.hasFlashUnit()
 
-    val isLogical = camera2CameraInfo.physicalCameraIds.size > 1
+    private val physicalCameras = cameraInfo.physicalCameraInfos.map {
+        PhysicalCamera(it, model, this)
+    }
+    val isLogical = physicalCameras.size > 1
 
     val intrinsicZoomRatio = cameraInfo.intrinsicZoomRatio
     val logicalZoomRatios = model.getLogicalZoomRatios(cameraId)
@@ -254,15 +241,6 @@
         }
     }
 
-    override fun equals(other: Any?): Boolean {
-        val camera = this::class.safeCast(other) ?: return false
-        return this.cameraId == camera.cameraId
-    }
-
-    override fun hashCode(): Int {
-        return this::class.qualifiedName.hashCode() + cameraId.hashCode()
-    }
-
     fun supportsExtensionMode(extensionMode: Int): Boolean {
         return supportedExtensionModes.contains(extensionMode)
     }
diff --git a/app/src/main/java/org/lineageos/aperture/camera/PhysicalCamera.kt b/app/src/main/java/org/lineageos/aperture/camera/PhysicalCamera.kt
new file mode 100644
index 0000000..91e35d8
--- /dev/null
+++ b/app/src/main/java/org/lineageos/aperture/camera/PhysicalCamera.kt
@@ -0,0 +1,25 @@
+/*
+ * SPDX-FileCopyrightText: 2024 The LineageOS Project
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package org.lineageos.aperture.camera
+
+import androidx.camera.core.CameraInfo
+import androidx.camera.core.CameraSelector
+import org.lineageos.aperture.viewmodels.CameraViewModel
+
+/**
+ * A logical camera's backing physical camera.
+ */
+@androidx.camera.camera2.interop.ExperimentalCamera2Interop
+@androidx.camera.core.ExperimentalLensFacing
+class PhysicalCamera(
+    cameraInfo: CameraInfo,
+    model: CameraViewModel,
+    logicalCamera: Camera,
+) : BaseCamera(cameraInfo, model) {
+    override val cameraSelector = CameraSelector.Builder()
+        .setPhysicalCameraId(cameraId)
+        .build()
+}
diff --git a/app/src/main/java/org/lineageos/aperture/ext/Camera2CameraInfo.kt b/app/src/main/java/org/lineageos/aperture/ext/Camera2CameraInfo.kt
deleted file mode 100644
index a08eff7..0000000
--- a/app/src/main/java/org/lineageos/aperture/ext/Camera2CameraInfo.kt
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2022 The LineageOS Project
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package org.lineageos.aperture.ext
-
-import android.hardware.camera2.CameraCharacteristics
-import android.os.Build
-import androidx.camera.camera2.interop.Camera2CameraInfo
-
-/**
- * We're adding this here since it's private. We're supposed to use
- * CameraCharacteristics.getPhysicalCameraIds() but it's not exposed by CameraX yet.
- */
-private val LOGICAL_MULTI_CAMERA_PHYSICAL_IDS by lazy {
-    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
-        CameraCharacteristics.Key(
-            "android.logicalMultiCamera.physicalIds",
-            ByteArray::class.java
-        )
-    } else {
-        throw Exception("Requesting LOGICAL_MULTI_CAMERA_PHYSICAL_IDS on older Android version")
-    }
-}
-
-/**
- * Return the set of physical camera ids that this logical {@link CameraDevice} is made
- * up of.
- *
- * If the camera device isn't a logical camera, return an empty set.
- */
-val Camera2CameraInfo.physicalCameraIds: Set<String>
-    @androidx.camera.camera2.interop.ExperimentalCamera2Interop
-    get() {
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
-            return setOf()
-        }
-
-        val availableCapabilities = getCameraCharacteristic(
-            CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES
-        ) ?: throw AssertionError(
-            "android.request.availableCapabilities must be non-null in the characteristics"
-        )
-        if (!availableCapabilities.contains(
-                CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-            )
-        ) {
-            return setOf()
-        }
-
-        val physicalCamIds: ByteArray = getCameraCharacteristic(
-            LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
-        ) ?: throw AssertionError(
-            "android.logicalMultiCamera.physicalIds must be non-null in the characteristics"
-        )
-
-        val physicalCamIdString = String(physicalCamIds, Charsets.UTF_8)
-        val physicalCameraIdArray = physicalCamIdString.split(0.toChar())
-
-        return physicalCameraIdArray.toSet()
-    }
diff --git a/app/src/main/java/org/lineageos/aperture/qr/QrTextClassifier.kt b/app/src/main/java/org/lineageos/aperture/qr/QrTextClassifier.kt
index 8820d9f..7af959c 100644
--- a/app/src/main/java/org/lineageos/aperture/qr/QrTextClassifier.kt
+++ b/app/src/main/java/org/lineageos/aperture/qr/QrTextClassifier.kt
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: 2023 The LineageOS Project
+ * SPDX-FileCopyrightText: 2023-2024 The LineageOS Project
  * SPDX-License-Identifier: Apache-2.0
  */
 
@@ -83,6 +83,26 @@
                         }
                     }
                     .build()
+
+                SCHEME_UPI -> return TextClassification.Builder()
+                    .setText(context.getString(R.string.qr_upi_content_description))
+                    .setEntityType(TextClassifier.TYPE_OTHER, 1.0f)
+                    .apply {
+                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+                            addAction(
+                                RemoteAction::class.build(
+                                    context,
+                                    R.drawable.ic_currency_rupee,
+                                    R.string.qr_upi_title,
+                                    R.string.qr_upi_content_description,
+                                    Intent(Intent.ACTION_VIEW).apply {
+                                        data = uri
+                                    }
+                                )
+                            )
+                        }
+                    }
+                    .build()
             }
         }
 
@@ -96,5 +116,6 @@
     companion object {
         private const val SCHEME_DPP = "dpp"
         private const val SCHEME_FIDO = "fido"
+        private const val SCHEME_UPI = "upi"
     }
 }
diff --git a/app/src/main/java/org/lineageos/aperture/ui/CameraModeSelectorLayout.kt b/app/src/main/java/org/lineageos/aperture/ui/CameraModeSelectorLayout.kt
index 243ce97..707e1bb 100644
--- a/app/src/main/java/org/lineageos/aperture/ui/CameraModeSelectorLayout.kt
+++ b/app/src/main/java/org/lineageos/aperture/ui/CameraModeSelectorLayout.kt
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+ * SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
  * SPDX-License-Identifier: Apache-2.0
  */
 
@@ -124,6 +124,7 @@
         val inSingleCaptureMode = cameraViewModel?.inSingleCaptureMode?.value ?: return
         val cameraState = cameraViewModel?.cameraState?.value ?: return
 
+        cameraModeHighlightButton.isInvisible = cameraState.isRecordingVideo || inSingleCaptureMode
         cameraToButton.forEach {
             it.value.isInvisible = cameraState.isRecordingVideo || inSingleCaptureMode
         }
diff --git a/app/src/main/res/drawable/ic_currency_rupee.xml b/app/src/main/res/drawable/ic_currency_rupee.xml
new file mode 100644
index 0000000..98437f9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_currency_rupee.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     SPDX-FileCopyrightText: Material Design Authors / Google LLC
+     SPDX-License-Identifier: Apache-2.0
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:tint="#000000"
+    android:viewportWidth="960"
+    android:viewportHeight="960">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M549,840L280,560L280,480L420,480Q473,480 511.5,445.5Q550,411 558,360L240,360L240,280L546,280Q529,245 495.5,222.5Q462,200 420,200L240,200L240,120L720,120L720,200L590,200Q604,217 615,237Q626,257 632,280L720,280L720,360L639,360Q631,445 569,502.5Q507,560 420,560L391,560L660,840L549,840Z" />
+</vector>
diff --git a/app/src/main/res/layout/activity_camera.xml b/app/src/main/res/layout/activity_camera.xml
index e20889b..f3b4c70 100644
--- a/app/src/main/res/layout/activity_camera.xml
+++ b/app/src/main/res/layout/activity_camera.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
@@ -130,105 +130,80 @@
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent">
 
-        <androidx.constraintlayout.widget.ConstraintLayout
+        <LinearLayout
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:paddingHorizontal="16dp"
+            android:gravity="top|center"
             android:paddingVertical="8dp">
 
+            <!-- Cannot mess with fixed padding from here because of insets -->
+            <Space
+                android:layout_width="16dp"
+                android:layout_height="match_parent" />
+
             <!-- Photo mode specific settings -->
             <Button
                 android:id="@+id/aspectRatioButton"
                 style="@style/Theme.Aperture.Camera.SecondaryTopBarButton"
                 android:drawableTop="@drawable/ic_aspect_ratio"
-                android:text="@string/aspect_ratio_4_3"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toStartOf="@+id/effectButton"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toTopOf="parent" />
+                android:text="@string/aspect_ratio_4_3" />
 
             <Button
                 android:id="@+id/effectButton"
                 style="@style/Theme.Aperture.Camera.SecondaryTopBarButton"
                 android:drawableTop="@drawable/ic_blur_off"
-                android:text="@string/effect_none"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toStartOf="@+id/videoQualityButton"
-                app:layout_constraintStart_toEndOf="@+id/aspectRatioButton"
-                app:layout_constraintTop_toTopOf="parent" />
+                android:text="@string/effect_none" />
 
             <!-- Video mode specific settings -->
             <Button
                 android:id="@+id/videoQualityButton"
                 style="@style/Theme.Aperture.Camera.SecondaryTopBarButton"
                 android:drawableTop="@drawable/ic_hd"
-                android:text="@string/video_quality_fhd"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toStartOf="@+id/videoFrameRateButton"
-                app:layout_constraintStart_toEndOf="@+id/effectButton"
-                app:layout_constraintTop_toTopOf="parent" />
+                android:text="@string/video_quality_fhd" />
 
             <Button
                 android:id="@+id/videoFrameRateButton"
                 style="@style/Theme.Aperture.Camera.SecondaryTopBarButton"
                 android:drawableTop="@drawable/ic_video_frame_rate"
-                android:text="@string/video_framerate_auto"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toStartOf="@+id/videoDynamicRangeButton"
-                app:layout_constraintStart_toEndOf="@+id/videoQualityButton"
-                app:layout_constraintTop_toTopOf="parent" />
+                android:text="@string/video_framerate_auto" />
 
             <Button
                 android:id="@+id/videoDynamicRangeButton"
                 style="@style/Theme.Aperture.Camera.SecondaryTopBarButton"
                 android:drawableTop="@drawable/ic_hdr_off"
-                android:text="@string/video_dynamic_range_sdr"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toStartOf="@+id/micButton"
-                app:layout_constraintStart_toEndOf="@+id/videoFrameRateButton"
-                app:layout_constraintTop_toTopOf="parent" />
+                android:text="@string/video_dynamic_range_sdr" />
 
             <Button
                 android:id="@+id/micButton"
                 style="@style/Theme.Aperture.Camera.SecondaryTopBarButton"
                 android:drawableTop="@drawable/ic_mic_off"
-                android:text="@string/mic_off"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toStartOf="@+id/timerButton"
-                app:layout_constraintStart_toEndOf="@+id/videoDynamicRangeButton"
-                app:layout_constraintTop_toTopOf="parent" />
+                android:text="@string/mic_off" />
 
             <!-- Common settings -->
             <Button
                 android:id="@+id/timerButton"
                 style="@style/Theme.Aperture.Camera.SecondaryTopBarButton"
                 android:drawableTop="@drawable/ic_timer_off"
-                android:text="@string/timer_off"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toStartOf="@+id/gridButton"
-                app:layout_constraintStart_toEndOf="@+id/micButton"
-                app:layout_constraintTop_toTopOf="parent" />
+                android:text="@string/timer_off" />
 
             <Button
                 android:id="@+id/gridButton"
                 style="@style/Theme.Aperture.Camera.SecondaryTopBarButton"
                 android:drawableTop="@drawable/ic_grid_3x3_off"
-                android:text="@string/grid_off"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toStartOf="@+id/settingsButton"
-                app:layout_constraintStart_toEndOf="@+id/timerButton"
-                app:layout_constraintTop_toTopOf="parent" />
+                android:text="@string/grid_off" />
 
             <Button
                 android:id="@+id/settingsButton"
                 style="@style/Theme.Aperture.Camera.SecondaryTopBarButton"
                 android:drawableTop="@drawable/ic_settings"
-                android:text="@string/settings"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toEndOf="@+id/gridButton"
-                app:layout_constraintTop_toTopOf="parent" />
-        </androidx.constraintlayout.widget.ConstraintLayout>
+                android:text="@string/settings" />
+
+            <!-- Cannot mess with fixed padding from here because of insets -->
+            <Space
+                android:layout_width="16dp"
+                android:layout_height="match_parent" />
+
+        </LinearLayout>
 
     </HorizontalScrollView>
 
diff --git a/app/src/main/res/layout/capture_preview_layout.xml b/app/src/main/res/layout/capture_preview_layout.xml
index 3ab6553..169b0fd 100644
--- a/app/src/main/res/layout/capture_preview_layout.xml
+++ b/app/src/main/res/layout/capture_preview_layout.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <org.lineageos.aperture.ui.CapturePreviewLayout xmlns:android="http://schemas.android.com/apk/res/android"
@@ -28,7 +28,8 @@
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHorizontal_bias="0.5"
             app:layout_constraintStart_toEndOf="@+id/cancelButton"
-            app:layout_constraintTop_toTopOf="parent" />
+            app:layout_constraintTop_toTopOf="parent"
+            app:tint="@android:color/white" />
 
         <ImageButton
             android:id="@+id/cancelButton"
@@ -41,7 +42,9 @@
             app:layout_constraintEnd_toStartOf="@+id/confirmButton"
             app:layout_constraintHorizontal_bias="0.5"
             app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
+            app:layout_constraintTop_toTopOf="parent"
+            app:tint="@android:color/white"/>
+
     </androidx.constraintlayout.widget.ConstraintLayout>
 
     <androidx.constraintlayout.widget.ConstraintLayout
diff --git a/app/src/main/res/values-ast-rES/strings.xml b/app/src/main/res/values-ast-rES/strings.xml
index 26fdd7d..96f8da6 100644
--- a/app/src/main/res/values-ast-rES/strings.xml
+++ b/app/src/main/res/values-ast-rES/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml
index 129cb36..e54641c 100644
--- a/app/src/main/res/values-az/strings.xml
+++ b/app/src/main/res/values-az/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -35,7 +35,7 @@
     <string name="app_permissions_toast">İstifadəçi tərəfindən verilməyən icazələr.</string>
     <string name="camcorder_unsupported_toast">Heç bir kamera videoyazını dəstəkləmir.</string>
     <string name="qr_copy_description">Lövhəyə kopyala</string>
-    <string name="qr_icon_description">Nişan</string>
+    <string name="qr_icon_description">İkon</string>
     <string name="qr_share_description">Paylaş</string>
     <string name="qr_no_app_available_for_action">Bu əməliyyatı ələ alacaq tətbiq yoxdur</string>
     <string name="qr_address_title">Kontakt əlavə et</string>
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">Telefon nömrəsinə zəng et</string>
     <string name="qr_tel_content_description">Telefon nömrəsinə zəng et</string>
     <string name="qr_text">Mətn</string>
+    <string name="qr_upi_title">Ödəniş ediləcək tətbiqi seçin</string>
+    <string name="qr_upi_content_description">Dəstəklənirsə bu UPI keçidini uyğun tətbiqlə aç</string>
     <string name="qr_uri_title">URL-ni aç</string>
     <string name="qr_uri_content_description">Dəstəklənirsə bu URL-ni uyğun tətbiqlə aç</string>
     <string name="qr_vin_title">VIN axtar</string>
diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml
index 68836e4..59bb568 100644
--- a/app/src/main/res/values-be/strings.xml
+++ b/app/src/main/res/values-be/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index 7d36ea5..4e92665 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">Truca al número de telèfon</string>
     <string name="qr_tel_content_description">Truca al número de telèfon</string>
     <string name="qr_text">Text</string>
+    <string name="qr_upi_title">Trieu una aplicació per pagar</string>
+    <string name="qr_upi_content_description">Obre aquest enllaç UPI amb l\'aplicació adequada si s\'admet</string>
     <string name="qr_uri_title">Obre l\'enllaç</string>
     <string name="qr_uri_content_description">Obre aquesta URL amb l\'aplicació adequada si s\'admet</string>
     <string name="qr_vin_title">Cerca el VIN</string>
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index a013c5c..bf5714e 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml
index eb33e9b..2abbb3b 100644
--- a/app/src/main/res/values-cy/strings.xml
+++ b/app/src/main/res/values-cy/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -41,6 +41,7 @@
     <string name="qr_tel_title">Galw rhif ffôn</string>
     <string name="qr_tel_content_description">Galw\u2019r rhif ffôn</string>
     <string name="qr_text">Testun</string>
+    <string name="qr_upi_title">Dewis ap i dalu</string>
     <string name="qr_wifi_title">Cysylltu â\'r rhwydwaith Wi-Fi hwn</string>
     <string name="title_activity_settings">Gosodiadau</string>
     <string name="general_header">Cyffredinol</string>
@@ -59,6 +60,7 @@
     <string name="photo_capture_mode_title">Modd cipio</string>
     <string name="photo_capture_mode_maximize_quality">Ansawdd gorau</string>
     <string name="photo_capture_mode_minimize_latency">Cuddni lleiaf</string>
+    <string name="video_stabilization_title">Galluogi sefydlogi fideo</string>
     <string name="processing_title">Prosesu</string>
     <string name="edge_mode_default">Rhagosodedig</string>
     <string name="edge_mode_off">I ffwrdd</string>
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 487f833..39f9326 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index a584b3a..178eb78 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -37,9 +37,33 @@
     <string name="qr_copy_description">In die Zwischenablage kopieren</string>
     <string name="qr_icon_description">Symbol</string>
     <string name="qr_share_description">Teilen</string>
+    <string name="qr_no_app_available_for_action">Keine App für diese Aktion verfügbar</string>
+    <string name="qr_address_title">Kontakt hinzufügen</string>
+    <string name="qr_address_content_description">Kontakt hinzufügen</string>
+    <string name="qr_calendar_title">Termin zum Kalender hinzufügen</string>
+    <string name="qr_calendar_content_description">Diesen Termin in den Kalender eintragen</string>
     <string name="qr_dpp_description">Dieses Gerät konfigurieren</string>
+    <string name="qr_email_title">Neue E-Mail senden</string>
+    <string name="qr_email_content_description">Neue E-Mail an die angegebenen E-Mail-Adressen erstellen</string>
+    <string name="qr_fido_title">Passkey verwenden</string>
+    <string name="qr_fido_content_description">Diesen FIDO-QR-Code verwenden</string>
+    <string name="qr_geo_title">Standort öffnen</string>
+    <string name="qr_geo_content_description">Diesen Standort öffnen</string>
+    <string name="qr_isbn_title">Diese ISBN suchen</string>
+    <string name="qr_isbn_content_description">Nach dieser ISBN auf isbnsearch.org suchen</string>
+    <string name="qr_product_title">Produkt suchen</string>
+    <string name="qr_product_content_description">Nach dem Barcode dieser Produkt-ID suchen</string>
+    <string name="qr_sms_title">Neue SMS senden</string>
+    <string name="qr_sms_content_description">Neue SMS an die angegebenen Empfänger senden</string>
+    <string name="qr_tel_title">Telefonnummer anrufen</string>
+    <string name="qr_tel_content_description">Diese Telefonnummer anrufen</string>
     <string name="qr_text">Text</string>
+    <string name="qr_uri_title">URL öffnen</string>
+    <string name="qr_uri_content_description">Diese URL mit der entsprechenden App öffnen, wenn dies unterstützt wird</string>
+    <string name="qr_vin_title">VIN suchen</string>
+    <string name="qr_vin_content_description">Diese Fahrzeug-Identifikationsnummer (VIN) suchen</string>
     <string name="qr_wifi_title">Mit diesem WLAN-Netzwerk verbinden</string>
+    <string name="qr_wifi_content_description">Dieses WLAN-Netzwerk zu der Liste der bekannten Netzwerke hinzufügen und das Gerät damit verbinden</string>
     <string name="title_activity_settings">Einstellungen</string>
     <string name="general_header">Allgemein</string>
     <string name="photos_header">Fotos</string>
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index 588ca4c..8b1cdc0 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-en-rAU/strings.xml b/app/src/main/res/values-en-rAU/strings.xml
index 64ed4b3..7e8ae50 100644
--- a/app/src/main/res/values-en-rAU/strings.xml
+++ b/app/src/main/res/values-en-rAU/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">Call phone number</string>
     <string name="qr_tel_content_description">Call the phone number</string>
     <string name="qr_text">Text</string>
+    <string name="qr_upi_title">Choose app to pay</string>
+    <string name="qr_upi_content_description">Open this UPI link with the appropriate app if supported</string>
     <string name="qr_uri_title">Open URL</string>
     <string name="qr_uri_content_description">Open this URL with the appropriate app if supported</string>
     <string name="qr_vin_title">Lookup VIN</string>
diff --git a/app/src/main/res/values-en-rCA/strings.xml b/app/src/main/res/values-en-rCA/strings.xml
index de3b0fb..333f513 100644
--- a/app/src/main/res/values-en-rCA/strings.xml
+++ b/app/src/main/res/values-en-rCA/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">Call phone number</string>
     <string name="qr_tel_content_description">Call the phone number</string>
     <string name="qr_text">Text</string>
+    <string name="qr_upi_title">Choose app to pay</string>
+    <string name="qr_upi_content_description">Open this UPI link with the appropriate app if supported</string>
     <string name="qr_uri_title">Open URL</string>
     <string name="qr_uri_content_description">Open this URL with the appropriate app if supported</string>
     <string name="qr_vin_title">Lookup VIN</string>
diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml
index 64ed4b3..7e8ae50 100644
--- a/app/src/main/res/values-en-rGB/strings.xml
+++ b/app/src/main/res/values-en-rGB/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">Call phone number</string>
     <string name="qr_tel_content_description">Call the phone number</string>
     <string name="qr_text">Text</string>
+    <string name="qr_upi_title">Choose app to pay</string>
+    <string name="qr_upi_content_description">Open this UPI link with the appropriate app if supported</string>
     <string name="qr_uri_title">Open URL</string>
     <string name="qr_uri_content_description">Open this URL with the appropriate app if supported</string>
     <string name="qr_vin_title">Lookup VIN</string>
diff --git a/app/src/main/res/values-en-rIN/strings.xml b/app/src/main/res/values-en-rIN/strings.xml
index 64ed4b3..7e8ae50 100644
--- a/app/src/main/res/values-en-rIN/strings.xml
+++ b/app/src/main/res/values-en-rIN/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">Call phone number</string>
     <string name="qr_tel_content_description">Call the phone number</string>
     <string name="qr_text">Text</string>
+    <string name="qr_upi_title">Choose app to pay</string>
+    <string name="qr_upi_content_description">Open this UPI link with the appropriate app if supported</string>
     <string name="qr_uri_title">Open URL</string>
     <string name="qr_uri_content_description">Open this URL with the appropriate app if supported</string>
     <string name="qr_vin_title">Lookup VIN</string>
diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml
index c480ec2..9240621 100644
--- a/app/src/main/res/values-et/strings.xml
+++ b/app/src/main/res/values-et/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 3c6ca4b..0722b8f 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 6003f7b..0e0d470 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-fur-rIT/strings.xml b/app/src/main/res/values-fur-rIT/strings.xml
index 07c3c14..3cc3217 100644
--- a/app/src/main/res/values-fur-rIT/strings.xml
+++ b/app/src/main/res/values-fur-rIT/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 8ec1914..22eabba 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -11,6 +11,7 @@
     <string name="flash_button_description">Vakumód</string>
     <string name="flip_camera_button_description">Kamerakép tükrözése</string>
     <string name="gallery_button_description">Galéria</string>
+    <string name="google_lens_button_description">A Google Lens megnyitása</string>
     <string name="image_view_description">Képelőnézet</string>
     <string name="pro_button_description">Pro-beállítások</string>
     <string name="shutter_button_description">Exponálógomb</string>
@@ -36,11 +37,40 @@
     <string name="qr_copy_description">Másolás a vágólapra</string>
     <string name="qr_icon_description">Ikon</string>
     <string name="qr_share_description">Megosztás</string>
+    <string name="qr_no_app_available_for_action">Nincs alkalmazás, ami végre tudná hajtani ezt a műveletet</string>
+    <string name="qr_address_title">Egy névjegy hozzáadása</string>
+    <string name="qr_address_content_description">Adja hozzá a névjegyet</string>
+    <string name="qr_calendar_title">Egy esemény hozzáadása a naptárhoz</string>
+    <string name="qr_calendar_content_description">Ennek az eseménynek a hozzáadása a naptárhoz</string>
+    <string name="qr_dpp_description">Konfigurálja ezt a készüléket</string>
+    <string name="qr_email_title">Egy új e-mail küldése</string>
+    <string name="qr_email_content_description">Létrehoz egy új e-mailt a megadott címekre</string>
+    <string name="qr_fido_title">Jelszóhasználat</string>
+    <string name="qr_fido_content_description">Kezelje ezt a QR-kódot</string>
+    <string name="qr_geo_title">Ennek a helynek a megnyitása</string>
+    <string name="qr_geo_content_description">Megnyitja ezt a helyet</string>
+    <string name="qr_isbn_title">Egy ISBN megkeresése</string>
+    <string name="qr_isbn_content_description">Keresse meg ezt az ISBN-t az isbnsearch.org webhelyen</string>
+    <string name="qr_product_title">Egy termék keresése</string>
+    <string name="qr_product_content_description">Keresse meg ezt a termékazonosító vonalkódot</string>
+    <string name="qr_sms_title">Egy új SMS küldése</string>
+    <string name="qr_sms_content_description">Új SMS küldése a megadott címzetteknek</string>
+    <string name="qr_tel_title">Egy telefonszám felhívása</string>
+    <string name="qr_tel_content_description">Hívja fel a megadott telefonszámot</string>
     <string name="qr_text">Szöveg</string>
+    <string name="qr_upi_title">Válasszon alkalmazást a fizetéshez</string>
+    <string name="qr_upi_content_description">Nyissa meg ezt az UPI linket a megfelelő alkalmazással, ha támogatott</string>
+    <string name="qr_uri_title">Egy URL megnyitása</string>
+    <string name="qr_uri_content_description">Nyissa meg ezt az URL-t a megfelelő alkalmazással, ha támogatott</string>
+    <string name="qr_vin_title">Egy rendszám megkeresése</string>
+    <string name="qr_vin_content_description">Keresse meg ezt a járműazonosító számot (VIN)</string>
+    <string name="qr_wifi_title">Kapcsolódás ehhez a Wi-Fi hálózathoz</string>
+    <string name="qr_wifi_content_description">Adja hozzá ezt a Wi-Fi hálózatot az ismert hálózatok listájához, és csatlakoztassa hozzá a készüléket</string>
     <string name="title_activity_settings">Beállítások</string>
     <string name="general_header">Általános</string>
     <string name="photos_header">Fotók</string>
     <string name="video_header">Videó</string>
+    <string name="advanced_header">Haladó</string>
     <string name="bright_screen_title">Fényes képernyő</string>
     <string name="bright_screen_summary" formatted="false">Fényerő rögzítése 100%-on</string>
     <string name="save_location_title">Helyinformációk elmentése</string>
@@ -50,10 +80,87 @@
     <string name="shutter_sound_summary">Hang lejátszása képkészítéskor</string>
     <string name="leveler_title">Szintező</string>
     <string name="leveler_summary">A készülék tájolását mutató jelző</string>
+    <string name="volume_buttons_action_title">Hengerőgomb-műveletek</string>
     <string name="photo_capture_mode_title">Képkészítési mód</string>
     <string name="photo_capture_mode_maximize_quality">Minőség maximalizálása</string>
     <string name="photo_capture_mode_minimize_latency">Késleltetés minimalizálása</string>
+    <string name="enable_zsl_title">Zero-Shutter Lag, ha elérhető</string>
+    <string name="enable_zsl_summary">Ha a kamera támogatja a ZSL-t, akkor használhatja. Ebben a módban a fotóeffektek nem működnek. Vegye figyelembe hogy a ZSL még kisérleti stádiumban van.</string>
+    <string name="photo_ffc_mirror_title">Az előlapi kamera tükrözése</string>
+    <string name="photo_ffc_mirror_summary">Úgy menti a képeket, ahogy az előnézetben megjelennek</string>
+    <string name="video_stabilization_title">A Videó-képstabilizáció engedélyezése</string>
+    <string name="video_stabilization_summary">Amennyiben elérhető az Ön készülékén ez a funkció, stabilizálja a felvételeket a kéz remegései ellen</string>
+    <string name="video_mirror_mode_title">Videótükrözés be</string>
+    <string name="processing_title">Folyamatban</string>
+    <string name="processing_info">Fotómódban, amikor ZSL-módot használ, csak az alapértelmezett és kikapcsolt értékeket veszi figyelembe a rendszer.  Videómód esetén már a gyors értékeket is  figyelembe veszi a rendszer.</string>
+    <string name="edge_mode_title">Élesítés</string>
+    <string name="edge_mode_summary">Az éljavítás tökéletesebbé teszi a képek élességét és részleteit.</string>
+    <string name="edge_mode_default">Alapértelmezett</string>
+    <string name="edge_mode_off">Ki</string>
+    <string name="edge_mode_fast">Gyors</string>
+    <string name="edge_mode_high_quality">Kiváló minőség</string>
+    <string name="noise_reduction_mode_title">Zajtalanítás</string>
+    <string name="noise_reduction_mode_summary">A zajcsökkentési algoritmus próbálja javítani a képminőséget azáltal, hogy eltávolítja a felvétel során belekerült túlzott zajt, különösen sötét körülmények között.</string>
+    <string name="noise_reduction_mode_default">Alapértelmezett</string>
+    <string name="noise_reduction_mode_off">Ki</string>
+    <string name="noise_reduction_mode_fast">Gyors</string>
+    <string name="noise_reduction_mode_high_quality">Kiváló minőség</string>
+    <string name="noise_reduction_mode_minimal">Minimális</string>
+    <string name="shading_mode_title">Képszélek torzítása</string>
+    <string name="shading_mode_summary">A képadatokhoz illesztett lencseárnyékolás-korrekció minősége.</string>
+    <string name="shading_mode_default">Alapértelmezett</string>
+    <string name="shading_mode_off">Ki</string>
+    <string name="shading_mode_fast">Gyors</string>
+    <string name="shading_mode_high_quality">Kiváló minőség</string>
+    <string name="color_correction_aberration_mode_title">Színaberráció-korrekció</string>
+    <string name="color_correction_aberration_mode_summary">A kromatikus (szín) aberrációt az okozza, hogy a különböző hullámhosszú fények nem tudnak ugyanarra a pontra fókuszálni, miután kiléptek az objektívből.</string>
+    <string name="color_correction_aberration_mode_default">Alapértelmezett</string>
+    <string name="color_correction_aberration_mode_off">Ki</string>
+    <string name="color_correction_aberration_mode_fast">Gyors</string>
+    <string name="color_correction_aberration_mode_high_quality">Kiváló minőség</string>
+    <string name="distortion_correction_mode_title">Torzítási korrekció</string>
+    <string name="distortion_correction_mode_summary">A lencsetorzítás korrekciós blokk üzemmódja.</string>
+    <string name="distortion_correction_mode_default">Alapértelmezett</string>
+    <string name="distortion_correction_mode_off">Ki</string>
+    <string name="distortion_correction_mode_fast">Gyors</string>
+    <string name="distortion_correction_mode_high_quality">Kiváló minőség</string>
+    <string name="hot_pixel_mode_title">Túlvezéreltfény-korrekció</string>
+    <string name="hot_pixel_mode_summary">Ez a funkció interpolálja vagy más módon eltávolítja azokat a képpontokat, ahol nem pontos a bejövő fény mérése (azaz olyan képpontokat, amelyek valamely értéknél beragadtak vagy túlérzékenyek).</string>
+    <string name="hot_pixel_mode_default">Alapértelmezett</string>
+    <string name="hot_pixel_mode_off">Ki</string>
+    <string name="hot_pixel_mode_fast">Gyors</string>
+    <string name="hot_pixel_mode_high_quality">Kiváló minőség</string>
     <string name="shortcut_selfie">Szelfi készítése</string>
     <string name="shortcut_video">Videó készítése</string>
     <string name="shortcut_qr">Vonalkód beolvasása</string>
+    <string name="location_permission_dialog_title">Fénykép- és videóhelyadat hozzáfűzése</string>
+    <string name="location_permission_dialog_description">Tegye visszakereshetővé emlékeit úgy, hogy minden felvételnél teret ad a helyinformációk metaadatainak.</string>
+    <string name="location_permission_dialog_later">Később</string>
+    <string name="location_permission_dialog_turn_on">Bekapcsolás</string>
+    <string name="error_max_cameras_in_use">Elérte az egyszerre megnyitható kamerák maximális számát. Próbáljon meg bezárni más alkalmazásokat, amik használják a kamerát.</string>
+    <string name="error_camera_in_use">Ez a kamera már használatban van, próbáljon meg bezárni más alkalmazásokat, amik használják a kamerát.</string>
+    <string name="error_stream_config">Hiba történt a sztreamelés előkészítése közben. Kérjük, jelentse ezt a fejlesztőknek.</string>
+    <string name="error_other_recoverable_error">Hiba a munkamenet beállítása közben.  Az alkalmazás megpróbálja helyreállítani.</string>
+    <string name="error_camera_disabled">A kamera le van tiltva. Ennek oka lehet a készülék házirendje.</string>
+    <string name="error_camera_fatal_error">Végzetes hiba történt. Próbálja újraindítani a készülékét.</string>
+    <string name="error_do_not_disturb_mode_enabled">A Ne zavarjanak (DND) mód engedélyezve van. Kapcsolja ki, majd nyissa meg újra az alkalmazást.</string>
+    <string name="error_unknown_recoverable">Ismeretlen, de helyreállítható hiba keletkezett.  Kérjük, jelentse ezt a fejlesztőknek.</string>
+    <string name="error_unknown_critical">Ismeretlen kritikus hiba keletkezett. Kérjük, jelentse ezt a fejlesztőknek.</string>
+    <string name="error_no_cameras_available">Nem indítható az alkalmazás, mert az Ön készülékén nem érzékelhető kamera.</string>
+    <string name="gesture_action_shutter">Exponálógomb</string>
+    <string name="gesture_action_zoom">Zoomolás</string>
+    <string name="gesture_action_volume">Hangerő</string>
+    <string name="gesture_action_nothing">Semmi</string>
+    <string name="thermal_status_moderate">Mérsékelt hőszabályozás, ügyeljen arra, hogy a készüléket ne érje közvetlen napfény.</string>
+    <string name="thermal_status_severe">Erős hőszabályozás, ajánlott hagyni egy kicsit lehűlni a készüléket.</string>
+    <string name="thermal_status_critical">Kritikus hőszabályozás, az alkalmazás hamarosan bezáródik.</string>
+    <string name="thermal_status_emergency">Vészhelyzeti hőszabályozás, az alkalmazás azonnal bezáródik.</string>
+    <string name="thermal_status_shutdown">Vészleállítási hőszabályozás, készüléke azonnal kikapcsol.</string>
+    <string name="force_torch_help">Fénykép módban hosszan lenyomva tarthatja a vakugombot, hogy zseblámpa módba váltson.</string>
+    <string name="camera_mode_photo">Fénykép</string>
+    <string name="camera_mode_video">Videó</string>
+    <string name="camera_mode_qr">Kódolvasó</string>
+    <string name="video_mirror_mode_off">Ki</string>
+    <string name="video_mirror_mode_on">Be</string>
+    <string name="video_mirror_mode_on_ffc_only">Csak a fő arckamerán</string>
 </resources>
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 7d073cf..95af32e 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml
index c2ec1fd..9a6db77 100644
--- a/app/src/main/res/values-is/strings.xml
+++ b/app/src/main/res/values-is/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 29e3acf..7b97758 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 533f580..7233e3f 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">電話番号に発信</string>
     <string name="qr_tel_content_description">電話番号に発信します</string>
     <string name="qr_text">テキスト</string>
+    <string name="qr_upi_title">決済アプリを選択</string>
+    <string name="qr_upi_content_description">対応している場合は、この UPI リンクを適切なアプリで開きます</string>
     <string name="qr_uri_title">URL を開く</string>
     <string name="qr_uri_content_description">対応しているアプリでこの URL を開きます</string>
     <string name="qr_vin_title">VIN 検索</string>
@@ -69,7 +71,9 @@
     <string name="photos_header">写真</string>
     <string name="video_header">ビデオ</string>
     <string name="advanced_header">詳細設定</string>
+    <string name="bright_screen_title">画面を明るくする</string>
     <string name="bright_screen_summary" formatted="false">明るさを100%に固定</string>
+    <string name="shutter_sound_summary">撮影j時に音を鳴らします</string>
     <string name="volume_buttons_action_title">音量ボタンの動作</string>
     <string name="enable_zsl_title">利用可能な場合は ZSL を有効にする</string>
     <string name="enable_zsl_summary">カメラが対応している場合、ゼロシャッターラグモードを使用します。このモードでは写真のエフェクトは無効になります。このモードは実験的であることに注意してください。</string>
diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml
index 9c342e3..ae834e4 100644
--- a/app/src/main/res/values-ka/strings.xml
+++ b/app/src/main/res/values-ka/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index d6e4d87..4276dc1 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -101,6 +101,7 @@
     <string name="noise_reduction_mode_fast">빠르게</string>
     <string name="noise_reduction_mode_high_quality">고품질</string>
     <string name="noise_reduction_mode_minimal">최소</string>
+    <string name="shading_mode_title">비네트 보정</string>
     <string name="shading_mode_default">기본값</string>
     <string name="shading_mode_off">끔</string>
     <string name="shading_mode_fast">빠름</string>
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index b519a92..ff850a9 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">Bel telefoonnummer</string>
     <string name="qr_tel_content_description">Bel het telefoonnummer</string>
     <string name="qr_text">Tekst</string>
+    <string name="qr_upi_title">Kies app om te betalen</string>
+    <string name="qr_upi_content_description">Open deze UPI link naar de juiste app indien ondersteund</string>
     <string name="qr_uri_title">Open URL</string>
     <string name="qr_uri_content_description">Open deze URL met de juiste app indien ondersteund</string>
     <string name="qr_vin_title">Zoek VIN</string>
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 0900d7d..99eb4a1 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">Zadzwoń pod numer telefonu</string>
     <string name="qr_tel_content_description">Zadzwoń pod ten numer telefonu</string>
     <string name="qr_text">Tekst</string>
+    <string name="qr_upi_title">Wybierz aplikację do wykonania płatności</string>
+    <string name="qr_upi_content_description">Otwórz ten adres UPI za pomocą odpowiedniej aplikacji, jeśli jest obsługiwany</string>
     <string name="qr_uri_title">Otwórz adres URL</string>
     <string name="qr_uri_content_description">Otwórz ten adres URL za pomocą odpowiedniej aplikacji, jeśli jest obsługiwany</string>
     <string name="qr_vin_title">Wyszukaj VIN</string>
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 2ee2bd3..bbc612f 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -8,6 +8,7 @@
     <string name="video_camera_label">Filmadora</string>
     <string name="cancel_button_description">Cancelar</string>
     <string name="confirm_button_description">Confirmar</string>
+    <string name="flash_button_description">Modo flash</string>
     <string name="flip_camera_button_description">Virar câmera</string>
     <string name="gallery_button_description">Galeria</string>
     <string name="google_lens_button_description">Abrir Google Lens</string>
@@ -18,6 +19,7 @@
     <string name="timer_off">Temporizador desativado</string>
     <string name="timer_3">Temporizador 3s</string>
     <string name="timer_10">Temporizador 10s</string>
+    <string name="video_framerate_auto">QPS automático</string>
     <string name="video_framerate_value"><xliff:g example="60" id="fps">%d</xliff:g> QPS</string>
     <string name="effect_none">NENHUM</string>
     <string name="effect_night">NOITE</string>
@@ -27,31 +29,138 @@
     <string name="grid_on_3">GRADE 3x3</string>
     <string name="grid_on_4">GRADE 4x4</string>
     <string name="grid_on_goldenratio">GRADE φ</string>
+    <string name="mic_off">MICROFONE DESLIGADO</string>
+    <string name="mic_on">MICROFONE LIGADO</string>
     <string name="settings">CONFIGURAÇÕES</string>
     <string name="app_permissions_toast">Permissões não concedidas pelo usuário.</string>
+    <string name="camcorder_unsupported_toast">Nenhuma câmera suporta gravação de vídeo.</string>
     <string name="qr_copy_description">Copiar para a área de transferência</string>
     <string name="qr_icon_description">Ícone</string>
     <string name="qr_share_description">Compartilhar</string>
+    <string name="qr_no_app_available_for_action">Nenhum app disponível para lidar com esta ação</string>
+    <string name="qr_address_title">Adicionar contato</string>
+    <string name="qr_address_content_description">Adicionar contato</string>
+    <string name="qr_calendar_title">Adicionar evento ao calendário</string>
+    <string name="qr_calendar_content_description">Adicionar este evento ao calendário</string>
     <string name="qr_dpp_description">Configurar este dispositivo</string>
+    <string name="qr_email_title">Enviar um novo email</string>
+    <string name="qr_email_content_description">Escrever um novo e-mail para os endereços de e-mail especificados</string>
+    <string name="qr_fido_title">Usar chave de acesso</string>
+    <string name="qr_fido_content_description">Lidar com este QR Code FIDO</string>
+    <string name="qr_geo_title">Abrir esta localização</string>
+    <string name="qr_geo_content_description">Abrir esta localização</string>
+    <string name="qr_isbn_title">Pesquisar este ISBN</string>
+    <string name="qr_isbn_content_description">Pesquisar este ISBN no isbnsearch.org</string>
+    <string name="qr_product_title">Procurar produto</string>
+    <string name="qr_product_content_description">Pesquisar o código de barras desse produto</string>
+    <string name="qr_sms_title">Enviar um novo SMS</string>
+    <string name="qr_sms_content_description">Enviar um novo SMS para os destinatários especificados</string>
+    <string name="qr_tel_title">Ligar para número de telefone</string>
+    <string name="qr_tel_content_description">Ligar para o número de telefone</string>
     <string name="qr_text">Texto</string>
+    <string name="qr_upi_title">Escolha o aplicativo de pagamento</string>
+    <string name="qr_upi_content_description">Abrir este link UPI com o aplicativo apropriado, se suportado</string>
+    <string name="qr_uri_title">Abrir URL</string>
+    <string name="qr_uri_content_description">Abrir esta URL com o aplicativo apropriado, se suportado</string>
+    <string name="qr_vin_title">Procurar VIN</string>
+    <string name="qr_vin_content_description">Procurar este número de identificação de veículo (VIN)</string>
     <string name="qr_wifi_title">Conectar-se a esta rede Wi-Fi</string>
+    <string name="qr_wifi_content_description">Adicionar esta rede Wi-Fi à lista de redes conhecidas e conectar o dispositivo a ela</string>
     <string name="title_activity_settings">Configurações</string>
     <string name="general_header">Geral</string>
     <string name="photos_header">Fotos</string>
     <string name="video_header">Vídeo</string>
+    <string name="advanced_header">Avançado</string>
+    <string name="bright_screen_title">Tela brilhante</string>
+    <string name="bright_screen_summary" formatted="false">Bloqueia o brilho em 100%</string>
+    <string name="save_location_title">Guardar dados de localização</string>
+    <string name="save_location_summary">Incluir localização por GPS nos metadados</string>
+    <string name="save_location_toast">Permissões de localização não concedidas pelo usuário.</string>
     <string name="shutter_sound_title">Som do obturador</string>
     <string name="shutter_sound_summary">Tocar um som ao capturar</string>
     <string name="leveler_title">Nivelador</string>
     <string name="leveler_summary">Indicador que mostra a orientação do dispositivo</string>
+    <string name="volume_buttons_action_title">Ação dos botões de volume</string>
     <string name="photo_capture_mode_title">Modo de captura</string>
+    <string name="photo_capture_mode_maximize_quality">Maximizar qualidade</string>
     <string name="photo_capture_mode_minimize_latency">Minimizar latência</string>
     <string name="enable_zsl_title">Ativar ZSL quando disponível</string>
+    <string name="enable_zsl_summary">Usar o modo Zero-Shutter Lag quando a câmera suportar. Neste modo os efeitos das fotos são desativados. Note que este modo é experimental.</string>
     <string name="photo_ffc_mirror_title">Espelhar câmera frontal</string>
+    <string name="photo_ffc_mirror_summary">Salvar as fotos da câmera frontal como elas aparecem na pré-visualização</string>
     <string name="video_stabilization_title">Ativar estabilização de vídeo</string>
+    <string name="video_stabilization_summary">Quando disponível, habilitar a estabilização de vídeo para reduzir vibrações da câmera durante a gravação</string>
+    <string name="video_mirror_mode_title">Ativar espelhamento de vídeo</string>
+    <string name="processing_title">Processando</string>
+    <string name="processing_info">No modo foto, quando o modo ZSL é utilizado, apenas os valores padrão e desligado serão considerados. Para o modo vídeo, apenas os valores padrão, desligado e rápido serão considerados.</string>
+    <string name="edge_mode_title">Nitidez</string>
+    <string name="edge_mode_summary">O aprimoramento de bordas melhora a nitidez e os detalhes da imagem capturada.</string>
+    <string name="edge_mode_default">Padrão</string>
+    <string name="edge_mode_off">Desligado</string>
+    <string name="edge_mode_fast">Rápido</string>
+    <string name="edge_mode_high_quality">Alta qualidade</string>
+    <string name="noise_reduction_mode_title">Redução de ruído</string>
+    <string name="noise_reduction_mode_summary">O algoritmo de redução de ruído tenta melhorar a qualidade da imagem removendo o ruído excessivo adicionado pelo processo de captura, especialmente em ambientes escuros.</string>
+    <string name="noise_reduction_mode_default">Padrão</string>
+    <string name="noise_reduction_mode_off">Desligado</string>
+    <string name="noise_reduction_mode_fast">Rápido</string>
+    <string name="noise_reduction_mode_high_quality">Alta qualidade</string>
+    <string name="noise_reduction_mode_minimal">Mínimo</string>
+    <string name="shading_mode_title">Correção de vinheta</string>
+    <string name="shading_mode_summary">Qualidade da correção de sombreamento da lente aplicada aos dados da imagem.</string>
+    <string name="shading_mode_default">Padrão</string>
+    <string name="shading_mode_off">Desligado</string>
+    <string name="shading_mode_fast">Rápido</string>
+    <string name="shading_mode_high_quality">Alta qualidade</string>
+    <string name="color_correction_aberration_mode_title">Correção de aberração de cor</string>
+    <string name="color_correction_aberration_mode_summary">A aberração cromática (cor) é causada pelo fato de que diferentes comprimentos de onda de luz não conseguem focar no mesmo ponto após sair da lente.</string>
+    <string name="color_correction_aberration_mode_default">Padrão</string>
+    <string name="color_correction_aberration_mode_off">Desligado</string>
+    <string name="color_correction_aberration_mode_fast">Rápido</string>
+    <string name="color_correction_aberration_mode_high_quality">Alta qualidade</string>
+    <string name="distortion_correction_mode_title">Correção de distorção</string>
+    <string name="distortion_correction_mode_summary">Modo de operação do bloco de correção de distorção da lente.</string>
+    <string name="distortion_correction_mode_default">Padrão</string>
+    <string name="distortion_correction_mode_off">Desligado</string>
+    <string name="distortion_correction_mode_fast">Rápido</string>
+    <string name="distortion_correction_mode_high_quality">Alta qualidade</string>
+    <string name="hot_pixel_mode_title">Correção de pixels quentes</string>
+    <string name="hot_pixel_mode_summary">A correção de pixels quentes interpola ou remove pixels que não medem com precisão a luz recebida (ou seja, pixels que estão presos em um valor arbitrário ou são supersensíveis).</string>
+    <string name="hot_pixel_mode_default">Padrão</string>
+    <string name="hot_pixel_mode_off">Desligado</string>
+    <string name="hot_pixel_mode_fast">Rápido</string>
+    <string name="hot_pixel_mode_high_quality">Alta qualidade</string>
     <string name="shortcut_selfie">Tirar uma selfie</string>
     <string name="shortcut_video">Gravar um vídeo</string>
     <string name="shortcut_qr">Escanear código de barras</string>
     <string name="location_permission_dialog_title">Adicionar a localização em fotos e vídeos</string>
     <string name="location_permission_dialog_description">Mapeie suas memórias ao incluir metadados de localização em cada captura.</string>
     <string name="location_permission_dialog_later">Mais tarde</string>
+    <string name="location_permission_dialog_turn_on">Ativar</string>
+    <string name="error_max_cameras_in_use">O número máximo de câmeras abertas foi atingido, tente fechar outros aplicativos usando as câmeras do dispositivo.</string>
+    <string name="error_camera_in_use">Esta câmera já está em uso, tente fechar o aplicativo que está utilizando a mesma.</string>
+    <string name="error_stream_config">Ocorreu um erro ao preparar a transmissão. Por favor, informe isso aos desenvolvedores.</string>
+    <string name="error_other_recoverable_error">Erro ao configurar a sessão. O aplicativo tentará se recuperar.</string>
+    <string name="error_camera_disabled">A câmera está desativada. Isso pode ser causado pela política do dispositivo.</string>
+    <string name="error_camera_fatal_error">Ocorreu um erro fatal. Tente reiniciar o seu dispositivo.</string>
+    <string name="error_do_not_disturb_mode_enabled">O modo Não Perturbe está ativado. Desative-o e abra o aplicativo novamente.</string>
+    <string name="error_unknown_recoverable">Um erro desconhecido recuperável foi encontrado. Informe isso aos desenvolvedores.</string>
+    <string name="error_unknown_critical">Um erro crítico desconhecido foi encontrado. Informe isso aos desenvolvedores.</string>
+    <string name="error_no_cameras_available">Nenhuma câmera foi encontrada no dispositivo, não é possível iniciar o aplicativo.</string>
+    <string name="gesture_action_shutter">Obturador</string>
+    <string name="gesture_action_zoom">Zoom</string>
+    <string name="gesture_action_volume">Volume</string>
+    <string name="gesture_action_nothing">Nada</string>
+    <string name="thermal_status_moderate">Limitação térmica moderada, certifique-se de que o dispositivo não está sob a luz solar direta.</string>
+    <string name="thermal_status_severe">Limitação térmica severa, é recomendado deixar o aparelho esfriar um pouco.</string>
+    <string name="thermal_status_critical">Limitação térmica crítica, o aplicativo poderá ser fechado em breve.</string>
+    <string name="thermal_status_emergency">Limitação térmica de emergência, o aplicativo será fechado agora.</string>
+    <string name="thermal_status_shutdown">Desligamento por limitação térmica, o dispositivo será desligado.</string>
+    <string name="force_torch_help">No modo foto, você pode manter pressionado o botão do flash para alternar para o modo lanterna.</string>
+    <string name="camera_mode_photo">Foto</string>
+    <string name="camera_mode_video">Vídeo</string>
+    <string name="camera_mode_qr">Escanear</string>
+    <string name="video_mirror_mode_off">Desativado</string>
+    <string name="video_mirror_mode_on">Ativado</string>
+    <string name="video_mirror_mode_on_ffc_only">Somente câmera frontal</string>
 </resources>
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index e0b48c6..1906c79 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 1a09720..5eba985 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">Sună la numărul de telefon</string>
     <string name="qr_tel_content_description">Apelaţi numărul de telefon</string>
     <string name="qr_text">Text</string>
+    <string name="qr_upi_title">Alegeți aplicația pentru plată</string>
+    <string name="qr_upi_content_description">Deschide acest link UPI cu aplicația corespunzătoare dacă este suportată</string>
     <string name="qr_uri_title">Deschide URL</string>
     <string name="qr_uri_content_description">Deschide această adresă URL cu aplicația corespunzătoare dacă este acceptată</string>
     <string name="qr_vin_title">Caută VIN</string>
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 871f068..b30aef5 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">Позвонить по номеру</string>
     <string name="qr_tel_content_description">Позвонить по номеру</string>
     <string name="qr_text">Текст</string>
+    <string name="qr_upi_title">Выберите приложение для оплаты</string>
+    <string name="qr_upi_content_description">Открыть этот URL в соответствующем приложении, если поддерживается</string>
     <string name="qr_uri_title">Открыть URL</string>
     <string name="qr_uri_content_description">Открыть этот URL-адрес в соответствующем приложении, если поддерживается</string>
     <string name="qr_vin_title">Поиск VIN</string>
diff --git a/app/src/main/res/values-sc-rIT/strings.xml b/app/src/main/res/values-sc-rIT/strings.xml
index d549e14..d051697 100644
--- a/app/src/main/res/values-sc-rIT/strings.xml
+++ b/app/src/main/res/values-sc-rIT/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index 4d9bbcf..7922020 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">Kliči telefonsko številko</string>
     <string name="qr_tel_content_description">Kličite telefonsko številko</string>
     <string name="qr_text">Besedilo</string>
+    <string name="qr_upi_title">Izberite aplikacijo za plačilo</string>
+    <string name="qr_upi_content_description">Odpri to UPI povezavo s primerno aplikacijo, če je podprto</string>
     <string name="qr_uri_title">Odpri URL</string>
     <string name="qr_uri_content_description">Odprite ta URL s primerno aplikacijo, če je podprto</string>
     <string name="qr_vin_title">Išči VIN</string>
diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml
index 56875f9..9053a5d 100644
--- a/app/src/main/res/values-sq/strings.xml
+++ b/app/src/main/res/values-sq/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 3ca2f14..6df62bb 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 9392e74..f95fd32 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index 0be71ca..0a97a24 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">Gọi số điện thoại</string>
     <string name="qr_tel_content_description">Gọi số điện thoại</string>
     <string name="qr_text">Văn bản</string>
+    <string name="qr_upi_title">Chọn ứng dụng để thanh toán</string>
+    <string name="qr_upi_content_description">Mở liên kết UPI này bằng ứng dụng thích hợp nếu được hỗ trợ</string>
     <string name="qr_uri_title">Mở URL</string>
     <string name="qr_uri_content_description">Mở URL này bằng ứng dụng thích hợp nếu được hỗ trợ</string>
     <string name="qr_vin_title">Tra cứu số VIN</string>
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index c63b895..ecbcda2 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -58,6 +58,8 @@
     <string name="qr_tel_title">拨打电话号码</string>
     <string name="qr_tel_content_description">拨打电话号码</string>
     <string name="qr_text">文本</string>
+    <string name="qr_upi_title">选择用于支付的应用</string>
+    <string name="qr_upi_content_description">在可用的情况下,使用支持的应用打开UPI链接</string>
     <string name="qr_uri_title">打开网址</string>
     <string name="qr_uri_content_description">如果支持的话,用适当的应用程序打开此网址</string>
     <string name="qr_vin_title">查找 VIN</string>
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index db4a379..b5f635d 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -44,13 +44,26 @@
     <string name="qr_calendar_content_description">將此活動新增至日曆</string>
     <string name="qr_dpp_description">設定此裝置</string>
     <string name="qr_email_title">傳送新電子郵件</string>
+    <string name="qr_email_content_description">撰寫一封新郵件給指定的電子郵件地址</string>
+    <string name="qr_fido_title">使用通行金鑰</string>
+    <string name="qr_fido_content_description">處理此 FIDO QR code</string>
+    <string name="qr_geo_title">開啟此位置</string>
+    <string name="qr_geo_content_description">開啟此位置</string>
+    <string name="qr_isbn_title">搜尋此 ISBN</string>
+    <string name="qr_isbn_content_description">在 isbnsearch.org 上搜尋此 ISBN</string>
+    <string name="qr_product_title">搜尋產品</string>
+    <string name="qr_product_content_description">搜尋此產品 ID 條碼</string>
     <string name="qr_sms_title">傳送新簡訊</string>
     <string name="qr_sms_content_description">傳送新簡訊至指定收件者</string>
     <string name="qr_tel_title">撥打電話號碼</string>
     <string name="qr_tel_content_description">撥打電話號碼</string>
     <string name="qr_text">文字</string>
+    <string name="qr_upi_title">選擇應用程式進行付款</string>
+    <string name="qr_upi_content_description">使用適當的應用程式(若支援)開啟此 UPI 連結</string>
     <string name="qr_uri_title">開啟 URL</string>
     <string name="qr_uri_content_description">使用適當的應用程式(若支援)開啟此 URL</string>
+    <string name="qr_vin_title">搜尋 VIN</string>
+    <string name="qr_vin_content_description">搜尋此車輛識別號碼 (VIN)</string>
     <string name="qr_wifi_title">連線至此 Wi-Fi 網路</string>
     <string name="qr_wifi_content_description">新增此 Wi-Fi 網路至已知網路清單並將裝置連線至該網路</string>
     <string name="title_activity_settings">設定</string>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1df5385..48d2653 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
@@ -85,6 +85,8 @@
     <string name="qr_tel_title">Call phone number</string>
     <string name="qr_tel_content_description">Call the phone number</string>
     <string name="qr_text">Text</string>
+    <string name="qr_upi_title">Choose app to pay</string>
+    <string name="qr_upi_content_description">Open this UPI link with the appropriate app if supported</string>
     <string name="qr_uri_title">Open URL</string>
     <string name="qr_uri_content_description">Open this URL with the appropriate app if supported</string>
     <string name="qr_vin_title">Lookup VIN</string>
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index d84a99d..24ace57 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+     SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
      SPDX-License-Identifier: Apache-2.0
 -->
 <resources xmlns:tools="http://schemas.android.com/tools">
@@ -35,11 +35,10 @@
 
     <!-- Secondary top bar icons theme -->
     <style name="Theme.Aperture.Camera.SecondaryTopBarButton" parent="Theme.Aperture.Camera.SecondaryBarButton">
-        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_width">96dp</item>
         <item name="android:layout_height">wrap_content</item>
-        <item name="layout_constraintDimensionRatio">1:1</item>
-        <item name="layout_constraintHorizontal_bias">0.5</item>
-        <item name="layout_constraintVertical_bias">0.0</item>
+        <item name="android:hyphenationFrequency">normal</item>
+        <item name="android:maxLines">3</item>
         <item name="android:paddingHorizontal">0dp</item>
         <item name="android:textStyle">bold</item>
         <item name="android:typeface">monospace</item>
@@ -47,8 +46,9 @@
 
     <!-- Secondary bottom bar icons theme -->
     <style name="Theme.Aperture.Camera.SecondaryBottomBarButton" parent="Theme.Aperture.Camera.SecondaryBarButton">
-        <item name="android:layout_width">40dp</item>
-        <item name="android:layout_height">40dp</item>
+        <item name="android:layout_width">48dp</item>
+        <item name="android:layout_height">48dp</item>
+        <item name="android:padding">4dp</item>
     </style>
 
     <!-- Info chip -->
diff --git a/build.gradle.kts b/build.gradle.kts
index 721a781..6db3c5e 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -5,8 +5,8 @@
 
 // Top-level build file where you can add configuration options common to all sub-projects/modules.
 plugins {
-    id("com.android.application") version "8.2.1" apply false
-    id("com.android.library") version "8.2.1" apply false
+    id("com.android.application") version "8.4.0" apply false
+    id("com.android.library") version "8.4.0" apply false
     id("org.jetbrains.kotlin.android") version "1.7.10" apply false
 }
 
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index d64cd49..e644113 100644
--- a/gradle/wrapper/gradle-wrapper.jar
+++ b/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 1af9e09..b82aa23 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
 networkTimeout=10000
 validateDistributionUrl=true
 zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew.bat b/gradlew.bat
index 6689b85..7101f8e 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -43,11 +43,11 @@
 %JAVA_EXE% -version >NUL 2>&1

 if %ERRORLEVEL% equ 0 goto execute

 

-echo.

-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

-echo.

-echo Please set the JAVA_HOME variable in your environment to match the

-echo location of your Java installation.

+echo. 1>&2

+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2

+echo. 1>&2

+echo Please set the JAVA_HOME variable in your environment to match the 1>&2

+echo location of your Java installation. 1>&2

 

 goto fail

 

@@ -57,11 +57,11 @@
 

 if exist "%JAVA_EXE%" goto execute

 

-echo.

-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%

-echo.

-echo Please set the JAVA_HOME variable in your environment to match the

-echo location of your Java installation.

+echo. 1>&2

+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2

+echo. 1>&2

+echo Please set the JAVA_HOME variable in your environment to match the 1>&2

+echo location of your Java installation. 1>&2

 

 goto fail

 

diff --git a/settings.gradle.kts b/settings.gradle.kts
index b23a790..de0c7c0 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -1,5 +1,5 @@
 /*
- * SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+ * SPDX-FileCopyrightText: 2022-2024 The LineageOS Project
  * SPDX-License-Identifier: Apache-2.0
  */
 
@@ -13,7 +13,7 @@
 dependencyResolutionManagement {
     repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
     repositories {
-        maven("https://raw.githubusercontent.com/lineage-next/camerax-aperture/c8fdd97d7a0a080cb520acd7855717b9f60cec1f/.m2")
+        maven("https://raw.githubusercontent.com/lineage-next/camerax-aperture/bdc457ba0021c05507c4bec14806c120e132a37f/.m2")
         google()
         mavenCentral()
     }