diff --git a/app/src/main/java/org/lineageos/aperture/CameraActivity.kt b/app/src/main/java/org/lineageos/aperture/CameraActivity.kt
index 894484d..b6a1d9d 100644
--- a/app/src/main/java/org/lineageos/aperture/CameraActivity.kt
+++ b/app/src/main/java/org/lineageos/aperture/CameraActivity.kt
@@ -262,10 +262,14 @@
                 ) {
                     if (e2.x > e1.x) {
                         // Left to right
-                        changeCameraMode(cameraMode.previous())
+                        cameraMode.previous()?.let {
+                            changeCameraMode(it)
+                        }
                     } else {
                         // Right to left
-                        changeCameraMode(cameraMode.next())
+                        cameraMode.next()?.let {
+                            changeCameraMode(it)
+                        }
                     }
                 }
                 return true
@@ -1955,21 +1959,20 @@
         }
 
         val currentVideoQuality = videoQuality
-        val newVideoQuality = supportedVideoQualities.toList().sortedWith { a, b ->
+
+        supportedVideoQualities.toList().sortedWith { a, b ->
             listOf(Quality.SD, Quality.HD, Quality.FHD, Quality.UHD).let {
                 it.indexOf(a) - it.indexOf(b)
             }
-        }.next(currentVideoQuality)
+        }.next(currentVideoQuality)?.takeUnless {
+            it == currentVideoQuality
+        }?.let {
+            videoQuality = it
 
-        if (newVideoQuality == currentVideoQuality) {
-            return
+            sharedPreferences.videoQuality = it
+
+            bindCameraUseCases()
         }
-
-        videoQuality = newVideoQuality
-
-        sharedPreferences.videoQuality = videoQuality
-
-        bindCameraUseCases()
     }
 
     private fun cycleVideoFrameRate() {
@@ -1998,29 +2001,29 @@
         }
 
         val currentVideoDynamicRange = videoDynamicRange
-        val newVideoDynamicRange =
-            supportedVideoDynamicRanges.toList().sorted().next(currentVideoDynamicRange)
 
-        if (newVideoDynamicRange == currentVideoDynamicRange) {
-            return
+        supportedVideoDynamicRanges.toList().sorted().next(currentVideoDynamicRange)?.takeUnless {
+            it == currentVideoDynamicRange
+        }?.let {
+            videoDynamicRange = it
+
+            sharedPreferences.videoDynamicRange = it
+
+            bindCameraUseCases()
         }
-
-        videoDynamicRange = newVideoDynamicRange
-
-        sharedPreferences.videoDynamicRange = videoDynamicRange
-
-        bindCameraUseCases()
     }
 
     /**
      * Set the specified grid mode, also updating the icon
      */
     private fun cycleGridMode() {
-        gridMode = gridMode.next()
+        gridMode.next()?.let {
+            gridMode = it
 
-        sharedPreferences.lastGridMode = gridMode
+            sharedPreferences.lastGridMode = it
 
-        changeGridMode(gridMode)
+            changeGridMode(gridMode)
+        }
     }
 
     private fun changeGridMode(gridMode: GridMode) {
@@ -2031,9 +2034,11 @@
      * Toggle timer mode
      */
     private fun toggleTimerMode() {
-        timerMode = timerMode.next()
+        timerMode.next()?.let {
+            timerMode = it
 
-        sharedPreferences.timerMode = timerMode
+            sharedPreferences.timerMode = it
+        }
     }
 
     /**
@@ -2050,18 +2055,19 @@
      */
     private fun cycleFlashMode() {
         val currentFlashMode = flashMode
-        val newFlashMode = when (cameraMode) {
+
+        when (cameraMode) {
             CameraMode.PHOTO -> FlashMode.PHOTO_ALLOWED_MODES.next(currentFlashMode)
             CameraMode.VIDEO -> FlashMode.VIDEO_ALLOWED_MODES.next(currentFlashMode)
             else -> FlashMode.OFF
-        }
+        }?.let {
+            changeFlashMode(it)
 
-        changeFlashMode(newFlashMode)
-
-        when (cameraMode) {
-            CameraMode.PHOTO -> sharedPreferences.photoFlashMode = newFlashMode
-            CameraMode.VIDEO -> sharedPreferences.videoFlashMode = newFlashMode
-            else -> {}
+            when (cameraMode) {
+                CameraMode.PHOTO -> sharedPreferences.photoFlashMode = it
+                CameraMode.VIDEO -> sharedPreferences.videoFlashMode = it
+                else -> {}
+            }
         }
 
         if (cameraMode == CameraMode.PHOTO && !sharedPreferences.forceTorchHelpShown &&
@@ -2124,17 +2130,16 @@
         }
 
         val currentExtensionMode = photoEffect
-        val newExtensionMode = camera.supportedExtensionModes.next(currentExtensionMode)
 
-        if (newExtensionMode == currentExtensionMode) {
-            return
+        camera.supportedExtensionModes.next(currentExtensionMode)?.takeUnless {
+            it == currentExtensionMode
+        }?.let {
+            photoEffect = it
+
+            sharedPreferences.photoEffect = it
+
+            bindCameraUseCases()
         }
-
-        photoEffect = newExtensionMode
-
-        sharedPreferences.photoEffect = photoEffect
-
-        bindCameraUseCases()
     }
 
     private fun setBrightScreen(brightScreen: Boolean) {
diff --git a/app/src/main/java/org/lineageos/aperture/ext/Array.kt b/app/src/main/java/org/lineageos/aperture/ext/Array.kt
new file mode 100644
index 0000000..f6c1664
--- /dev/null
+++ b/app/src/main/java/org/lineageos/aperture/ext/Array.kt
@@ -0,0 +1,32 @@
+/*
+ * SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package org.lineageos.aperture.ext
+
+/**
+ * Get the next element in the array relative to the [current] element.
+ *
+ * If the element is the last in the array or it's not present in the array
+ * it will return the first element.
+ * If the array is empty, null will be returned.
+ *
+ * @param current The element to use as cursor
+ *
+ * @return [T] Either the next element, the first element or null
+ */
+fun <T> Array<T>.next(current: T) = getOrElse(indexOf(current) + 1) { firstOrNull() }
+
+/**
+ * Get the previous element in the array relative to the [current] element.
+ *
+ * If the element is the first in the array or it's not present in the array
+ * it will return the last element.
+ * If the array is empty, null will be returned.
+ *
+ * @param current The element to use as cursor
+ *
+ * @return [T] Either the previous element, the last element or null
+ */
+fun <T> Array<T>.previous(current: T) = getOrElse(indexOf(current) - 1) { lastOrNull() }
diff --git a/app/src/main/java/org/lineageos/aperture/ext/Collections.kt b/app/src/main/java/org/lineageos/aperture/ext/Collections.kt
deleted file mode 100644
index 2d8ff76..0000000
--- a/app/src/main/java/org/lineageos/aperture/ext/Collections.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2022 The LineageOS Project
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package org.lineageos.aperture.ext
-
-/**
- * Get the next item in the array.
- * If the element is the last of the list or it's not present in the list
- * it will return the first item.
- */
-internal fun <T> Array<T>.next(current: T): T {
-    val currentIndex = indexOf(current)
-    return getOrElse(currentIndex + 1) { first() }
-}
-
-/**
- * Get the previous item in the array.
- * If the element is the first of the list or it's not present in the list
- * it will return the last item.
- */
-internal fun <T> Array<T>.previous(current: T): T {
-    val currentIndex = indexOf(current)
-    return getOrElse(currentIndex - 1) { last() }
-}
-
-/**
- * Get the next item in the list.
- * If the element is the last of the list or it's not present in the list
- * it will return the first item.
- */
-internal fun <T> List<T>.next(current: T): T {
-    val currentIndex = indexOf(current)
-    return getOrElse(currentIndex + 1) { first() }
-}
-
-/**
- * Get the previous item in the list.
- * If the element is the first of the list or it's not present in the list
- * it will return the last item.
- */
-internal fun <T> List<T>.previous(current: T): T {
-    val currentIndex = indexOf(current)
-    return getOrElse(currentIndex - 1) { last() }
-}
diff --git a/app/src/main/java/org/lineageos/aperture/ext/List.kt b/app/src/main/java/org/lineageos/aperture/ext/List.kt
new file mode 100644
index 0000000..2395fbd
--- /dev/null
+++ b/app/src/main/java/org/lineageos/aperture/ext/List.kt
@@ -0,0 +1,32 @@
+/*
+ * SPDX-FileCopyrightText: 2022-2023 The LineageOS Project
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package org.lineageos.aperture.ext
+
+/**
+ * Get the next element in the list relative to the [current] element.
+ *
+ * If the element is the last in the list or it's not present in the list
+ * it will return the first element.
+ * If the list is empty, null will be returned.
+ *
+ * @param current The element to use as cursor
+ *
+ * @return [E] Either the next element, the first element or null
+ */
+fun <E> List<E>.next(current: E) = getOrElse(indexOf(current) + 1) { firstOrNull() }
+
+/**
+ * Get the previous element in the list relative to the [current] element.
+ *
+ * If the element is the first in the list or it's not present in the list
+ * it will return the last element.
+ * If the list is empty, null will be returned.
+ *
+ * @param current The element to use as cursor
+ *
+ * @return [E] Either the previous element, the last element or null
+ */
+fun <E> List<E>.previous(current: E) = getOrElse(indexOf(current) - 1) { lastOrNull() }
