Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Verified Commit 4663d610 authored by Marvin W.'s avatar Marvin W. 🐿️
Browse files

EN: Don't scan persistently

parent f9cc9249
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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
+26 −12
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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
@@ -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)
@@ -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 {