summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuang Anh Luong <qal@google.com>2023-11-01 15:07:11 +0900
committerQuang Anh Luong <qal@google.com>2023-11-01 15:41:38 +0900
commit2778b425d02e55f14cd531bd941ac1cd29d163eb (patch)
treecb72dad457c7ddcd6b20e6d39949556e4cb2c1a4
parent8fe66bc11f8a9b6a63ed86c2868eaf98e2d39ba3 (diff)
downloadwifi-2778b425d02e55f14cd531bd941ac1cd29d163eb.tar.gz
Add methods to indicate scanning status
Add onScanRequested() and onWifiEntriesChanged(int reason) callbacks to indicate scanning state. This is useful for Settings to show the progress bar while the device is scanning. Bug: 308567866 Test: atest WifiTrackerLibTests Change-Id: I9b92e52195445dea915e7c77d95f98d7ceb23465
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java17
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java55
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java39
3 files changed, 90 insertions, 21 deletions
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
index c7f6bba1f..1e11afa2a 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
@@ -830,6 +830,7 @@ public class BaseWifiTracker {
Log.v(mTag, "Issuing scan request from WifiScanner");
}
wifiScanner.startScan(scanSettings, mFirstScanListener);
+ notifyOnScanRequested();
return;
} else {
Log.e(mTag, "Failed to retrieve WifiScanner!");
@@ -864,6 +865,7 @@ public class BaseWifiTracker {
// Remove any pending scanLoops in case possiblyStartScanning was called more than once.
removeCallbacksAndMessages(null);
mWifiManager.startScan();
+ notifyOnScanRequested();
postDelayed(this::scanLoop, mScanIntervalMillis);
}
}
@@ -886,6 +888,16 @@ public class BaseWifiTracker {
}
/**
+ * Posts onScanRequested callback on the main thread.
+ */
+ @WorkerThread
+ private void notifyOnScanRequested() {
+ if (mListener != null) {
+ mMainHandler.post(mListener::onScanRequested);
+ }
+ }
+
+ /**
* Base callback handling Wi-Fi state changes
*
* Subclasses should extend this for their own needs.
@@ -896,5 +908,10 @@ public class BaseWifiTracker {
*/
@MainThread
void onWifiStateChanged();
+
+ @MainThread
+ default void onScanRequested() {
+ // Do nothing.
+ }
}
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
index 8bec6bbfc..83bd6be28 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
@@ -60,6 +60,7 @@ import android.util.SparseArray;
import androidx.annotation.AnyThread;
import androidx.annotation.GuardedBy;
+import androidx.annotation.IntDef;
import androidx.annotation.MainThread;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -68,6 +69,8 @@ import androidx.annotation.WorkerThread;
import androidx.core.os.BuildCompat;
import androidx.lifecycle.Lifecycle;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.time.Clock;
import java.util.ArrayList;
import java.util.Collections;
@@ -344,7 +347,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
checkNotNull(intent, "Intent cannot be null!");
conditionallyUpdateScanResults(
intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, true));
- updateWifiEntries();
+ updateWifiEntries(WIFI_ENTRIES_CHANGED_REASON_SCAN_RESULTS);
}
@WorkerThread
@@ -526,11 +529,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
}
}
- /**
- * Update the list returned by getWifiEntries() with the current states of the entry caches.
- */
- @WorkerThread
- protected void updateWifiEntries() {
+ protected void updateWifiEntries(@WifiEntriesChangedReason int reason) {
synchronized (mLock) {
mActiveWifiEntries.clear();
mActiveWifiEntries.addAll(mStandardWifiEntryCache);
@@ -639,6 +638,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
}
Collections.sort(mWifiEntries, WifiEntry.WIFI_PICKER_COMPARATOR);
if (isVerboseLoggingEnabled()) {
+ Log.v(TAG, "onWifiEntriesChanged: reason=" + reason);
StringJoiner entryLog = new StringJoiner("\n");
int numEntries = mActiveWifiEntries.size() + mWifiEntries.size();
int index = 1;
@@ -654,7 +654,16 @@ public class WifiPickerTracker extends BaseWifiTracker {
Log.v(TAG, "MergedCarrierEntry: " + mMergedCarrierEntry);
}
}
- notifyOnWifiEntriesChanged();
+ notifyOnWifiEntriesChanged(reason);
+ }
+
+
+ /**
+ * Update the list returned by getWifiEntries() with the current states of the entry caches.
+ */
+ @WorkerThread
+ protected void updateWifiEntries() {
+ updateWifiEntries(WIFI_ENTRIES_CHANGED_REASON_GENERAL);
}
/**
@@ -693,7 +702,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
}
}
}
- notifyOnWifiEntriesChanged();
+ notifyOnWifiEntriesChanged(WIFI_ENTRIES_CHANGED_REASON_GENERAL);
}
/**
@@ -1327,9 +1336,9 @@ public class WifiPickerTracker extends BaseWifiTracker {
* Posts onWifiEntryChanged callback on the main thread.
*/
@WorkerThread
- private void notifyOnWifiEntriesChanged() {
+ private void notifyOnWifiEntriesChanged(@WifiEntriesChangedReason int reason) {
if (mListener != null) {
- mMainHandler.post(mListener::onWifiEntriesChanged);
+ mMainHandler.post(() -> mListener.onWifiEntriesChanged(reason));
}
}
@@ -1353,6 +1362,17 @@ public class WifiPickerTracker extends BaseWifiTracker {
}
}
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(value = {
+ WIFI_ENTRIES_CHANGED_REASON_GENERAL,
+ WIFI_ENTRIES_CHANGED_REASON_SCAN_RESULTS,
+ })
+
+ public @interface WifiEntriesChangedReason {}
+
+ public static final int WIFI_ENTRIES_CHANGED_REASON_GENERAL = 0;
+ public static final int WIFI_ENTRIES_CHANGED_REASON_SCAN_RESULTS = 1;
+
/**
* Listener for changes to the list of visible WifiEntries as well as the number of saved
* networks and subscriptions.
@@ -1367,7 +1387,20 @@ public class WifiPickerTracker extends BaseWifiTracker {
* {@link #getMergedCarrierEntry()}
*/
@MainThread
- void onWifiEntriesChanged();
+ default void onWifiEntriesChanged() {
+ // Do nothing
+ }
+
+ /**
+ * Called when there are changes to
+ * {@link #getConnectedWifiEntry()}
+ * {@link #getWifiEntries()}
+ * {@link #getMergedCarrierEntry()}
+ */
+ @MainThread
+ default void onWifiEntriesChanged(@WifiEntriesChangedReason int reason) {
+ onWifiEntriesChanged();
+ }
/**
* Called when there are changes to
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
index 932b3a0bb..1d95568d0 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
@@ -301,8 +301,10 @@ public class WifiPickerTrackerTest {
mBroadcastReceiverCaptor.getValue().onReceive(mMockContext,
new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
+ mTestLooper.dispatchAll();
- verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
+ verify(mMockCallback, atLeastOnce())
+ .onWifiEntriesChanged(WifiPickerTracker.WIFI_ENTRIES_CHANGED_REASON_SCAN_RESULTS);
}
/**
@@ -607,8 +609,10 @@ public class WifiPickerTrackerTest {
when(mMockWifiInfo.getRssi()).thenReturn(-50);
mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(
mMockNetwork, mMockNetworkCapabilities);
+ mTestLooper.dispatchAll();
- verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
+ verify(mMockCallback, atLeastOnce())
+ .onWifiEntriesChanged(WifiPickerTracker.WIFI_ENTRIES_CHANGED_REASON_GENERAL);
assertThat(wifiPickerTracker.getWifiEntries()).isEmpty();
assertThat(wifiPickerTracker.getConnectedWifiEntry()).isEqualTo(entry);
}
@@ -644,9 +648,11 @@ public class WifiPickerTrackerTest {
Intent networkStateChanged = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION);
networkStateChanged.putExtra(WifiManager.EXTRA_NETWORK_INFO, mockNetworkInfo);
mBroadcastReceiverCaptor.getValue().onReceive(mMockContext, networkStateChanged);
+ mTestLooper.dispatchAll();
// Network should be returned in getConnectedWifiEntry() even though it's not L3 connected.
- verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
+ verify(mMockCallback, atLeastOnce())
+ .onWifiEntriesChanged(WifiPickerTracker.WIFI_ENTRIES_CHANGED_REASON_GENERAL);
assertThat(wifiPickerTracker.getWifiEntries()).isEmpty();
assertThat(wifiPickerTracker.getConnectedWifiEntry()).isEqualTo(entry);
assertThat(entry.isPrimaryNetwork()).isTrue();
@@ -682,9 +688,11 @@ public class WifiPickerTrackerTest {
Intent networkStateChanged = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION);
networkStateChanged.putExtra(WifiManager.EXTRA_NETWORK_INFO, mockNetworkInfo);
mBroadcastReceiverCaptor.getValue().onReceive(mMockContext, networkStateChanged);
+ mTestLooper.dispatchAll();
// Network should be returned in getConnectedWifiEntry() even though it's not L3 connected.
- verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
+ verify(mMockCallback, atLeastOnce())
+ .onWifiEntriesChanged(WifiPickerTracker.WIFI_ENTRIES_CHANGED_REASON_GENERAL);
assertThat(wifiPickerTracker.getConnectedWifiEntry()).isNotNull();
}
@@ -713,8 +721,10 @@ public class WifiPickerTrackerTest {
when(mMockWifiInfo.getRssi()).thenReturn(-50);
mNetworkCallbackCaptor.getValue().onCapabilitiesChanged(
mMockNetwork, mMockNetworkCapabilities);
+ mTestLooper.dispatchAll();
- verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
+ verify(mMockCallback, atLeastOnce())
+ .onWifiEntriesChanged(WifiPickerTracker.WIFI_ENTRIES_CHANGED_REASON_GENERAL);
assertThat(wifiPickerTracker.getConnectedWifiEntry()).isNotNull();
assertThat(wifiPickerTracker.getConnectedWifiEntry().getTitle()).isEqualTo("ssid");
}
@@ -740,8 +750,10 @@ public class WifiPickerTrackerTest {
any(), mNetworkCallbackCaptor.capture(), any());
mNetworkCallbackCaptor.getValue().onLost(mMockNetwork);
+ mTestLooper.dispatchAll();
- verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
+ verify(mMockCallback, atLeastOnce())
+ .onWifiEntriesChanged(WifiPickerTracker.WIFI_ENTRIES_CHANGED_REASON_GENERAL);
assertThat(wifiPickerTracker.getConnectedWifiEntry()).isNull();
}
@@ -773,7 +785,8 @@ public class WifiPickerTrackerTest {
wifiPickerTracker.onStart();
mTestLooper.dispatchAll();
- verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
+ verify(mMockCallback, atLeastOnce())
+ .onWifiEntriesChanged(WifiPickerTracker.WIFI_ENTRIES_CHANGED_REASON_GENERAL);
assertThat(wifiPickerTracker.getConnectedWifiEntry()).isNull();
}
@@ -843,8 +856,10 @@ public class WifiPickerTrackerTest {
when(mMockWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_DISABLED);
mBroadcastReceiverCaptor.getValue().onReceive(mMockContext,
new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION));
+ mTestLooper.dispatchAll();
- verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
+ verify(mMockCallback, atLeastOnce())
+ .onWifiEntriesChanged(WifiPickerTracker.WIFI_ENTRIES_CHANGED_REASON_GENERAL);
assertThat(wifiPickerTracker.getConnectedWifiEntry()).isNull();
}
@@ -1653,7 +1668,8 @@ public class WifiPickerTrackerTest {
wifiPickerTracker.onStart();
mTestLooper.dispatchAll();
- verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
+ verify(mMockCallback, atLeastOnce())
+ .onWifiEntriesChanged(WifiPickerTracker.WIFI_ENTRIES_CHANGED_REASON_GENERAL);
assertThat(wifiPickerTracker.getConnectedWifiEntry().getTitle()).isEqualTo(friendlyName);
}
@@ -1697,7 +1713,8 @@ public class WifiPickerTrackerTest {
new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
mTestLooper.dispatchAll();
- verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
+ verify(mMockCallback, atLeastOnce())
+ .onWifiEntriesChanged(WifiPickerTracker.WIFI_ENTRIES_CHANGED_REASON_GENERAL);
assertThat(wifiPickerTracker.getConnectedWifiEntry()).isNotNull();
assertThat(wifiPickerTracker.getConnectedWifiEntry().getTitle()).isEqualTo(friendlyName);
}
@@ -2256,10 +2273,12 @@ public class WifiPickerTrackerTest {
mTestLooper.moveTimeForward(SCAN_INTERVAL_MILLIS);
mTestLooper.dispatchAll();
verify(mMockWifiManager, never()).startScan();
+ verify(mMockCallback).onScanRequested();
mScanListenerCaptor.getValue().onResults(null);
mTestLooper.dispatchAll();
verify(mMockWifiManager).startScan();
+ verify(mMockCallback, times(2)).onScanRequested();
}
/**