diff --git a/lib/src/main/java/org/briarproject/android/dontkillmelib/DozeHelperImpl.kt b/lib/src/main/java/org/briarproject/android/dontkillmelib/DozeHelperImpl.kt
index 100c25d7f30d514dea67cbf6dfec635d260d57bf..690eb7e08d5a20628c6817493cc76417bea16eab 100644
--- a/lib/src/main/java/org/briarproject/android/dontkillmelib/DozeHelperImpl.kt
+++ b/lib/src/main/java/org/briarproject/android/dontkillmelib/DozeHelperImpl.kt
@@ -5,9 +5,9 @@ import android.content.Context
 public class DozeHelperImpl : DozeHelper {
     override fun needToShowDoNotKillMeFragment(context: Context): Boolean {
         val appContext = context.applicationContext
-        return PowerUtils.needsDozeWhitelisting(appContext) ||
-            PowerUtils.huaweiProtectedAppsNeedsToBeShown(appContext) ||
-            PowerUtils.huaweiAppLaunchNeedsToBeShown(appContext) ||
-            PowerUtils.isXiaomiOrRedmiDevice
+        return DozeUtils.needsDozeWhitelisting(appContext) ||
+            HuaweiUtils.protectedAppsNeedsToBeShown(appContext) ||
+            HuaweiUtils.appLaunchNeedsToBeShown(appContext) ||
+            XiaomiUtils.isXiaomiOrRedmiDevice
     }
 }
diff --git a/lib/src/main/java/org/briarproject/android/dontkillmelib/DozeUtils.kt b/lib/src/main/java/org/briarproject/android/dontkillmelib/DozeUtils.kt
new file mode 100644
index 0000000000000000000000000000000000000000..d961e97587785f956a0b1a6c008e938faedaaea9
--- /dev/null
+++ b/lib/src/main/java/org/briarproject/android/dontkillmelib/DozeUtils.kt
@@ -0,0 +1,30 @@
+package org.briarproject.android.dontkillmelib
+
+import android.annotation.SuppressLint
+import android.annotation.TargetApi
+import android.content.Context
+import android.content.Context.POWER_SERVICE
+import android.content.Intent
+import android.net.Uri
+import android.os.Build.VERSION.SDK_INT
+import android.os.PowerManager
+import android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
+
+public object DozeUtils {
+
+    @JvmStatic
+    public fun needsDozeWhitelisting(ctx: Context): Boolean {
+        if (SDK_INT < 23) return false
+        val pm = ctx.getSystemService(POWER_SERVICE) as PowerManager
+        return !pm.isIgnoringBatteryOptimizations(ctx.packageName)
+    }
+
+    @JvmStatic
+    @TargetApi(23)
+    @SuppressLint("BatteryLife")
+    public fun getDozeWhitelistingIntent(ctx: Context): Intent = Intent().apply {
+        action = ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
+        data = Uri.parse("package:" + ctx.packageName)
+    }
+
+}
diff --git a/lib/src/main/java/org/briarproject/android/dontkillmelib/HuaweiUtils.kt b/lib/src/main/java/org/briarproject/android/dontkillmelib/HuaweiUtils.kt
new file mode 100644
index 0000000000000000000000000000000000000000..0bca22621a449bd8ba89f89b9352ef21c1127e44
--- /dev/null
+++ b/lib/src/main/java/org/briarproject/android/dontkillmelib/HuaweiUtils.kt
@@ -0,0 +1,52 @@
+package org.briarproject.android.dontkillmelib
+
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager.MATCH_DEFAULT_ONLY
+import android.os.Build.VERSION.SDK_INT
+
+public object HuaweiUtils {
+
+    private const val PACKAGE_NAME_HUAWEI = "com.huawei.systemmanager"
+    private const val CLASS_NAME_POWER_MANAGER =
+        "${PACKAGE_NAME_HUAWEI}.power.ui.HwPowerManagerActivity"
+    private const val CLASS_NAME_PROTECTED_APPS =
+        "${PACKAGE_NAME_HUAWEI}.optimize.process.ProtectActivity"
+
+    /**
+     * Determine whether a Huawei "Protected apps" feature is available on the
+     * device.
+     */
+    @JvmStatic
+    public fun appLaunchNeedsToBeShown(context: Context): Boolean {
+        // "App launch" was introduced in EMUI 8 (Android 8.0)
+        if (SDK_INT < 26) return false
+        val pm = context.packageManager
+        val resolveInfos = pm.queryIntentActivities(huaweiProtectedAppsIntent, MATCH_DEFAULT_ONLY)
+        return resolveInfos.isNotEmpty()
+    }
+
+    /**
+     * Determine whether a Huawei "Protected apps" feature is available on the
+     * device.
+     */
+    @JvmStatic
+    public fun protectedAppsNeedsToBeShown(context: Context): Boolean {
+        // "Protected apps" no longer exists on Huawei EMUI 5.0 (Android 7.0)
+        if (SDK_INT >= 24) return false
+        val pm = context.packageManager
+        val resolveInfos = pm.queryIntentActivities(huaweiPowerManagerIntent, MATCH_DEFAULT_ONLY)
+        return resolveInfos.isNotEmpty()
+    }
+
+    @JvmStatic
+    public val huaweiPowerManagerIntent: Intent = Intent().apply {
+        setClassName(PACKAGE_NAME_HUAWEI, CLASS_NAME_POWER_MANAGER)
+    }
+
+    @JvmStatic
+    public val huaweiProtectedAppsIntent: Intent = Intent().apply {
+        setClassName(PACKAGE_NAME_HUAWEI, CLASS_NAME_PROTECTED_APPS)
+    }
+
+}
diff --git a/lib/src/main/java/org/briarproject/android/dontkillmelib/PowerUtils.kt b/lib/src/main/java/org/briarproject/android/dontkillmelib/PowerUtils.kt
deleted file mode 100644
index d97c63367861b3e224f8c1a60d6abdf206205850..0000000000000000000000000000000000000000
--- a/lib/src/main/java/org/briarproject/android/dontkillmelib/PowerUtils.kt
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.briarproject.android.dontkillmelib
-
-import android.annotation.SuppressLint
-import android.annotation.TargetApi
-import android.content.Context
-import android.content.Context.POWER_SERVICE
-import android.content.Intent
-import android.content.pm.PackageManager.MATCH_DEFAULT_ONLY
-import android.net.Uri
-import android.os.Build
-import android.os.Build.VERSION.SDK_INT
-import android.os.PowerManager
-import android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
-import java.io.IOException
-import java.util.Scanner
-
-public object PowerUtils {
-
-    private const val PACKAGE_NAME_HUAWEI = "com.huawei.systemmanager"
-    private const val CLASS_NAME_POWER_MANAGER =
-        "$PACKAGE_NAME_HUAWEI.power.ui.HwPowerManagerActivity"
-    private const val CLASS_NAME_PROTECTED_APPS =
-        "$PACKAGE_NAME_HUAWEI.optimize.process.ProtectActivity"
-
-    @JvmStatic
-    public fun needsDozeWhitelisting(ctx: Context): Boolean {
-        if (SDK_INT < 23) return false
-        val pm = ctx.getSystemService(POWER_SERVICE) as PowerManager
-        return !pm.isIgnoringBatteryOptimizations(ctx.packageName)
-    }
-
-    @JvmStatic
-    @TargetApi(23)
-    @SuppressLint("BatteryLife")
-    public fun getDozeWhitelistingIntent(ctx: Context): Intent = Intent().apply {
-        action = ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
-        data = Uri.parse("package:" + ctx.packageName)
-    }
-
-    /**
-     * Determine whether a Huawei "Protected apps" feature is available on the
-     * device.
-     */
-    @JvmStatic
-    public fun huaweiAppLaunchNeedsToBeShown(context: Context): Boolean {
-        // "App launch" was introduced in EMUI 8 (Android 8.0)
-        if (SDK_INT < 26) return false
-        val pm = context.packageManager
-        val resolveInfos = pm.queryIntentActivities(huaweiProtectedAppsIntent, MATCH_DEFAULT_ONLY)
-        return resolveInfos.isNotEmpty()
-    }
-
-    /**
-     * Determine whether a Huawei "Protected apps" feature is available on the
-     * device.
-     */
-    @JvmStatic
-    public fun huaweiProtectedAppsNeedsToBeShown(context: Context): Boolean {
-        // "Protected apps" no longer exists on Huawei EMUI 5.0 (Android 7.0)
-        if (SDK_INT >= 24) return false
-        val pm = context.packageManager
-        val resolveInfos = pm.queryIntentActivities(huaweiPowerManagerIntent, MATCH_DEFAULT_ONLY)
-        return resolveInfos.isNotEmpty()
-    }
-
-    @JvmStatic
-    public val huaweiPowerManagerIntent: Intent = Intent().apply {
-        setClassName(PACKAGE_NAME_HUAWEI, CLASS_NAME_POWER_MANAGER)
-    }
-
-    @JvmStatic
-    public val huaweiProtectedAppsIntent: Intent = Intent().apply {
-        setClassName(PACKAGE_NAME_HUAWEI, CLASS_NAME_PROTECTED_APPS)
-    }
-
-    @JvmStatic
-    public val isXiaomiOrRedmiDevice: Boolean
-        get() = "Xiaomi".equals(Build.BRAND, ignoreCase = true) ||
-            "Redmi".equals(Build.BRAND, ignoreCase = true)
-
-    @JvmStatic
-    public val isMiuiTenOrLater: Boolean
-        get() {
-            var version = getSystemProperty("ro.miui.ui.version.name")
-            if (version == null || version == "") return false
-            version = version.replace("[^\\d]".toRegex(), "")
-            return try {
-                version.toInt() >= 10
-            } catch (e: NumberFormatException) {
-                false
-            }
-        }
-
-    private fun getSystemProperty(propName: String): String? {
-        return try {
-            val p = Runtime.getRuntime().exec("getprop $propName")
-            val s = Scanner(p.inputStream)
-            val line = s.nextLine()
-            s.close()
-            line
-        } catch (e: SecurityException) {
-            null
-        } catch (e: IOException) {
-            null
-        }
-    }
-}
diff --git a/lib/src/main/java/org/briarproject/android/dontkillmelib/XiaomiUtils.kt b/lib/src/main/java/org/briarproject/android/dontkillmelib/XiaomiUtils.kt
new file mode 100644
index 0000000000000000000000000000000000000000..415b82203f7bdacaf5cb94bbead5803ac7c453b7
--- /dev/null
+++ b/lib/src/main/java/org/briarproject/android/dontkillmelib/XiaomiUtils.kt
@@ -0,0 +1,41 @@
+package org.briarproject.android.dontkillmelib
+
+import android.os.Build.BRAND
+import java.io.IOException
+import java.util.Scanner
+
+public object XiaomiUtils {
+
+    @JvmStatic
+    public val isXiaomiOrRedmiDevice: Boolean
+        get() = "Xiaomi".equals(BRAND, ignoreCase = true) ||
+            "Redmi".equals(BRAND, ignoreCase = true)
+
+    @JvmStatic
+    public val isMiuiTenOrLater: Boolean
+        get() {
+            var version = getSystemProperty("ro.miui.ui.version.name")
+            if (version == null || version == "") return false
+            version = version.replace("[^\\d]".toRegex(), "")
+            return try {
+                version.toInt() >= 10
+            } catch (e: NumberFormatException) {
+                false
+            }
+        }
+
+    private fun getSystemProperty(propName: String): String? {
+        return try {
+            val p = Runtime.getRuntime().exec("getprop $propName")
+            val s = Scanner(p.inputStream)
+            val line = s.nextLine()
+            s.close()
+            line
+        } catch (e: SecurityException) {
+            null
+        } catch (e: IOException) {
+            null
+        }
+    }
+
+}