Add ability to install credentials as other UID

We need the ability to install from the system UID to wifi UID
to explicitly bind WiFi credentials to the WiFi profile. This adds the
ability for Wifi Settings to invoke installation of a PKCS12 file for
the wifi UID.

Bug: 8183258
Change-Id: I357c4387baf7e2f6fd6acc9046d9e6b52fdd4bb0
diff --git a/src/com/android/settings/CredentialStorage.java b/src/com/android/settings/CredentialStorage.java
index c737c7d..1444a73 100644
--- a/src/com/android/settings/CredentialStorage.java
+++ b/src/com/android/settings/CredentialStorage.java
@@ -197,12 +197,14 @@
             Bundle bundle = mInstallBundle;
             mInstallBundle = null;
 
+            final int uid = bundle.getInt(Credentials.EXTRA_INSTALL_AS_UID, -1);
+
             if (bundle.containsKey(Credentials.EXTRA_USER_PRIVATE_KEY_NAME)) {
                 String key = bundle.getString(Credentials.EXTRA_USER_PRIVATE_KEY_NAME);
                 byte[] value = bundle.getByteArray(Credentials.EXTRA_USER_PRIVATE_KEY_DATA);
 
-                if (!mKeyStore.importKey(key, value)) {
-                    Log.e(TAG, "Failed to install " + key);
+                if (!mKeyStore.importKey(key, value, uid)) {
+                    Log.e(TAG, "Failed to install " + key + " as user " + uid);
                     return;
                 }
             }
@@ -211,8 +213,8 @@
                 String certName = bundle.getString(Credentials.EXTRA_USER_CERTIFICATE_NAME);
                 byte[] certData = bundle.getByteArray(Credentials.EXTRA_USER_CERTIFICATE_DATA);
 
-                if (!mKeyStore.put(certName, certData)) {
-                    Log.e(TAG, "Failed to install " + certName);
+                if (!mKeyStore.put(certName, certData, uid)) {
+                    Log.e(TAG, "Failed to install " + certName + " as user " + uid);
                     return;
                 }
             }
@@ -221,11 +223,10 @@
                 String caListName = bundle.getString(Credentials.EXTRA_CA_CERTIFICATES_NAME);
                 byte[] caListData = bundle.getByteArray(Credentials.EXTRA_CA_CERTIFICATES_DATA);
 
-                if (!mKeyStore.put(caListName, caListData)) {
-                    Log.e(TAG, "Failed to install " + caListName);
+                if (!mKeyStore.put(caListName, caListData, uid)) {
+                    Log.e(TAG, "Failed to install " + caListName + " as user " + uid);
                     return;
                 }
-
             }
 
             setResult(RESULT_OK);