Merge the 2021-08-05 SPL branch from AOSP-Partner

* security-aosp-pi-release:
  Add permission for the broadcast intent with SIP profiles for security purpose.

Change-Id: Ie10f50d080c106212e0c69e296d48edc9359d2b2
diff --git a/src/java/android/net/sip/SipAudioCall.java b/src/java/android/net/sip/SipAudioCall.java
index ea943e9..6e28a79 100644
--- a/src/java/android/net/sip/SipAudioCall.java
+++ b/src/java/android/net/sip/SipAudioCall.java
@@ -833,10 +833,14 @@
     private void grabWifiHighPerfLock() {
         if (mWifiHighPerfLock == null) {
             if (DBG) log("grabWifiHighPerfLock:");
-            mWifiHighPerfLock = ((WifiManager)
-                    mContext.getSystemService(Context.WIFI_SERVICE))
-                    .createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, LOG_TAG);
-            mWifiHighPerfLock.acquire();
+            WifiManager wM = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
+            if (wM != null) {
+                mWifiHighPerfLock =
+                    wM.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, LOG_TAG);
+                mWifiHighPerfLock.acquire();
+            } else {
+                logw("WifiManager is not running; cannot create lock.");
+            }
         }
     }
 
@@ -849,6 +853,8 @@
     }
 
     private boolean isWifiOn() {
+        if (mWm == null)
+            return false;
         return (mWm.getConnectionInfo().getBSSID() == null) ? false : true;
     }
 
@@ -1133,6 +1139,10 @@
         Rlog.d(LOG_TAG, s);
     }
 
+    private void logw(String s) {
+        Rlog.w(LOG_TAG, s);
+    }
+
     private void loge(String s) {
         Rlog.e(LOG_TAG, s);
     }
diff --git a/src/java/com/android/server/sip/SipService.java b/src/java/com/android/server/sip/SipService.java
index 5328801..2c1f6ee 100644
--- a/src/java/com/android/server/sip/SipService.java
+++ b/src/java/com/android/server/sip/SipService.java
@@ -114,10 +114,13 @@
         mContext = context;
         mConnectivityReceiver = new ConnectivityReceiver();
 
-        mWifiLock = ((WifiManager)
-                context.getSystemService(Context.WIFI_SERVICE))
-                .createWifiLock(WifiManager.WIFI_MODE_FULL, TAG);
-        mWifiLock.setReferenceCounted(false);
+        WifiManager wM = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+        if (wM != null) {
+            mWifiLock = wM.createWifiLock(WifiManager.WIFI_MODE_FULL, TAG);
+            mWifiLock.setReferenceCounted(false);
+        } else {
+            logw("WifiManager is not running; cannot create lock.");
+        }
         mSipOnWifiOnly = SipManager.isSipWifiOnly(context);
 
         mMyWakeLock = new SipWakeLock((PowerManager)
@@ -1160,25 +1163,28 @@
         if (DBG) log("unregisterReceivers:");
 
         // Reset variables maintained by ConnectivityReceiver.
-        mWifiLock.release();
+        if (mWifiLock != null)
+            mWifiLock.release();
         mNetworkType = -1;
     }
 
     private void updateWakeLocks() {
-        for (SipSessionGroupExt group : mSipGroups.values()) {
-            if (group.isOpenedToReceiveCalls()) {
-                // Also grab the WifiLock when we are disconnected, so the
-                // system will keep trying to reconnect. It will be released
-                // when the system eventually connects to something else.
-                if (mNetworkType == ConnectivityManager.TYPE_WIFI || mNetworkType == -1) {
-                    mWifiLock.acquire();
-                } else {
-                    mWifiLock.release();
+        if (mWifiLock != null) {
+                for (SipSessionGroupExt group : mSipGroups.values()) {
+                    if (group.isOpenedToReceiveCalls()) {
+                        // Also grab the WifiLock when we are disconnected, so the
+                        // system will keep trying to reconnect. It will be released
+                        // when the system eventually connects to something else.
+                        if (mNetworkType == ConnectivityManager.TYPE_WIFI || mNetworkType == -1) {
+                            mWifiLock.acquire();
+                        } else {
+                            mWifiLock.release();
+                        }
+                        return;
+                    }
                 }
-                return;
-            }
+            mWifiLock.release();
         }
-        mWifiLock.release();
         mMyWakeLock.reset(); // in case there's a leak
     }
 
@@ -1283,6 +1289,10 @@
         Rlog.d(TAG, s);
     }
 
+    private void logw(String s) {
+        Rlog.w(TAG, s);
+    }
+
     private void loge(String s, Throwable e) {
         Rlog.e(TAG, s, e);
     }