// earliest recorded scan exits this window.
static final long EXCESSIVE_SCANNING_PERIOD_MS = 30 * 1000;
+ // Maximum msec before scan gets downgraded to opportunistic
+ static final int SCAN_TIMEOUT_MS = 30 * 60 * 1000;
+
String appName;
int scansStarted = 0;
int scansStopped = 0;
EXCESSIVE_SCANNING_PERIOD_MS;
}
+ synchronized boolean isScanningTooLong() {
+ if (lastScans.isEmpty() || !isScanning) {
+ return false;
+ }
+
+ return (System.currentTimeMillis() - startTime) > SCAN_TIMEOUT_MS;
+ }
+
// This function truncates the app name for privacy reasons. Apps with
// four part package names or more get truncated to three parts, and apps
// with three part package names names get truncated to two. Apps with two
private static final int MSG_FLUSH_BATCH_RESULTS = 2;
private static final int MSG_SCAN_TIMEOUT = 3;
- // Maximum msec before scan gets downgraded to opportunistic
- private static final int SCAN_TIMEOUT_MS = 30 * 60 * 1000;
-
private static final String ACTION_REFRESH_BATCHED_SCAN =
"com.android.bluetooth.gatt.REFRESH_BATCHED_SCAN";
handleFlushBatchResults(client);
break;
case MSG_SCAN_TIMEOUT:
- mScanNative.regularScanTimeout();
+ mScanNative.regularScanTimeout(client);
break;
default:
// Shouldn't happen.
Message msg = mHandler.obtainMessage(MSG_SCAN_TIMEOUT);
msg.obj = client;
// Only one timeout message should exist at any time
- mHandler.removeMessages(MSG_SCAN_TIMEOUT);
- mHandler.sendMessageDelayed(msg, SCAN_TIMEOUT_MS);
+ mHandler.sendMessageDelayed(msg, AppScanStats.SCAN_TIMEOUT_MS);
}
}
removeScanFilters(client.clientIf);
}
- void regularScanTimeout() {
- for (ScanClient client : mRegularScanClients) {
- if (!isExemptFromScanDowngrade(client)) {
- Log.w(TAG, "Moving scan client to opportunistic (clientIf "
- + client.clientIf + ")");
- setOpportunisticScanClient(client);
- client.stats.setScanTimeout();
- }
+ void regularScanTimeout(ScanClient client) {
+ if (!isExemptFromScanDowngrade(client) && client.stats.isScanningTooLong()) {
+ Log.w(TAG,
+ "Moving scan client to opportunistic (clientIf " + client.clientIf + ")");
+ setOpportunisticScanClient(client);
+ client.stats.setScanTimeout();
}
// The scan should continue for background scans