Skip to content
Snippets Groups Projects
Verified Commit 048b4680 authored by Torsten Grote's avatar Torsten Grote
Browse files

Split PowerUtils into logical pieces

parent afca557f
No related branches found
No related tags found
Loading
...@@ -5,9 +5,9 @@ import android.content.Context ...@@ -5,9 +5,9 @@ import android.content.Context
public class DozeHelperImpl : DozeHelper { public class DozeHelperImpl : DozeHelper {
override fun needToShowDoNotKillMeFragment(context: Context): Boolean { override fun needToShowDoNotKillMeFragment(context: Context): Boolean {
val appContext = context.applicationContext val appContext = context.applicationContext
return PowerUtils.needsDozeWhitelisting(appContext) || return DozeUtils.needsDozeWhitelisting(appContext) ||
PowerUtils.huaweiProtectedAppsNeedsToBeShown(appContext) || HuaweiUtils.protectedAppsNeedsToBeShown(appContext) ||
PowerUtils.huaweiAppLaunchNeedsToBeShown(appContext) || HuaweiUtils.appLaunchNeedsToBeShown(appContext) ||
PowerUtils.isXiaomiOrRedmiDevice XiaomiUtils.isXiaomiOrRedmiDevice
} }
} }
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)
}
}
package org.briarproject.android.dontkillmelib package org.briarproject.android.dontkillmelib
import android.annotation.SuppressLint
import android.annotation.TargetApi
import android.content.Context import android.content.Context
import android.content.Context.POWER_SERVICE
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager.MATCH_DEFAULT_ONLY 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.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 { public object HuaweiUtils {
private const val PACKAGE_NAME_HUAWEI = "com.huawei.systemmanager" private const val PACKAGE_NAME_HUAWEI = "com.huawei.systemmanager"
private const val CLASS_NAME_POWER_MANAGER = private const val CLASS_NAME_POWER_MANAGER =
"$PACKAGE_NAME_HUAWEI.power.ui.HwPowerManagerActivity" "${PACKAGE_NAME_HUAWEI}.power.ui.HwPowerManagerActivity"
private const val CLASS_NAME_PROTECTED_APPS = private const val CLASS_NAME_PROTECTED_APPS =
"$PACKAGE_NAME_HUAWEI.optimize.process.ProtectActivity" "${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 * Determine whether a Huawei "Protected apps" feature is available on the
* device. * device.
*/ */
@JvmStatic @JvmStatic
public fun huaweiAppLaunchNeedsToBeShown(context: Context): Boolean { public fun appLaunchNeedsToBeShown(context: Context): Boolean {
// "App launch" was introduced in EMUI 8 (Android 8.0) // "App launch" was introduced in EMUI 8 (Android 8.0)
if (SDK_INT < 26) return false if (SDK_INT < 26) return false
val pm = context.packageManager val pm = context.packageManager
...@@ -55,7 +31,7 @@ public object PowerUtils { ...@@ -55,7 +31,7 @@ public object PowerUtils {
* device. * device.
*/ */
@JvmStatic @JvmStatic
public fun huaweiProtectedAppsNeedsToBeShown(context: Context): Boolean { public fun protectedAppsNeedsToBeShown(context: Context): Boolean {
// "Protected apps" no longer exists on Huawei EMUI 5.0 (Android 7.0) // "Protected apps" no longer exists on Huawei EMUI 5.0 (Android 7.0)
if (SDK_INT >= 24) return false if (SDK_INT >= 24) return false
val pm = context.packageManager val pm = context.packageManager
...@@ -73,35 +49,4 @@ public object PowerUtils { ...@@ -73,35 +49,4 @@ public object PowerUtils {
setClassName(PACKAGE_NAME_HUAWEI, CLASS_NAME_PROTECTED_APPS) 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
}
}
} }
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
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment