[AWARE] Restructure debugging flags to enable dynamic updates

Restructure the debugging flags to allow dynamic updates of the debug
flag. Each class has a static VDBG and a dynamically updated mDbg.

Note: there are no (or minimal changes) to the actual debugging - all
of which is gated by VDBG. A subsequent CL will move some messages to
the lower-level mDbg.

Bug: 69432628
Test: builds, runs, toggle debug flag
Change-Id: I61df2a0bb790832c7136aa1ad67a745eb388b1da
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareClientState.java b/service/java/com/android/server/wifi/aware/WifiAwareClientState.java
index 987d49e..d951257 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareClientState.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareClientState.java
@@ -43,8 +43,8 @@
  */
 public class WifiAwareClientState {
     private static final String TAG = "WifiAwareClientState";
-    private static final boolean DBG = false;
     private static final boolean VDBG = false; // STOPSHIP if true
+    /* package */ boolean mDbg = false;
 
     /* package */ static final int CLUSTER_CHANGE_EVENT_STARTED = 0;
     /* package */ static final int CLUSTER_CHANGE_EVENT_JOINED = 1;
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java b/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java
index 82bc2c4..8088d6e 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java
@@ -76,9 +76,8 @@
  */
 public class WifiAwareDataPathStateManager {
     private static final String TAG = "WifiAwareDataPathStMgr";
-
-    private static final boolean DBG = false;
     private static final boolean VDBG = false; // STOPSHIP if true
+    /* package */ boolean mDbg = false;
 
     private static final String AWARE_INTERFACE_PREFIX = "aware_data";
     private static final String NETWORK_TAG = "WIFI_AWARE_FACTORY";
@@ -350,8 +349,8 @@
         if (nnri == null) {
             Log.w(TAG, "onDataPathRequest: can't find a request with specified pubSubId=" + pubSubId
                     + ", mac=" + String.valueOf(HexEncoding.encode(mac)));
-            if (DBG) {
-                Log.d(TAG, "onDataPathRequest: network request cache = " + mNetworkRequestsCache);
+            if (VDBG) {
+                Log.v(TAG, "onDataPathRequest: network request cache = " + mNetworkRequestsCache);
             }
             mMgr.respondToDataPathRequest(false, ndpId, "", null, null, false);
             return null;
@@ -408,8 +407,8 @@
         if (nnri == null) {
             Log.w(TAG, "onRespondToDataPathRequest: can't find a request with specified ndpId="
                     + ndpId);
-            if (DBG) {
-                Log.d(TAG, "onRespondToDataPathRequest: network request cache = "
+            if (VDBG) {
+                Log.v(TAG, "onRespondToDataPathRequest: network request cache = "
                         + mNetworkRequestsCache);
             }
             return;
@@ -531,8 +530,8 @@
             nnri.startTimestamp = SystemClock.elapsedRealtime(); // update time-stamp for duration
             mAwareMetrics.recordNdpCreation(nnri.uid, mNetworkRequestsCache);
         } else {
-            if (DBG) {
-                Log.d(TAG, "onDataPathConfirm: data-path for networkSpecifier=" + networkSpecifier
+            if (VDBG) {
+                Log.v(TAG, "onDataPathConfirm: data-path for networkSpecifier=" + networkSpecifier
                         + " rejected - reason=" + reason);
             }
             mNetworkRequestsCache.remove(networkSpecifier);
@@ -555,8 +554,8 @@
         Map.Entry<WifiAwareNetworkSpecifier, AwareNetworkRequestInformation> nnriE =
                 getNetworkRequestByNdpId(ndpId);
         if (nnriE == null) {
-            if (DBG) {
-                Log.d(TAG, "onDataPathEnd: network request not found for ndpId=" + ndpId);
+            if (VDBG) {
+                Log.v(TAG, "onDataPathEnd: network request not found for ndpId=" + ndpId);
             }
             return;
         }
@@ -594,8 +593,8 @@
 
         AwareNetworkRequestInformation nnri = mNetworkRequestsCache.remove(networkSpecifier);
         if (nnri == null) {
-            if (DBG) {
-                Log.d(TAG,
+            if (VDBG) {
+                Log.v(TAG,
                         "handleDataPathTimeout: network request not found for networkSpecifier="
                                 + networkSpecifier);
             }
@@ -660,8 +659,8 @@
             // look up specifier - are we being called again?
             AwareNetworkRequestInformation nnri = mNetworkRequestsCache.get(networkSpecifier);
             if (nnri != null) {
-                if (DBG) {
-                    Log.d(TAG, "WifiAwareNetworkFactory.acceptRequest: request=" + request
+                if (VDBG) {
+                    Log.v(TAG, "WifiAwareNetworkFactory.acceptRequest: request=" + request
                             + " - already in cache with state=" + nnri.state);
                 }
 
@@ -728,8 +727,8 @@
             }
 
             if (nnri.state != AwareNetworkRequestInformation.STATE_IDLE) {
-                if (DBG) {
-                    Log.d(TAG, "WifiAwareNetworkFactory.needNetworkFor: networkRequest="
+                if (VDBG) {
+                    Log.v(TAG, "WifiAwareNetworkFactory.needNetworkFor: networkRequest="
                             + networkRequest + " - already in progress");
                     // TODO: understand how/when can be called again/while in progress (seems
                     // to be related to score re-calculation after a network agent is created)
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareDiscoverySessionState.java b/service/java/com/android/server/wifi/aware/WifiAwareDiscoverySessionState.java
index 3358a4a..062b5d9 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareDiscoverySessionState.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareDiscoverySessionState.java
@@ -38,8 +38,8 @@
  */
 public class WifiAwareDiscoverySessionState {
     private static final String TAG = "WifiAwareDiscSessState";
-    private static final boolean DBG = false;
     private static final boolean VDBG = false; // STOPSHIP if true
+    /* package */ boolean mDbg = false;
 
     private int mNextPeerIdToBeAllocated = 100; // used to create a unique peer ID
 
@@ -296,8 +296,8 @@
         PeerInfo newPeerInfo = new PeerInfo(requestorInstanceId, peerMac);
         mPeerInfoByRequestorInstanceId.put(newPeerId, newPeerInfo);
 
-        if (DBG) {
-            Log.d(TAG, "New peer info: peerId=" + newPeerId + ", peerInfo=" + newPeerInfo);
+        if (VDBG) {
+            Log.v(TAG, "New peer info: peerId=" + newPeerId + ", peerInfo=" + newPeerInfo);
         }
 
         return newPeerId;
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareMetrics.java b/service/java/com/android/server/wifi/aware/WifiAwareMetrics.java
index c45c6dc..4f5f46b 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareMetrics.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareMetrics.java
@@ -40,7 +40,8 @@
  */
 public class WifiAwareMetrics {
     private static final String TAG = "WifiAwareMetrics";
-    private static final boolean DBG = false;
+    private static final boolean VDBG = false;
+    /* package */ boolean mDbg = false;
 
     // Histogram: 8 buckets (i=0, ..., 7) of 9 slots in range 10^i -> 10^(i+1)
     // Buckets:
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareNativeApi.java b/service/java/com/android/server/wifi/aware/WifiAwareNativeApi.java
index c8b5fce..f3ada5d 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareNativeApi.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareNativeApi.java
@@ -56,8 +56,8 @@
  */
 public class WifiAwareNativeApi implements WifiAwareShellCommand.DelegatedShellCommand {
     private static final String TAG = "WifiAwareNativeApi";
-    private static final boolean DBG = false;
     private static final boolean VDBG = false; // STOPSHIP if true
+    /* package */ boolean mDbg = false;
 
     private static final String SERVICE_NAME_FOR_OOB_DATA_PATH = "Wi-Fi Aware Data Path";
 
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareNativeCallback.java b/service/java/com/android/server/wifi/aware/WifiAwareNativeCallback.java
index b45978b..396187b 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareNativeCallback.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareNativeCallback.java
@@ -46,8 +46,8 @@
 public class WifiAwareNativeCallback extends IWifiNanIfaceEventCallback.Stub implements
         WifiAwareShellCommand.DelegatedShellCommand {
     private static final String TAG = "WifiAwareNativeCallback";
-    private static final boolean DBG = false;
     private static final boolean VDBG = false;
+    /* package */ boolean mDbg = false;
 
     private final WifiAwareStateManager mWifiAwareStateManager;
 
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareNativeManager.java b/service/java/com/android/server/wifi/aware/WifiAwareNativeManager.java
index f0a86bb..a82abbb 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareNativeManager.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareNativeManager.java
@@ -36,7 +36,8 @@
  */
 public class WifiAwareNativeManager {
     private static final String TAG = "WifiAwareNativeManager";
-    private static final boolean DBG = false;
+    private static final boolean VDBG = false;
+    /* package */ boolean mDbg = false;
 
     // to be used for synchronizing access to any of the WifiAwareNative objects
     private final Object mLock = new Object();
@@ -71,7 +72,7 @@
                 new HalDeviceManager.ManagerStatusListener() {
                     @Override
                     public void onStatusChanged() {
-                        if (DBG) Log.d(TAG, "onStatusChanged");
+                        if (VDBG) Log.v(TAG, "onStatusChanged");
                         // only care about isStarted (Wi-Fi started) not isReady - since if not
                         // ready then Wi-Fi will also be down.
                         if (mHalDeviceManager.isStarted()) {
@@ -107,7 +108,7 @@
      */
     private void tryToGetAware() {
         synchronized (mLock) {
-            if (DBG) Log.d(TAG, "tryToGetAware: mWifiNanIface=" + mWifiNanIface);
+            if (VDBG) Log.v(TAG, "tryToGetAware: mWifiNanIface=" + mWifiNanIface);
 
             if (mWifiNanIface != null) {
                 return;
@@ -115,9 +116,9 @@
             IWifiNanIface iface = mHalDeviceManager.createNanIface(mInterfaceDestroyedListener,
                     mHandler);
             if (iface == null) {
-                if (DBG) Log.d(TAG, "Was not able to obtain an IWifiNanIface");
+                if (VDBG) Log.v(TAG, "Was not able to obtain an IWifiNanIface");
             } else {
-                if (DBG) Log.d(TAG, "Obtained an IWifiNanIface");
+                if (VDBG) Log.v(TAG, "Obtained an IWifiNanIface");
 
                 try {
                     WifiStatus status = iface.registerEventCallback(mWifiAwareNativeCallback);
@@ -140,7 +141,7 @@
 
     private void awareIsDown() {
         synchronized (mLock) {
-            if (DBG) Log.d(TAG, "awareIsDown: mWifiNanIface=" + mWifiNanIface);
+            if (VDBG) Log.v(TAG, "awareIsDown: mWifiNanIface=" + mWifiNanIface);
             if (mWifiNanIface != null) {
                 mWifiNanIface = null;
                 mWifiAwareStateManager.disableUsage();
@@ -152,7 +153,7 @@
             HalDeviceManager.InterfaceDestroyedListener {
         @Override
         public void onDestroyed(@NonNull String ifaceName) {
-            if (DBG) Log.d(TAG, "Interface was destroyed");
+            if (VDBG) Log.v(TAG, "Interface was destroyed");
             awareIsDown();
         }
     }
@@ -161,7 +162,7 @@
             HalDeviceManager.InterfaceAvailableForRequestListener {
         @Override
         public void onAvailableForRequest() {
-            if (DBG) Log.d(TAG, "Interface is possibly available");
+            if (VDBG) Log.v(TAG, "Interface is possibly available");
             tryToGetAware();
         }
     }
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareService.java b/service/java/com/android/server/wifi/aware/WifiAwareService.java
index e210d3e..40b2e39 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareService.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareService.java
@@ -69,7 +69,8 @@
             HandlerThread awareHandlerThread = wifiInjector.getWifiAwareHandlerThread();
             mImpl.start(awareHandlerThread, wifiAwareStateManager, wifiAwareShellCommand,
                     wifiInjector.getWifiMetrics().getWifiAwareMetrics(),
-                    wifiInjector.getWifiPermissionsWrapper());
+                    wifiInjector.getWifiPermissionsWrapper(), wifiInjector.getFrameworkFacade(),
+                    wifiAwareNativeManager, wifiAwareNativeApi, wifiAwareNativeCallback);
         } else if (phase == SystemService.PHASE_BOOT_COMPLETED) {
             mImpl.startLate();
         }
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareServiceImpl.java b/service/java/com/android/server/wifi/aware/WifiAwareServiceImpl.java
index e609c86..8990557 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareServiceImpl.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareServiceImpl.java
@@ -19,6 +19,7 @@
 import android.Manifest;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.database.ContentObserver;
 import android.hardware.wifi.V1_0.NanStatusType;
 import android.net.wifi.aware.Characteristics;
 import android.net.wifi.aware.ConfigRequest;
@@ -30,15 +31,19 @@
 import android.net.wifi.aware.PublishConfig;
 import android.net.wifi.aware.SubscribeConfig;
 import android.os.Binder;
+import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.ResultReceiver;
 import android.os.ShellCallback;
+import android.provider.Settings;
 import android.util.Log;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
 
+import com.android.server.wifi.FrameworkFacade;
+import com.android.server.wifi.WifiInjector;
 import com.android.server.wifi.util.WifiPermissionsWrapper;
 
 import java.io.FileDescriptor;
@@ -53,8 +58,8 @@
  */
 public class WifiAwareServiceImpl extends IWifiAwareManager.Stub {
     private static final String TAG = "WifiAwareService";
-    private static final boolean DBG = false;
     private static final boolean VDBG = false; // STOPSHIP if true
+    /* package */ boolean mDbg = false;
 
     private Context mContext;
     private WifiAwareStateManager mStateManager;
@@ -84,12 +89,54 @@
      */
     public void start(HandlerThread handlerThread, WifiAwareStateManager awareStateManager,
             WifiAwareShellCommand awareShellCommand, WifiAwareMetrics awareMetrics,
-            WifiPermissionsWrapper permissionsWrapper) {
+            WifiPermissionsWrapper permissionsWrapper, FrameworkFacade frameworkFacade,
+            WifiAwareNativeManager wifiAwareNativeManager, WifiAwareNativeApi wifiAwareNativeApi,
+            WifiAwareNativeCallback wifiAwareNativeCallback) {
         Log.i(TAG, "Starting Wi-Fi Aware service");
 
         mStateManager = awareStateManager;
         mShellCommand = awareShellCommand;
         mStateManager.start(mContext, handlerThread.getLooper(), awareMetrics, permissionsWrapper);
+
+        frameworkFacade.registerContentObserver(mContext,
+                Settings.Global.getUriFor(Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED), true,
+                new ContentObserver(new Handler(handlerThread.getLooper())) {
+                    @Override
+                    public void onChange(boolean selfChange) {
+                        enableVerboseLogging(frameworkFacade.getIntegerSetting(mContext,
+                                Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED, 0), awareStateManager,
+                                wifiAwareNativeManager, wifiAwareNativeApi,
+                                wifiAwareNativeCallback);
+                    }
+                });
+        enableVerboseLogging(frameworkFacade.getIntegerSetting(mContext,
+                Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED, 0), awareStateManager,
+                wifiAwareNativeManager, wifiAwareNativeApi, wifiAwareNativeCallback);
+    }
+
+    private void enableVerboseLogging(int verbose, WifiAwareStateManager awareStateManager,
+            WifiAwareNativeManager wifiAwareNativeManager, WifiAwareNativeApi wifiAwareNativeApi,
+            WifiAwareNativeCallback wifiAwareNativeCallback) {
+        boolean dbg;
+
+        if (verbose > 0) {
+            dbg = true;
+        } else {
+            dbg = false;
+        }
+        if (VDBG) {
+            dbg = true; // just override
+        }
+
+        mDbg = dbg;
+        awareStateManager.mDbg = dbg;
+        if (awareStateManager.mDataPathMgr != null) { // needed for unit tests
+            awareStateManager.mDataPathMgr.mDbg = dbg;
+            WifiInjector.getInstance().getWifiMetrics().getWifiAwareMetrics().mDbg = dbg;
+        }
+        wifiAwareNativeCallback.mDbg = dbg;
+        wifiAwareNativeManager.mDbg = dbg;
+        wifiAwareNativeApi.mDbg = dbg;
     }
 
     /**
@@ -156,7 +203,7 @@
         IBinder.DeathRecipient dr = new IBinder.DeathRecipient() {
             @Override
             public void binderDied() {
-                if (DBG) Log.d(TAG, "binderDied: clientId=" + clientId);
+                if (VDBG) Log.v(TAG, "binderDied: clientId=" + clientId);
                 binder.unlinkToDeath(this, 0);
 
                 synchronized (mLock) {
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareStateManager.java b/service/java/com/android/server/wifi/aware/WifiAwareStateManager.java
index 89d9a90..6c7f39b 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareStateManager.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareStateManager.java
@@ -69,8 +69,8 @@
  */
 public class WifiAwareStateManager implements WifiAwareShellCommand.DelegatedShellCommand {
     private static final String TAG = "WifiAwareStateManager";
-    private static final boolean DBG = false;
     private static final boolean VDBG = false; // STOPSHIP if true
+    /* package */ boolean mDbg = false;
 
     @VisibleForTesting
     public static final String HAL_COMMAND_TIMEOUT_TAG = TAG + " HAL Command Timeout";
@@ -344,7 +344,7 @@
         mContext = context;
         mAwareMetrics = awareMetrics;
         mSm = new WifiAwareStateMachine(TAG, looper);
-        mSm.setDbg(DBG);
+        mSm.setDbg(VDBG);
         mSm.start();
 
         mDataPathMgr = new WifiAwareDataPathStateManager(this);
@@ -1338,8 +1338,8 @@
                         int retryCount = sentMessage.getData()
                                 .getInt(MESSAGE_BUNDLE_KEY_RETRY_COUNT);
                         if (retryCount > 0 && reason == NanStatusType.NO_OTA_ACK) {
-                            if (DBG) {
-                                Log.d(TAG,
+                            if (VDBG) {
+                                Log.v(TAG,
                                         "NOTIFICATION_TYPE_ON_MESSAGE_SEND_FAIL: transactionId="
                                                 + transactionId + ", reason=" + reason
                                                 + ": retransmitting - retryCount=" + retryCount);
@@ -2051,6 +2051,7 @@
             WifiAwareClientState client = new WifiAwareClientState(mContext, clientId, uid, pid,
                     callingPackage, callback, configRequest, notifyIdentityChange,
                     SystemClock.elapsedRealtime());
+            client.mDbg = mDbg;
             client.onInterfaceAddressChange(mCurrentDiscoveryInterfaceMac);
             mClients.append(clientId, client);
             mAwareMetrics.recordAttachSession(uid, notifyIdentityChange, mClients);
@@ -2399,6 +2400,7 @@
             WifiAwareClientState client = new WifiAwareClientState(mContext, clientId, uid, pid,
                     callingPackage, callback, configRequest, notifyIdentityChange,
                     SystemClock.elapsedRealtime());
+            client.mDbg = mDbg;
             mClients.put(clientId, client);
             mAwareMetrics.recordAttachSession(uid, notifyIdentityChange, mClients);
             try {
@@ -2514,6 +2516,7 @@
             WifiAwareDiscoverySessionState session = new WifiAwareDiscoverySessionState(
                     mWifiAwareNativeApi, sessionId, pubSubId, callback, isPublish,
                     SystemClock.elapsedRealtime());
+            session.mDbg = mDbg;
             client.addSession(session);
 
             mAwareMetrics.recordDiscoverySession(client.getUid(),
@@ -2689,8 +2692,8 @@
         }
 
         if (success) {
-            if (DBG) {
-                Log.d(TAG, "onCreateDataPathInterfaceResponseLocal: successfully created interface "
+            if (VDBG) {
+                Log.v(TAG, "onCreateDataPathInterfaceResponseLocal: successfully created interface "
                         + command.obj);
             }
             mDataPathMgr.onInterfaceCreated((String) command.obj);
@@ -2710,8 +2713,8 @@
         }
 
         if (success) {
-            if (DBG) {
-                Log.d(TAG, "onDeleteDataPathInterfaceResponseLocal: successfully deleted interface "
+            if (VDBG) {
+                Log.v(TAG, "onDeleteDataPathInterfaceResponseLocal: successfully deleted interface "
                         + command.obj);
             }
             mDataPathMgr.onInterfaceDeleted((String) command.obj);
diff --git a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareServiceImplTest.java
index a0abf16..2d17751 100644
--- a/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareServiceImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/aware/WifiAwareServiceImplTest.java
@@ -19,9 +19,11 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
@@ -41,10 +43,12 @@
 import android.os.HandlerThread;
 import android.os.IBinder;
 import android.os.RemoteException;
+import android.os.test.TestLooper;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
 
+import com.android.server.wifi.FrameworkFacade;
 import com.android.server.wifi.util.WifiPermissionsWrapper;
 
 import org.junit.Before;
@@ -68,6 +72,7 @@
 
     private WifiAwareServiceImplSpy mDut;
     private int mDefaultUid = 1500;
+    private TestLooper mMockLooper;
 
     @Mock
     private Context mContextMock;
@@ -87,6 +92,8 @@
     private IWifiAwareDiscoverySessionCallback mSessionCallbackMock;
     @Mock private WifiAwareMetrics mAwareMetricsMock;
     @Mock private WifiPermissionsWrapper mPermissionsWrapperMock;
+    @Mock
+    FrameworkFacade mFrameworkFacade;
 
     /**
      * Using instead of spy to avoid native crash failures - possibly due to
@@ -115,6 +122,11 @@
     @Before
     public void setup() throws Exception {
         MockitoAnnotations.initMocks(this);
+        mMockLooper = new TestLooper();
+
+        when(mHandlerThreadMock.getLooper()).thenReturn(mMockLooper.getLooper());
+        doNothing().when(mFrameworkFacade).registerContentObserver(eq(mContextMock), any(),
+                anyBoolean(), any());
 
         when(mContextMock.getApplicationContext()).thenReturn(mContextMock);
         when(mContextMock.getPackageManager()).thenReturn(mPackageManagerMock);
@@ -127,7 +139,9 @@
         mDut = new WifiAwareServiceImplSpy(mContextMock);
         mDut.fakeUid = mDefaultUid;
         mDut.start(mHandlerThreadMock, mAwareStateManagerMock, mWifiAwareShellCommandMock,
-                mAwareMetricsMock, mPermissionsWrapperMock);
+                mAwareMetricsMock, mPermissionsWrapperMock, mFrameworkFacade,
+                mock(WifiAwareNativeManager.class), mock(WifiAwareNativeApi.class),
+                mock(WifiAwareNativeCallback.class));
         verify(mAwareStateManagerMock).start(eq(mContextMock), any(), eq(mAwareMetricsMock),
                 eq(mPermissionsWrapperMock));
     }