diff options
author | Matt Walliser <mattwalliser@google.com> | 2023-11-29 21:59:48 +0000 |
---|---|---|
committer | Matt Walliser <mattwalliser@google.com> | 2023-11-30 21:31:20 +0000 |
commit | 842b89a9def5dad1fa5b52f218e0b50d720e2a8f (patch) | |
tree | fd0bbeac22ab0f144a104ba29d419a95bf63456d | |
parent | 7c89c01de6944eb4ee57a7e8229d7c9d454a535a (diff) | |
download | wifi-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.java | 15 | ||||
-rw-r--r-- | libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java | 159 |
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, |