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