[NAN] Update finalize to check and warn user if resources not freed

Use CloseGuard to check that disconnect() is called to free the resources
allocated by connect(). finalize() will still call disconnect() but now
also print out errors (if StrictMode enabled for feature).

Bug: 28068773
Change-Id: I5f5847c0261ef9f79a21fdb935509a85761591cc
(cherry picked from commit 9d55649613f6ea9926c6e6222965178e91cb501b)
diff --git a/wifi/java/android/net/wifi/nan/WifiNanManager.java b/wifi/java/android/net/wifi/nan/WifiNanManager.java
index e4781c7..ff6198e 100644
--- a/wifi/java/android/net/wifi/nan/WifiNanManager.java
+++ b/wifi/java/android/net/wifi/nan/WifiNanManager.java
@@ -39,6 +39,8 @@
 
 import com.android.internal.annotations.GuardedBy;
 
+import dalvik.system.CloseGuard;
+
 import libcore.util.HexEncoding;
 
 import org.json.JSONException;
@@ -223,6 +225,7 @@
 
     private final Context mContext;
     private final IWifiNanManager mService;
+    private final CloseGuard mCloseGuard = CloseGuard.get();
 
     private final Object mLock = new Object(); // lock access to the following vars
 
@@ -333,6 +336,8 @@
                 throw e.rethrowFromSystemServer();
             }
         }
+
+        mCloseGuard.open("disconnect");
     }
 
     /**
@@ -362,6 +367,7 @@
             mClientId = INVALID_CLIENT_ID;
         }
 
+        mCloseGuard.close();
         try {
             mService.disconnect(clientId, binder);
         } catch (RemoteException e) {
@@ -371,8 +377,12 @@
 
     @Override
     protected void finalize() throws Throwable {
-        disconnect();
-        super.finalize();
+        try {
+            mCloseGuard.warnIfOpen();
+            disconnect();
+        } finally {
+            super.finalize();
+        }
     }
 
     /**
diff --git a/wifi/java/android/net/wifi/nan/WifiNanSession.java b/wifi/java/android/net/wifi/nan/WifiNanSession.java
index c10cd52..f0a8368 100644
--- a/wifi/java/android/net/wifi/nan/WifiNanSession.java
+++ b/wifi/java/android/net/wifi/nan/WifiNanSession.java
@@ -21,6 +21,8 @@
 import android.net.wifi.RttManager;
 import android.util.Log;
 
+import dalvik.system.CloseGuard;
+
 import java.lang.ref.WeakReference;
 
 /**
@@ -52,6 +54,8 @@
      */
     protected boolean mTerminated = false;
 
+    private final CloseGuard mCloseGuard = CloseGuard.get();
+
     /**
      * {@hide}
      */
@@ -60,6 +64,8 @@
 
         mMgr = new WeakReference<>(manager);
         mSessionId = sessionId;
+
+        mCloseGuard.open("terminate");
     }
 
     /**
@@ -77,6 +83,7 @@
         mgr.terminateSession(mSessionId);
         mTerminated = true;
         mMgr.clear();
+        mCloseGuard.close();
     }
 
     /**
@@ -92,17 +99,19 @@
         }
         mTerminated = true;
         mMgr.clear();
+        mCloseGuard.close();
     }
 
     @Override
     protected void finalize() throws Throwable {
-        if (!mTerminated) {
-            Log.w(TAG, "WifiNanSession mSessionId=" + mSessionId
-                    + " was not explicitly terminated. The session may use resources until "
-                    + "terminated so step should be done explicitly");
-            terminate();
+        try {
+            if (!mTerminated) {
+                mCloseGuard.warnIfOpen();
+                terminate();
+            }
+        } finally {
+            super.finalize();
         }
-        super.finalize();
     }
 
     /**