Loading android/app/src/com/android/bluetooth/gatt/ScanManager.java +35 −25 Original line number Diff line number Diff line Loading @@ -77,6 +77,8 @@ public class ScanManager { private int mLastConfiguredBatchTruncClientIf = Integer.MIN_VALUE; private GattService mService; private BroadcastReceiver mBatchAlarmReceiver; private boolean mBatchAlarmReceiverRegistered; private ScanNative mScanNative; private ClientHandler mHandler; Loading Loading @@ -301,8 +303,7 @@ public class ScanManager { mBatchScanIntervalIntent = PendingIntent.getBroadcast(mService, 0, batchIntent, 0); IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_REFRESH_BATCHED_SCAN); mService.registerReceiver( new BroadcastReceiver() { mBatchAlarmReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "awakened up at time " + SystemClock.elapsedRealtime()); Loading @@ -316,7 +317,9 @@ public class ScanManager { flushBatchScanResults(mBatchClients.iterator().next()); } } }, filter); }; mService.registerReceiver(mBatchAlarmReceiver, filter); mBatchAlarmReceiverRegistered = true; } private void resetCountDownLatch() { Loading Loading @@ -426,7 +429,6 @@ public class ScanManager { } } ScanClient getAggressiveClient(Set<ScanClient> cList, boolean isBatchClientList, int resultType) { ScanClient result = null; int curScanSetting = Integer.MIN_VALUE; Loading Loading @@ -497,7 +499,6 @@ public class ScanManager { } } void startRegularScan(ScanClient client) { if (mFilterIndexStack.isEmpty() && isFilteringSupported()) { initFilterIndexStack(); Loading Loading @@ -527,15 +528,18 @@ public class ScanManager { setBatchAlarm(); } // Set the batch alarm to be triggered within a short window after batch interval. This // allows system to optimize wake up time while still allows a degree of precise control. private void setBatchAlarm() { if (mBatchClients.isEmpty()) { // Cancel any pending alarm just in case. mAlarmManager.cancel(mBatchScanIntervalIntent); return; } long batchTriggerIntervalMillis = getBatchTriggerIntervalMillis(); mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + batchTriggerIntervalMillis, batchTriggerIntervalMillis, // Allows the alarm to be triggered within // [batchTriggerIntervalMillis, 1.1 * batchTriggerIntervalMillis] long windowLengthMillis = batchTriggerIntervalMillis / 10; long windowStartMillis = SystemClock.elapsedRealtime() + batchTriggerIntervalMillis; mAlarmManager.setWindow(AlarmManager.ELAPSED_REALTIME_WAKEUP, windowStartMillis, windowLengthMillis, mBatchScanIntervalIntent); } Loading Loading @@ -569,10 +573,16 @@ public class ScanManager { resetCountDownLatch(); gattClientReadScanReportsNative(client.clientIf, resultType); waitForCallback(); setBatchAlarm(); } void cleanup() { mAlarmManager.cancel(mBatchScanIntervalIntent); // Protect against multiple calls of cleanup. if (mBatchAlarmReceiverRegistered) { mService.unregisterReceiver(mBatchAlarmReceiver); } mBatchAlarmReceiverRegistered = false; } private long getBatchTriggerIntervalMillis() { Loading Loading
android/app/src/com/android/bluetooth/gatt/ScanManager.java +35 −25 Original line number Diff line number Diff line Loading @@ -77,6 +77,8 @@ public class ScanManager { private int mLastConfiguredBatchTruncClientIf = Integer.MIN_VALUE; private GattService mService; private BroadcastReceiver mBatchAlarmReceiver; private boolean mBatchAlarmReceiverRegistered; private ScanNative mScanNative; private ClientHandler mHandler; Loading Loading @@ -301,8 +303,7 @@ public class ScanManager { mBatchScanIntervalIntent = PendingIntent.getBroadcast(mService, 0, batchIntent, 0); IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_REFRESH_BATCHED_SCAN); mService.registerReceiver( new BroadcastReceiver() { mBatchAlarmReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "awakened up at time " + SystemClock.elapsedRealtime()); Loading @@ -316,7 +317,9 @@ public class ScanManager { flushBatchScanResults(mBatchClients.iterator().next()); } } }, filter); }; mService.registerReceiver(mBatchAlarmReceiver, filter); mBatchAlarmReceiverRegistered = true; } private void resetCountDownLatch() { Loading Loading @@ -426,7 +429,6 @@ public class ScanManager { } } ScanClient getAggressiveClient(Set<ScanClient> cList, boolean isBatchClientList, int resultType) { ScanClient result = null; int curScanSetting = Integer.MIN_VALUE; Loading Loading @@ -497,7 +499,6 @@ public class ScanManager { } } void startRegularScan(ScanClient client) { if (mFilterIndexStack.isEmpty() && isFilteringSupported()) { initFilterIndexStack(); Loading Loading @@ -527,15 +528,18 @@ public class ScanManager { setBatchAlarm(); } // Set the batch alarm to be triggered within a short window after batch interval. This // allows system to optimize wake up time while still allows a degree of precise control. private void setBatchAlarm() { if (mBatchClients.isEmpty()) { // Cancel any pending alarm just in case. mAlarmManager.cancel(mBatchScanIntervalIntent); return; } long batchTriggerIntervalMillis = getBatchTriggerIntervalMillis(); mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + batchTriggerIntervalMillis, batchTriggerIntervalMillis, // Allows the alarm to be triggered within // [batchTriggerIntervalMillis, 1.1 * batchTriggerIntervalMillis] long windowLengthMillis = batchTriggerIntervalMillis / 10; long windowStartMillis = SystemClock.elapsedRealtime() + batchTriggerIntervalMillis; mAlarmManager.setWindow(AlarmManager.ELAPSED_REALTIME_WAKEUP, windowStartMillis, windowLengthMillis, mBatchScanIntervalIntent); } Loading Loading @@ -569,10 +573,16 @@ public class ScanManager { resetCountDownLatch(); gattClientReadScanReportsNative(client.clientIf, resultType); waitForCallback(); setBatchAlarm(); } void cleanup() { mAlarmManager.cancel(mBatchScanIntervalIntent); // Protect against multiple calls of cleanup. if (mBatchAlarmReceiverRegistered) { mService.unregisterReceiver(mBatchAlarmReceiver); } mBatchAlarmReceiverRegistered = false; } private long getBatchTriggerIntervalMillis() { Loading