mirror of
https://github.com/TeamVanced/VancedMicroG
synced 2024-11-27 14:36:49 +01:00
parent
c0324710f3
commit
2b09a5e530
@ -30,4 +30,6 @@ description = 'microG API for play-services-nearby'
|
||||
dependencies {
|
||||
api project(':play-services-basement')
|
||||
api project(':play-services-base-api')
|
||||
|
||||
implementation "androidx.annotation:annotation:$annotationVersion"
|
||||
}
|
||||
|
@ -7,6 +7,8 @@ package com.google.android.gms.nearby.exposurenotification.internal;
|
||||
|
||||
import android.os.ParcelFileDescriptor;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.google.android.gms.common.api.internal.IStatusCallback;
|
||||
import com.google.android.gms.nearby.exposurenotification.ExposureConfiguration;
|
||||
import com.google.android.gms.nearby.exposurenotification.TemporaryExposureKey;
|
||||
@ -17,16 +19,21 @@ import java.util.List;
|
||||
|
||||
public class ProvideDiagnosisKeysParams extends AutoSafeParcelable {
|
||||
@Field(1)
|
||||
@Nullable
|
||||
public List<TemporaryExposureKey> keys;
|
||||
@Field(2)
|
||||
public IStatusCallback callback;
|
||||
@Field(3)
|
||||
@Nullable
|
||||
public List<ParcelFileDescriptor> keyFiles;
|
||||
@Field(4)
|
||||
@Nullable
|
||||
public ExposureConfiguration configuration;
|
||||
@Field(5)
|
||||
@Nullable
|
||||
public String token;
|
||||
@Field(6)
|
||||
@Nullable
|
||||
public IDiagnosisKeyFileSupplier keyFileSupplier;
|
||||
|
||||
private ProvideDiagnosisKeysParams() {
|
||||
|
@ -22,6 +22,7 @@ import com.google.android.gms.nearby.exposurenotification.TemporaryExposureKey
|
||||
import kotlinx.coroutines.*
|
||||
import okio.ByteString
|
||||
import org.json.JSONObject
|
||||
import org.microg.gms.nearby.exposurenotification.Constants.TOKEN_A
|
||||
import java.io.File
|
||||
import java.lang.Runnable
|
||||
import java.nio.ByteBuffer
|
||||
@ -223,6 +224,20 @@ class ExposureDatabase private constructor(private val context: Context) : SQLit
|
||||
}
|
||||
}
|
||||
|
||||
fun getOrCreateTokenId(packageName: String, token: String, database: SQLiteDatabase = writableDatabase) = database.run {
|
||||
val tid = getTokenId(packageName, token, this)
|
||||
if (tid != null) {
|
||||
tid
|
||||
} else {
|
||||
insert(TABLE_TOKENS, "NULL", ContentValues().apply {
|
||||
put("package", packageName)
|
||||
put("token", token)
|
||||
put("timestamp", System.currentTimeMillis())
|
||||
})
|
||||
getTokenId(packageName, token, this)
|
||||
}
|
||||
}
|
||||
|
||||
private fun storeSingleDiagnosisKey(tid: Long, key: TemporaryExposureKey, database: SQLiteDatabase = writableDatabase) = database.run {
|
||||
val tcsid = getTekCheckSingleId(key, true, database)
|
||||
insert(TABLE_TEK_CHECK_SINGLE_TOKEN, "NULL", ContentValues().apply {
|
||||
|
@ -215,17 +215,19 @@ class ExposureNotificationServiceImpl(private val context: Context, private val
|
||||
}
|
||||
|
||||
override fun provideDiagnosisKeys(params: ProvideDiagnosisKeysParams) {
|
||||
Log.w(TAG, "provideDiagnosisKeys() with $packageName/${params.token}")
|
||||
val token = params.token ?: TOKEN_A
|
||||
Log.w(TAG, "provideDiagnosisKeys() with $packageName/$token")
|
||||
lifecycleScope.launchWhenStarted {
|
||||
val tid = ExposureDatabase.with(context) { database ->
|
||||
if (params.configuration != null) {
|
||||
database.storeConfiguration(packageName, params.token, params.configuration)
|
||||
val configuration = params.configuration
|
||||
if (configuration != null) {
|
||||
database.storeConfiguration(packageName, token, configuration)
|
||||
} else {
|
||||
database.getTokenId(packageName, params.token)
|
||||
database.getOrCreateTokenId(packageName, token)
|
||||
}
|
||||
}
|
||||
if (tid == null) {
|
||||
Log.w(TAG, "Unknown token without configuration: $packageName/${params.token}")
|
||||
Log.w(TAG, "Unknown token without configuration: $packageName/$token")
|
||||
try {
|
||||
params.callback.onResult(Status.INTERNAL_ERROR)
|
||||
} catch (e: Exception) {
|
||||
@ -281,7 +283,7 @@ class ExposureNotificationServiceImpl(private val context: Context, private val
|
||||
|
||||
if (todoKeyFiles.size > 0) {
|
||||
val time = (System.currentTimeMillis() - start).coerceAtLeast(1).toDouble() / 1000.0
|
||||
Log.d(TAG, "$packageName/${params.token} processed $keys keys (${todoKeyFiles.size} files pending) in ${time}s -> ${(keys.toDouble() / time * 1000).roundToInt().toDouble() / 1000.0} keys/s")
|
||||
Log.d(TAG, "$packageName/$token processed $keys keys (${todoKeyFiles.size} files pending) in ${time}s -> ${(keys.toDouble() / time * 1000).roundToInt().toDouble() / 1000.0} keys/s")
|
||||
}
|
||||
|
||||
Handler(Looper.getMainLooper()).post {
|
||||
@ -323,16 +325,16 @@ class ExposureNotificationServiceImpl(private val context: Context, private val
|
||||
}
|
||||
|
||||
val time = (System.currentTimeMillis() - start).coerceAtLeast(1).toDouble() / 1000.0
|
||||
Log.d(TAG, "$packageName/${params.token} processed $keys keys ($newKeys new) in ${time}s -> ${(keys.toDouble() / time * 1000).roundToInt().toDouble() / 1000.0} keys/s")
|
||||
Log.d(TAG, "$packageName/$token processed $keys keys ($newKeys new) in ${time}s -> ${(keys.toDouble() / time * 1000).roundToInt().toDouble() / 1000.0} keys/s")
|
||||
|
||||
database.noteAppAction(packageName, "provideDiagnosisKeys", JSONObject().apply {
|
||||
put("request_token", params.token)
|
||||
put("request_token", token)
|
||||
put("request_keys_size", params.keys?.size)
|
||||
put("request_keyFiles_size", params.keyFiles?.size)
|
||||
put("request_keys_count", keys)
|
||||
}.toString())
|
||||
|
||||
val exposureSummary = buildExposureSummary(params.token)
|
||||
val exposureSummary = buildExposureSummary(token)
|
||||
|
||||
try {
|
||||
val intent = if (exposureSummary.matchedKeyCount > 0) {
|
||||
@ -340,7 +342,7 @@ class ExposureNotificationServiceImpl(private val context: Context, private val
|
||||
} else {
|
||||
Intent(ACTION_EXPOSURE_NOT_FOUND)
|
||||
}
|
||||
intent.putExtra(EXTRA_TOKEN, params.token)
|
||||
intent.putExtra(EXTRA_TOKEN, token)
|
||||
intent.`package` = packageName
|
||||
Log.d(TAG, "Sending $intent")
|
||||
context.sendOrderedBroadcast(intent, null)
|
||||
|
Loading…
Reference in New Issue
Block a user