Fix off-by-one and selection issues with new ListView header
Change-Id: I71bb31516fab1dc26d3dda538c1cac85e00a9e24
diff --git a/src/com/android/keychain/KeyChainActivity.java b/src/com/android/keychain/KeyChainActivity.java
index 38b8463..94c2097 100644
--- a/src/com/android/keychain/KeyChainActivity.java
+++ b/src/com/android/keychain/KeyChainActivity.java
@@ -139,8 +139,8 @@
View footer = View.inflate(this, R.layout.cert_chooser_footer, null);
final ListView lv = (ListView) View.inflate(this, R.layout.cert_chooser, null);
- lv.addHeaderView(contextView);
- lv.addFooterView(footer);
+ lv.addHeaderView(contextView, null, false);
+ lv.addFooterView(footer, null, false);
lv.setAdapter(adapter);
builder.setView(lv);
@@ -160,17 +160,19 @@
title = res.getString(R.string.title_select_cert);
String alias = getIntent().getStringExtra(KeyChain.EXTRA_ALIAS);
if (alias != null) {
- int position = adapter.mAliases.indexOf(alias);
- if (position != -1) {
- lv.setItemChecked(position, true);
+ int adapterPosition = adapter.mAliases.indexOf(alias);
+ if (adapterPosition != -1) {
+ int listViewPosition = adapterPosition+1;
+ lv.setItemChecked(listViewPosition, true);
}
}
builder.setPositiveButton(R.string.allow_button, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int id) {
- int pos = lv.getCheckedItemPosition();
- String alias = ((pos != ListView.INVALID_POSITION)
- ? adapter.getItem(pos)
+ int listViewPosition = lv.getCheckedItemPosition();
+ int adapterPosition = listViewPosition-1;
+ String alias = ((adapterPosition >= 0)
+ ? adapter.getItem(adapterPosition)
: null);
finish(alias);
}
@@ -219,8 +221,8 @@
String installMessage = String.format(res.getString(R.string.install_new_cert_message),
Credentials.EXTENSION_PFX, Credentials.EXTENSION_P12);
- TextView installTextView = (TextView) footer.findViewById(R.id.cert_chooser_install_message);
- installTextView.setText(installMessage);
+ TextView installText = (TextView) footer.findViewById(R.id.cert_chooser_install_message);
+ installText.setText(installMessage);
Button installButton = (Button) footer.findViewById(R.id.cert_chooser_install_button);
installButton.setOnClickListener(new View.OnClickListener() {
@@ -250,13 +252,13 @@
@Override public int getCount() {
return mAliases.size();
}
- @Override public String getItem(int position) {
- return mAliases.get(position);
+ @Override public String getItem(int adapterPosition) {
+ return mAliases.get(adapterPosition);
}
- @Override public long getItemId(int position) {
- return position;
+ @Override public long getItemId(int adapterPosition) {
+ return adapterPosition;
}
- @Override public View getView(final int position, View view, ViewGroup parent) {
+ @Override public View getView(final int adapterPosition, View view, ViewGroup parent) {
ViewHolder holder;
if (view == null) {
LayoutInflater inflater = LayoutInflater.from(KeyChainActivity.this);
@@ -270,31 +272,33 @@
holder = (ViewHolder) view.getTag();
}
- String alias = mAliases.get(position);
+ String alias = mAliases.get(adapterPosition);
holder.mAliasTextView.setText(alias);
- String subject = mSubjects.get(position);
+ String subject = mSubjects.get(adapterPosition);
if (subject == null) {
- new CertLoader(position, holder.mSubjectTextView).execute();
+ new CertLoader(adapterPosition, holder.mSubjectTextView).execute();
} else {
holder.mSubjectTextView.setText(subject);
}
ListView lv = (ListView)parent;
- holder.mRadioButton.setChecked(position == lv.getCheckedItemPosition());
+ int listViewCheckedItemPosition = lv.getCheckedItemPosition();
+ int adapterCheckedItemPosition = listViewCheckedItemPosition-1;
+ holder.mRadioButton.setChecked(adapterPosition == adapterCheckedItemPosition);
return view;
}
private class CertLoader extends AsyncTask<Void, Void, String> {
- private final int mPosition;
+ private final int mAdapterPosition;
private final TextView mSubjectView;
- private CertLoader(int position, TextView subjectView) {
- mPosition = position;
+ private CertLoader(int adapterPosition, TextView subjectView) {
+ mAdapterPosition = adapterPosition;
mSubjectView = subjectView;
}
@Override protected String doInBackground(Void... params) {
- String alias = mAliases.get(mPosition);
+ String alias = mAliases.get(mAdapterPosition);
byte[] bytes = mKeyStore.get(Credentials.USER_CERTIFICATE + alias);
if (bytes == null) {
return null;
@@ -314,7 +318,7 @@
return subjectString;
}
@Override protected void onPostExecute(String subjectString) {
- mSubjects.set(mPosition, subjectString);
+ mSubjects.set(mAdapterPosition, subjectString);
mSubjectView.setText(subjectString);
}
}