am 3e2ffa63: (-s ours) am 0ed51eff: (-s ours) Import translations. DO NOT MERGE
* commit '3e2ffa63ebf6827fbe261ec6e9357cc40ec6fe1f':
Import translations. DO NOT MERGE
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index e8cbf1e..d771d02 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -19,7 +19,7 @@
<string name="app_name" msgid="170210454004696382">"Klíčenka"</string>
<string name="title_no_certs" msgid="8350009443064722873">"Nebyly nalezeny žádné certifikáty"</string>
<string name="title_select_cert" msgid="3588447616418041699">"Vyberte certifikát"</string>
- <string name="requesting_application" msgid="1589142627467598421">"Aplikace %s vyžaduje certifikát. Výběrem certifikátu aplikaci umožníte, aby nyní i v budoucnosti používala na serverech tuto identitu."</string>
+ <string name="requesting_application" msgid="1589142627467598421">"Aplikace %s vyžaduje certifikát. Výběrem certifikátu aplikaci umožníte, aby nyní i v budoucnosti používala na serverech tuto identitu."</string>
<string name="requesting_server" msgid="5832565605998634370">"Aplikace identifikovala server požadavku: %s. Přístup k certifikátu byste měli povolit, pouze pokud aplikaci důvěřujete."</string>
<string name="install_new_cert_message" msgid="4451971501142085495">"Certifikáty můžete instalovat ze souboru PKCS#12 s příponou %1$s nebo %2$s, umístěného v externím úložišti."</string>
<string name="install_new_cert_button_label" msgid="510732745267546907">"Instalovat"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 60604fe..0034f93 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -21,7 +21,7 @@
<string name="title_select_cert" msgid="3588447616418041699">"प्रमाणपत्र चुनें"</string>
<string name="requesting_application" msgid="1589142627467598421">"%s ऐप्स ने प्रमाणपत्र का अनुरोध किया है. प्रमाणपत्र चुनने से ऐप्स इस पहचान का उपयोग अभी और भविष्य में सर्वर के साथ कर सकेगा."</string>
<string name="requesting_server" msgid="5832565605998634370">"ऐप्स ने अनुरोध करने वाले सर्वर को %s के रूप में पहचाना है, लेकिन आपको ऐप्स को प्रमाणपत्र पर केवल तब ही पहुंच देना चाहिए जब आप ऐप्स पर विश्वास करते हों."</string>
- <string name="install_new_cert_message" msgid="4451971501142085495">"आप बाहरी संग्रहण में मौजूद %1$s या %2$s एक्सटेंशन वाली PKCS#12 फ़ाइल से प्रमाणपत्र इंस्टॉल कर सकते हैं."</string>
+ <string name="install_new_cert_message" msgid="4451971501142085495">"आप बाहरी मेमोरी में मौजूद %1$s या %2$s एक्सटेंशन वाली PKCS#12 फ़ाइल से प्रमाणपत्र इंस्टॉल कर सकते हैं."</string>
<string name="install_new_cert_button_label" msgid="510732745267546907">"इंस्टॉल करें"</string>
<string name="allow_button" msgid="5340501035618157678">"अनुमति दें"</string>
<string name="deny_button" msgid="3766539809121892584">"अस्वीकार करें"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index fa660e9..4db4d20 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -19,8 +19,8 @@
<string name="app_name" msgid="170210454004696382">"Chaveiro"</string>
<string name="title_no_certs" msgid="8350009443064722873">"Nenhum certificado encontrado"</string>
<string name="title_select_cert" msgid="3588447616418041699">"Escolher certificado"</string>
- <string name="requesting_application" msgid="1589142627467598421">"O aplicativo %s solicitou um certificado. A escolha de um certificado permitirá que o aplicativo use esta identidade com os servidores de agora em diante."</string>
- <string name="requesting_server" msgid="5832565605998634370">"O aplicativo identificou o servidor da solicitação como %s, mas você só deve permitir o acesso ao certificado caso confie no aplicativo."</string>
+ <string name="requesting_application" msgid="1589142627467598421">"O app %s solicitou um certificado. A escolha de um certificado permitirá que o app use esta identidade com os servidores de agora em diante."</string>
+ <string name="requesting_server" msgid="5832565605998634370">"O app identificou o servidor da solicitação como %s, mas você só deve permitir o acesso ao certificado caso confie no app."</string>
<string name="install_new_cert_message" msgid="4451971501142085495">"Você pode instalar certificados a partir de um arquivo PKCS#12 com a extensão %1$s ou %2$s armazenado externamente."</string>
<string name="install_new_cert_button_label" msgid="510732745267546907">"Instalar"</string>
<string name="allow_button" msgid="5340501035618157678">"Permitir"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index f9aea02..be18ddf 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="170210454004696382">"Key Chain"</string>
+ <string name="app_name" msgid="170210454004696382">"Shramba poverilnic"</string>
<string name="title_no_certs" msgid="8350009443064722873">"Potrdil ni mogoče najti"</string>
<string name="title_select_cert" msgid="3588447616418041699">"Izberite potrdilo"</string>
<string name="requesting_application" msgid="1589142627467598421">"Aplikacija %s je zahtevala potrdilo. Če izberete potrdilo, boste aplikaciji omogočili uporabo te identitete s strežniki zdaj in v prihodnosti."</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 6bdcd5a..fa08917 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -26,7 +26,7 @@
<!-- no translation found for requesting_server (5832565605998634370) -->
<skip />
<string name="install_new_cert_message" msgid="4451971501142085495">"Unaweza kusakinisha vyeti kutoka katika faili PKCS#12 kwa kirefusho %1$s au %2$s kilicho katika hifadhi ya nje."</string>
- <string name="install_new_cert_button_label" msgid="510732745267546907">"Sakinisha"</string>
+ <string name="install_new_cert_button_label" msgid="510732745267546907">"Weka"</string>
<string name="allow_button" msgid="5340501035618157678">"Ruhusu"</string>
<string name="deny_button" msgid="3766539809121892584">"Kana"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 53c355e..955681b 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="170210454004696382">"Pangunahing Chain"</string>
+ <string name="app_name" msgid="170210454004696382">"Key Chain"</string>
<string name="title_no_certs" msgid="8350009443064722873">"Walang nahanap na mga certificate"</string>
<string name="title_select_cert" msgid="3588447616418041699">"Pumili ng certificate"</string>
<string name="requesting_application" msgid="1589142627467598421">"Humiling ng certificate ang app na %s. Bibigyang-daan ng pagpili ng certificate ang app na magamit ang pagkakakilanlang ito sa mga server ngayon at sa hinaharap."</string>
diff --git a/src/com/android/keychain/KeyChainActivity.java b/src/com/android/keychain/KeyChainActivity.java
index 23aa1a1..7b31702 100644
--- a/src/com/android/keychain/KeyChainActivity.java
+++ b/src/com/android/keychain/KeyChainActivity.java
@@ -17,15 +17,21 @@
package com.android.keychain;
import android.app.Activity;
+import android.app.ActivityManagerNative;
+import android.app.admin.IDevicePolicyManager;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.PendingIntent;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
import android.security.Credentials;
import android.security.IKeyChainAliasCallback;
import android.security.KeyChain;
@@ -49,6 +55,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.concurrent.ExecutionException;
import java.util.List;
import javax.security.auth.x500.X500Principal;
@@ -118,7 +125,7 @@
// onActivityResult is called with REQUEST_UNLOCK
return;
}
- showCertChooserDialog();
+ chooseCertificate();
return;
case UNLOCK_REQUESTED:
// we've already asked, but have not heard back, probably just rotated.
@@ -134,8 +141,59 @@
}
}
- private void showCertChooserDialog() {
- new AliasLoader().execute();
+ private void chooseCertificate() {
+ // Start loading the set of certs to choose from now- if device policy doesn't return an
+ // alias, having aliases loading already will save some time waiting for UI to start.
+ final AliasLoader loader = new AliasLoader();
+ loader.execute();
+
+ final IKeyChainAliasCallback.Stub callback = new IKeyChainAliasCallback.Stub() {
+ @Override public void alias(String alias) {
+ // Use policy-suggested alias if provided
+ if (alias != null) {
+ finish(alias);
+ return;
+ }
+
+ // No suggested alias - instead finish loading and show UI to pick one
+ final CertificateAdapter certAdapter;
+ try {
+ certAdapter = loader.get();
+ } catch (InterruptedException | ExecutionException e) {
+ Log.e(TAG, "Loading certificate aliases interrupted", e);
+ finish(null);
+ return;
+ }
+ runOnUiThread(new Runnable() {
+ @Override public void run() {
+ displayCertChooserDialog(certAdapter);
+ }
+ });
+ }
+ };
+
+ // Give a profile or device owner the chance to intercept the request, if a private key
+ // access listener is registered with the DevicePolicyManagerService.
+ IDevicePolicyManager devicePolicyManager = IDevicePolicyManager.Stub.asInterface(
+ ServiceManager.getService(Context.DEVICE_POLICY_SERVICE));
+
+ String host = getIntent().getStringExtra(KeyChain.EXTRA_HOST);
+ int port = getIntent().getIntExtra(KeyChain.EXTRA_PORT, -1);
+ String url = getIntent().getStringExtra(KeyChain.EXTRA_URL);
+ String alias = getIntent().getStringExtra(KeyChain.EXTRA_ALIAS);
+
+ try {
+ int uid = ActivityManagerNative.getDefault().getLaunchedFromUid(getActivityToken());
+ devicePolicyManager.choosePrivateKeyAlias(uid, host, port, url, alias, callback);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Unable to request alias from DevicePolicyManager", e);
+ // Proceed without a suggested alias.
+ try {
+ callback.alias(null);
+ } catch (RemoteException shouldNeverHappen) {
+ finish(null);
+ }
+ }
}
private class AliasLoader extends AsyncTask<Void, Void, CertificateAdapter> {
@@ -147,9 +205,6 @@
Collections.sort(aliasList);
return new CertificateAdapter(aliasList);
}
- @Override protected void onPostExecute(CertificateAdapter adapter) {
- displayCertChooserDialog(adapter);
- }
}
private void displayCertChooserDialog(final CertificateAdapter adapter) {
@@ -363,7 +418,7 @@
case REQUEST_UNLOCK:
if (mKeyStore.isUnlocked()) {
mState = State.INITIAL;
- showCertChooserDialog();
+ chooseCertificate();
} else {
// user must have canceled unlock, give up
mState = State.UNLOCK_CANCELED;