From e1af31c338db20727c554349e0344761dd2d4438 Mon Sep 17 00:00:00 2001 From: Kai Shi Date: Mon, 10 Aug 2020 09:29:47 -0700 Subject: wifi:get wifi stack version from com.android.wifi Use getModuleInfo() with the MODULE_APEX_NAME of "com.android.wifi" to derive wifi stack version so that the devices without taking WiFi mainline module won't hit NameNotFoundException. Bug: 163158561 Test: atest com.android.server.wifi Test: manual check to ensure device with the mainline module doesn't hit the exception Change-Id: Id3d191b0dfb324aea6b226755e611cb8f13e801b Merged-In: Id3d191b0dfb324aea6b226755e611cb8f13e801b --- service/java/com/android/server/wifi/WifiHealthMonitor.java | 12 +++++++++--- .../src/com/android/server/wifi/WifiHealthMonitorTest.java | 6 +++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/service/java/com/android/server/wifi/WifiHealthMonitor.java b/service/java/com/android/server/wifi/WifiHealthMonitor.java index bc1f9af01..7b68ffce8 100644 --- a/service/java/com/android/server/wifi/WifiHealthMonitor.java +++ b/service/java/com/android/server/wifi/WifiHealthMonitor.java @@ -24,6 +24,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.app.AlarmManager; import android.content.Context; +import android.content.pm.ModuleInfo; import android.content.pm.PackageManager; import android.net.MacAddress; import android.net.wifi.ScanResult; @@ -76,7 +77,7 @@ public class WifiHealthMonitor { "WifiHealthMonitor Schedule Post-Boot Detection Timer"; // Package name of WiFi mainline module found from the following adb command // adb shell pm list packages --apex-only| grep wifi - private static final String WIFI_APK_PACKAGE_NAME = "com.google.android.wifi"; + private static final String WIFI_APEX_NAME = "com.android.wifi"; private static final String SYSTEM_INFO_DATA_NAME = "systemInfoData"; // The time that device waits after device boot before triggering post-boot detection. // This needs be long enough so that memory read can complete before post-boot detection. @@ -542,8 +543,13 @@ public class WifiHealthMonitor { PackageManager packageManager = mContext.getPackageManager(); long wifiStackVersion = 0; try { - wifiStackVersion = packageManager.getPackageInfo( - WIFI_APK_PACKAGE_NAME, PackageManager.MATCH_APEX).getLongVersionCode(); + ModuleInfo wifiModule = packageManager.getModuleInfo( + WIFI_APEX_NAME, PackageManager.MODULE_APEX_NAME); + String wifiPackageName = wifiModule.getPackageName(); + if (wifiPackageName != null) { + wifiStackVersion = packageManager.getPackageInfo( + wifiPackageName, PackageManager.MATCH_APEX).getLongVersionCode(); + } } catch (PackageManager.NameNotFoundException e) { Log.e(TAG, " Hit PackageManager exception", e); } diff --git a/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java b/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java index 21a00f9a1..1f524994a 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java @@ -28,6 +28,7 @@ import static org.mockito.Mockito.when; import android.app.test.MockAnswerUtil.AnswerWithArguments; import android.app.test.TestAlarmManager; import android.content.Context; +import android.content.pm.ModuleInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.MacAddress; @@ -98,6 +99,8 @@ public class WifiHealthMonitorTest extends WifiBaseTest { PackageManager mPackageManager; @Mock PackageInfo mPackageInfo; + @Mock + ModuleInfo mModuleInfo; private final ArrayList mKeys = new ArrayList<>(); private final ArrayList mBlobListeners = new ArrayList<>(); @@ -154,8 +157,9 @@ public class WifiHealthMonitorTest extends WifiBaseTest { mDriverVersion = "build 1.1"; mFirmwareVersion = "HW 1.1"; when(mPackageInfo.getLongVersionCode()).thenReturn(MODULE_VERSION); - when(mContext.getPackageName()).thenReturn("WifiAPK"); when(mPackageManager.getPackageInfo(anyString(), anyInt())).thenReturn(mPackageInfo); + when(mPackageManager.getModuleInfo(anyString(), anyInt())).thenReturn(mModuleInfo); + when(mModuleInfo.getPackageName()).thenReturn("WifiAPK"); when(mContext.getPackageManager()).thenReturn(mPackageManager); mWifiConfigManager = mockConfigManager(); -- cgit v1.2.3 From 42317137d8c9bda389c7bd6cf7d5378d60b3bdc0 Mon Sep 17 00:00:00 2001 From: Kai Shi Date: Fri, 28 Aug 2020 18:03:41 -0700 Subject: wifi: get the correct mainline version when wifi is disabled update getWifiStackVersion() to return the correct mainline version even when wifi is disabled. Bug: 166835054 Test: atest com.android.server.wifi Test: manual test to confirm post-boot detection can detect SW version change correctly Change-Id: I3eb878145a761452ddcfdd0b5c424e78212fc799 Merged-In: I3eb878145a761452ddcfdd0b5c424e78212fc799 --- .../com/android/server/wifi/WifiHealthMonitor.java | 30 +++++++++++----------- .../android/server/wifi/WifiHealthMonitorTest.java | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/service/java/com/android/server/wifi/WifiHealthMonitor.java b/service/java/com/android/server/wifi/WifiHealthMonitor.java index 7b68ffce8..b21ea516d 100644 --- a/service/java/com/android/server/wifi/WifiHealthMonitor.java +++ b/service/java/com/android/server/wifi/WifiHealthMonitor.java @@ -330,8 +330,20 @@ public class WifiHealthMonitor { * @Return a non-zero value if version code is available, 0 otherwise. */ public long getWifiStackVersion() { - WifiSoftwareBuildInfo currentBuild = getWifiSystemInfoStats().getCurrSoftwareBuildInfo(); - return (currentBuild == null) ? 0 : currentBuild.getWifiStackVersion(); + PackageManager packageManager = mContext.getPackageManager(); + long wifiStackVersion = 0; + try { + ModuleInfo wifiModule = packageManager.getModuleInfo( + WIFI_APEX_NAME, PackageManager.MODULE_APEX_NAME); + String wifiPackageName = wifiModule.getPackageName(); + if (wifiPackageName != null) { + wifiStackVersion = packageManager.getPackageInfo( + wifiPackageName, PackageManager.MATCH_APEX).getLongVersionCode(); + } + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, " Hit PackageManager exception", e); + } + return wifiStackVersion; } private synchronized void dailyDetectionHandler() { @@ -540,19 +552,7 @@ public class WifiHealthMonitor { if (!mWifiEnabled) { return null; } - PackageManager packageManager = mContext.getPackageManager(); - long wifiStackVersion = 0; - try { - ModuleInfo wifiModule = packageManager.getModuleInfo( - WIFI_APEX_NAME, PackageManager.MODULE_APEX_NAME); - String wifiPackageName = wifiModule.getPackageName(); - if (wifiPackageName != null) { - wifiStackVersion = packageManager.getPackageInfo( - wifiPackageName, PackageManager.MATCH_APEX).getLongVersionCode(); - } - } catch (PackageManager.NameNotFoundException e) { - Log.e(TAG, " Hit PackageManager exception", e); - } + long wifiStackVersion = getWifiStackVersion(); String osBuildVersion = replaceNullByEmptyString(Build.DISPLAY); if (mWifiNative == null) { return null; diff --git a/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java b/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java index 1f524994a..c679954b1 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiHealthMonitorTest.java @@ -327,7 +327,7 @@ public class WifiHealthMonitorTest extends WifiBaseTest { // trigger extractCurrentSoftwareBuildInfo() call to update currSoftwareBuildInfo mWifiHealthMonitor.installMemoryStoreSetUpDetectionAlarm(mMemoryStore); mWifiHealthMonitor.setWifiEnabled(true); - assertEquals(0, mWifiHealthMonitor.getWifiStackVersion()); + assertEquals(MODULE_VERSION, mWifiHealthMonitor.getWifiStackVersion()); millisecondsPass(5000); mWifiScanner.startScan(mScanSettings, mScanListener); mAlarmManager.dispatch(WifiHealthMonitor.POST_BOOT_DETECTION_TIMER_TAG); -- cgit v1.2.3