Add install support for WIFI UID

Bug: 8472221
Change-Id: If203760fc960b4d8987d745e49ef1d4355c45adf
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 9579830..f4b4bc6 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -29,6 +29,7 @@
     <uses-permission android:name="android.permission.ACCESS_WIMAX_STATE" />
     <uses-permission android:name="android.permission.CHANGE_WIMAX_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="com.android.certinstaller.INSTALL_AS_USER" />
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7b028db..db07a3d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1274,6 +1274,8 @@
     <string name="wifi_scan_always_available">Scanning always available</string>
     <!-- Checkbox summary for option to toggle scan always available setting -->
     <string name="wifi_scan_always_available_summary">Let Google\'s location service and other apps scan for networks, even when Wi-Fi is off</string>
+    <!-- Preference title for option to install certificates -->
+    <string name="wifi_install_credentials">Install certificates</string>
     <string name="wifi_scan_notify_text_location_on">To improve location accuracy and for other purposes, Google and other apps may scan for nearby networks, even when Wi-Fi is off. If you don\'t want this to happen, go to Advanced &gt; Scanning always available.</string>
     <string name="wifi_scan_notify_text_location_off">Apps may scan for nearby networks, even when Wi-Fi is off. If you don\'t want this to happen, go to Advanced &gt; Scanning always available.</string>
     <!-- Wifi scan always mode checkbox text -->
diff --git a/res/xml/wifi_advanced_settings.xml b/res/xml/wifi_advanced_settings.xml
index 4319ec6..d250585 100644
--- a/res/xml/wifi_advanced_settings.xml
+++ b/res/xml/wifi_advanced_settings.xml
@@ -53,6 +53,11 @@
             android:entryValues="@array/wifi_frequency_band_values"
             />
 
+    <Preference
+            android:key="install_credentials"
+            android:title="@string/wifi_install_credentials"
+            android:persistent="false" />
+
     <CheckBoxPreference
             android:key="suspend_optimizations"
             android:title="@string/wifi_suspend_optimizations"
diff --git a/src/com/android/settings/wifi/AdvancedWifiSettings.java b/src/com/android/settings/wifi/AdvancedWifiSettings.java
index abe153f..7663058 100644
--- a/src/com/android/settings/wifi/AdvancedWifiSettings.java
+++ b/src/com/android/settings/wifi/AdvancedWifiSettings.java
@@ -17,6 +17,7 @@
 package com.android.settings.wifi;
 
 import android.content.Context;
+import android.content.Intent;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.net.wifi.WifiWatchdogStateMachine;
@@ -27,6 +28,7 @@
 import android.preference.PreferenceScreen;
 import android.provider.Settings;
 import android.provider.Settings.Global;
+import android.security.Credentials;
 import android.text.TextUtils;
 import android.util.Log;
 import android.widget.Toast;
@@ -46,6 +48,7 @@
     private static final String KEY_SLEEP_POLICY = "sleep_policy";
     private static final String KEY_POOR_NETWORK_DETECTION = "wifi_poor_network_detection";
     private static final String KEY_SCAN_ALWAYS_AVAILABLE = "wifi_scan_always_available";
+    private static final String KEY_INSTALL_CREDENTIALS = "install_credentials";
     private static final String KEY_SUSPEND_OPTIMIZATIONS = "suspend_optimizations";
 
     private WifiManager mWifiManager;
@@ -94,6 +97,13 @@
         scanAlwaysAvailable.setChecked(Global.getInt(getContentResolver(),
                     Global.WIFI_SCAN_ALWAYS_AVAILABLE, 0) == 1);
 
+        Intent intent=new Intent(Credentials.INSTALL_AS_USER_ACTION);
+        intent.setClassName("com.android.certinstaller",
+                "com.android.certinstaller.CertInstallerMain");
+        intent.putExtra(Credentials.EXTRA_INSTALL_AS_UID, android.os.Process.WIFI_UID);
+        Preference pref = findPreference(KEY_INSTALL_CREDENTIALS);
+        pref.setIntent(intent);
+
         CheckBoxPreference suspendOptimizations =
             (CheckBoxPreference) findPreference(KEY_SUSPEND_OPTIMIZATIONS);
         suspendOptimizations.setChecked(Global.getInt(getContentResolver(),
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 497bce9..587197b 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -819,7 +819,7 @@
     private void loadCertificates(Spinner spinner, String prefix) {
         final Context context = mConfigUi.getContext();
 
-        String[] certs = KeyStore.getInstance().saw(prefix);
+        String[] certs = KeyStore.getInstance().saw(prefix, android.os.Process.WIFI_UID);
         if (certs == null || certs.length == 0) {
             certs = new String[] {unspecifiedCert};
         } else {