Loading play-services-nearby-core/src/main/kotlin/org/microg/gms/nearby/exposurenotification/Constants.kt +5 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,11 @@ import java.util.* const val TAG = "ExposureNotification" val SERVICE_UUID = ParcelUuid(UUID.fromString("0000FD6F-0000-1000-8000-00805F9B34FB")) const val SCANNING_INTERVAL = 3 * 60 // Google uses 5m, but we use a slightly different scanning and reporting system const val SCANNING_INTERVAL_MS = SCANNING_INTERVAL * 1000L const val SCANNING_TIME = 20 // Google uses 4s + 13s (if Bluetooth is used by something else) const val SCANNING_TIME_MS = SCANNING_TIME * 1000L const val ROLLING_WINDOW_LENGTH = 10 * 60 const val ROLLING_WINDOW_LENGTH_MS = ROLLING_WINDOW_LENGTH * 1000 const val ROLLING_PERIOD = 144 Loading play-services-nearby-core/src/main/kotlin/org/microg/gms/nearby/exposurenotification/ScannerService.kt +26 −12 Original line number Diff line number Diff line Loading @@ -14,7 +14,9 @@ import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Build import android.os.Handler import android.os.IBinder import android.os.Looper import android.util.Log import org.microg.gms.common.ForegroundServiceContext import java.io.FileDescriptor Loading @@ -23,8 +25,8 @@ import java.util.* @TargetApi(21) class ScannerService : Service() { private var started = false private var startTime = 0L private var scanning = false private var lastStartTime = 0L private var seenAdvertisements = 0L private var lastAdvertisement = 0L private lateinit var database: ExposureDatabase Loading Loading @@ -55,6 +57,9 @@ class ScannerService : Service() { } } } private val handler = Handler(Looper.getMainLooper()) private val stopLaterRunnable = Runnable { stopScan() } private val startLaterRunnable = Runnable { startScan() } private val scanner: BluetoothLeScanner? get() = getDefaultAdapter()?.bluetoothLeScanner Loading Loading @@ -101,9 +106,11 @@ class ScannerService : Service() { @Synchronized private fun startScan() { if (started) return if (scanning) return val scanner = scanner ?: return Log.d(TAG, "Starting scanner for service $SERVICE_UUID") handler.removeCallbacks(startLaterRunnable) seenAdvertisements = 0 scanner.startScan( listOf(ScanFilter.Builder() .setServiceUuid(SERVICE_UUID) Loading @@ -114,25 +121,32 @@ class ScannerService : Service() { .build(), callback ) started = true startTime = System.currentTimeMillis() scanning = true lastStartTime = System.currentTimeMillis() handler.postDelayed(stopLaterRunnable, SCANNING_TIME_MS) } @Synchronized private fun stopScan() { if (!started) return if (!scanning) return Log.d(TAG, "Stopping scanner for service $SERVICE_UUID") started = false handler.removeCallbacks(stopLaterRunnable) scanning = false scanner?.stopScan(callback) if (ExposurePreferences(this).enabled) { handler.postDelayed(startLaterRunnable, ((lastStartTime + SCANNING_INTERVAL_MS) - System.currentTimeMillis()).coerceIn(0, SCANNING_INTERVAL_MS)) } } override fun dump(fd: FileDescriptor?, writer: PrintWriter?, args: Array<out String>?) { writer?.println("Started: $started") if (started) { writer?.println("Since ${Date(startTime)}") writer?.println("Seen advertisements: $seenAdvertisements") writer?.println("Last advertisement: ${Date(lastAdvertisement)}") } writer?.println("Scanning now: $scanning") writer?.println("Last scan start: ${Date(lastStartTime)}") if (Build.VERSION.SDK_INT >= 29) { writer?.println("Scan start pending: ${handler.hasCallbacks(startLaterRunnable)}") writer?.println("Scan stop pending: ${handler.hasCallbacks(stopLaterRunnable)}") } writer?.println("Seen advertisements since last scan start: $seenAdvertisements") writer?.println("Last advertisement seen: ${Date(lastAdvertisement)}") } companion object { Loading Loading
play-services-nearby-core/src/main/kotlin/org/microg/gms/nearby/exposurenotification/Constants.kt +5 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,11 @@ import java.util.* const val TAG = "ExposureNotification" val SERVICE_UUID = ParcelUuid(UUID.fromString("0000FD6F-0000-1000-8000-00805F9B34FB")) const val SCANNING_INTERVAL = 3 * 60 // Google uses 5m, but we use a slightly different scanning and reporting system const val SCANNING_INTERVAL_MS = SCANNING_INTERVAL * 1000L const val SCANNING_TIME = 20 // Google uses 4s + 13s (if Bluetooth is used by something else) const val SCANNING_TIME_MS = SCANNING_TIME * 1000L const val ROLLING_WINDOW_LENGTH = 10 * 60 const val ROLLING_WINDOW_LENGTH_MS = ROLLING_WINDOW_LENGTH * 1000 const val ROLLING_PERIOD = 144 Loading
play-services-nearby-core/src/main/kotlin/org/microg/gms/nearby/exposurenotification/ScannerService.kt +26 −12 Original line number Diff line number Diff line Loading @@ -14,7 +14,9 @@ import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Build import android.os.Handler import android.os.IBinder import android.os.Looper import android.util.Log import org.microg.gms.common.ForegroundServiceContext import java.io.FileDescriptor Loading @@ -23,8 +25,8 @@ import java.util.* @TargetApi(21) class ScannerService : Service() { private var started = false private var startTime = 0L private var scanning = false private var lastStartTime = 0L private var seenAdvertisements = 0L private var lastAdvertisement = 0L private lateinit var database: ExposureDatabase Loading Loading @@ -55,6 +57,9 @@ class ScannerService : Service() { } } } private val handler = Handler(Looper.getMainLooper()) private val stopLaterRunnable = Runnable { stopScan() } private val startLaterRunnable = Runnable { startScan() } private val scanner: BluetoothLeScanner? get() = getDefaultAdapter()?.bluetoothLeScanner Loading Loading @@ -101,9 +106,11 @@ class ScannerService : Service() { @Synchronized private fun startScan() { if (started) return if (scanning) return val scanner = scanner ?: return Log.d(TAG, "Starting scanner for service $SERVICE_UUID") handler.removeCallbacks(startLaterRunnable) seenAdvertisements = 0 scanner.startScan( listOf(ScanFilter.Builder() .setServiceUuid(SERVICE_UUID) Loading @@ -114,25 +121,32 @@ class ScannerService : Service() { .build(), callback ) started = true startTime = System.currentTimeMillis() scanning = true lastStartTime = System.currentTimeMillis() handler.postDelayed(stopLaterRunnable, SCANNING_TIME_MS) } @Synchronized private fun stopScan() { if (!started) return if (!scanning) return Log.d(TAG, "Stopping scanner for service $SERVICE_UUID") started = false handler.removeCallbacks(stopLaterRunnable) scanning = false scanner?.stopScan(callback) if (ExposurePreferences(this).enabled) { handler.postDelayed(startLaterRunnable, ((lastStartTime + SCANNING_INTERVAL_MS) - System.currentTimeMillis()).coerceIn(0, SCANNING_INTERVAL_MS)) } } override fun dump(fd: FileDescriptor?, writer: PrintWriter?, args: Array<out String>?) { writer?.println("Started: $started") if (started) { writer?.println("Since ${Date(startTime)}") writer?.println("Seen advertisements: $seenAdvertisements") writer?.println("Last advertisement: ${Date(lastAdvertisement)}") } writer?.println("Scanning now: $scanning") writer?.println("Last scan start: ${Date(lastStartTime)}") if (Build.VERSION.SDK_INT >= 29) { writer?.println("Scan start pending: ${handler.hasCallbacks(startLaterRunnable)}") writer?.println("Scan stop pending: ${handler.hasCallbacks(stopLaterRunnable)}") } writer?.println("Seen advertisements since last scan start: $seenAdvertisements") writer?.println("Last advertisement seen: ${Date(lastAdvertisement)}") } companion object { Loading