1994343b14bfba216969a9d9e86b53312686f7832Ben Komalo/* 2994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * Copyright (C) 2011 The Android Open Source Project 3994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * 4994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * Licensed under the Apache License, Version 2.0 (the "License"); 5994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * you may not use this file except in compliance with the License. 6994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * You may obtain a copy of the License at 7994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * 8994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * http://www.apache.org/licenses/LICENSE-2.0 9994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * 10994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * Unless required by applicable law or agreed to in writing, software 11994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * distributed under the License is distributed on an "AS IS" BASIS, 12994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * See the License for the specific language governing permissions and 14994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * limitations under the License. 15994343b14bfba216969a9d9e86b53312686f7832Ben Komalo */ 16994343b14bfba216969a9d9e86b53312686f7832Ben Komalo 17994343b14bfba216969a9d9e86b53312686f7832Ben Komalo 18994343b14bfba216969a9d9e86b53312686f7832Ben Komalopackage com.android.emailcommon.utility; 19994343b14bfba216969a9d9e86b53312686f7832Ben Komalo 20994343b14bfba216969a9d9e86b53312686f7832Ben Komaloimport android.app.Activity; 21994343b14bfba216969a9d9e86b53312686f7832Ben Komaloimport android.content.Intent; 22f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantlerimport android.net.Uri; 23994343b14bfba216969a9d9e86b53312686f7832Ben Komaloimport android.os.Bundle; 24994343b14bfba216969a9d9e86b53312686f7832Ben Komaloimport android.security.KeyChain; 25994343b14bfba216969a9d9e86b53312686f7832Ben Komaloimport android.security.KeyChainAliasCallback; 26994343b14bfba216969a9d9e86b53312686f7832Ben Komalo 27994343b14bfba216969a9d9e86b53312686f7832Ben Komalo/** 28994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * A headless Activity which simply calls into the framework {@link KeyChain} service to select 29994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * a certificate to use for establishing secure connections in the Email app. 30994343b14bfba216969a9d9e86b53312686f7832Ben Komalo */ 31994343b14bfba216969a9d9e86b53312686f7832Ben Komalopublic class CertificateRequestor extends Activity implements KeyChainAliasCallback { 32994343b14bfba216969a9d9e86b53312686f7832Ben Komalo public static final String EXTRA_HOST = "CertificateRequestor.host"; 33994343b14bfba216969a9d9e86b53312686f7832Ben Komalo public static final String EXTRA_PORT = "CertificateRequestor.port"; 34994343b14bfba216969a9d9e86b53312686f7832Ben Komalo 35994343b14bfba216969a9d9e86b53312686f7832Ben Komalo public static final String RESULT_ALIAS = "CertificateRequestor.alias"; 36994343b14bfba216969a9d9e86b53312686f7832Ben Komalo 37f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler public static final Uri CERTIFICATE_REQUEST_URI = 38f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler Uri.parse("eas://com.android.emailcommon/certrequest"); 39f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler 40994343b14bfba216969a9d9e86b53312686f7832Ben Komalo @Override 41994343b14bfba216969a9d9e86b53312686f7832Ben Komalo protected void onCreate(Bundle savedInstanceState) { 42994343b14bfba216969a9d9e86b53312686f7832Ben Komalo super.onCreate(savedInstanceState); 43994343b14bfba216969a9d9e86b53312686f7832Ben Komalo 44994343b14bfba216969a9d9e86b53312686f7832Ben Komalo Intent i = getIntent(); 45994343b14bfba216969a9d9e86b53312686f7832Ben Komalo String host = i.getStringExtra(EXTRA_HOST); 46994343b14bfba216969a9d9e86b53312686f7832Ben Komalo int port = i.getIntExtra(EXTRA_PORT, -1); 47994343b14bfba216969a9d9e86b53312686f7832Ben Komalo 48f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler if (savedInstanceState == null) { 49f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler KeyChain.choosePrivateKeyAlias( 50f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler this, this, 51f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler null /* keytypes */, null /* issuers */, 52f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler host, port, 53f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler null /* alias */); 54f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler } 55994343b14bfba216969a9d9e86b53312686f7832Ben Komalo } 56994343b14bfba216969a9d9e86b53312686f7832Ben Komalo 57994343b14bfba216969a9d9e86b53312686f7832Ben Komalo /** 58994343b14bfba216969a9d9e86b53312686f7832Ben Komalo * Callback for the certificate request. Does not happen on the UI thread. 59994343b14bfba216969a9d9e86b53312686f7832Ben Komalo */ 60994343b14bfba216969a9d9e86b53312686f7832Ben Komalo @Override 61994343b14bfba216969a9d9e86b53312686f7832Ben Komalo public void alias(String alias) { 62994343b14bfba216969a9d9e86b53312686f7832Ben Komalo if (alias == null) { 63994343b14bfba216969a9d9e86b53312686f7832Ben Komalo setResult(RESULT_CANCELED); 64994343b14bfba216969a9d9e86b53312686f7832Ben Komalo } else { 65994343b14bfba216969a9d9e86b53312686f7832Ben Komalo Intent data = new Intent(); 66994343b14bfba216969a9d9e86b53312686f7832Ben Komalo data.putExtra(RESULT_ALIAS, alias); 67994343b14bfba216969a9d9e86b53312686f7832Ben Komalo setResult(RESULT_OK, data); 68994343b14bfba216969a9d9e86b53312686f7832Ben Komalo } 69994343b14bfba216969a9d9e86b53312686f7832Ben Komalo finish(); 70994343b14bfba216969a9d9e86b53312686f7832Ben Komalo } 71994343b14bfba216969a9d9e86b53312686f7832Ben Komalo} 72