Snap for 11908474 from c4b622b391d4bb0bb98b433fc9b95da73c965ccc to 24Q3-release Change-Id: Ib2c0e31c26135e1885af8909f36a4379fb3646c0
diff --git a/service/java/com/android/server/wifi/DeviceConfigFacade.java b/service/java/com/android/server/wifi/DeviceConfigFacade.java index f908046..6116aae 100644 --- a/service/java/com/android/server/wifi/DeviceConfigFacade.java +++ b/service/java/com/android/server/wifi/DeviceConfigFacade.java
@@ -918,6 +918,15 @@ mOobPseudonymFeatureFlagChangedListener = listener; } + /** + * Get the set of bugreports that are explicitly disabled. + * @return A Set of String to indicate disabled auto-bugreports trigger points. + */ + public Set<String> getDisabledAutoBugreportTitleAndDetails() { + // TODO: b/336376991 + return Collections.EMPTY_SET; + } + public FeatureFlags getFeatureFlags() { return mFeatureFlags; }
diff --git a/service/java/com/android/server/wifi/HalDeviceManager.java b/service/java/com/android/server/wifi/HalDeviceManager.java index 99f929c..b5ff88a 100644 --- a/service/java/com/android/server/wifi/HalDeviceManager.java +++ b/service/java/com/android/server/wifi/HalDeviceManager.java
@@ -1114,6 +1114,7 @@ dispatchRttControllerLifecycleOnDestroyed(); mRttControllerLifecycleCallbacks.clear(); mWifiP2pIfaces.clear(); + mWifiInjector.getWifiConfigManager().writeDataToStorage(); } private class WifiDeathRecipient implements WifiHal.DeathRecipient {
diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java index ba6ec48..9b0af36 100644 --- a/service/java/com/android/server/wifi/WifiConfigManager.java +++ b/service/java/com/android/server/wifi/WifiConfigManager.java
@@ -4566,9 +4566,9 @@ } /** - * Handle the device shutdown, should write all cached data to the storage + * Write all cached data to the storage */ - public void handleShutDown() { + public void writeDataToStorage() { if (mPendingStoreRead) { Log.e(TAG, "Cannot save to store before store is read!"); return;
diff --git a/service/java/com/android/server/wifi/WifiDiagnostics.java b/service/java/com/android/server/wifi/WifiDiagnostics.java index 19fece6..4c48868 100644 --- a/service/java/com/android/server/wifi/WifiDiagnostics.java +++ b/service/java/com/android/server/wifi/WifiDiagnostics.java
@@ -1023,6 +1023,24 @@ } } + private boolean shouldTakeBugreport(String bugTitle, String bugDetail) { + long currentTimeMs = mClock.getWallClockMillis(); + long timeSinceLastUploadMs = currentTimeMs - mLastBugReportTime; + if (timeSinceLastUploadMs + < mWifiInjector.getDeviceConfigFacade().getBugReportMinWindowMs() + && mLastBugReportTime > 0) { + Log.d(TAG, "Bugreport was filed recently, skip " + bugTitle + "(" + bugDetail + ")"); + return false; + } + String titleAndDetail = bugTitle + bugDetail; + if (mWifiInjector.getDeviceConfigFacade().getDisabledAutoBugreportTitleAndDetails() + .contains(titleAndDetail)) { + Log.d(TAG, "Bugreport explicitly disabled " + bugTitle + "(" + bugDetail + ")"); + return false; + } + return true; + } + /** * Initiates a system-level bug report if there is no bug report taken recently. * This is done in a non-blocking fashion. @@ -1035,12 +1053,7 @@ return; } - long currentTimeMs = mClock.getWallClockMillis(); - long timeSinceLastUploadMs = currentTimeMs - mLastBugReportTime; - if (timeSinceLastUploadMs - < mWifiInjector.getDeviceConfigFacade().getBugReportMinWindowMs() - && mLastBugReportTime > 0) { - Log.d(TAG, "Bugreport was filed recently, skip " + bugTitle + "(" + bugDetail + ")"); + if (!shouldTakeBugreport(bugTitle, bugDetail)) { return; }
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index 7914f15..752d9a6 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -1033,7 +1033,7 @@ // before memory store write triggered by mMemoryStoreImpl.stop(). mWifiScoreCard.resetAllConnectionStates(); mMemoryStoreImpl.stop(); - mWifiConfigManager.handleShutDown(); + mWifiConfigManager.writeDataToStorage(); } private boolean checkNetworkSettingsPermission(int pid, int uid) {
diff --git a/service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java index 36e54b0..67293df 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java
@@ -138,6 +138,7 @@ @Mock private WorkSourceHelper mWorkSourceHelper1; @Mock private WorkSourceHelper mWorkSourceHelper2; @Mock private DeviceConfigFacade mDeviceConfigFacade; + @Mock private WifiConfigManager mWifiConfigManager; @Mock private FeatureFlags mFeatureFlags; private TestLooper mTestLooper; private Handler mHandler; @@ -175,6 +176,7 @@ mHandler = new Handler(mTestLooper.getLooper()); when(mWifiInjector.getInterfaceConflictManager()).thenReturn(mInterfaceConflictManager); + when(mWifiInjector.getWifiConfigManager()).thenReturn(mWifiConfigManager); when(mInterfaceConflictManager.needsUserApprovalToDelete(anyInt(), any(), anyInt(), any())) .thenReturn(false); when(mWifiInjector.makeWsHelper(TEST_WORKSOURCE_0)).thenReturn(mWorkSourceHelper0); @@ -248,6 +250,7 @@ // verify: onStop called mInOrder.verify(mWifiMock).stop(); mInOrder.verify(mManagerStatusListenerMock).onStatusChanged(); + verify(mWifiConfigManager).writeDataToStorage(); verifyNoMoreInteractions(mManagerStatusListenerMock); } @@ -300,6 +303,7 @@ // verify: getting onStop mInOrder.verify(mManagerStatusListenerMock).onStatusChanged(); + verify(mWifiConfigManager).writeDataToStorage(); // act: start collector.checkThat(mDut.start(), equalTo(true));
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java index 7441990..68a763e 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
@@ -4080,7 +4080,7 @@ mContextConfigStoreMockOrder.verify(mWifiConfigStore).write(); verify(mWifiMetrics).wifiConfigStored(anyInt()); // Verify shut down handling - mWifiConfigManager.handleShutDown(); + mWifiConfigManager.writeDataToStorage(); mContextConfigStoreMockOrder.verify(mWifiConfigStore).write(); }
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiDiagnosticsTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiDiagnosticsTest.java index f2a2f44..4457977 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/WifiDiagnosticsTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/WifiDiagnosticsTest.java
@@ -59,6 +59,8 @@ import java.io.StringWriter; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.regex.Pattern; @@ -159,6 +161,8 @@ when(mActiveModeWarden.getPrimaryClientModeManager()).thenReturn(mClientModeManager); when(mActiveModeWarden.getClientModeManagers()).thenReturn(clientModeManagerList); when(mDeviceConfigFacade.getBugReportMinWindowMs()).thenReturn(BUG_REPORT_MIN_WINDOW_MS); + when(mDeviceConfigFacade.getDisabledAutoBugreportTitleAndDetails()).thenReturn( + Collections.EMPTY_SET); when(mContext.getPackageManager()).thenReturn(mPackageManager); when(mPackageManager.queryIntentActivities(any(), anyInt())).thenReturn(mResolveInfoList); // needed to for the loop in WifiDiagnostics.readLogcatStreamLinesWithTimeout(). @@ -924,6 +928,17 @@ } @Test + public void takeBugreportIgnoredWhenTitleAndDetailDisabled() { + // Verify bugreport is disabled for a specific title and detail. + // Use set of empty String here to match empty title and detail. + when(mDeviceConfigFacade.getDisabledAutoBugreportTitleAndDetails()).thenReturn( + new HashSet<>(Arrays.asList("TITLEDETAIL"))); + when(mBuildProperties.isUserBuild()).thenReturn(false); + mWifiDiagnostics.takeBugReport("TITLE", "DETAIL"); + verify(mPackageManager, never()).queryIntentActivities(any(), anyInt()); + } + + @Test public void takeBugReportSwallowsExceptions() { when(mBuildProperties.isUserBuild()).thenReturn(false); doThrow(new RuntimeException()).when(mBugreportManager).requestBugreport(
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java index 18851ea..284bb26 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java
@@ -12168,7 +12168,7 @@ mBroadcastReceiverCaptor.getValue().onReceive(mContext, intent); verify(mActiveModeWarden).notifyShuttingDown(); verify(mWifiScoreCard).resetAllConnectionStates(); - verify(mWifiConfigManager).handleShutDown(); + verify(mWifiConfigManager).writeDataToStorage(); } @Test(expected = SecurityException.class)