summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-11-08 00:23:45 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-11-08 00:23:45 +0000
commit7cdeafec6810587ad6f7abbe6295a749803ceb5e (patch)
treeee755fbb2256808fd6dfc48074ab4d46d90d0d1e
parent11e0c7252f2a788edc484491a1ce35ec3e7293e5 (diff)
parent6b4e6d40221192bc5fbb545bd6a18cb6e168a93a (diff)
downloadwifi-7cdeafec6810587ad6f7abbe6295a749803ceb5e.tar.gz
Snap for 11065517 from 6b4e6d40221192bc5fbb545bd6a18cb6e168a93a to 24Q1-release
Change-Id: I1612f174db884b74c5e9a440a61629c798b06836
-rw-r--r--libs/WifiTrackerLib/Android.bp4
-rw-r--r--libs/WifiTrackerLib/sdk_src/src/com/android/wifitrackerlib/NonSdkApiWrapper.java8
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java17
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java5
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/NonSdkApiWrapper.java9
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java55
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java16
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java39
8 files changed, 123 insertions, 30 deletions
diff --git a/libs/WifiTrackerLib/Android.bp b/libs/WifiTrackerLib/Android.bp
index 25270137a..ae16f1a23 100644
--- a/libs/WifiTrackerLib/Android.bp
+++ b/libs/WifiTrackerLib/Android.bp
@@ -10,7 +10,6 @@ java_defaults {
"androidx.annotation_annotation",
"androidx.core_core",
"androidx.lifecycle_lifecycle-runtime",
- "wifi_aconfig_flags_lib",
"WifiTrackerLibRes",
"SettingsLibHelpUtils",
],
@@ -21,6 +20,9 @@ java_defaults {
android_library {
name: "WifiTrackerLib",
defaults: ["WifiTrackerLibDefaults"],
+ static_libs: [
+ "wifi_aconfig_flags_lib",
+ ],
srcs: ["src/**/*.java"],
}
diff --git a/libs/WifiTrackerLib/sdk_src/src/com/android/wifitrackerlib/NonSdkApiWrapper.java b/libs/WifiTrackerLib/sdk_src/src/com/android/wifitrackerlib/NonSdkApiWrapper.java
index 52c51557b..4ea48626a 100644
--- a/libs/WifiTrackerLib/sdk_src/src/com/android/wifitrackerlib/NonSdkApiWrapper.java
+++ b/libs/WifiTrackerLib/sdk_src/src/com/android/wifitrackerlib/NonSdkApiWrapper.java
@@ -101,4 +101,12 @@ class NonSdkApiWrapper {
// Return null since SUW does not have QUERY_ADMIN_POLICY permission.
return null;
}
+
+ /**
+ * Whether the hotspot network provider battery charging status flag is enabled.
+ */
+ static boolean isNetworkProviderBatteryChargingStatusEnabled() {
+ // Google3 can't access trunk stable flags, so default to false.
+ return false;
+ }
}
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/HotspotNetworkEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
index 11aec21a9..4eca037a4 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
@@ -19,8 +19,6 @@ package com.android.wifitrackerlib;
import static android.net.wifi.WifiInfo.DEFAULT_MAC_ADDRESS;
import static android.os.Build.VERSION_CODES;
-import static com.android.wifi.flags.Flags.networkProviderBatteryChargingStatus;
-
import android.annotation.TargetApi;
import android.content.Context;
import android.icu.text.MessageFormat;
@@ -348,7 +346,8 @@ public class HotspotNetworkEntry extends WifiEntry {
* If the host device is currently charging its battery.
*/
public synchronized boolean isBatteryCharging() {
- if (mHotspotNetworkData == null || !networkProviderBatteryChargingStatus()) {
+ if (mHotspotNetworkData == null
+ || !NonSdkApiWrapper.isNetworkProviderBatteryChargingStatusEnabled()) {
return false;
}
return mHotspotNetworkData.getNetworkProviderInfo().isBatteryCharging();
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NonSdkApiWrapper.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NonSdkApiWrapper.java
index 0a71bcbe8..9b61c6646 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NonSdkApiWrapper.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NonSdkApiWrapper.java
@@ -16,6 +16,8 @@
package com.android.wifitrackerlib;
+import static com.android.wifi.flags.Flags.networkProviderBatteryChargingStatus;
+
import android.app.admin.DevicePolicyManager;
import android.app.admin.WifiSsidPolicy;
import android.content.Context;
@@ -134,4 +136,11 @@ class NonSdkApiWrapper {
}
return null;
}
+
+ /**
+ * Whether the hotspot network provider battery charging status flag is enabled.
+ */
+ static boolean isNetworkProviderBatteryChargingStatusEnabled() {
+ return networkProviderBatteryChargingStatus();
+ }
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
index c853578ff..6401f094f 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/HotspotNetworkEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java
index 637f3f5d5..235a70e88 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java
@@ -20,6 +20,8 @@ import static android.net.wifi.ScanResult.WIFI_STANDARD_11N;
import static android.net.wifi.WifiInfo.SECURITY_TYPE_PSK;
import static android.net.wifi.WifiInfo.SECURITY_TYPE_SAE;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.wifitrackerlib.WifiEntry.CONNECTED_STATE_CONNECTED;
import static com.android.wifitrackerlib.WifiEntry.CONNECTED_STATE_DISCONNECTED;
import static com.android.wifitrackerlib.WifiEntry.MIN_FREQ_24GHZ;
@@ -48,17 +50,15 @@ import android.net.wifi.sharedconnectivity.app.NetworkProviderInfo;
import android.net.wifi.sharedconnectivity.app.SharedConnectivityManager;
import android.os.Handler;
import android.os.test.TestLooper;
-import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
-import com.android.wifi.flags.Flags;
-
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import org.mockito.MockitoSession;
public class HotspotNetworkEntryTest {
@Rule
@@ -485,7 +485,6 @@ public class HotspotNetworkEntryTest {
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_NETWORK_PROVIDER_BATTERY_CHARGING_STATUS)
public void testIsBatteryCharging_usesHotspotNetworkData() {
final HotspotNetworkEntry entry = new HotspotNetworkEntry(
mMockInjector, mMockContext, mTestHandler,
@@ -505,7 +504,14 @@ public class HotspotNetworkEntryTest {
.addHotspotSecurityType(SECURITY_TYPE_PSK)
.build());
- assertThat(entry.isBatteryCharging()).isTrue();
+ MockitoSession session = mockitoSession().spyStatic(NonSdkApiWrapper.class).startMocking();
+ try {
+ doReturn(true).when(() ->
+ NonSdkApiWrapper.isNetworkProviderBatteryChargingStatusEnabled());
+ assertThat(entry.isBatteryCharging()).isTrue();
+ } finally {
+ session.finishMocking();
+ }
}
@Test
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();
}
/**