blob: 63820e9ce46b436280fba5925645d0c136811462 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import org.chromium.chrome.R;
/**
* Client certificate KeyStore selection dialog. When smart card (CAC) support is enabled, this
* dialog allows choosing between (the default) system certificate store and the smart card for
* client authentication.
*/
class KeyStoreSelectionDialog extends DialogFragment {
private static final CharSequence SYSTEM_STORE = "Android";
private final Runnable mSystemCallback;
private final Runnable mSmartCardCallback;
private final Runnable mCancelCallback;
private Runnable mSelectedChoice;
/**
* Constructor for KeyStore selection dialog.
*
* @param systemCallback Runnable that's invoked when the user selects to use the Android
* system store for authentication
* @param smartCardCallback Runnable that's invoked when the user selects to use the SmartCard
* store for authentication
* @param cancelCallback Runnable that's invoked when the user cancels or closes the dialog.
*/
public KeyStoreSelectionDialog(Runnable systemCallback, Runnable smartCardCallback,
Runnable cancelCallback) {
mSystemCallback = systemCallback;
mSmartCardCallback = smartCardCallback;
mCancelCallback = cancelCallback;
// Default to SmartCard
mSelectedChoice = mSmartCardCallback;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final CharSequence[] choices = {
getString(R.string.smartcard_certificate_option),
SYSTEM_STORE
};
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
.setTitle(R.string.smartcard_dialog_title)
.setSingleChoiceItems(choices, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if (choices[id] == SYSTEM_STORE) {
mSelectedChoice = mSystemCallback;
} else {
mSelectedChoice = mSmartCardCallback;
}
}
})
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
mSelectedChoice.run();
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
mCancelCallback.run();
}
});
return builder.create();
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
}
}