Loading play-services-nearby-core/src/main/kotlin/org/microg/gms/nearby/exposurenotification/ExposureNotificationServiceImpl.kt +28 −19 Original line number Diff line number Diff line Loading @@ -157,6 +157,27 @@ class ExposureNotificationServiceImpl(private val context: Context, private val digest() } private fun buildExposureSummary(token: String): ExposureSummary = ExposureDatabase.with(context) { database -> val pair = database.loadConfiguration(packageName, token) val (configuration, exposures) = if (pair != null) { pair.second to database.findAllMeasuredExposures(pair.first).merge() } else { ExposureConfiguration.ExposureConfigurationBuilder().build() to emptyList() } ExposureSummary.ExposureSummaryBuilder() .setDaysSinceLastExposure(exposures.map { it.daysSinceExposure }.min()?.toInt() ?: 0) .setMatchedKeyCount(exposures.map { it.key }.distinct().size) .setMaximumRiskScore(exposures.map { it.getRiskScore(configuration) }.max()?.toInt() ?: 0) .setAttenuationDurations(intArrayOf( exposures.map { it.getAttenuationDurations(configuration)[0] }.sum(), exposures.map { it.getAttenuationDurations(configuration)[1] }.sum(), exposures.map { it.getAttenuationDurations(configuration)[2] }.sum() )) .setSummationRiskScore(exposures.map { it.getRiskScore(configuration) }.sum()) .build() } override fun provideDiagnosisKeys(params: ProvideDiagnosisKeysParams) { Log.w(TAG, "provideDiagnosisKeys() with $packageName/${params.token}") val tid = ExposureDatabase.with(context) { database -> Loading Loading @@ -256,10 +277,14 @@ class ExposureNotificationServiceImpl(private val context: Context, private val put("request_keys_count", keys) }.toString()) val match = database.findAllMeasuredExposures(tid).isNotEmpty() val exposureSummary = buildExposureSummary(params.token) try { val intent = Intent(if (match) ACTION_EXPOSURE_STATE_UPDATED else ACTION_EXPOSURE_NOT_FOUND) val intent = if (exposureSummary.matchedKeyCount > 0) { Intent(ACTION_EXPOSURE_STATE_UPDATED).putExtra(EXTRA_EXPOSURE_SUMMARY, exposureSummary) } else { Intent(ACTION_EXPOSURE_NOT_FOUND) } intent.putExtra(EXTRA_TOKEN, params.token) intent.`package` = packageName Log.d(TAG, "Sending $intent") Loading @@ -272,23 +297,7 @@ class ExposureNotificationServiceImpl(private val context: Context, private val } override fun getExposureSummary(params: GetExposureSummaryParams): Unit = ExposureDatabase.with(context) { database -> val pair = database.loadConfiguration(packageName, params.token) val (configuration, exposures) = if (pair != null) { pair.second to database.findAllMeasuredExposures(pair.first).merge() } else { ExposureConfiguration.ExposureConfigurationBuilder().build() to emptyList() } val response = ExposureSummary.ExposureSummaryBuilder() .setDaysSinceLastExposure(exposures.map { it.daysSinceExposure }.min()?.toInt() ?: 0) .setMatchedKeyCount(exposures.map { it.key }.distinct().size) .setMaximumRiskScore(exposures.map { it.getRiskScore(configuration) }.max()?.toInt() ?: 0) .setAttenuationDurations(intArrayOf( exposures.map { it.getAttenuationDurations(configuration)[0] }.sum(), exposures.map { it.getAttenuationDurations(configuration)[1] }.sum(), exposures.map { it.getAttenuationDurations(configuration)[2] }.sum() )) .setSummationRiskScore(exposures.map { it.getRiskScore(configuration) }.sum()) .build() val response = buildExposureSummary(params.token) database.noteAppAction(packageName, "getExposureSummary", JSONObject().apply { put("request_token", params.token) Loading Loading
play-services-nearby-core/src/main/kotlin/org/microg/gms/nearby/exposurenotification/ExposureNotificationServiceImpl.kt +28 −19 Original line number Diff line number Diff line Loading @@ -157,6 +157,27 @@ class ExposureNotificationServiceImpl(private val context: Context, private val digest() } private fun buildExposureSummary(token: String): ExposureSummary = ExposureDatabase.with(context) { database -> val pair = database.loadConfiguration(packageName, token) val (configuration, exposures) = if (pair != null) { pair.second to database.findAllMeasuredExposures(pair.first).merge() } else { ExposureConfiguration.ExposureConfigurationBuilder().build() to emptyList() } ExposureSummary.ExposureSummaryBuilder() .setDaysSinceLastExposure(exposures.map { it.daysSinceExposure }.min()?.toInt() ?: 0) .setMatchedKeyCount(exposures.map { it.key }.distinct().size) .setMaximumRiskScore(exposures.map { it.getRiskScore(configuration) }.max()?.toInt() ?: 0) .setAttenuationDurations(intArrayOf( exposures.map { it.getAttenuationDurations(configuration)[0] }.sum(), exposures.map { it.getAttenuationDurations(configuration)[1] }.sum(), exposures.map { it.getAttenuationDurations(configuration)[2] }.sum() )) .setSummationRiskScore(exposures.map { it.getRiskScore(configuration) }.sum()) .build() } override fun provideDiagnosisKeys(params: ProvideDiagnosisKeysParams) { Log.w(TAG, "provideDiagnosisKeys() with $packageName/${params.token}") val tid = ExposureDatabase.with(context) { database -> Loading Loading @@ -256,10 +277,14 @@ class ExposureNotificationServiceImpl(private val context: Context, private val put("request_keys_count", keys) }.toString()) val match = database.findAllMeasuredExposures(tid).isNotEmpty() val exposureSummary = buildExposureSummary(params.token) try { val intent = Intent(if (match) ACTION_EXPOSURE_STATE_UPDATED else ACTION_EXPOSURE_NOT_FOUND) val intent = if (exposureSummary.matchedKeyCount > 0) { Intent(ACTION_EXPOSURE_STATE_UPDATED).putExtra(EXTRA_EXPOSURE_SUMMARY, exposureSummary) } else { Intent(ACTION_EXPOSURE_NOT_FOUND) } intent.putExtra(EXTRA_TOKEN, params.token) intent.`package` = packageName Log.d(TAG, "Sending $intent") Loading @@ -272,23 +297,7 @@ class ExposureNotificationServiceImpl(private val context: Context, private val } override fun getExposureSummary(params: GetExposureSummaryParams): Unit = ExposureDatabase.with(context) { database -> val pair = database.loadConfiguration(packageName, params.token) val (configuration, exposures) = if (pair != null) { pair.second to database.findAllMeasuredExposures(pair.first).merge() } else { ExposureConfiguration.ExposureConfigurationBuilder().build() to emptyList() } val response = ExposureSummary.ExposureSummaryBuilder() .setDaysSinceLastExposure(exposures.map { it.daysSinceExposure }.min()?.toInt() ?: 0) .setMatchedKeyCount(exposures.map { it.key }.distinct().size) .setMaximumRiskScore(exposures.map { it.getRiskScore(configuration) }.max()?.toInt() ?: 0) .setAttenuationDurations(intArrayOf( exposures.map { it.getAttenuationDurations(configuration)[0] }.sum(), exposures.map { it.getAttenuationDurations(configuration)[1] }.sum(), exposures.map { it.getAttenuationDurations(configuration)[2] }.sum() )) .setSummationRiskScore(exposures.map { it.getRiskScore(configuration) }.sum()) .build() val response = buildExposureSummary(params.token) database.noteAppAction(packageName, "getExposureSummary", JSONObject().apply { put("request_token", params.token) Loading