Add verbose logging to WifiScanner

Plumb verbose logging from WifiServiceImpl to WifiScanningServiceImpl.
Also enhances Logcat logging when verbose logging is enabled.

Bug: 268422030
Test: manually verified
Change-Id: I842cdce5c9644856cfd4be308fa5a03d3429ed07
Merged-In: I842cdce5c9644856cfd4be308fa5a03d3429ed07
(cherry picked from commit 8ce89a1f6bd7c3b6ff96b9497ac069a1802085e3)
diff --git a/framework/java/android/net/wifi/IWifiScanner.aidl b/framework/java/android/net/wifi/IWifiScanner.aidl
index 9c1b7ab..4144da5 100644
--- a/framework/java/android/net/wifi/IWifiScanner.aidl
+++ b/framework/java/android/net/wifi/IWifiScanner.aidl
@@ -62,4 +62,6 @@
             String packageName, String featureId);
 
     void stopPnoScan(in IWifiScannerListener listener, String packageName, String featureId);
+
+    void enableVerboseLogging(boolean enabled);
 }
diff --git a/framework/java/android/net/wifi/WifiScanner.java b/framework/java/android/net/wifi/WifiScanner.java
index a2257d9..56c87cb 100644
--- a/framework/java/android/net/wifi/WifiScanner.java
+++ b/framework/java/android/net/wifi/WifiScanner.java
@@ -1509,6 +1509,20 @@
         }
     }
 
+    /**
+     * Enable verbose logging. For internal use by wifi framework only.
+     * @param enabled whether verbose logging is enabled
+     * @hide
+     */
+    @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
+    public void enableVerboseLogging(boolean enabled) {
+        try {
+            mService.enableVerboseLogging(enabled);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
     /** specifies information about an access point of interest */
     @Deprecated
     public static class BssidInfo {
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 827f440..ce26812 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -5070,6 +5070,10 @@
         mWifiMulticastLockManager.enableVerboseLogging(mVerboseLoggingEnabled);
         mWifiInjector.enableVerboseLogging(mVerboseLoggingEnabled, halVerboseEnabled);
         mWifiInjector.getSarManager().enableVerboseLogging(mVerboseLoggingEnabled);
+        WifiScanner wifiScanner = mWifiInjector.getWifiScanner();
+        if (wifiScanner != null) {
+            wifiScanner.enableVerboseLogging(mVerboseLoggingEnabled);
+        }
         ApConfigUtil.enableVerboseLogging(mVerboseLoggingEnabled);
     }
 
diff --git a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
index 6190bcf..3058b3b 100644
--- a/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
+++ b/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
@@ -85,6 +85,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
 public class WifiScanningServiceImpl extends IWifiScanner.Stub {
@@ -100,6 +101,9 @@
 
     private void localLog(String message) {
         mLocalLog.log(message);
+        if (isVerboseLoggingEnabled()) {
+            Log.i(TAG, message);
+        }
     }
 
     private void logw(String message) {
@@ -483,6 +487,19 @@
         });
     }
 
+    @Override
+    public void enableVerboseLogging(boolean enabled) {
+        if (!mWifiPermissionsUtil.checkNetworkSettingsPermission(Binder.getCallingUid())) {
+            return;
+        }
+        mVerboseLoggingEnabled.set(enabled);
+        localLog("enableVerboseLogging: uid=" + Binder.getCallingUid() + " enabled=" + enabled);
+    }
+
+    private boolean isVerboseLoggingEnabled() {
+        return mVerboseLoggingEnabled.get();
+    }
+
     private void enforceNetworkStack(int uid) {
         mContext.enforcePermission(
                 Manifest.permission.NETWORK_STACK,
@@ -585,6 +602,8 @@
     private final LastCallerInfoManager mLastCallerInfoManager;
     private final DeviceConfigFacade mDeviceConfigFacade;
 
+    private AtomicBoolean mVerboseLoggingEnabled = new AtomicBoolean(false);
+
     WifiScanningServiceImpl(Context context, Looper looper,
             WifiScannerImpl.WifiScannerImplFactory scannerImplFactory,
             BatteryStatsManager batteryStats, WifiInjector wifiInjector) {