|
1 | 1 | package io.sentry.android.replay.util |
2 | 2 |
|
3 | | -import android.annotation.SuppressLint |
4 | 3 | import android.os.Build |
5 | | -import java.lang.reflect.Method |
6 | 4 |
|
7 | 5 | internal object SystemProperties { |
8 | | - // from https://cs.android.com/android/platform/superproject/main/+/main:out/soong/.intermediates/system/libsysprop/srcs/PlatformProperties/android_common/xref/srcjars.xref/android/sysprop/SocProperties.java;l=163-171 |
9 | | - // these props are not available on API < 31 via Build, so we use reflection to access them |
10 | | - const val SOC_MODEL = "ro.soc.model" |
11 | | - const val SOC_MANUFACTURER = "ro.soc.manufacturer" |
12 | | - |
13 | | - @delegate:SuppressLint("PrivateApi") |
14 | | - private val getProperty: Method by lazy { |
15 | | - val clazz = Class.forName("android.os.SystemProperties") |
16 | | - clazz.getMethod("get", String::class.java) |
| 6 | + enum class Property { |
| 7 | + SOC_MODEL, |
| 8 | + SOC_MANUFACTURER |
17 | 9 | } |
18 | 10 |
|
19 | | - fun get(key: String, defaultValue: String = ""): String { |
20 | | - return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { |
21 | | - try { |
22 | | - getProperty.invoke(null, key) as? String ?: defaultValue |
23 | | - } catch (e: Throwable) { |
24 | | - defaultValue |
25 | | - } |
26 | | - } else { |
| 11 | + fun get(key: Property, defaultValue: String = ""): String { |
| 12 | + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { |
27 | 13 | when (key) { |
28 | | - SOC_MODEL -> Build.SOC_MODEL |
29 | | - SOC_MANUFACTURER -> Build.SOC_MANUFACTURER |
30 | | - else -> throw IllegalArgumentException("Unknown system property: $key") |
| 14 | + Property.SOC_MODEL -> Build.SOC_MODEL |
| 15 | + Property.SOC_MANUFACTURER -> Build.SOC_MANUFACTURER |
31 | 16 | } |
| 17 | + } else { |
| 18 | + defaultValue |
32 | 19 | } |
33 | 20 | } |
34 | 21 | } |
0 commit comments