diff --git a/snowplow-tracker/src/androidTest/java/com/snowplowanalytics/snowplow/tracker/SubjectTest.kt b/snowplow-tracker/src/androidTest/java/com/snowplowanalytics/snowplow/tracker/SubjectTest.kt index 153148ef7..e63b75d16 100755 --- a/snowplow-tracker/src/androidTest/java/com/snowplowanalytics/snowplow/tracker/SubjectTest.kt +++ b/snowplow-tracker/src/androidTest/java/com/snowplowanalytics/snowplow/tracker/SubjectTest.kt @@ -18,7 +18,6 @@ import androidx.test.platform.app.InstrumentationRegistry import com.snowplowanalytics.core.tracker.Logger.updateLogLevel import com.snowplowanalytics.core.tracker.Subject import com.snowplowanalytics.snowplow.Snowplow.createTracker -import com.snowplowanalytics.snowplow.network.HttpMethod import com.snowplowanalytics.snowplow.util.Size import org.junit.Assert import org.junit.Test @@ -131,6 +130,14 @@ class SubjectTest { Assert.assertNull(subject.getSubject(true)["ip"]) } + @Test + fun testSetsScreenResolutionAutomaticaly() { + val subject = createSubject() + Assert.assertNotNull(subject.screenResolution) + Assert.assertTrue((subject.screenResolution?.width ?: 0) > 0) + Assert.assertTrue((subject.screenResolution?.height ?: 0) > 0) + } + // Helper Methods private fun createSubject(): Subject { updateLogLevel(LogLevel.DEBUG) diff --git a/snowplow-tracker/src/main/java/com/snowplowanalytics/core/tracker/Subject.kt b/snowplow-tracker/src/main/java/com/snowplowanalytics/core/tracker/Subject.kt index b7cf2132a..8ecdde838 100755 --- a/snowplow-tracker/src/main/java/com/snowplowanalytics/core/tracker/Subject.kt +++ b/snowplow-tracker/src/main/java/com/snowplowanalytics/core/tracker/Subject.kt @@ -13,7 +13,9 @@ package com.snowplowanalytics.core.tracker import android.content.Context -import android.graphics.Point +import android.content.res.Resources +import android.os.Build +import android.util.DisplayMetrics import android.view.WindowManager import com.snowplowanalytics.core.constants.Parameters import com.snowplowanalytics.core.tracker.Logger.v @@ -225,11 +227,25 @@ class Subject(context: Context, config: SubjectConfigurationInterface?) { * @param context the android context */ private fun setDefaultScreenResolution(context: Context) { - val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as? WindowManager - val display = windowManager?.defaultDisplay - val size = Point() - display?.getSize(size) - screenResolution = (Size(size.x, size.y)) + try { + screenResolution = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val metrics = + context.getSystemService(WindowManager::class.java).currentWindowMetrics + Size(metrics.bounds.width(), metrics.bounds.height()) + } else { + val windowManager = + context.getSystemService(Context.WINDOW_SERVICE) as? WindowManager + val display = windowManager?.defaultDisplay + val metrics = if (display != null) { + DisplayMetrics().also { display.getRealMetrics(it) } + } else { + Resources.getSystem().displayMetrics + } + Size(metrics.widthPixels, metrics.heightPixels) + } + } catch (e: Exception) { + Logger.e(TAG, "Failed to set default screen resolution.") + } } /**