Skip to content

Commit 9501e9c

Browse files
oschwaldclaude
andcommitted
fix: Use DisplayManager instead of context.display for refresh rate
On Android 11+ (API 30), calling context.display on applicationContext throws UnsupportedOperationException because application context is not a "visual context". Use DisplayManager.getDisplay(DEFAULT_DISPLAY) instead, which works with any context type. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 236c745 commit 9501e9c

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

device-sdk/src/main/java/com/maxmind/device/collector/DeviceDataCollector.kt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ package com.maxmind.device.collector
33
import android.app.ActivityManager
44
import android.content.Context
55
import android.content.pm.PackageManager
6+
import android.hardware.display.DisplayManager
67
import android.os.Build
78
import android.os.Environment
89
import android.os.StatFs
910
import android.util.DisplayMetrics
11+
import android.view.Display
1012
import android.view.WindowManager
1113
import com.maxmind.device.model.BuildInfo
1214
import com.maxmind.device.model.DeviceData
@@ -52,8 +54,8 @@ internal class DeviceDataCollector(
5254
*
5355
* @return [DeviceData] containing collected device information
5456
*/
55-
fun collect(): DeviceData {
56-
return DeviceData(
57+
fun collect(): DeviceData =
58+
DeviceData(
5759
storedID = storedIDCollector?.collect() ?: StoredID(),
5860
deviceIDs = deviceIDsCollector.collect(),
5961
build = collectBuildInfo(),
@@ -77,10 +79,9 @@ internal class DeviceDataCollector(
7779
deviceTime = System.currentTimeMillis(),
7880
webViewUserAgent = webViewCollector.collectUserAgent(),
7981
)
80-
}
8182

82-
private fun collectBuildInfo(): BuildInfo {
83-
return BuildInfo(
83+
private fun collectBuildInfo(): BuildInfo =
84+
BuildInfo(
8485
fingerprint = Build.FINGERPRINT,
8586
manufacturer = Build.MANUFACTURER,
8687
model = Build.MODEL,
@@ -95,7 +96,6 @@ internal class DeviceDataCollector(
9596
securityPatch = Build.VERSION.SECURITY_PATCH,
9697
supportedAbis = Build.SUPPORTED_ABIS.toList(),
9798
)
98-
}
9999

100100
private fun collectDisplayInfo(): DisplayInfo {
101101
val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
@@ -106,7 +106,8 @@ internal class DeviceDataCollector(
106106

107107
val refreshRate =
108108
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
109-
context.display?.refreshRate
109+
val displayManager = context.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
110+
displayManager.getDisplay(Display.DEFAULT_DISPLAY)?.refreshRate
110111
} else {
111112
@Suppress("DEPRECATION")
112113
windowManager.defaultDisplay.refreshRate

0 commit comments

Comments
 (0)