Merge change 3994 into donut

* changes:
  Shrink power widget to 3 cells wide.
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f84ef37..c2f53b8 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1607,10 +1607,6 @@
     <string name="accessibility_settings_summary">Manage accessibility options</string>
     <!-- Setting Checkbox title for enabling accessibility -->
     <string name="toggle_accessibility_title">Accessibility</string>
-    <!-- Setting Checkbox summary for enabling accessiblity - enable -->
-    <string name="enable_accessibility_service_summary">Enable accessibility</string>
-    <!-- Setting Checkbox summary for enabling accessibility - disable -->
-    <string name="disable_accessibility_service_summary">Disable accessibility</string>
     <!-- Setting accessibility services category -->
     <string name="accessibility_services_category">Accessibility services</string>
     <!-- Message for announcing the lack of installed accessibility services. -->
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index d419540..3606f04 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -20,8 +20,6 @@
     <CheckBoxPreference
             android:key="toggle_accessibility_service_checkbox"
             android:title="@string/toggle_accessibility_title"
-            android:summaryOn="@string/disable_accessibility_service_summary"
-            android:summaryOff="@string/enable_accessibility_service_summary"
             android:persistent="false"/>
 
     <PreferenceCategory android:key="accessibility_services_category"
diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java
index 45602bc..54e3f14 100644
--- a/src/com/android/settings/AccessibilitySettings.java
+++ b/src/com/android/settings/AccessibilitySettings.java
@@ -96,9 +96,7 @@
         if (!accessibilityServices.isEmpty()) {
             if (serviceState == 1) {
                 mToggleCheckBox.setChecked(true);
-                mToggleCheckBox.setSummaryOn(R.string.disable_accessibility_service_summary);
             } else {
-                mToggleCheckBox.setSummaryOff(R.string.enable_accessibility_service_summary);
                 setAccessibilityServicePreferencesState(false);
             }
             mToggleCheckBox.setEnabled(true);
@@ -109,7 +107,6 @@
                     Settings.Secure.ACCESSIBILITY_ENABLED, 0);
                 setAccessibilityServicePreferencesState(false);
             }
-            mToggleCheckBox.setSummaryOff(R.string.no_accessibility_services_summary);
             mToggleCheckBox.setEnabled(false);
         }
     }
diff --git a/src/com/android/settings/wifi/AccessPointDialog.java b/src/com/android/settings/wifi/AccessPointDialog.java
index d8da3d0..572ca85 100644
--- a/src/com/android/settings/wifi/AccessPointDialog.java
+++ b/src/com/android/settings/wifi/AccessPointDialog.java
@@ -22,6 +22,7 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.res.Resources;
+import android.security.Keystore;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
@@ -79,7 +80,8 @@
             AccessPointState.WEP_PASSWORD_AUTO, AccessPointState.WEP_PASSWORD_ASCII,
             AccessPointState.WEP_PASSWORD_HEX
     };
-    
+    private static final String NOT_APPLICABLE = "N/A";
+
     // Button positions, default to impossible values
     private int mConnectButtonPos = Integer.MAX_VALUE; 
     private int mForgetButtonPos = Integer.MAX_VALUE;
@@ -130,11 +132,13 @@
     private TextView mSecurityText;
     private Spinner mSecuritySpinner;
     private Spinner mWepTypeSpinner;
+    private Keystore mKeystore;
     
     public AccessPointDialog(Context context, WifiLayer wifiLayer) {
         super(context);
 
         mWifiLayer = wifiLayer;
+        mKeystore = Keystore.getInstance();
     }
 
     @Override
@@ -325,19 +329,34 @@
             setEnterpriseFields(view);
             mEapSpinner.setSelection(getSelectionIndex(
                     R.array.wifi_eap_entries, mState.getEap()));
-            Keystore ks = Keystore.getInstance();
             mClientCertSpinner.setSelection(getSelectionIndex(
-                    ks.getAllCertificateKeys(), mState.getEnterpriseField(
+                    getAllCertificateKeys(), mState.getEnterpriseField(
                     AccessPointState.CLIENT_CERT)));
             mCaCertSpinner.setSelection(getSelectionIndex(
-                    ks.getAllCertificateKeys(), mState.getEnterpriseField(
+                    getAllCertificateKeys(), mState.getEnterpriseField(
                     AccessPointState.CA_CERT)));
             mPrivateKeySpinner.setSelection(getSelectionIndex(
-                    ks.getAllUserkeyKeys(), mState.getEnterpriseField(
+                    getAllUserkeyKeys(), mState.getEnterpriseField(
                     AccessPointState.PRIVATE_KEY)));
         }
     }
 
+    private String[] getAllCertificateKeys() {
+        return appendEmptyInSelection(mKeystore.getAllCertificateKeys());
+    }
+
+    private String[] getAllUserkeyKeys() {
+        return appendEmptyInSelection(mKeystore.getAllUserkeyKeys());
+    }
+
+    private String[] appendEmptyInSelection(String[] keys) {
+      if (keys.length == 0) return keys;
+      String[] selections = new String[keys.length + 1];
+      System.arraycopy(keys, 0, selections, 0, keys.length);
+      selections[keys.length] = NOT_APPLICABLE;
+      return selections;
+    }
+
     private void setEnterpriseFields(View view) {
         mIdentityText = (TextView) view.findViewById(R.id.identity_text);
         mIdentityEdit = (EditText) view.findViewById(R.id.identity_edit);
@@ -365,26 +384,24 @@
         mPhase2Spinner.setPromptId(R.string.please_select_phase2);
         setSpinnerAdapter(mPhase2Spinner, R.array.wifi_phase2_entries);
 
-        Keystore ks = Keystore.getInstance();
-
         mClientCertSpinner =
                 (Spinner) view.findViewById(R.id.client_certificate_spinner);
         mClientCertSpinner.setOnItemSelectedListener(this);
         mClientCertSpinner.setPromptId(
                 R.string.please_select_client_certificate);
-        setSpinnerAdapter(mClientCertSpinner, ks.getAllCertificateKeys());
+        setSpinnerAdapter(mClientCertSpinner, getAllCertificateKeys());
 
         mCaCertSpinner =
                 (Spinner) view.findViewById(R.id.ca_certificate_spinner);
         mCaCertSpinner.setOnItemSelectedListener(this);
         mCaCertSpinner.setPromptId(R.string.please_select_ca_certificate);
-        setSpinnerAdapter(mCaCertSpinner, ks.getAllCertificateKeys());
+        setSpinnerAdapter(mCaCertSpinner, getAllCertificateKeys());
 
         mPrivateKeySpinner =
                 (Spinner) view.findViewById(R.id.private_key_spinner);
         mPrivateKeySpinner.setOnItemSelectedListener(this);
         mPrivateKeySpinner.setPromptId(R.string.please_select_private_key);
-        setSpinnerAdapter(mPrivateKeySpinner, ks.getAllUserkeyKeys());
+        setSpinnerAdapter(mPrivateKeySpinner, getAllUserkeyKeys());
 
         mEnterpriseTextFields = new EditText[] {
             mIdentityEdit, mAnonymousIdentityEdit, mPrivateKeyPasswdEdit
@@ -639,7 +656,6 @@
 
     private void updateEnterpriseFields(int securityType) {
             int i;
-            Keystore ks = Keystore.getInstance();
             for (i = AccessPointState.IDENTITY ;
                 i < AccessPointState.MAX_ENTRPRISE_FIELD ; i++) {
                 String value;
@@ -648,16 +664,21 @@
                 } else {
                     Spinner spinner =  mEnterpriseSpinnerFields[i -
                         AccessPointState.CLIENT_CERT];
-
-                    if (i != AccessPointState.PRIVATE_KEY) {
-                        value = ks.getCertificate(ks.getAllCertificateKeys()
-                            [spinner.getSelectedItemPosition()]);
+                    int index = spinner.getSelectedItemPosition();
+                    if (index == (spinner.getCount() - 1)) {
+                        value = "";
                     } else {
-                        value = ks.getUserkey(ks.getAllUserkeyKeys()
-                            [spinner.getSelectedItemPosition()]);
+                        if (i != AccessPointState.PRIVATE_KEY) {
+                            value = mKeystore.getCertificate(
+                                    getAllCertificateKeys()[index]);
+                        } else {
+                            value = mKeystore.getUserkey(
+                                    getAllUserkeyKeys()[index]);
+                        }
                     }
                 }
-                if (!TextUtils.isEmpty(value)) {
+                if (!TextUtils.isEmpty(value) ||
+                        (i == AccessPointState.PRIVATE_KEY_PASSWD)) {
                     mState.setEnterpriseField(i, value);
                 }
             }
diff --git a/src/com/android/settings/wifi/Keystore.java b/src/com/android/settings/wifi/Keystore.java
deleted file mode 100644
index 68af868..0000000
--- a/src/com/android/settings/wifi/Keystore.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package com.android.settings.wifi;
-
-import android.util.Log;
-
-import java.io.File;
-
-/**
- */
-public abstract class Keystore {
-    public static final String TAG = "Keystore";
-
-    private static final String PACKAGE_PREFIX =
-        Keystore.class.getPackage().getName() + ".";
-
-    public static final String ACTION_KEYSTORE_CERTIFICATES =
-        PACKAGE_PREFIX + "CERTIFICATES";
-    public static final String ACTION_KEYSTORE_USERKEYS =
-        PACKAGE_PREFIX + "USERKEYS";
-
-    /**
-     */
-    public static Keystore getInstance() {
-        return new FileKeystore();
-    }
-
-    /**
-     */
-    public abstract String getUserkey(String key);
-
-    /**
-     */
-    public abstract String getCertificate(String key);
-
-    /**
-     */
-    public abstract String[] getAllCertificateKeys();
-
-    /**
-     */
-    public abstract String[] getAllUserkeyKeys();
-
-    private static class FileKeystore extends Keystore {
-        private static final String PATH = "/data/misc/keystore/";
-        private static final String USERKEY_PATH = PATH + "userkeys/";
-        private static final String CERT_PATH = PATH + "certs/";
-
-        @Override
-        public String getUserkey(String key) {
-            String path = USERKEY_PATH + key;
-            return (new File(path).exists() ? path : null);
-        }
-
-        @Override
-        public String getCertificate(String key) {
-            String path = CERT_PATH + key;
-            return (new File(path).exists() ? path : null);
-        }
-
-        @Override
-        public String[] getAllCertificateKeys() {
-            File dir = new File(CERT_PATH);
-            if (dir.exists()) {
-                return dir.list();
-            } else {
-                Log.v(TAG, "-------- cert directory does not exist!");
-                return null;
-            }
-        }
-
-        @Override
-        public String[] getAllUserkeyKeys() {
-            File dir = new File(USERKEY_PATH);
-            if (dir.exists()) {
-                return dir.list();
-            } else {
-                Log.v(TAG, "-------- userkey directory does not exist!");
-                return null;
-            }
-        }
-    }
-}