diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..0fc9a5d
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2022 The LeafOS 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.
+ */
+
+android_app {
+    name: "GrapheneCamera",
+    platform_apis: true,
+    system_ext_specific: true,
+    overrides: ["Camera2"],
+    srcs: [
+        "app/src/aosp/java/**/*.java",
+        "app/src/main/java/**/*.java",
+        "app/src/main/java/**/*.kt",
+    ],
+    resource_dirs: [
+        "app/src/aosp/res",
+        "app/src/main/res",
+    ],
+    static_libs: [
+        "androidx.appcompat_appcompat",
+        "androidx.camera_camera-camera2",
+        "androidx.camera_camera-core",
+        "androidx.camera_camera-extensions",
+        "androidx.camera_camera-lifecycle",
+        "androidx.camera_camera-video",
+        "androidx.camera_camera-view",
+        "androidx.concurrent_concurrent-futures",
+        "androidx.databinding_viewbinding",
+        "androidx.documentfile_documentfile",
+        "androidx.exifinterface_exifinterface",
+        "androidx.lifecycle_lifecycle-livedata",
+        "androidx-constraintlayout_constraintlayout",
+        "com.google.android.material_material",
+        "com.google.zxing_core",
+        "guava",
+    ],
+    jni_libs: [
+        "libimage_processing_util_jni",
+    ],
+    optional_uses_libs: [
+        "androidx.camera.extensions.impl",
+    ],
+    kotlincflags: [
+        "-Xuse-experimental=kotlin.ExperimentalStdlibApi",
+    ],
+    manifest: "app/src/main/AndroidManifest.xml",
+    optimize: {
+        enabled: false,
+    },
+    aaptflags: [
+        "--rename-manifest-package",
+        "org.leafos.graphenecamera",
+    ],
+}
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index c8a10f1..1ea4cca 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -33,7 +33,7 @@
         }
     }
 
-    compileSdk = 32
+    compileSdk = 33
     buildToolsVersion = "33.0.0"
 
     defaultConfig {
diff --git a/app/src/aosp/java/app/grapheneos/camera/BuildConfig.java b/app/src/aosp/java/app/grapheneos/camera/BuildConfig.java
new file mode 100644
index 0000000..a604f1e
--- /dev/null
+++ b/app/src/aosp/java/app/grapheneos/camera/BuildConfig.java
@@ -0,0 +1,8 @@
+package app.grapheneos.camera;
+
+// Stub BuildConfig class to allow building in AOSP
+public class BuildConfig {
+
+    public static final boolean DEBUG = false;
+
+}
diff --git a/app/src/aosp/java/app/grapheneos/camera/databinding/ActivityMainBinding.java b/app/src/aosp/java/app/grapheneos/camera/databinding/ActivityMainBinding.java
new file mode 100644
index 0000000..87e9f06
--- /dev/null
+++ b/app/src/aosp/java/app/grapheneos/camera/databinding/ActivityMainBinding.java
@@ -0,0 +1,617 @@
+// Generated by view binder compiler. Do not edit!
+package app.grapheneos.camera.databinding;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.camera.view.PreviewView;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.coordinatorlayout.widget.CoordinatorLayout;
+import androidx.viewbinding.ViewBinding;
+import androidx.viewbinding.ViewBindings;
+import androidx.viewpager2.widget.ViewPager2;
+import app.grapheneos.camera.R;
+import app.grapheneos.camera.ui.BottomTabLayout;
+import app.grapheneos.camera.ui.CountDownTimerUI;
+import app.grapheneos.camera.ui.CustomGrid;
+import app.grapheneos.camera.ui.QROverlay;
+import app.grapheneos.camera.ui.QRToggle;
+import app.grapheneos.camera.ui.seekbar.ExposureBar;
+import app.grapheneos.camera.ui.seekbar.ZoomBar;
+import com.google.android.material.imageview.ShapeableImageView;
+import java.lang.NullPointerException;
+import java.lang.Override;
+import java.lang.String;
+
+public final class ActivityMainBinding implements ViewBinding {
+  @NonNull
+  private final CoordinatorLayout rootView;
+
+  @NonNull
+  public final QRToggle aztecToggle;
+
+  @NonNull
+  public final CountDownTimerUI cTimer;
+
+  @NonNull
+  public final BottomTabLayout cameraModeTabs;
+
+  @NonNull
+  public final ImageView cancelButton;
+
+  @NonNull
+  public final ImageButton captureButton;
+
+  @NonNull
+  public final ImageView captureButtonCross;
+
+  @NonNull
+  public final TextView captureButtonText;
+
+  @NonNull
+  public final ImageButton confirmButton;
+
+  @NonNull
+  public final QRToggle dataMatrixToggle;
+
+  @NonNull
+  public final ExposureBar exposureBar;
+
+  @NonNull
+  public final LinearLayout exposureBarPanel;
+
+  @NonNull
+  public final ImageView exposureNegIcon;
+
+  @NonNull
+  public final ImageView exposurePlusIcon;
+
+  @NonNull
+  public final ViewPager2 flashPager;
+
+  @NonNull
+  public final FrameLayout flipCameraCircle;
+
+  @NonNull
+  public final ImageView flipCameraIcon;
+
+  @NonNull
+  public final ImageView flipCameraIconContent;
+
+  @NonNull
+  public final ImageView focusRing;
+
+  @NonNull
+  public final LinearLayout gCircle;
+
+  @NonNull
+  public final FrameLayout gCircleFrame;
+
+  @NonNull
+  public final View gCircleLeftDash;
+
+  @NonNull
+  public final View gCircleLineX;
+
+  @NonNull
+  public final View gCircleLineZ;
+
+  @NonNull
+  public final View gCircleRightDash;
+
+  @NonNull
+  public final TextView gCircleText;
+
+  @NonNull
+  public final ShapeableImageView imagePreview;
+
+  @NonNull
+  public final FrameLayout mainFrame;
+
+  @NonNull
+  public final ImageView mainOverlay;
+
+  @NonNull
+  public final ImageView micOff;
+
+  @NonNull
+  public final ImageView moreOptions;
+
+  @NonNull
+  public final QRToggle pdf417Toggle;
+
+  @NonNull
+  public final ImageView playPreview;
+
+  @NonNull
+  public final PreviewView preview;
+
+  @NonNull
+  public final ConstraintLayout previewContainer;
+
+  @NonNull
+  public final CustomGrid previewGrid;
+
+  @NonNull
+  public final ProgressBar previewLoading;
+
+  @NonNull
+  public final QROverlay qrOverlay;
+
+  @NonNull
+  public final QRToggle qrScanToggle;
+
+  @NonNull
+  public final LinearLayout qrScanToggles;
+
+  @NonNull
+  public final ImageView retakeIcon;
+
+  @NonNull
+  public final RelativeLayout root;
+
+  @NonNull
+  public final ImageButton settingsOption;
+
+  @NonNull
+  public final ImageView thirdCircle;
+
+  @NonNull
+  public final FrameLayout thirdOption;
+
+  @NonNull
+  public final LinearLayout threeButtons;
+
+  @NonNull
+  public final TextView timer;
+
+  @NonNull
+  public final ImageView whiteOptionCircle;
+
+  @NonNull
+  public final ZoomBar zoomBar;
+
+  @NonNull
+  public final LinearLayout zoomBarPanel;
+
+  @NonNull
+  public final ImageView zoomInIcon;
+
+  @NonNull
+  public final ImageView zoomOutIcon;
+
+  private ActivityMainBinding(@NonNull CoordinatorLayout rootView, @NonNull QRToggle aztecToggle,
+      @NonNull CountDownTimerUI cTimer, @NonNull BottomTabLayout cameraModeTabs,
+      @NonNull ImageView cancelButton, @NonNull ImageButton captureButton,
+      @NonNull ImageView captureButtonCross, @NonNull TextView captureButtonText,
+      @NonNull ImageButton confirmButton, @NonNull QRToggle dataMatrixToggle,
+      @NonNull ExposureBar exposureBar, @NonNull LinearLayout exposureBarPanel,
+      @NonNull ImageView exposureNegIcon, @NonNull ImageView exposurePlusIcon,
+      @NonNull ViewPager2 flashPager, @NonNull FrameLayout flipCameraCircle,
+      @NonNull ImageView flipCameraIcon, @NonNull ImageView flipCameraIconContent,
+      @NonNull ImageView focusRing, @NonNull LinearLayout gCircle,
+      @NonNull FrameLayout gCircleFrame, @NonNull View gCircleLeftDash, @NonNull View gCircleLineX,
+      @NonNull View gCircleLineZ, @NonNull View gCircleRightDash, @NonNull TextView gCircleText,
+      @NonNull ShapeableImageView imagePreview, @NonNull FrameLayout mainFrame,
+      @NonNull ImageView mainOverlay, @NonNull ImageView micOff, @NonNull ImageView moreOptions,
+      @NonNull QRToggle pdf417Toggle, @NonNull ImageView playPreview, @NonNull PreviewView preview,
+      @NonNull ConstraintLayout previewContainer, @NonNull CustomGrid previewGrid,
+      @NonNull ProgressBar previewLoading, @NonNull QROverlay qrOverlay,
+      @NonNull QRToggle qrScanToggle, @NonNull LinearLayout qrScanToggles,
+      @NonNull ImageView retakeIcon, @NonNull RelativeLayout root,
+      @NonNull ImageButton settingsOption, @NonNull ImageView thirdCircle,
+      @NonNull FrameLayout thirdOption, @NonNull LinearLayout threeButtons, @NonNull TextView timer,
+      @NonNull ImageView whiteOptionCircle, @NonNull ZoomBar zoomBar,
+      @NonNull LinearLayout zoomBarPanel, @NonNull ImageView zoomInIcon,
+      @NonNull ImageView zoomOutIcon) {
+    this.rootView = rootView;
+    this.aztecToggle = aztecToggle;
+    this.cTimer = cTimer;
+    this.cameraModeTabs = cameraModeTabs;
+    this.cancelButton = cancelButton;
+    this.captureButton = captureButton;
+    this.captureButtonCross = captureButtonCross;
+    this.captureButtonText = captureButtonText;
+    this.confirmButton = confirmButton;
+    this.dataMatrixToggle = dataMatrixToggle;
+    this.exposureBar = exposureBar;
+    this.exposureBarPanel = exposureBarPanel;
+    this.exposureNegIcon = exposureNegIcon;
+    this.exposurePlusIcon = exposurePlusIcon;
+    this.flashPager = flashPager;
+    this.flipCameraCircle = flipCameraCircle;
+    this.flipCameraIcon = flipCameraIcon;
+    this.flipCameraIconContent = flipCameraIconContent;
+    this.focusRing = focusRing;
+    this.gCircle = gCircle;
+    this.gCircleFrame = gCircleFrame;
+    this.gCircleLeftDash = gCircleLeftDash;
+    this.gCircleLineX = gCircleLineX;
+    this.gCircleLineZ = gCircleLineZ;
+    this.gCircleRightDash = gCircleRightDash;
+    this.gCircleText = gCircleText;
+    this.imagePreview = imagePreview;
+    this.mainFrame = mainFrame;
+    this.mainOverlay = mainOverlay;
+    this.micOff = micOff;
+    this.moreOptions = moreOptions;
+    this.pdf417Toggle = pdf417Toggle;
+    this.playPreview = playPreview;
+    this.preview = preview;
+    this.previewContainer = previewContainer;
+    this.previewGrid = previewGrid;
+    this.previewLoading = previewLoading;
+    this.qrOverlay = qrOverlay;
+    this.qrScanToggle = qrScanToggle;
+    this.qrScanToggles = qrScanToggles;
+    this.retakeIcon = retakeIcon;
+    this.root = root;
+    this.settingsOption = settingsOption;
+    this.thirdCircle = thirdCircle;
+    this.thirdOption = thirdOption;
+    this.threeButtons = threeButtons;
+    this.timer = timer;
+    this.whiteOptionCircle = whiteOptionCircle;
+    this.zoomBar = zoomBar;
+    this.zoomBarPanel = zoomBarPanel;
+    this.zoomInIcon = zoomInIcon;
+    this.zoomOutIcon = zoomOutIcon;
+  }
+
+  @Override
+  @NonNull
+  public CoordinatorLayout getRoot() {
+    return rootView;
+  }
+
+  @NonNull
+  public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater) {
+    return inflate(inflater, null, false);
+  }
+
+  @NonNull
+  public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater,
+      @Nullable ViewGroup parent, boolean attachToParent) {
+    View root = inflater.inflate(R.layout.activity_main, parent, false);
+    if (attachToParent) {
+      parent.addView(root);
+    }
+    return bind(root);
+  }
+
+  @NonNull
+  public static ActivityMainBinding bind(@NonNull View rootView) {
+    // The body of this method is generated in a way you would not otherwise write.
+    // This is done to optimize the compiled bytecode for size and performance.
+    int id;
+    missingId: {
+      id = R.id.aztec_toggle;
+      QRToggle aztecToggle = ViewBindings.findChildViewById(rootView, id);
+      if (aztecToggle == null) {
+        break missingId;
+      }
+
+      id = R.id.c_timer;
+      CountDownTimerUI cTimer = ViewBindings.findChildViewById(rootView, id);
+      if (cTimer == null) {
+        break missingId;
+      }
+
+      id = R.id.camera_mode_tabs;
+      BottomTabLayout cameraModeTabs = ViewBindings.findChildViewById(rootView, id);
+      if (cameraModeTabs == null) {
+        break missingId;
+      }
+
+      id = R.id.cancel_button;
+      ImageView cancelButton = ViewBindings.findChildViewById(rootView, id);
+      if (cancelButton == null) {
+        break missingId;
+      }
+
+      id = R.id.capture_button;
+      ImageButton captureButton = ViewBindings.findChildViewById(rootView, id);
+      if (captureButton == null) {
+        break missingId;
+      }
+
+      id = R.id.capture_button_cross;
+      ImageView captureButtonCross = ViewBindings.findChildViewById(rootView, id);
+      if (captureButtonCross == null) {
+        break missingId;
+      }
+
+      id = R.id.capture_button_text;
+      TextView captureButtonText = ViewBindings.findChildViewById(rootView, id);
+      if (captureButtonText == null) {
+        break missingId;
+      }
+
+      id = R.id.confirm_button;
+      ImageButton confirmButton = ViewBindings.findChildViewById(rootView, id);
+      if (confirmButton == null) {
+        break missingId;
+      }
+
+      id = R.id.data_matrix_toggle;
+      QRToggle dataMatrixToggle = ViewBindings.findChildViewById(rootView, id);
+      if (dataMatrixToggle == null) {
+        break missingId;
+      }
+
+      id = R.id.exposure_bar;
+      ExposureBar exposureBar = ViewBindings.findChildViewById(rootView, id);
+      if (exposureBar == null) {
+        break missingId;
+      }
+
+      id = R.id.exposure_bar_panel;
+      LinearLayout exposureBarPanel = ViewBindings.findChildViewById(rootView, id);
+      if (exposureBarPanel == null) {
+        break missingId;
+      }
+
+      id = R.id.exposure_neg_icon;
+      ImageView exposureNegIcon = ViewBindings.findChildViewById(rootView, id);
+      if (exposureNegIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.exposure_plus_icon;
+      ImageView exposurePlusIcon = ViewBindings.findChildViewById(rootView, id);
+      if (exposurePlusIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.flash_pager;
+      ViewPager2 flashPager = ViewBindings.findChildViewById(rootView, id);
+      if (flashPager == null) {
+        break missingId;
+      }
+
+      id = R.id.flip_camera_circle;
+      FrameLayout flipCameraCircle = ViewBindings.findChildViewById(rootView, id);
+      if (flipCameraCircle == null) {
+        break missingId;
+      }
+
+      id = R.id.flip_camera_icon;
+      ImageView flipCameraIcon = ViewBindings.findChildViewById(rootView, id);
+      if (flipCameraIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.flip_camera_icon_content;
+      ImageView flipCameraIconContent = ViewBindings.findChildViewById(rootView, id);
+      if (flipCameraIconContent == null) {
+        break missingId;
+      }
+
+      id = R.id.focusRing;
+      ImageView focusRing = ViewBindings.findChildViewById(rootView, id);
+      if (focusRing == null) {
+        break missingId;
+      }
+
+      id = R.id.g_circle;
+      LinearLayout gCircle = ViewBindings.findChildViewById(rootView, id);
+      if (gCircle == null) {
+        break missingId;
+      }
+
+      id = R.id.g_circle_frame;
+      FrameLayout gCircleFrame = ViewBindings.findChildViewById(rootView, id);
+      if (gCircleFrame == null) {
+        break missingId;
+      }
+
+      id = R.id.g_circle_left_dash;
+      View gCircleLeftDash = ViewBindings.findChildViewById(rootView, id);
+      if (gCircleLeftDash == null) {
+        break missingId;
+      }
+
+      id = R.id.g_circle_line_x;
+      View gCircleLineX = ViewBindings.findChildViewById(rootView, id);
+      if (gCircleLineX == null) {
+        break missingId;
+      }
+
+      id = R.id.g_circle_line_z;
+      View gCircleLineZ = ViewBindings.findChildViewById(rootView, id);
+      if (gCircleLineZ == null) {
+        break missingId;
+      }
+
+      id = R.id.g_circle_right_dash;
+      View gCircleRightDash = ViewBindings.findChildViewById(rootView, id);
+      if (gCircleRightDash == null) {
+        break missingId;
+      }
+
+      id = R.id.g_circle_text;
+      TextView gCircleText = ViewBindings.findChildViewById(rootView, id);
+      if (gCircleText == null) {
+        break missingId;
+      }
+
+      id = R.id.image_preview;
+      ShapeableImageView imagePreview = ViewBindings.findChildViewById(rootView, id);
+      if (imagePreview == null) {
+        break missingId;
+      }
+
+      id = R.id.main_frame;
+      FrameLayout mainFrame = ViewBindings.findChildViewById(rootView, id);
+      if (mainFrame == null) {
+        break missingId;
+      }
+
+      id = R.id.main_overlay;
+      ImageView mainOverlay = ViewBindings.findChildViewById(rootView, id);
+      if (mainOverlay == null) {
+        break missingId;
+      }
+
+      id = R.id.mic_off;
+      ImageView micOff = ViewBindings.findChildViewById(rootView, id);
+      if (micOff == null) {
+        break missingId;
+      }
+
+      id = R.id.more_options;
+      ImageView moreOptions = ViewBindings.findChildViewById(rootView, id);
+      if (moreOptions == null) {
+        break missingId;
+      }
+
+      id = R.id.pdf417_toggle;
+      QRToggle pdf417Toggle = ViewBindings.findChildViewById(rootView, id);
+      if (pdf417Toggle == null) {
+        break missingId;
+      }
+
+      id = R.id.play_preview;
+      ImageView playPreview = ViewBindings.findChildViewById(rootView, id);
+      if (playPreview == null) {
+        break missingId;
+      }
+
+      id = R.id.preview;
+      PreviewView preview = ViewBindings.findChildViewById(rootView, id);
+      if (preview == null) {
+        break missingId;
+      }
+
+      id = R.id.preview_container;
+      ConstraintLayout previewContainer = ViewBindings.findChildViewById(rootView, id);
+      if (previewContainer == null) {
+        break missingId;
+      }
+
+      id = R.id.preview_grid;
+      CustomGrid previewGrid = ViewBindings.findChildViewById(rootView, id);
+      if (previewGrid == null) {
+        break missingId;
+      }
+
+      id = R.id.preview_loading;
+      ProgressBar previewLoading = ViewBindings.findChildViewById(rootView, id);
+      if (previewLoading == null) {
+        break missingId;
+      }
+
+      id = R.id.qr_overlay;
+      QROverlay qrOverlay = ViewBindings.findChildViewById(rootView, id);
+      if (qrOverlay == null) {
+        break missingId;
+      }
+
+      id = R.id.qr_scan_toggle;
+      QRToggle qrScanToggle = ViewBindings.findChildViewById(rootView, id);
+      if (qrScanToggle == null) {
+        break missingId;
+      }
+
+      id = R.id.qr_scan_toggles;
+      LinearLayout qrScanToggles = ViewBindings.findChildViewById(rootView, id);
+      if (qrScanToggles == null) {
+        break missingId;
+      }
+
+      id = R.id.retake_icon;
+      ImageView retakeIcon = ViewBindings.findChildViewById(rootView, id);
+      if (retakeIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.root;
+      RelativeLayout root = ViewBindings.findChildViewById(rootView, id);
+      if (root == null) {
+        break missingId;
+      }
+
+      id = R.id.settings_option;
+      ImageButton settingsOption = ViewBindings.findChildViewById(rootView, id);
+      if (settingsOption == null) {
+        break missingId;
+      }
+
+      id = R.id.third_circle;
+      ImageView thirdCircle = ViewBindings.findChildViewById(rootView, id);
+      if (thirdCircle == null) {
+        break missingId;
+      }
+
+      id = R.id.third_option;
+      FrameLayout thirdOption = ViewBindings.findChildViewById(rootView, id);
+      if (thirdOption == null) {
+        break missingId;
+      }
+
+      id = R.id.three_buttons;
+      LinearLayout threeButtons = ViewBindings.findChildViewById(rootView, id);
+      if (threeButtons == null) {
+        break missingId;
+      }
+
+      id = R.id.timer;
+      TextView timer = ViewBindings.findChildViewById(rootView, id);
+      if (timer == null) {
+        break missingId;
+      }
+
+      id = R.id.white_option_circle;
+      ImageView whiteOptionCircle = ViewBindings.findChildViewById(rootView, id);
+      if (whiteOptionCircle == null) {
+        break missingId;
+      }
+
+      id = R.id.zoom_bar;
+      ZoomBar zoomBar = ViewBindings.findChildViewById(rootView, id);
+      if (zoomBar == null) {
+        break missingId;
+      }
+
+      id = R.id.zoom_bar_panel;
+      LinearLayout zoomBarPanel = ViewBindings.findChildViewById(rootView, id);
+      if (zoomBarPanel == null) {
+        break missingId;
+      }
+
+      id = R.id.zoom_in_icon;
+      ImageView zoomInIcon = ViewBindings.findChildViewById(rootView, id);
+      if (zoomInIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.zoom_out_icon;
+      ImageView zoomOutIcon = ViewBindings.findChildViewById(rootView, id);
+      if (zoomOutIcon == null) {
+        break missingId;
+      }
+
+      return new ActivityMainBinding((CoordinatorLayout) rootView, aztecToggle, cTimer,
+          cameraModeTabs, cancelButton, captureButton, captureButtonCross, captureButtonText,
+          confirmButton, dataMatrixToggle, exposureBar, exposureBarPanel, exposureNegIcon,
+          exposurePlusIcon, flashPager, flipCameraCircle, flipCameraIcon, flipCameraIconContent,
+          focusRing, gCircle, gCircleFrame, gCircleLeftDash, gCircleLineX, gCircleLineZ,
+          gCircleRightDash, gCircleText, imagePreview, mainFrame, mainOverlay, micOff, moreOptions,
+          pdf417Toggle, playPreview, preview, previewContainer, previewGrid, previewLoading,
+          qrOverlay, qrScanToggle, qrScanToggles, retakeIcon, root, settingsOption, thirdCircle,
+          thirdOption, threeButtons, timer, whiteOptionCircle, zoomBar, zoomBarPanel, zoomInIcon,
+          zoomOutIcon);
+    }
+    String missingId = rootView.getResources().getResourceName(id);
+    throw new NullPointerException("Missing required view with ID: ".concat(missingId));
+  }
+}
diff --git a/app/src/aosp/java/app/grapheneos/camera/databinding/GalleryBinding.java b/app/src/aosp/java/app/grapheneos/camera/databinding/GalleryBinding.java
new file mode 100644
index 0000000..016620f
--- /dev/null
+++ b/app/src/aosp/java/app/grapheneos/camera/databinding/GalleryBinding.java
@@ -0,0 +1,87 @@
+// Generated by view binder compiler. Do not edit!
+package app.grapheneos.camera.databinding;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.RelativeLayout;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.viewbinding.ViewBinding;
+import androidx.viewbinding.ViewBindings;
+import androidx.viewpager2.widget.ViewPager2;
+import app.grapheneos.camera.R;
+import java.lang.NullPointerException;
+import java.lang.Override;
+import java.lang.String;
+
+public final class GalleryBinding implements ViewBinding {
+  @NonNull
+  private final RelativeLayout rootView_;
+
+  @NonNull
+  public final ViewPager2 gallerySlider;
+
+  @NonNull
+  public final GalleryPlaceholderBinding placeholderText;
+
+  @NonNull
+  public final RelativeLayout rootView;
+
+  private GalleryBinding(@NonNull RelativeLayout rootView_, @NonNull ViewPager2 gallerySlider,
+      @NonNull GalleryPlaceholderBinding placeholderText, @NonNull RelativeLayout rootView) {
+    this.rootView_ = rootView_;
+    this.gallerySlider = gallerySlider;
+    this.placeholderText = placeholderText;
+    this.rootView = rootView;
+  }
+
+  @Override
+  @NonNull
+  public RelativeLayout getRoot() {
+    return rootView_;
+  }
+
+  @NonNull
+  public static GalleryBinding inflate(@NonNull LayoutInflater inflater) {
+    return inflate(inflater, null, false);
+  }
+
+  @NonNull
+  public static GalleryBinding inflate(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent,
+      boolean attachToParent) {
+    View root = inflater.inflate(R.layout.gallery, parent, false);
+    if (attachToParent) {
+      parent.addView(root);
+    }
+    return bind(root);
+  }
+
+  @NonNull
+  public static GalleryBinding bind(@NonNull View rootView) {
+    // The body of this method is generated in a way you would not otherwise write.
+    // This is done to optimize the compiled bytecode for size and performance.
+    int id;
+    missingId: {
+      id = R.id.gallery_slider;
+      ViewPager2 gallerySlider = ViewBindings.findChildViewById(rootView, id);
+      if (gallerySlider == null) {
+        break missingId;
+      }
+
+      id = R.id.placeholder_text;
+      View placeholderText = ViewBindings.findChildViewById(rootView, id);
+      if (placeholderText == null) {
+        break missingId;
+      }
+      GalleryPlaceholderBinding binding_placeholderText = GalleryPlaceholderBinding.bind(placeholderText);
+
+      RelativeLayout rootView_ = (RelativeLayout) rootView;
+
+      return new GalleryBinding((RelativeLayout) rootView, gallerySlider, binding_placeholderText,
+          rootView_);
+    }
+    String missingId = rootView.getResources().getResourceName(id);
+    throw new NullPointerException("Missing required view with ID: ".concat(missingId));
+  }
+}
diff --git a/app/src/aosp/java/app/grapheneos/camera/databinding/GalleryPlaceholderBinding.java b/app/src/aosp/java/app/grapheneos/camera/databinding/GalleryPlaceholderBinding.java
new file mode 100644
index 0000000..4183938
--- /dev/null
+++ b/app/src/aosp/java/app/grapheneos/camera/databinding/GalleryPlaceholderBinding.java
@@ -0,0 +1,52 @@
+// Generated by view binder compiler. Do not edit!
+package app.grapheneos.camera.databinding;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.viewbinding.ViewBinding;
+import app.grapheneos.camera.R;
+import java.lang.NullPointerException;
+import java.lang.Override;
+
+public final class GalleryPlaceholderBinding implements ViewBinding {
+  @NonNull
+  private final TextView rootView;
+
+  private GalleryPlaceholderBinding(@NonNull TextView rootView) {
+    this.rootView = rootView;
+  }
+
+  @Override
+  @NonNull
+  public TextView getRoot() {
+    return rootView;
+  }
+
+  @NonNull
+  public static GalleryPlaceholderBinding inflate(@NonNull LayoutInflater inflater) {
+    return inflate(inflater, null, false);
+  }
+
+  @NonNull
+  public static GalleryPlaceholderBinding inflate(@NonNull LayoutInflater inflater,
+      @Nullable ViewGroup parent, boolean attachToParent) {
+    View root = inflater.inflate(R.layout.gallery_placeholder, parent, false);
+    if (attachToParent) {
+      parent.addView(root);
+    }
+    return bind(root);
+  }
+
+  @NonNull
+  public static GalleryPlaceholderBinding bind(@NonNull View rootView) {
+    if (rootView == null) {
+      throw new NullPointerException("rootView");
+    }
+
+    return new GalleryPlaceholderBinding((TextView) rootView);
+  }
+}
diff --git a/app/src/aosp/java/app/grapheneos/camera/databinding/GallerySlideBinding.java b/app/src/aosp/java/app/grapheneos/camera/databinding/GallerySlideBinding.java
new file mode 100644
index 0000000..92ac07a
--- /dev/null
+++ b/app/src/aosp/java/app/grapheneos/camera/databinding/GallerySlideBinding.java
@@ -0,0 +1,99 @@
+// Generated by view binder compiler. Do not edit!
+package app.grapheneos.camera.databinding;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.viewbinding.ViewBinding;
+import androidx.viewbinding.ViewBindings;
+import app.grapheneos.camera.R;
+import app.grapheneos.camera.ui.ZoomableImageView;
+import java.lang.NullPointerException;
+import java.lang.Override;
+import java.lang.String;
+
+public final class GallerySlideBinding implements ViewBinding {
+  @NonNull
+  private final FrameLayout rootView;
+
+  @NonNull
+  public final GalleryPlaceholderBinding placeholderText;
+
+  @NonNull
+  public final ImageView playButton;
+
+  @NonNull
+  public final FrameLayout root;
+
+  @NonNull
+  public final ZoomableImageView slidePreview;
+
+  private GallerySlideBinding(@NonNull FrameLayout rootView,
+      @NonNull GalleryPlaceholderBinding placeholderText, @NonNull ImageView playButton,
+      @NonNull FrameLayout root, @NonNull ZoomableImageView slidePreview) {
+    this.rootView = rootView;
+    this.placeholderText = placeholderText;
+    this.playButton = playButton;
+    this.root = root;
+    this.slidePreview = slidePreview;
+  }
+
+  @Override
+  @NonNull
+  public FrameLayout getRoot() {
+    return rootView;
+  }
+
+  @NonNull
+  public static GallerySlideBinding inflate(@NonNull LayoutInflater inflater) {
+    return inflate(inflater, null, false);
+  }
+
+  @NonNull
+  public static GallerySlideBinding inflate(@NonNull LayoutInflater inflater,
+      @Nullable ViewGroup parent, boolean attachToParent) {
+    View root = inflater.inflate(R.layout.gallery_slide, parent, false);
+    if (attachToParent) {
+      parent.addView(root);
+    }
+    return bind(root);
+  }
+
+  @NonNull
+  public static GallerySlideBinding bind(@NonNull View rootView) {
+    // The body of this method is generated in a way you would not otherwise write.
+    // This is done to optimize the compiled bytecode for size and performance.
+    int id;
+    missingId: {
+      id = R.id.placeholder_text;
+      View placeholderText = ViewBindings.findChildViewById(rootView, id);
+      if (placeholderText == null) {
+        break missingId;
+      }
+      GalleryPlaceholderBinding binding_placeholderText = GalleryPlaceholderBinding.bind(placeholderText);
+
+      id = R.id.play_button;
+      ImageView playButton = ViewBindings.findChildViewById(rootView, id);
+      if (playButton == null) {
+        break missingId;
+      }
+
+      FrameLayout root = (FrameLayout) rootView;
+
+      id = R.id.slide_preview;
+      ZoomableImageView slidePreview = ViewBindings.findChildViewById(rootView, id);
+      if (slidePreview == null) {
+        break missingId;
+      }
+
+      return new GallerySlideBinding((FrameLayout) rootView, binding_placeholderText, playButton,
+          root, slidePreview);
+    }
+    String missingId = rootView.getResources().getResourceName(id);
+    throw new NullPointerException("Missing required view with ID: ".concat(missingId));
+  }
+}
diff --git a/app/src/aosp/java/app/grapheneos/camera/databinding/MoreSettingsBinding.java b/app/src/aosp/java/app/grapheneos/camera/databinding/MoreSettingsBinding.java
new file mode 100644
index 0000000..cf0dc70
--- /dev/null
+++ b/app/src/aosp/java/app/grapheneos/camera/databinding/MoreSettingsBinding.java
@@ -0,0 +1,486 @@
+// Generated by view binder compiler. Do not edit!
+package app.grapheneos.camera.databinding;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AutoCompleteTextView;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ScrollView;
+import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.SwitchCompat;
+import androidx.viewbinding.ViewBinding;
+import androidx.viewbinding.ViewBindings;
+import app.grapheneos.camera.R;
+import java.lang.NullPointerException;
+import java.lang.Override;
+import java.lang.String;
+
+public final class MoreSettingsBinding implements ViewBinding {
+  @NonNull
+  private final ScrollView rootView_;
+
+  @NonNull
+  public final TextView cameraSoundsDescription;
+
+  @NonNull
+  public final ImageView cameraSoundsIcon;
+
+  @NonNull
+  public final LinearLayout cameraSoundsSetting;
+
+  @NonNull
+  public final SwitchCompat cameraSoundsSwitch;
+
+  @NonNull
+  public final TextView cameraSoundsTitle;
+
+  @NonNull
+  public final LinearLayout gyroscopeSetting;
+
+  @NonNull
+  public final TextView gyroscopeSettingDescription;
+
+  @NonNull
+  public final ImageView gyroscopeSettingIcon;
+
+  @NonNull
+  public final SwitchCompat gyroscopeSettingSwitch;
+
+  @NonNull
+  public final TextView gyroscopeSettingTitle;
+
+  @NonNull
+  public final LinearLayout imageFormatSetting;
+
+  @NonNull
+  public final AutoCompleteTextView imageFormatSettingField;
+
+  @NonNull
+  public final ImageView imageFormatSettingIcon;
+
+  @NonNull
+  public final TextView imageFormatSettingTitle;
+
+  @NonNull
+  public final EditText photoQuality;
+
+  @NonNull
+  public final ImageView photoQualityIcon;
+
+  @NonNull
+  public final LinearLayout photoQualitySetting;
+
+  @NonNull
+  public final TextView photoQualitySubtitle;
+
+  @NonNull
+  public final TextView photoQualityTitle;
+
+  @NonNull
+  public final ImageButton refreshStorageLocation;
+
+  @NonNull
+  public final ImageView removeExifIcon;
+
+  @NonNull
+  public final LinearLayout removeExifSetting;
+
+  @NonNull
+  public final TextView removeExifSubtitle;
+
+  @NonNull
+  public final TextView removeExifTitle;
+
+  @NonNull
+  public final SwitchCompat removeExifToggle;
+
+  @NonNull
+  public final LinearLayout rootView;
+
+  @NonNull
+  public final ImageView saveImageAsPreviewIcon;
+
+  @NonNull
+  public final LinearLayout saveImageAsPreviewSetting;
+
+  @NonNull
+  public final TextView saveImageAsPreviewSubtitle;
+
+  @NonNull
+  public final TextView saveImageAsPreviewTitle;
+
+  @NonNull
+  public final SwitchCompat saveImageAsPreviewToggle;
+
+  @NonNull
+  public final EditText storageLocationField;
+
+  @NonNull
+  public final ImageView storageLocationIcon;
+
+  @NonNull
+  public final LinearLayout storageLocationSetting;
+
+  @NonNull
+  public final TextView storageLocationTitle;
+
+  @NonNull
+  public final LinearLayout videoFormatSetting;
+
+  @NonNull
+  public final AutoCompleteTextView videoFormatSettingField;
+
+  @NonNull
+  public final ImageView videoFormatSettingIcon;
+
+  @NonNull
+  public final TextView videoFormatSettingTitle;
+
+  private MoreSettingsBinding(@NonNull ScrollView rootView_,
+      @NonNull TextView cameraSoundsDescription, @NonNull ImageView cameraSoundsIcon,
+      @NonNull LinearLayout cameraSoundsSetting, @NonNull SwitchCompat cameraSoundsSwitch,
+      @NonNull TextView cameraSoundsTitle, @NonNull LinearLayout gyroscopeSetting,
+      @NonNull TextView gyroscopeSettingDescription, @NonNull ImageView gyroscopeSettingIcon,
+      @NonNull SwitchCompat gyroscopeSettingSwitch, @NonNull TextView gyroscopeSettingTitle,
+      @NonNull LinearLayout imageFormatSetting,
+      @NonNull AutoCompleteTextView imageFormatSettingField,
+      @NonNull ImageView imageFormatSettingIcon, @NonNull TextView imageFormatSettingTitle,
+      @NonNull EditText photoQuality, @NonNull ImageView photoQualityIcon,
+      @NonNull LinearLayout photoQualitySetting, @NonNull TextView photoQualitySubtitle,
+      @NonNull TextView photoQualityTitle, @NonNull ImageButton refreshStorageLocation,
+      @NonNull ImageView removeExifIcon, @NonNull LinearLayout removeExifSetting,
+      @NonNull TextView removeExifSubtitle, @NonNull TextView removeExifTitle,
+      @NonNull SwitchCompat removeExifToggle, @NonNull LinearLayout rootView,
+      @NonNull ImageView saveImageAsPreviewIcon, @NonNull LinearLayout saveImageAsPreviewSetting,
+      @NonNull TextView saveImageAsPreviewSubtitle, @NonNull TextView saveImageAsPreviewTitle,
+      @NonNull SwitchCompat saveImageAsPreviewToggle, @NonNull EditText storageLocationField,
+      @NonNull ImageView storageLocationIcon, @NonNull LinearLayout storageLocationSetting,
+      @NonNull TextView storageLocationTitle, @NonNull LinearLayout videoFormatSetting,
+      @NonNull AutoCompleteTextView videoFormatSettingField,
+      @NonNull ImageView videoFormatSettingIcon, @NonNull TextView videoFormatSettingTitle) {
+    this.rootView_ = rootView_;
+    this.cameraSoundsDescription = cameraSoundsDescription;
+    this.cameraSoundsIcon = cameraSoundsIcon;
+    this.cameraSoundsSetting = cameraSoundsSetting;
+    this.cameraSoundsSwitch = cameraSoundsSwitch;
+    this.cameraSoundsTitle = cameraSoundsTitle;
+    this.gyroscopeSetting = gyroscopeSetting;
+    this.gyroscopeSettingDescription = gyroscopeSettingDescription;
+    this.gyroscopeSettingIcon = gyroscopeSettingIcon;
+    this.gyroscopeSettingSwitch = gyroscopeSettingSwitch;
+    this.gyroscopeSettingTitle = gyroscopeSettingTitle;
+    this.imageFormatSetting = imageFormatSetting;
+    this.imageFormatSettingField = imageFormatSettingField;
+    this.imageFormatSettingIcon = imageFormatSettingIcon;
+    this.imageFormatSettingTitle = imageFormatSettingTitle;
+    this.photoQuality = photoQuality;
+    this.photoQualityIcon = photoQualityIcon;
+    this.photoQualitySetting = photoQualitySetting;
+    this.photoQualitySubtitle = photoQualitySubtitle;
+    this.photoQualityTitle = photoQualityTitle;
+    this.refreshStorageLocation = refreshStorageLocation;
+    this.removeExifIcon = removeExifIcon;
+    this.removeExifSetting = removeExifSetting;
+    this.removeExifSubtitle = removeExifSubtitle;
+    this.removeExifTitle = removeExifTitle;
+    this.removeExifToggle = removeExifToggle;
+    this.rootView = rootView;
+    this.saveImageAsPreviewIcon = saveImageAsPreviewIcon;
+    this.saveImageAsPreviewSetting = saveImageAsPreviewSetting;
+    this.saveImageAsPreviewSubtitle = saveImageAsPreviewSubtitle;
+    this.saveImageAsPreviewTitle = saveImageAsPreviewTitle;
+    this.saveImageAsPreviewToggle = saveImageAsPreviewToggle;
+    this.storageLocationField = storageLocationField;
+    this.storageLocationIcon = storageLocationIcon;
+    this.storageLocationSetting = storageLocationSetting;
+    this.storageLocationTitle = storageLocationTitle;
+    this.videoFormatSetting = videoFormatSetting;
+    this.videoFormatSettingField = videoFormatSettingField;
+    this.videoFormatSettingIcon = videoFormatSettingIcon;
+    this.videoFormatSettingTitle = videoFormatSettingTitle;
+  }
+
+  @Override
+  @NonNull
+  public ScrollView getRoot() {
+    return rootView_;
+  }
+
+  @NonNull
+  public static MoreSettingsBinding inflate(@NonNull LayoutInflater inflater) {
+    return inflate(inflater, null, false);
+  }
+
+  @NonNull
+  public static MoreSettingsBinding inflate(@NonNull LayoutInflater inflater,
+      @Nullable ViewGroup parent, boolean attachToParent) {
+    View root = inflater.inflate(R.layout.more_settings, parent, false);
+    if (attachToParent) {
+      parent.addView(root);
+    }
+    return bind(root);
+  }
+
+  @NonNull
+  public static MoreSettingsBinding bind(@NonNull View rootView) {
+    // The body of this method is generated in a way you would not otherwise write.
+    // This is done to optimize the compiled bytecode for size and performance.
+    int id;
+    missingId: {
+      id = R.id.camera_sounds_description;
+      TextView cameraSoundsDescription = ViewBindings.findChildViewById(rootView, id);
+      if (cameraSoundsDescription == null) {
+        break missingId;
+      }
+
+      id = R.id.camera_sounds_icon;
+      ImageView cameraSoundsIcon = ViewBindings.findChildViewById(rootView, id);
+      if (cameraSoundsIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.camera_sounds_setting;
+      LinearLayout cameraSoundsSetting = ViewBindings.findChildViewById(rootView, id);
+      if (cameraSoundsSetting == null) {
+        break missingId;
+      }
+
+      id = R.id.camera_sounds_switch;
+      SwitchCompat cameraSoundsSwitch = ViewBindings.findChildViewById(rootView, id);
+      if (cameraSoundsSwitch == null) {
+        break missingId;
+      }
+
+      id = R.id.camera_sounds_title;
+      TextView cameraSoundsTitle = ViewBindings.findChildViewById(rootView, id);
+      if (cameraSoundsTitle == null) {
+        break missingId;
+      }
+
+      id = R.id.gyroscope_setting;
+      LinearLayout gyroscopeSetting = ViewBindings.findChildViewById(rootView, id);
+      if (gyroscopeSetting == null) {
+        break missingId;
+      }
+
+      id = R.id.gyroscope_setting_description;
+      TextView gyroscopeSettingDescription = ViewBindings.findChildViewById(rootView, id);
+      if (gyroscopeSettingDescription == null) {
+        break missingId;
+      }
+
+      id = R.id.gyroscope_setting_icon;
+      ImageView gyroscopeSettingIcon = ViewBindings.findChildViewById(rootView, id);
+      if (gyroscopeSettingIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.gyroscope_setting_switch;
+      SwitchCompat gyroscopeSettingSwitch = ViewBindings.findChildViewById(rootView, id);
+      if (gyroscopeSettingSwitch == null) {
+        break missingId;
+      }
+
+      id = R.id.gyroscope_setting_title;
+      TextView gyroscopeSettingTitle = ViewBindings.findChildViewById(rootView, id);
+      if (gyroscopeSettingTitle == null) {
+        break missingId;
+      }
+
+      id = R.id.image_format_setting;
+      LinearLayout imageFormatSetting = ViewBindings.findChildViewById(rootView, id);
+      if (imageFormatSetting == null) {
+        break missingId;
+      }
+
+      id = R.id.image_format_setting_field;
+      AutoCompleteTextView imageFormatSettingField = ViewBindings.findChildViewById(rootView, id);
+      if (imageFormatSettingField == null) {
+        break missingId;
+      }
+
+      id = R.id.image_format_setting_icon;
+      ImageView imageFormatSettingIcon = ViewBindings.findChildViewById(rootView, id);
+      if (imageFormatSettingIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.image_format_setting_title;
+      TextView imageFormatSettingTitle = ViewBindings.findChildViewById(rootView, id);
+      if (imageFormatSettingTitle == null) {
+        break missingId;
+      }
+
+      id = R.id.photo_quality;
+      EditText photoQuality = ViewBindings.findChildViewById(rootView, id);
+      if (photoQuality == null) {
+        break missingId;
+      }
+
+      id = R.id.photo_quality_icon;
+      ImageView photoQualityIcon = ViewBindings.findChildViewById(rootView, id);
+      if (photoQualityIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.photo_quality_setting;
+      LinearLayout photoQualitySetting = ViewBindings.findChildViewById(rootView, id);
+      if (photoQualitySetting == null) {
+        break missingId;
+      }
+
+      id = R.id.photo_quality_subtitle;
+      TextView photoQualitySubtitle = ViewBindings.findChildViewById(rootView, id);
+      if (photoQualitySubtitle == null) {
+        break missingId;
+      }
+
+      id = R.id.photo_quality_title;
+      TextView photoQualityTitle = ViewBindings.findChildViewById(rootView, id);
+      if (photoQualityTitle == null) {
+        break missingId;
+      }
+
+      id = R.id.refresh_storage_location;
+      ImageButton refreshStorageLocation = ViewBindings.findChildViewById(rootView, id);
+      if (refreshStorageLocation == null) {
+        break missingId;
+      }
+
+      id = R.id.remove_exif_icon;
+      ImageView removeExifIcon = ViewBindings.findChildViewById(rootView, id);
+      if (removeExifIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.remove_exif_setting;
+      LinearLayout removeExifSetting = ViewBindings.findChildViewById(rootView, id);
+      if (removeExifSetting == null) {
+        break missingId;
+      }
+
+      id = R.id.remove_exif_subtitle;
+      TextView removeExifSubtitle = ViewBindings.findChildViewById(rootView, id);
+      if (removeExifSubtitle == null) {
+        break missingId;
+      }
+
+      id = R.id.remove_exif_title;
+      TextView removeExifTitle = ViewBindings.findChildViewById(rootView, id);
+      if (removeExifTitle == null) {
+        break missingId;
+      }
+
+      id = R.id.remove_exif_toggle;
+      SwitchCompat removeExifToggle = ViewBindings.findChildViewById(rootView, id);
+      if (removeExifToggle == null) {
+        break missingId;
+      }
+
+      id = R.id.root_view;
+      LinearLayout rootView_ = ViewBindings.findChildViewById(rootView, id);
+      if (rootView_ == null) {
+        break missingId;
+      }
+
+      id = R.id.save_image_as_preview_icon;
+      ImageView saveImageAsPreviewIcon = ViewBindings.findChildViewById(rootView, id);
+      if (saveImageAsPreviewIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.save_image_as_preview_setting;
+      LinearLayout saveImageAsPreviewSetting = ViewBindings.findChildViewById(rootView, id);
+      if (saveImageAsPreviewSetting == null) {
+        break missingId;
+      }
+
+      id = R.id.save_image_as_preview_subtitle;
+      TextView saveImageAsPreviewSubtitle = ViewBindings.findChildViewById(rootView, id);
+      if (saveImageAsPreviewSubtitle == null) {
+        break missingId;
+      }
+
+      id = R.id.save_image_as_preview_title;
+      TextView saveImageAsPreviewTitle = ViewBindings.findChildViewById(rootView, id);
+      if (saveImageAsPreviewTitle == null) {
+        break missingId;
+      }
+
+      id = R.id.save_image_as_preview_toggle;
+      SwitchCompat saveImageAsPreviewToggle = ViewBindings.findChildViewById(rootView, id);
+      if (saveImageAsPreviewToggle == null) {
+        break missingId;
+      }
+
+      id = R.id.storage_location_field;
+      EditText storageLocationField = ViewBindings.findChildViewById(rootView, id);
+      if (storageLocationField == null) {
+        break missingId;
+      }
+
+      id = R.id.storage_location_icon;
+      ImageView storageLocationIcon = ViewBindings.findChildViewById(rootView, id);
+      if (storageLocationIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.storage_location_setting;
+      LinearLayout storageLocationSetting = ViewBindings.findChildViewById(rootView, id);
+      if (storageLocationSetting == null) {
+        break missingId;
+      }
+
+      id = R.id.storage_location_title;
+      TextView storageLocationTitle = ViewBindings.findChildViewById(rootView, id);
+      if (storageLocationTitle == null) {
+        break missingId;
+      }
+
+      id = R.id.video_format_setting;
+      LinearLayout videoFormatSetting = ViewBindings.findChildViewById(rootView, id);
+      if (videoFormatSetting == null) {
+        break missingId;
+      }
+
+      id = R.id.video_format_setting_field;
+      AutoCompleteTextView videoFormatSettingField = ViewBindings.findChildViewById(rootView, id);
+      if (videoFormatSettingField == null) {
+        break missingId;
+      }
+
+      id = R.id.video_format_setting_icon;
+      ImageView videoFormatSettingIcon = ViewBindings.findChildViewById(rootView, id);
+      if (videoFormatSettingIcon == null) {
+        break missingId;
+      }
+
+      id = R.id.video_format_setting_title;
+      TextView videoFormatSettingTitle = ViewBindings.findChildViewById(rootView, id);
+      if (videoFormatSettingTitle == null) {
+        break missingId;
+      }
+
+      return new MoreSettingsBinding((ScrollView) rootView, cameraSoundsDescription,
+          cameraSoundsIcon, cameraSoundsSetting, cameraSoundsSwitch, cameraSoundsTitle,
+          gyroscopeSetting, gyroscopeSettingDescription, gyroscopeSettingIcon,
+          gyroscopeSettingSwitch, gyroscopeSettingTitle, imageFormatSetting,
+          imageFormatSettingField, imageFormatSettingIcon, imageFormatSettingTitle, photoQuality,
+          photoQualityIcon, photoQualitySetting, photoQualitySubtitle, photoQualityTitle,
+          refreshStorageLocation, removeExifIcon, removeExifSetting, removeExifSubtitle,
+          removeExifTitle, removeExifToggle, rootView_, saveImageAsPreviewIcon,
+          saveImageAsPreviewSetting, saveImageAsPreviewSubtitle, saveImageAsPreviewTitle,
+          saveImageAsPreviewToggle, storageLocationField, storageLocationIcon,
+          storageLocationSetting, storageLocationTitle, videoFormatSetting, videoFormatSettingField,
+          videoFormatSettingIcon, videoFormatSettingTitle);
+    }
+    String missingId = rootView.getResources().getResourceName(id);
+    throw new NullPointerException("Missing required view with ID: ".concat(missingId));
+  }
+}
diff --git a/app/src/aosp/java/app/grapheneos/camera/databinding/ScanResultDialogBinding.java b/app/src/aosp/java/app/grapheneos/camera/databinding/ScanResultDialogBinding.java
new file mode 100644
index 0000000..c0c82ac
--- /dev/null
+++ b/app/src/aosp/java/app/grapheneos/camera/databinding/ScanResultDialogBinding.java
@@ -0,0 +1,103 @@
+// Generated by view binder compiler. Do not edit!
+package app.grapheneos.camera.databinding;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageButton;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.viewbinding.ViewBinding;
+import androidx.viewbinding.ViewBindings;
+import app.grapheneos.camera.R;
+import com.google.android.material.tabs.TabLayout;
+import java.lang.NullPointerException;
+import java.lang.Override;
+import java.lang.String;
+
+public final class ScanResultDialogBinding implements ViewBinding {
+  @NonNull
+  private final LinearLayout rootView;
+
+  @NonNull
+  public final ImageButton copyQrText;
+
+  @NonNull
+  public final TabLayout encodingTabs;
+
+  @NonNull
+  public final TextView scanResultText;
+
+  @NonNull
+  public final ImageButton shareQrText;
+
+  private ScanResultDialogBinding(@NonNull LinearLayout rootView, @NonNull ImageButton copyQrText,
+      @NonNull TabLayout encodingTabs, @NonNull TextView scanResultText,
+      @NonNull ImageButton shareQrText) {
+    this.rootView = rootView;
+    this.copyQrText = copyQrText;
+    this.encodingTabs = encodingTabs;
+    this.scanResultText = scanResultText;
+    this.shareQrText = shareQrText;
+  }
+
+  @Override
+  @NonNull
+  public LinearLayout getRoot() {
+    return rootView;
+  }
+
+  @NonNull
+  public static ScanResultDialogBinding inflate(@NonNull LayoutInflater inflater) {
+    return inflate(inflater, null, false);
+  }
+
+  @NonNull
+  public static ScanResultDialogBinding inflate(@NonNull LayoutInflater inflater,
+      @Nullable ViewGroup parent, boolean attachToParent) {
+    View root = inflater.inflate(R.layout.scan_result_dialog, parent, false);
+    if (attachToParent) {
+      parent.addView(root);
+    }
+    return bind(root);
+  }
+
+  @NonNull
+  public static ScanResultDialogBinding bind(@NonNull View rootView) {
+    // The body of this method is generated in a way you would not otherwise write.
+    // This is done to optimize the compiled bytecode for size and performance.
+    int id;
+    missingId: {
+      id = R.id.copy_qr_text;
+      ImageButton copyQrText = ViewBindings.findChildViewById(rootView, id);
+      if (copyQrText == null) {
+        break missingId;
+      }
+
+      id = R.id.encoding_tabs;
+      TabLayout encodingTabs = ViewBindings.findChildViewById(rootView, id);
+      if (encodingTabs == null) {
+        break missingId;
+      }
+
+      id = R.id.scan_result_text;
+      TextView scanResultText = ViewBindings.findChildViewById(rootView, id);
+      if (scanResultText == null) {
+        break missingId;
+      }
+
+      id = R.id.share_qr_text;
+      ImageButton shareQrText = ViewBindings.findChildViewById(rootView, id);
+      if (shareQrText == null) {
+        break missingId;
+      }
+
+      return new ScanResultDialogBinding((LinearLayout) rootView, copyQrText, encodingTabs,
+          scanResultText, shareQrText);
+    }
+    String missingId = rootView.getResources().getResourceName(id);
+    throw new NullPointerException("Missing required view with ID: ".concat(missingId));
+  }
+}
diff --git a/app/src/aosp/java/app/grapheneos/camera/databinding/SettingsBinding.java b/app/src/aosp/java/app/grapheneos/camera/databinding/SettingsBinding.java
new file mode 100644
index 0000000..5574690
--- /dev/null
+++ b/app/src/aosp/java/app/grapheneos/camera/databinding/SettingsBinding.java
@@ -0,0 +1,341 @@
+// Generated by view binder compiler. Do not edit!
+package app.grapheneos.camera.databinding;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+import android.widget.RelativeLayout;
+import android.widget.ScrollView;
+import android.widget.Spinner;
+import android.widget.TextView;
+import android.widget.ToggleButton;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.SwitchCompat;
+import androidx.viewbinding.ViewBinding;
+import androidx.viewbinding.ViewBindings;
+import app.grapheneos.camera.R;
+import app.grapheneos.camera.ui.SettingsFrameLayout;
+import java.lang.NullPointerException;
+import java.lang.Override;
+import java.lang.String;
+
+public final class SettingsBinding implements ViewBinding {
+  @NonNull
+  private final SettingsFrameLayout rootView;
+
+  @NonNull
+  public final ToggleButton aspectRatioToggle;
+
+  @NonNull
+  public final View background;
+
+  @NonNull
+  public final RadioGroup cmRadioGroup;
+
+  @NonNull
+  public final LinearLayout enableEisSetting;
+
+  @NonNull
+  public final SwitchCompat enableEisSwitch;
+
+  @NonNull
+  public final ImageView flashToggleOption;
+
+  @NonNull
+  public final Spinner focusTimeoutSpinner;
+
+  @NonNull
+  public final ImageView gridToggleOption;
+
+  @NonNull
+  public final LinearLayout includeAudioSetting;
+
+  @NonNull
+  public final SwitchCompat includeAudioSwitch;
+
+  @NonNull
+  public final RadioButton latencyRadio;
+
+  @NonNull
+  public final ToggleButton locationToggle;
+
+  @NonNull
+  public final TextView moreSettings;
+
+  @NonNull
+  public final RadioButton qualityRadio;
+
+  @NonNull
+  public final SettingsFrameLayout root;
+
+  @NonNull
+  public final LinearLayout selfIlluminationSetting;
+
+  @NonNull
+  public final SwitchCompat selfIlluminationSwitch;
+
+  @NonNull
+  public final LinearLayout settingsDialog;
+
+  @NonNull
+  public final RelativeLayout settingsFrame;
+
+  @NonNull
+  public final ScrollView settingsScrollview;
+
+  @NonNull
+  public final LinearLayout settingsScrollviewContent;
+
+  @NonNull
+  public final LinearLayout timerSetting;
+
+  @NonNull
+  public final Spinner timerSpinner;
+
+  @NonNull
+  public final ToggleButton torchToggleOption;
+
+  @NonNull
+  public final LinearLayout videoQualitySetting;
+
+  @NonNull
+  public final Spinner videoQualitySpinner;
+
+  private SettingsBinding(@NonNull SettingsFrameLayout rootView,
+      @NonNull ToggleButton aspectRatioToggle, @NonNull View background,
+      @NonNull RadioGroup cmRadioGroup, @NonNull LinearLayout enableEisSetting,
+      @NonNull SwitchCompat enableEisSwitch, @NonNull ImageView flashToggleOption,
+      @NonNull Spinner focusTimeoutSpinner, @NonNull ImageView gridToggleOption,
+      @NonNull LinearLayout includeAudioSetting, @NonNull SwitchCompat includeAudioSwitch,
+      @NonNull RadioButton latencyRadio, @NonNull ToggleButton locationToggle,
+      @NonNull TextView moreSettings, @NonNull RadioButton qualityRadio,
+      @NonNull SettingsFrameLayout root, @NonNull LinearLayout selfIlluminationSetting,
+      @NonNull SwitchCompat selfIlluminationSwitch, @NonNull LinearLayout settingsDialog,
+      @NonNull RelativeLayout settingsFrame, @NonNull ScrollView settingsScrollview,
+      @NonNull LinearLayout settingsScrollviewContent, @NonNull LinearLayout timerSetting,
+      @NonNull Spinner timerSpinner, @NonNull ToggleButton torchToggleOption,
+      @NonNull LinearLayout videoQualitySetting, @NonNull Spinner videoQualitySpinner) {
+    this.rootView = rootView;
+    this.aspectRatioToggle = aspectRatioToggle;
+    this.background = background;
+    this.cmRadioGroup = cmRadioGroup;
+    this.enableEisSetting = enableEisSetting;
+    this.enableEisSwitch = enableEisSwitch;
+    this.flashToggleOption = flashToggleOption;
+    this.focusTimeoutSpinner = focusTimeoutSpinner;
+    this.gridToggleOption = gridToggleOption;
+    this.includeAudioSetting = includeAudioSetting;
+    this.includeAudioSwitch = includeAudioSwitch;
+    this.latencyRadio = latencyRadio;
+    this.locationToggle = locationToggle;
+    this.moreSettings = moreSettings;
+    this.qualityRadio = qualityRadio;
+    this.root = root;
+    this.selfIlluminationSetting = selfIlluminationSetting;
+    this.selfIlluminationSwitch = selfIlluminationSwitch;
+    this.settingsDialog = settingsDialog;
+    this.settingsFrame = settingsFrame;
+    this.settingsScrollview = settingsScrollview;
+    this.settingsScrollviewContent = settingsScrollviewContent;
+    this.timerSetting = timerSetting;
+    this.timerSpinner = timerSpinner;
+    this.torchToggleOption = torchToggleOption;
+    this.videoQualitySetting = videoQualitySetting;
+    this.videoQualitySpinner = videoQualitySpinner;
+  }
+
+  @Override
+  @NonNull
+  public SettingsFrameLayout getRoot() {
+    return rootView;
+  }
+
+  @NonNull
+  public static SettingsBinding inflate(@NonNull LayoutInflater inflater) {
+    return inflate(inflater, null, false);
+  }
+
+  @NonNull
+  public static SettingsBinding inflate(@NonNull LayoutInflater inflater,
+      @Nullable ViewGroup parent, boolean attachToParent) {
+    View root = inflater.inflate(R.layout.settings, parent, false);
+    if (attachToParent) {
+      parent.addView(root);
+    }
+    return bind(root);
+  }
+
+  @NonNull
+  public static SettingsBinding bind(@NonNull View rootView) {
+    // The body of this method is generated in a way you would not otherwise write.
+    // This is done to optimize the compiled bytecode for size and performance.
+    int id;
+    missingId: {
+      id = R.id.aspect_ratio_toggle;
+      ToggleButton aspectRatioToggle = ViewBindings.findChildViewById(rootView, id);
+      if (aspectRatioToggle == null) {
+        break missingId;
+      }
+
+      id = R.id.background;
+      View background = ViewBindings.findChildViewById(rootView, id);
+      if (background == null) {
+        break missingId;
+      }
+
+      id = R.id.cm_radio_group;
+      RadioGroup cmRadioGroup = ViewBindings.findChildViewById(rootView, id);
+      if (cmRadioGroup == null) {
+        break missingId;
+      }
+
+      id = R.id.enable_eis_setting;
+      LinearLayout enableEisSetting = ViewBindings.findChildViewById(rootView, id);
+      if (enableEisSetting == null) {
+        break missingId;
+      }
+
+      id = R.id.enable_eis_switch;
+      SwitchCompat enableEisSwitch = ViewBindings.findChildViewById(rootView, id);
+      if (enableEisSwitch == null) {
+        break missingId;
+      }
+
+      id = R.id.flash_toggle_option;
+      ImageView flashToggleOption = ViewBindings.findChildViewById(rootView, id);
+      if (flashToggleOption == null) {
+        break missingId;
+      }
+
+      id = R.id.focus_timeout_spinner;
+      Spinner focusTimeoutSpinner = ViewBindings.findChildViewById(rootView, id);
+      if (focusTimeoutSpinner == null) {
+        break missingId;
+      }
+
+      id = R.id.grid_toggle_option;
+      ImageView gridToggleOption = ViewBindings.findChildViewById(rootView, id);
+      if (gridToggleOption == null) {
+        break missingId;
+      }
+
+      id = R.id.include_audio_setting;
+      LinearLayout includeAudioSetting = ViewBindings.findChildViewById(rootView, id);
+      if (includeAudioSetting == null) {
+        break missingId;
+      }
+
+      id = R.id.include_audio_switch;
+      SwitchCompat includeAudioSwitch = ViewBindings.findChildViewById(rootView, id);
+      if (includeAudioSwitch == null) {
+        break missingId;
+      }
+
+      id = R.id.latency_radio;
+      RadioButton latencyRadio = ViewBindings.findChildViewById(rootView, id);
+      if (latencyRadio == null) {
+        break missingId;
+      }
+
+      id = R.id.location_toggle;
+      ToggleButton locationToggle = ViewBindings.findChildViewById(rootView, id);
+      if (locationToggle == null) {
+        break missingId;
+      }
+
+      id = R.id.more_settings;
+      TextView moreSettings = ViewBindings.findChildViewById(rootView, id);
+      if (moreSettings == null) {
+        break missingId;
+      }
+
+      id = R.id.quality_radio;
+      RadioButton qualityRadio = ViewBindings.findChildViewById(rootView, id);
+      if (qualityRadio == null) {
+        break missingId;
+      }
+
+      SettingsFrameLayout root = (SettingsFrameLayout) rootView;
+
+      id = R.id.self_illumination_setting;
+      LinearLayout selfIlluminationSetting = ViewBindings.findChildViewById(rootView, id);
+      if (selfIlluminationSetting == null) {
+        break missingId;
+      }
+
+      id = R.id.self_illumination_switch;
+      SwitchCompat selfIlluminationSwitch = ViewBindings.findChildViewById(rootView, id);
+      if (selfIlluminationSwitch == null) {
+        break missingId;
+      }
+
+      id = R.id.settings_dialog;
+      LinearLayout settingsDialog = ViewBindings.findChildViewById(rootView, id);
+      if (settingsDialog == null) {
+        break missingId;
+      }
+
+      id = R.id.settings_frame;
+      RelativeLayout settingsFrame = ViewBindings.findChildViewById(rootView, id);
+      if (settingsFrame == null) {
+        break missingId;
+      }
+
+      id = R.id.settings_scrollview;
+      ScrollView settingsScrollview = ViewBindings.findChildViewById(rootView, id);
+      if (settingsScrollview == null) {
+        break missingId;
+      }
+
+      id = R.id.settings_scrollview_content;
+      LinearLayout settingsScrollviewContent = ViewBindings.findChildViewById(rootView, id);
+      if (settingsScrollviewContent == null) {
+        break missingId;
+      }
+
+      id = R.id.timer_setting;
+      LinearLayout timerSetting = ViewBindings.findChildViewById(rootView, id);
+      if (timerSetting == null) {
+        break missingId;
+      }
+
+      id = R.id.timer_spinner;
+      Spinner timerSpinner = ViewBindings.findChildViewById(rootView, id);
+      if (timerSpinner == null) {
+        break missingId;
+      }
+
+      id = R.id.torch_toggle_option;
+      ToggleButton torchToggleOption = ViewBindings.findChildViewById(rootView, id);
+      if (torchToggleOption == null) {
+        break missingId;
+      }
+
+      id = R.id.video_quality_setting;
+      LinearLayout videoQualitySetting = ViewBindings.findChildViewById(rootView, id);
+      if (videoQualitySetting == null) {
+        break missingId;
+      }
+
+      id = R.id.video_quality_spinner;
+      Spinner videoQualitySpinner = ViewBindings.findChildViewById(rootView, id);
+      if (videoQualitySpinner == null) {
+        break missingId;
+      }
+
+      return new SettingsBinding((SettingsFrameLayout) rootView, aspectRatioToggle, background,
+          cmRadioGroup, enableEisSetting, enableEisSwitch, flashToggleOption, focusTimeoutSpinner,
+          gridToggleOption, includeAudioSetting, includeAudioSwitch, latencyRadio, locationToggle,
+          moreSettings, qualityRadio, root, selfIlluminationSetting, selfIlluminationSwitch,
+          settingsDialog, settingsFrame, settingsScrollview, settingsScrollviewContent,
+          timerSetting, timerSpinner, torchToggleOption, videoQualitySetting, videoQualitySpinner);
+    }
+    String missingId = rootView.getResources().getResourceName(id);
+    throw new NullPointerException("Missing required view with ID: ".concat(missingId));
+  }
+}
diff --git a/app/src/aosp/java/app/grapheneos/camera/databinding/VideoPlayerBinding.java b/app/src/aosp/java/app/grapheneos/camera/databinding/VideoPlayerBinding.java
new file mode 100644
index 0000000..106e378
--- /dev/null
+++ b/app/src/aosp/java/app/grapheneos/camera/databinding/VideoPlayerBinding.java
@@ -0,0 +1,68 @@
+// Generated by view binder compiler. Do not edit!
+package app.grapheneos.camera.databinding;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.VideoView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.viewbinding.ViewBinding;
+import androidx.viewbinding.ViewBindings;
+import app.grapheneos.camera.R;
+import java.lang.NullPointerException;
+import java.lang.Override;
+import java.lang.String;
+
+public final class VideoPlayerBinding implements ViewBinding {
+  @NonNull
+  private final FrameLayout rootView;
+
+  @NonNull
+  public final VideoView videoPlayer;
+
+  private VideoPlayerBinding(@NonNull FrameLayout rootView, @NonNull VideoView videoPlayer) {
+    this.rootView = rootView;
+    this.videoPlayer = videoPlayer;
+  }
+
+  @Override
+  @NonNull
+  public FrameLayout getRoot() {
+    return rootView;
+  }
+
+  @NonNull
+  public static VideoPlayerBinding inflate(@NonNull LayoutInflater inflater) {
+    return inflate(inflater, null, false);
+  }
+
+  @NonNull
+  public static VideoPlayerBinding inflate(@NonNull LayoutInflater inflater,
+      @Nullable ViewGroup parent, boolean attachToParent) {
+    View root = inflater.inflate(R.layout.video_player, parent, false);
+    if (attachToParent) {
+      parent.addView(root);
+    }
+    return bind(root);
+  }
+
+  @NonNull
+  public static VideoPlayerBinding bind(@NonNull View rootView) {
+    // The body of this method is generated in a way you would not otherwise write.
+    // This is done to optimize the compiled bytecode for size and performance.
+    int id;
+    missingId: {
+      id = R.id.video_player;
+      VideoView videoPlayer = ViewBindings.findChildViewById(rootView, id);
+      if (videoPlayer == null) {
+        break missingId;
+      }
+
+      return new VideoPlayerBinding((FrameLayout) rootView, videoPlayer);
+    }
+    String missingId = rootView.getResources().getResourceName(id);
+    throw new NullPointerException("Missing required view with ID: ".concat(missingId));
+  }
+}
diff --git a/app/src/aosp/java/app/grapheneos/camera/databinding/ZoomBarThumbBinding.java b/app/src/aosp/java/app/grapheneos/camera/databinding/ZoomBarThumbBinding.java
new file mode 100644
index 0000000..60ab48e
--- /dev/null
+++ b/app/src/aosp/java/app/grapheneos/camera/databinding/ZoomBarThumbBinding.java
@@ -0,0 +1,68 @@
+// Generated by view binder compiler. Do not edit!
+package app.grapheneos.camera.databinding;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.viewbinding.ViewBinding;
+import androidx.viewbinding.ViewBindings;
+import app.grapheneos.camera.R;
+import java.lang.NullPointerException;
+import java.lang.Override;
+import java.lang.String;
+
+public final class ZoomBarThumbBinding implements ViewBinding {
+  @NonNull
+  private final LinearLayout rootView;
+
+  @NonNull
+  public final TextView progress;
+
+  private ZoomBarThumbBinding(@NonNull LinearLayout rootView, @NonNull TextView progress) {
+    this.rootView = rootView;
+    this.progress = progress;
+  }
+
+  @Override
+  @NonNull
+  public LinearLayout getRoot() {
+    return rootView;
+  }
+
+  @NonNull
+  public static ZoomBarThumbBinding inflate(@NonNull LayoutInflater inflater) {
+    return inflate(inflater, null, false);
+  }
+
+  @NonNull
+  public static ZoomBarThumbBinding inflate(@NonNull LayoutInflater inflater,
+      @Nullable ViewGroup parent, boolean attachToParent) {
+    View root = inflater.inflate(R.layout.zoom_bar_thumb, parent, false);
+    if (attachToParent) {
+      parent.addView(root);
+    }
+    return bind(root);
+  }
+
+  @NonNull
+  public static ZoomBarThumbBinding bind(@NonNull View rootView) {
+    // The body of this method is generated in a way you would not otherwise write.
+    // This is done to optimize the compiled bytecode for size and performance.
+    int id;
+    missingId: {
+      id = R.id.progress;
+      TextView progress = ViewBindings.findChildViewById(rootView, id);
+      if (progress == null) {
+        break missingId;
+      }
+
+      return new ZoomBarThumbBinding((LinearLayout) rootView, progress);
+    }
+    String missingId = rootView.getResources().getResourceName(id);
+    throw new NullPointerException("Missing required view with ID: ".concat(missingId));
+  }
+}
diff --git a/app/src/aosp/res/values/strings.xml b/app/src/aosp/res/values/strings.xml
new file mode 100644
index 0000000..0c5a86c
--- /dev/null
+++ b/app/src/aosp/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">Camera</string>
+</resources>
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e6754c3..a69dd11 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,6 +28,8 @@
         android:theme="@style/Theme.App"
         tools:ignore="UnusedAttribute">
 
+        <uses-library android:name="androidx.camera.extensions.impl"
+            android:required="false" />
 
         <!-- The main activity of the app (supports all modes) -->
         <activity
diff --git a/app/src/main/java/app/grapheneos/camera/CapturedItems.kt b/app/src/main/java/app/grapheneos/camera/CapturedItems.kt
index 01ace4e..a6f8dc9 100644
--- a/app/src/main/java/app/grapheneos/camera/CapturedItems.kt
+++ b/app/src/main/java/app/grapheneos/camera/CapturedItems.kt
@@ -69,7 +69,7 @@
             override fun createFromParcel(source: Parcel): CapturedItem {
                 val type = source.readByte().toInt()
                 val dateString = source.readString()!!
-                val uri = source.readParcelable<Uri>(null)!!
+                val uri = source.readParcelableCompat<Uri>(null)!!
                 return CapturedItem(type, dateString, uri)
             }
 
diff --git a/app/src/main/java/app/grapheneos/camera/ParcelCompat.kt b/app/src/main/java/app/grapheneos/camera/ParcelCompat.kt
new file mode 100644
index 0000000..771468c
--- /dev/null
+++ b/app/src/main/java/app/grapheneos/camera/ParcelCompat.kt
@@ -0,0 +1,15 @@
+package app.grapheneos.camera
+
+import android.os.Build
+import android.os.Bundle
+import android.os.Parcel
+import android.os.Parcelable
+
+inline internal fun <reified T : Parcelable> Parcel.readParcelableCompat(loader: ClassLoader?): T? {
+    return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
+        @Suppress("DEPRECATION")
+        this.readParcelable<T>(loader)
+    } else {
+        this.readParcelable(loader, T::class.java)
+    }
+}
diff --git a/app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt b/app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt
index a905823..372de90 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/SettingsDialog.kt
@@ -121,7 +121,7 @@
                     ev: MotionEvent?,
                     disallowIntercept: Boolean
                 ): Boolean {
-                    return mActivity.gestureDetectorCompat.onTouchEvent(ev)
+                    return mActivity.gestureDetectorCompat.onTouchEvent(ev!!)
                 }
 
                 override fun onTouchEvent(
diff --git a/app/src/main/java/app/grapheneos/camera/ui/ZoomableImageView.kt b/app/src/main/java/app/grapheneos/camera/ui/ZoomableImageView.kt
index 53638c9..471cadb 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/ZoomableImageView.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/ZoomableImageView.kt
@@ -172,7 +172,7 @@
             return true
         }
 
-        override fun onScaleEnd(detector: ScaleGestureDetector?) {
+        override fun onScaleEnd(detector: ScaleGestureDetector) {
             super.onScaleEnd(detector)
             if (saveScale == 1f) {
                 gActivity.gallerySlider.isUserInputEnabled = true
diff --git a/app/src/main/java/app/grapheneos/camera/ui/activities/CaptureActivity.kt b/app/src/main/java/app/grapheneos/camera/ui/activities/CaptureActivity.kt
index 1b968bf..397b246 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/activities/CaptureActivity.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/activities/CaptureActivity.kt
@@ -46,7 +46,7 @@
         confirmButton = findViewById(R.id.confirm_button)
 
         if (intent.extras?.containsKey(EXTRA_OUTPUT) == true) {
-            outputUri = intent.extras?.get(EXTRA_OUTPUT) as Uri
+            outputUri = intent.getParcelableExtraCompat<Uri>(EXTRA_OUTPUT) as Uri
         }
 
         // Disable capture button for a while (to avoid picture capture)
diff --git a/app/src/main/java/app/grapheneos/camera/ui/activities/InAppGallery.kt b/app/src/main/java/app/grapheneos/camera/ui/activities/InAppGallery.kt
index ba6c283..5c85b5c 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/activities/InAppGallery.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/activities/InAppGallery.kt
@@ -158,7 +158,7 @@
         return true
     }
 
-    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
+    override fun onCreateOptionsMenu(menu: Menu): Boolean {
         menuInflater.inflate(R.menu.gallery, menu)
         return super.onCreateOptionsMenu(menu)
     }
@@ -446,7 +446,7 @@
         gallerySlider.setPageTransformer(GSlideTransformer())
 
         val showVideosOnly = intent.getBooleanExtra(INTENT_KEY_VIDEO_ONLY_MODE, false)
-        val listOfSecureModeCapturedItems = intent.getParcelableArrayListExtra<CapturedItem>(INTENT_KEY_LIST_OF_SECURE_MODE_CAPTURED_ITEMS)
+        val listOfSecureModeCapturedItems = intent.getParcelableArrayListExtraCompat<CapturedItem>(INTENT_KEY_LIST_OF_SECURE_MODE_CAPTURED_ITEMS)
 
         asyncLoaderOfCapturedItems.execute {
             val unprocessedItems: List<CapturedItem> = try {
@@ -479,7 +479,7 @@
             mainExecutor.execute { asyncResultReady(items) }
         }
 
-        val lastCapturedItem = intent.getParcelableExtra<CapturedItem>(INTENT_KEY_LAST_CAPTURED_ITEM)
+        val lastCapturedItem = intent.getParcelableExtraCompat<CapturedItem>(INTENT_KEY_LAST_CAPTURED_ITEM)
 
         if (lastCapturedItem != null) {
             val list = ArrayList<CapturedItem>()
diff --git a/app/src/main/java/app/grapheneos/camera/ui/activities/IntentCompat.kt b/app/src/main/java/app/grapheneos/camera/ui/activities/IntentCompat.kt
new file mode 100644
index 0000000..8ee8742
--- /dev/null
+++ b/app/src/main/java/app/grapheneos/camera/ui/activities/IntentCompat.kt
@@ -0,0 +1,25 @@
+package app.grapheneos.camera.ui.activities
+
+import android.content.Intent
+import android.os.Build
+import android.os.Bundle
+import android.os.Parcel
+import android.os.Parcelable
+
+inline internal fun <reified T : Parcelable> Intent.getParcelableExtraCompat(name: String): T? {
+    return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
+        @Suppress("DEPRECATION")
+        this.getParcelableExtra<T>(name)
+    } else {
+        this.getParcelableExtra(name, T::class.java)
+    }
+}
+
+inline internal fun <reified T : Parcelable> Intent.getParcelableArrayListExtraCompat(name: String): ArrayList<T>? {
+    return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
+        @Suppress("DEPRECATION")
+        this.getParcelableArrayListExtra<T>(name)
+    } else {
+        this.getParcelableArrayListExtra(name, T::class.java)
+    }
+}
diff --git a/app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt b/app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt
index 16798dd..90c07f0 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/activities/MainActivity.kt
@@ -1306,21 +1306,21 @@
         private const val SWIPE_VELOCITY_THRESHOLD = 100
     }
 
-    override fun onDown(p0: MotionEvent?): Boolean {
+    override fun onDown(p0: MotionEvent): Boolean {
         return false
     }
 
-    override fun onShowPress(p0: MotionEvent?) {}
+    override fun onShowPress(p0: MotionEvent) {}
 
-    override fun onSingleTapUp(p0: MotionEvent?): Boolean {
+    override fun onSingleTapUp(p0: MotionEvent): Boolean {
         return false
     }
 
-    override fun onScroll(p0: MotionEvent?, p1: MotionEvent?, p2: Float, p3: Float): Boolean {
+    override fun onScroll(p0: MotionEvent, p1: MotionEvent, p2: Float, p3: Float): Boolean {
         return false
     }
 
-    override fun onLongPress(p0: MotionEvent?) {}
+    override fun onLongPress(p0: MotionEvent) {}
 
     override fun onFling(
         e1: MotionEvent, e2: MotionEvent,
@@ -1410,15 +1410,15 @@
         }
     }
 
-    override fun onSingleTapConfirmed(p0: MotionEvent?): Boolean {
+    override fun onSingleTapConfirmed(p0: MotionEvent): Boolean {
         return false
     }
 
-    override fun onDoubleTap(p0: MotionEvent?): Boolean {
+    override fun onDoubleTap(p0: MotionEvent): Boolean {
         return false
     }
 
-    override fun onDoubleTapEvent(p0: MotionEvent?): Boolean {
+    override fun onDoubleTapEvent(p0: MotionEvent): Boolean {
         return false
     }
 
diff --git a/app/src/main/java/app/grapheneos/camera/ui/activities/VideoPlayer.kt b/app/src/main/java/app/grapheneos/camera/ui/activities/VideoPlayer.kt
index 054a35d..c8546de 100644
--- a/app/src/main/java/app/grapheneos/camera/ui/activities/VideoPlayer.kt
+++ b/app/src/main/java/app/grapheneos/camera/ui/activities/VideoPlayer.kt
@@ -31,7 +31,7 @@
             throw Exception("Video Player requires videoUri")
         }
 
-        val uri = intent.extras!!.get("videoUri") as Uri
+        val uri = intent.getParcelableExtraCompat<Uri>("videoUri") as Uri
 
         val videoView = binding.videoPlayer
 
diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml
index 7353dbd..515b77e 100644
--- a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml
+++ b/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml
@@ -2,4 +2,5 @@
 <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
     <background android:drawable="@color/ic_launcher_background"/>
     <foreground android:drawable="@drawable/ic_launcher_foreground"/>
-</adaptive-icon>
\ No newline at end of file
+    <monochrome android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon>
diff --git a/libs/Android.bp b/libs/Android.bp
new file mode 100644
index 0000000..dc2afb4
--- /dev/null
+++ b/libs/Android.bp
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2022 The LeafOS 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.
+ */
+
+android_library_import {
+    name: "androidx.camera_camera-camera2",
+    aars: ["androidx.camera_camera-camera2-*.aar"],
+    sdk_version: "current",
+}
+
+cc_prebuilt_library_shared {
+    name: "libimage_processing_util_jni",
+    sdk_version: "current",
+    system_ext_specific: true,
+    strip: {
+        none: true,
+    },
+    check_elf_files: false,
+    target: {
+        android_arm: {
+            srcs: ["androidx.camera_camera-core/jni/armeabi-v7a/libimage_processing_util_jni.so"],
+        },
+        android_arm64: {
+            srcs: ["androidx.camera_camera-core/jni/arm64-v8a/libimage_processing_util_jni.so"],
+        },
+        android_x86: {
+            srcs: ["androidx.camera_camera-core/jni/x86/libimage_processing_util_jni.so"],
+        },
+        android_x86_64: {
+            srcs: ["androidx.camera_camera-core/jni/x86_64/libimage_processing_util_jni.so"],
+        },
+    }
+}
+
+android_library_import {
+    name: "androidx.camera_camera-core",
+    aars: ["androidx.camera_camera-core-*.aar"],
+    sdk_version: "current",
+}
+
+android_library_import {
+    name: "androidx.camera_camera-extensions",
+    aars: ["androidx.camera_camera-extensions-*.aar"],
+    sdk_version: "current",
+}
+
+android_library_import {
+    name: "androidx.camera_camera-lifecycle",
+    aars: ["androidx.camera_camera-lifecycle-*.aar"],
+    sdk_version: "current",
+}
+
+android_library_import {
+    name: "androidx.camera_camera-video",
+    aars: ["androidx.camera_camera-video-*.aar"],
+    sdk_version: "current",
+}
+
+android_library_import {
+    name: "androidx.camera_camera-view",
+    aars: ["androidx.camera_camera-view-*.aar"],
+    sdk_version: "current",
+}
+
+java_import {
+    name: "androidx.concurrent_concurrent-futures",
+    jars: ["androidx.concurrent_concurrent-futures-*.jar"],
+    sdk_version: "current",
+}
+
+android_library_import {
+    name: "androidx.databinding_viewbinding",
+    aars: ["androidx.databinding_viewbinding-*.aar"],
+    sdk_version: "current",
+}
+
+java_import {
+    name: "com.google.zxing_core",
+    jars: ["com.google.zxing_core-*.jar"],
+    sdk_version: "current",
+}
diff --git a/libs/androidx.camera_camera-camera2-1.1.0-rc01.aar b/libs/androidx.camera_camera-camera2-1.1.0-rc01.aar
new file mode 100644
index 0000000..76a4c4d
--- /dev/null
+++ b/libs/androidx.camera_camera-camera2-1.1.0-rc01.aar
Binary files differ
diff --git a/libs/androidx.camera_camera-core-1.1.0-rc01.aar b/libs/androidx.camera_camera-core-1.1.0-rc01.aar
new file mode 100644
index 0000000..4a379a8
--- /dev/null
+++ b/libs/androidx.camera_camera-core-1.1.0-rc01.aar
Binary files differ
diff --git a/libs/androidx.camera_camera-core/jni/arm64-v8a/libimage_processing_util_jni.so b/libs/androidx.camera_camera-core/jni/arm64-v8a/libimage_processing_util_jni.so
new file mode 100644
index 0000000..ef05caf
--- /dev/null
+++ b/libs/androidx.camera_camera-core/jni/arm64-v8a/libimage_processing_util_jni.so
Binary files differ
diff --git a/libs/androidx.camera_camera-core/jni/armeabi-v7a/libimage_processing_util_jni.so b/libs/androidx.camera_camera-core/jni/armeabi-v7a/libimage_processing_util_jni.so
new file mode 100644
index 0000000..bb84dd8
--- /dev/null
+++ b/libs/androidx.camera_camera-core/jni/armeabi-v7a/libimage_processing_util_jni.so
Binary files differ
diff --git a/libs/androidx.camera_camera-core/jni/x86/libimage_processing_util_jni.so b/libs/androidx.camera_camera-core/jni/x86/libimage_processing_util_jni.so
new file mode 100644
index 0000000..be4b5b9
--- /dev/null
+++ b/libs/androidx.camera_camera-core/jni/x86/libimage_processing_util_jni.so
Binary files differ
diff --git a/libs/androidx.camera_camera-core/jni/x86_64/libimage_processing_util_jni.so b/libs/androidx.camera_camera-core/jni/x86_64/libimage_processing_util_jni.so
new file mode 100644
index 0000000..8d7303e
--- /dev/null
+++ b/libs/androidx.camera_camera-core/jni/x86_64/libimage_processing_util_jni.so
Binary files differ
diff --git a/libs/androidx.camera_camera-extensions-1.1.0-rc01.aar b/libs/androidx.camera_camera-extensions-1.1.0-rc01.aar
new file mode 100644
index 0000000..92eb71c
--- /dev/null
+++ b/libs/androidx.camera_camera-extensions-1.1.0-rc01.aar
Binary files differ
diff --git a/libs/androidx.camera_camera-lifecycle-1.1.0-rc01.aar b/libs/androidx.camera_camera-lifecycle-1.1.0-rc01.aar
new file mode 100644
index 0000000..c619f90
--- /dev/null
+++ b/libs/androidx.camera_camera-lifecycle-1.1.0-rc01.aar
Binary files differ
diff --git a/libs/androidx.camera_camera-video-1.1.0-rc01.aar b/libs/androidx.camera_camera-video-1.1.0-rc01.aar
new file mode 100644
index 0000000..188d62c
--- /dev/null
+++ b/libs/androidx.camera_camera-video-1.1.0-rc01.aar
Binary files differ
diff --git a/libs/androidx.camera_camera-view-1.1.0-rc01.aar b/libs/androidx.camera_camera-view-1.1.0-rc01.aar
new file mode 100644
index 0000000..82baacb
--- /dev/null
+++ b/libs/androidx.camera_camera-view-1.1.0-rc01.aar
Binary files differ
diff --git a/libs/androidx.concurrent_concurrent-futures-1.1.0.jar b/libs/androidx.concurrent_concurrent-futures-1.1.0.jar
new file mode 100644
index 0000000..833b095
--- /dev/null
+++ b/libs/androidx.concurrent_concurrent-futures-1.1.0.jar
Binary files differ
diff --git a/libs/androidx.databinding_viewbinding-7.4.0-alpha02.aar b/libs/androidx.databinding_viewbinding-7.4.0-alpha02.aar
new file mode 100644
index 0000000..be3cc17
--- /dev/null
+++ b/libs/androidx.databinding_viewbinding-7.4.0-alpha02.aar
Binary files differ
diff --git a/libs/com.google.zxing_core-3.5.0.jar b/libs/com.google.zxing_core-3.5.0.jar
new file mode 100644
index 0000000..7bba61d
--- /dev/null
+++ b/libs/com.google.zxing_core-3.5.0.jar
Binary files differ
