summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Walliser <mattwalliser@google.com>2023-11-29 21:59:48 +0000
committerMatt Walliser <mattwalliser@google.com>2023-11-30 21:31:20 +0000
commit842b89a9def5dad1fa5b52f218e0b50d720e2a8f (patch)
treefd0bbeac22ab0f144a104ba29d419a95bf63456d
parent7c89c01de6944eb4ee57a7e8229d7c9d454a535a (diff)
downloadwifi-842b89a9def5dad1fa5b52f218e0b50d720e2a8f.tar.gz
Have WifiTrackerLib fallback to extras bundle for isBatteryCharging
Bug: 313936582 Test: atest com.android.wifitrackerlib.HotspotNetworkEntryTest Change-Id: Ie76e81152ec67fadc5a47260740ea9b0a7e1658b
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java15
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java159
2 files changed, 170 insertions, 4 deletions
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
index 4a1341454..cccb6dea7 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
@@ -39,6 +39,7 @@ import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.WorkerThread;
+import androidx.core.os.BuildCompat;
import org.json.JSONException;
import org.json.JSONObject;
@@ -59,6 +60,8 @@ public class HotspotNetworkEntry extends WifiEntry {
static final String TAG = "HotspotNetworkEntry";
public static final String KEY_PREFIX = "HotspotNetworkEntry:";
+ public static final String EXTRA_KEY_IS_BATTERY_CHARGING = "is_battery_charging";
+
@NonNull private final WifiTrackerInjector mInjector;
@NonNull private final Context mContext;
@Nullable private final SharedConnectivityManager mSharedConnectivityManager;
@@ -351,11 +354,17 @@ public class HotspotNetworkEntry extends WifiEntry {
* If the host device is currently charging its battery.
*/
public synchronized boolean isBatteryCharging() {
- if (mHotspotNetworkData == null
- || !NonSdkApiWrapper.isNetworkProviderBatteryChargingStatusEnabled()) {
+ if (mHotspotNetworkData == null) {
return false;
}
- return mHotspotNetworkData.getNetworkProviderInfo().isBatteryCharging();
+ if (BuildCompat.isAtLeastV()
+ && NonSdkApiWrapper.isNetworkProviderBatteryChargingStatusEnabled()
+ && mHotspotNetworkData.getNetworkProviderInfo().isBatteryCharging()) {
+ return true;
+ }
+ // With API flag on we still support either the API or the bundle for compatibility.
+ return mHotspotNetworkData.getNetworkProviderInfo().getExtras().getBoolean(
+ EXTRA_KEY_IS_BATTERY_CHARGING, false);
}
@Override
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java
index e4168e489..a664a92d2 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java
@@ -48,6 +48,7 @@ import android.net.wifi.sharedconnectivity.app.HotspotNetwork;
import android.net.wifi.sharedconnectivity.app.HotspotNetworkConnectionStatus;
import android.net.wifi.sharedconnectivity.app.NetworkProviderInfo;
import android.net.wifi.sharedconnectivity.app.SharedConnectivityManager;
+import android.os.Bundle;
import android.os.Handler;
import android.os.test.TestLooper;
import android.platform.test.flag.junit.CheckFlagsRule;
@@ -485,7 +486,7 @@ public class HotspotNetworkEntryTest {
}
@Test
- public void testIsBatteryCharging_usesHotspotNetworkData() {
+ public void testIsBatteryCharging_apiFlagOn_usesHotspotNetworkDataApi() {
final HotspotNetworkEntry entry = new HotspotNetworkEntry(
mMockInjector, mMockContext, mTestHandler,
mMockWifiManager, mMockSharedConnectivityManager,
@@ -515,6 +516,162 @@ public class HotspotNetworkEntryTest {
}
@Test
+ public void testIsBatteryCharging_apiFlagOn_usesHotspotNetworkDataExtras() {
+ final Bundle extras = new Bundle();
+ extras.putBoolean(HotspotNetworkEntry.EXTRA_KEY_IS_BATTERY_CHARGING, true);
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager,
+ new HotspotNetwork.Builder()
+ .setDeviceId(1)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Phone", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .setBatteryCharging(false)
+ .setExtras(extras)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .setHotspotSsid("Instant Hotspot abcde")
+ .addHotspotSecurityType(SECURITY_TYPE_PSK)
+ .build());
+
+ MockitoSession session = mockitoSession().spyStatic(NonSdkApiWrapper.class).startMocking();
+ try {
+ doReturn(true).when(() ->
+ NonSdkApiWrapper.isNetworkProviderBatteryChargingStatusEnabled());
+ assertThat(entry.isBatteryCharging()).isTrue();
+ } finally {
+ session.finishMocking();
+ }
+ }
+
+ @Test
+ public void testIsBatteryCharging_apiFlagOff_usesHotspotNetworkDataExtras() {
+ final Bundle extras = new Bundle();
+ extras.putBoolean(HotspotNetworkEntry.EXTRA_KEY_IS_BATTERY_CHARGING, true);
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager,
+ new HotspotNetwork.Builder()
+ .setDeviceId(1)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Phone", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .setExtras(extras)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .setHotspotSsid("Instant Hotspot abcde")
+ .addHotspotSecurityType(SECURITY_TYPE_PSK)
+ .build());
+
+ MockitoSession session = mockitoSession().spyStatic(NonSdkApiWrapper.class).startMocking();
+ try {
+ doReturn(false).when(() ->
+ NonSdkApiWrapper.isNetworkProviderBatteryChargingStatusEnabled());
+ assertThat(entry.isBatteryCharging()).isTrue();
+ } finally {
+ session.finishMocking();
+ }
+ }
+
+ @Test
+ public void testIsBatteryCharging_apiFlagOn_extraFalse() {
+ final Bundle extras = new Bundle();
+ extras.putBoolean(HotspotNetworkEntry.EXTRA_KEY_IS_BATTERY_CHARGING, false);
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager,
+ new HotspotNetwork.Builder()
+ .setDeviceId(1)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Phone", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .setExtras(extras)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .setHotspotSsid("Instant Hotspot abcde")
+ .addHotspotSecurityType(SECURITY_TYPE_PSK)
+ .build());
+
+ MockitoSession session = mockitoSession().spyStatic(NonSdkApiWrapper.class).startMocking();
+ try {
+ doReturn(true).when(() ->
+ NonSdkApiWrapper.isNetworkProviderBatteryChargingStatusEnabled());
+ assertThat(entry.isBatteryCharging()).isFalse();
+ } finally {
+ session.finishMocking();
+ }
+ }
+
+ @Test
+ public void testIsBatteryCharging_apiFlagOn_apiFalse() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager,
+ new HotspotNetwork.Builder()
+ .setDeviceId(1)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Phone", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .setBatteryCharging(false)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .setHotspotSsid("Instant Hotspot abcde")
+ .addHotspotSecurityType(SECURITY_TYPE_PSK)
+ .build());
+
+ MockitoSession session = mockitoSession().spyStatic(NonSdkApiWrapper.class).startMocking();
+ try {
+ doReturn(true).when(() ->
+ NonSdkApiWrapper.isNetworkProviderBatteryChargingStatusEnabled());
+ assertThat(entry.isBatteryCharging()).isFalse();
+ } finally {
+ session.finishMocking();
+ }
+ }
+
+ @Test
+ public void testIsBatteryCharging_apiFlagOn_noneSet() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager,
+ new HotspotNetwork.Builder()
+ .setDeviceId(1)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Phone", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .setHotspotSsid("Instant Hotspot abcde")
+ .addHotspotSecurityType(SECURITY_TYPE_PSK)
+ .build());
+
+ MockitoSession session = mockitoSession().spyStatic(NonSdkApiWrapper.class).startMocking();
+ try {
+ doReturn(true).when(() ->
+ NonSdkApiWrapper.isNetworkProviderBatteryChargingStatusEnabled());
+ assertThat(entry.isBatteryCharging()).isFalse();
+ } finally {
+ session.finishMocking();
+ }
+ }
+
+ @Test
public void testGetLevel_statusNotConnected_returnsMaxValue() {
final HotspotNetworkEntry entry = new HotspotNetworkEntry(
mMockInjector, mMockContext, mTestHandler,