diff options
Diffstat (limited to 'src/com/android/settings')
8 files changed, 134 insertions, 116 deletions
diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java index 0552b682f..0c8ce28f7 100644 --- a/src/com/android/settings/CryptKeeper.java +++ b/src/com/android/settings/CryptKeeper.java @@ -22,8 +22,6 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.graphics.Rect; -import android.inputmethodservice.KeyboardView; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; @@ -36,22 +34,22 @@ import android.os.SystemProperties; import android.os.storage.IMountService; import android.telephony.TelephonyManager; import android.text.TextUtils; -import android.util.AttributeSet; import android.util.Log; import android.view.KeyEvent; -import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; +import android.view.inputmethod.InputMethodSubtype; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; import com.android.internal.telephony.ITelephony; -import com.android.internal.widget.PasswordEntryKeyboardHelper; -import com.android.internal.widget.PasswordEntryKeyboardView; + +import java.util.List; /** * Settings screens to show the UI flows for encrypting/decrypting the device. @@ -112,37 +110,6 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList } } - // Use a custom EditText to prevent the input method from showing. - public static class CryptEditText extends EditText { - InputMethodManager imm; - - public CryptEditText(Context context, AttributeSet attrs) { - super(context, attrs); - imm = ((InputMethodManager) getContext(). - getSystemService(Context.INPUT_METHOD_SERVICE)); - } - - @Override - protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { - super.onFocusChanged(focused, direction, previouslyFocusedRect); - - if (focused && imm != null && imm.isActive(this)) { - imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0); - } - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - boolean handled = super.onTouchEvent(event); - - if (imm != null && imm.isActive(this)) { - imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0); - } - - return handled; - } - } - private class DecryptTask extends AsyncTask<String, Void, Integer> { @Override protected Integer doInBackground(String... params) { @@ -387,16 +354,77 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList private void passwordEntryInit() { mPasswordEntry = (EditText) findViewById(R.id.passwordEntry); mPasswordEntry.setOnEditorActionListener(this); + mPasswordEntry.requestFocus(); + + View imeSwitcher = findViewById(R.id.switch_ime_button); + final InputMethodManager imm = (InputMethodManager) getSystemService( + Context.INPUT_METHOD_SERVICE); + if (imeSwitcher != null && hasMultipleEnabledIMEsOrSubtypes(imm, false)) { + imeSwitcher.setVisibility(View.VISIBLE); + imeSwitcher.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + imm.showInputMethodPicker(); + } + }); + } + + // Asynchronously throw up the IME, since there are issues with requesting it to be shown + // immediately. + mHandler.postDelayed(new Runnable() { + @Override public void run() { + imm.showSoftInputUnchecked(0, null); + } + }, 0); + + updateEmergencyCallButtonState(); + } - KeyboardView keyboardView = (PasswordEntryKeyboardView) findViewById(R.id.keyboard); + /** + * Method adapted from com.android.inputmethod.latin.Utils + * + * @param imm The input method manager + * @param shouldIncludeAuxiliarySubtypes + * @return true if we have multiple IMEs to choose from + */ + private boolean hasMultipleEnabledIMEsOrSubtypes(InputMethodManager imm, + final boolean shouldIncludeAuxiliarySubtypes) { + final List<InputMethodInfo> enabledImis = imm.getEnabledInputMethodList(); + + // Number of the filtered IMEs + int filteredImisCount = 0; + + for (InputMethodInfo imi : enabledImis) { + // We can return true immediately after we find two or more filtered IMEs. + if (filteredImisCount > 1) return true; + final List<InputMethodSubtype> subtypes = + imm.getEnabledInputMethodSubtypeList(imi, true); + // IMEs that have no subtypes should be counted. + if (subtypes.isEmpty()) { + ++filteredImisCount; + continue; + } - if (keyboardView != null) { - PasswordEntryKeyboardHelper keyboardHelper = new PasswordEntryKeyboardHelper(this, - keyboardView, mPasswordEntry, false); - keyboardHelper.setKeyboardMode(PasswordEntryKeyboardHelper.KEYBOARD_MODE_ALPHA); + int auxCount = 0; + for (InputMethodSubtype subtype : subtypes) { + if (subtype.isAuxiliary()) { + ++auxCount; + } + } + final int nonAuxCount = subtypes.size() - auxCount; + + // IMEs that have one or more non-auxiliary subtypes should be counted. + // If shouldIncludeAuxiliarySubtypes is true, IMEs that have two or more auxiliary + // subtypes should be counted as well. + if (nonAuxCount > 0 || (shouldIncludeAuxiliarySubtypes && auxCount > 1)) { + ++filteredImisCount; + continue; + } } - updateEmergencyCallButtonState(); + return filteredImisCount > 1 + // imm.getEnabledInputMethodSubtypeList(null, false) will return the current IME's enabled + // input method subtype (The current IME should be LatinIME.) + || imm.getEnabledInputMethodSubtypeList(null, false).size() > 1; } private IMountService getMountService() { diff --git a/src/com/android/settings/ProgressCategory.java b/src/com/android/settings/ProgressCategory.java index eee19bc6f..6c74846ce 100644 --- a/src/com/android/settings/ProgressCategory.java +++ b/src/com/android/settings/ProgressCategory.java @@ -26,12 +26,13 @@ public class ProgressCategory extends ProgressCategoryBase { private boolean mProgress = false; private Preference mNoDeviceFoundPreference; + private boolean mNoDeviceFoundAdded; public ProgressCategory(Context context, AttributeSet attrs) { super(context, attrs); setLayoutResource(R.layout.preference_progress_category); } - + @Override public void onBindView(View view) { super.onBindView(view); @@ -39,21 +40,26 @@ public class ProgressCategory extends ProgressCategoryBase { final View progressBar = view.findViewById(R.id.scanning_progress); textView.setText(mProgress ? R.string.progress_scanning : R.string.progress_tap_to_pair); - boolean noDeviceFound = getPreferenceCount() == 0; + boolean noDeviceFound = (getPreferenceCount() == 0 || + (getPreferenceCount() == 1 && getPreference(0) == mNoDeviceFoundPreference)); textView.setVisibility(noDeviceFound ? View.INVISIBLE : View.VISIBLE); progressBar.setVisibility(mProgress ? View.VISIBLE : View.INVISIBLE); if (mProgress) { - if (mNoDeviceFoundPreference != null) { + if (mNoDeviceFoundAdded) { removePreference(mNoDeviceFoundPreference); + mNoDeviceFoundAdded = false; } } else { - if (noDeviceFound) { + if (noDeviceFound && !mNoDeviceFoundAdded) { if (mNoDeviceFoundPreference == null) { mNoDeviceFoundPreference = new Preference(getContext()); - mNoDeviceFoundPreference.setSummary(R.string.bluetooth_no_devices_found); + mNoDeviceFoundPreference.setLayoutResource(R.layout.preference_empty_list); + mNoDeviceFoundPreference.setTitle(R.string.bluetooth_no_devices_found); + mNoDeviceFoundPreference.setSelectable(false); } addPreference(mNoDeviceFoundPreference); + mNoDeviceFoundAdded = true; } } } diff --git a/src/com/android/settings/VoiceInputOutputSettings.java b/src/com/android/settings/VoiceInputOutputSettings.java index 1e8680135..9e3add452 100644 --- a/src/com/android/settings/VoiceInputOutputSettings.java +++ b/src/com/android/settings/VoiceInputOutputSettings.java @@ -51,12 +51,12 @@ public class VoiceInputOutputSettings implements OnPreferenceChangeListener { private static final String TAG = "VoiceInputOutputSettings"; - private static final String KEY_VOICE_INPUT_CATEGORY = "voice_input_category"; + private static final String KEY_VOICE_CATEGORY = "voice_category"; private static final String KEY_RECOGNIZER = "recognizer"; private static final String KEY_RECOGNIZER_SETTINGS = "recognizer_settings"; private PreferenceGroup mParent; - private PreferenceCategory mVoiceInputCategory; + private PreferenceCategory mVoiceCategory; private ListPreference mRecognizerPref; private PreferenceScreen mSettingsPref; private SettingsPreferenceFragment mFragment; @@ -70,11 +70,11 @@ public class VoiceInputOutputSettings implements OnPreferenceChangeListener { public void onCreate() { mParent = (PreferenceGroup) mFragment.getPreferenceScreen(); - mVoiceInputCategory = (PreferenceCategory) mParent.findPreference(KEY_VOICE_INPUT_CATEGORY); - mRecognizerPref = (ListPreference) mVoiceInputCategory.findPreference(KEY_RECOGNIZER); + mVoiceCategory = (PreferenceCategory) mParent.findPreference(KEY_VOICE_CATEGORY); + mRecognizerPref = (ListPreference) mVoiceCategory.findPreference(KEY_RECOGNIZER); mRecognizerPref.setOnPreferenceChangeListener(this); mSettingsPref = (PreferenceScreen) - mVoiceInputCategory.findPreference(KEY_RECOGNIZER_SETTINGS); + mVoiceCategory.findPreference(KEY_RECOGNIZER_SETTINGS); mAvailableRecognizersMap = new HashMap<String, ResolveInfo>(); @@ -89,11 +89,11 @@ public class VoiceInputOutputSettings implements OnPreferenceChangeListener { if (numAvailable == 0) { // No recognizer available - remove all related preferences. - mFragment.getPreferenceScreen().removePreference(mVoiceInputCategory); + mFragment.getPreferenceScreen().removePreference(mVoiceCategory); } else if (numAvailable == 1) { // Only one recognizer available, so don't show the list of choices, but do // set up the link to settings for the available recognizer. - mVoiceInputCategory.removePreference(mRecognizerPref); + mVoiceCategory.removePreference(mRecognizerPref); // But first set up the available recognizers map with just the one recognizer. ResolveInfo resolveInfo = availableRecognitionServices.get(0); @@ -193,7 +193,7 @@ public class VoiceInputOutputSettings implements OnPreferenceChangeListener { // No settings preference available - hide the preference. Log.w(TAG, "no recognizer settings available for " + si.packageName); mSettingsPref.setIntent(null); - mVoiceInputCategory.removePreference(mSettingsPref); + mVoiceCategory.removePreference(mSettingsPref); } else { Intent i = new Intent(Intent.ACTION_MAIN); i.setComponent(new ComponentName(si.packageName, settingsActivity)); diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java index b10b93fb1..c6f14a174 100644 --- a/src/com/android/settings/WirelessSettings.java +++ b/src/com/android/settings/WirelessSettings.java @@ -36,6 +36,7 @@ import android.widget.Switch; import com.android.internal.telephony.TelephonyIntents; import com.android.internal.telephony.TelephonyProperties; import com.android.settings.nfc.NfcEnabler; +import com.android.settings.wifi.p2p.WifiP2pEnabler; public class WirelessSettings extends SettingsPreferenceFragment { @@ -43,6 +44,7 @@ public class WirelessSettings extends SettingsPreferenceFragment { private static final String KEY_TOGGLE_NFC = "toggle_nfc"; private static final String KEY_NDEF_PUSH_SETTINGS = "ndef_push_settings"; private static final String KEY_VPN_SETTINGS = "vpn_settings"; + private static final String KEY_TOGGLE_WIFI_P2P = "toggle_wifi_p2p"; private static final String KEY_WIFI_P2P_SETTINGS = "wifi_p2p_settings"; private static final String KEY_TETHER_SETTINGS = "tether_settings"; private static final String KEY_PROXY_SETTINGS = "proxy_settings"; @@ -58,6 +60,8 @@ public class WirelessSettings extends SettingsPreferenceFragment { private NfcEnabler mNfcEnabler; private NfcAdapter mNfcAdapter; + private WifiP2pEnabler mWifiP2pEnabler; + /** * Invoked on each preference click in this hierarchy, overrides * PreferenceActivity's implementation. Used to make sure we track the @@ -98,6 +102,8 @@ public class WirelessSettings extends SettingsPreferenceFragment { CheckBoxPreference nfc = (CheckBoxPreference) findPreference(KEY_TOGGLE_NFC); PreferenceScreen ndefPush = (PreferenceScreen) findPreference(KEY_NDEF_PUSH_SETTINGS); + CheckBoxPreference wifiP2p = (CheckBoxPreference) findPreference(KEY_TOGGLE_WIFI_P2P); + mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference); mNfcEnabler = new NfcEnabler(activity, nfc, ndefPush); @@ -133,6 +139,15 @@ public class WirelessSettings extends SettingsPreferenceFragment { getPreferenceScreen().removePreference(findPreference(KEY_MOBILE_NETWORK_SETTINGS)); } + WifiP2pManager p2p = (WifiP2pManager) activity.getSystemService(Context.WIFI_P2P_SERVICE); + + if (!p2p.isP2pSupported()) { + getPreferenceScreen().removePreference(wifiP2p); + } else { + mWifiP2pEnabler = new WifiP2pEnabler(activity, wifiP2p); + } + + //Settings is used for debug alone if (!WIFI_P2P_DEBUG) { getPreferenceScreen().removePreference(findPreference(KEY_WIFI_P2P_SETTINGS)); } @@ -186,6 +201,10 @@ public class WirelessSettings extends SettingsPreferenceFragment { if (mNfcEnabler != null) { mNfcEnabler.resume(); } + + if (mWifiP2pEnabler != null) { + mWifiP2pEnabler.resume(); + } } @Override @@ -196,6 +215,10 @@ public class WirelessSettings extends SettingsPreferenceFragment { if (mNfcEnabler != null) { mNfcEnabler.pause(); } + + if (mWifiP2pEnabler != null) { + mWifiP2pEnabler.pause(); + } } @Override diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java index e18e48a25..6899bc323 100755 --- a/src/com/android/settings/bluetooth/BluetoothSettings.java +++ b/src/com/android/settings/bluetooth/BluetoothSettings.java @@ -99,8 +99,8 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { - mActivityStarted = true; super.onActivityCreated(savedInstanceState); + mActivityStarted = (savedInstanceState == null); // don't auto start scan after rotation mEmptyView = (TextView) getView().findViewById(android.R.id.empty); getListView().setEmptyView(mEmptyView); diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java index 45621e560..5c85374a6 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java +++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java @@ -139,8 +139,7 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment if (null == localeList) { // The locale list is null if and only if the user dictionary service is // not present or disabled. In this case we need to remove the preference. - ((PreferenceGroup)findPreference("language_settings_category")).removePreference( - userDictionaryPreference); + getPreferenceScreen().removePreference(userDictionaryPreference); } else if (localeList.size() <= 1) { userDictionaryPreference.setTitle(R.string.user_dict_single_settings_title); userDictionaryPreference.setFragment(UserDictionarySettings.class.getName()); diff --git a/src/com/android/settings/wifi/p2p/WifiP2pEnabler.java b/src/com/android/settings/wifi/p2p/WifiP2pEnabler.java index 608aa02f8..b812d971b 100644 --- a/src/com/android/settings/wifi/p2p/WifiP2pEnabler.java +++ b/src/com/android/settings/wifi/p2p/WifiP2pEnabler.java @@ -25,21 +25,19 @@ import android.content.IntentFilter; import android.net.wifi.p2p.WifiP2pManager; import android.os.Handler; import android.os.Message; +import android.preference.CheckBoxPreference; import android.preference.Preference; import android.provider.Settings; import android.util.Log; -import android.widget.CompoundButton; -import android.widget.Switch; /** * WifiP2pEnabler is a helper to manage the Wifi p2p on/off */ -public class WifiP2pEnabler implements CompoundButton.OnCheckedChangeListener { +public class WifiP2pEnabler implements Preference.OnPreferenceChangeListener { private static final String TAG = "WifiP2pEnabler"; private final Context mContext; - private Switch mSwitch; - private int mWifiP2pState; + private final CheckBoxPreference mCheckBox; private final IntentFilter mIntentFilter; private final Handler mHandler = new WifiP2pHandler(); private WifiP2pManager mWifiP2pManager; @@ -57,9 +55,9 @@ public class WifiP2pEnabler implements CompoundButton.OnCheckedChangeListener { } }; - public WifiP2pEnabler(Context context, Switch switch_) { + public WifiP2pEnabler(Context context, CheckBoxPreference checkBox) { mContext = context; - mSwitch = switch_; + mCheckBox = checkBox; mWifiP2pManager = (WifiP2pManager) context.getSystemService(Context.WIFI_P2P_SERVICE); if (mWifiP2pManager != null) { @@ -68,7 +66,7 @@ public class WifiP2pEnabler implements CompoundButton.OnCheckedChangeListener { //Failure to set up connection Log.e(TAG, "Failed to set up connection with wifi p2p service"); mWifiP2pManager = null; - mSwitch.setEnabled(false); + mCheckBox.setEnabled(false); } } else { Log.e(TAG, "mWifiP2pManager is null!"); @@ -80,48 +78,39 @@ public class WifiP2pEnabler implements CompoundButton.OnCheckedChangeListener { public void resume() { if (mWifiP2pManager == null) return; mContext.registerReceiver(mReceiver, mIntentFilter); - mSwitch.setOnCheckedChangeListener(this); + mCheckBox.setOnPreferenceChangeListener(this); } public void pause() { if (mWifiP2pManager == null) return; mContext.unregisterReceiver(mReceiver); - mSwitch.setOnCheckedChangeListener(null); + mCheckBox.setOnPreferenceChangeListener(null); } - public void setSwitch(Switch switch_) { - if (mSwitch == switch_) return; - mSwitch.setOnCheckedChangeListener(null); - mSwitch = switch_; - mSwitch.setOnCheckedChangeListener(this); + public boolean onPreferenceChange(Preference preference, Object value) { - mSwitch.setChecked(mWifiP2pState == WifiP2pManager.WIFI_P2P_STATE_ENABLED); - } - - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - - if (mWifiP2pManager == null) return; + if (mWifiP2pManager == null) return false; - if (isChecked) { + mCheckBox.setEnabled(false); + final boolean enable = (Boolean) value; + if (enable) { mWifiP2pManager.enableP2p(mChannel); } else { mWifiP2pManager.disableP2p(mChannel); } + return false; } private void handleP2pStateChanged(int state) { - mSwitch.setEnabled(true); + mCheckBox.setEnabled(true); switch (state) { case WifiP2pManager.WIFI_P2P_STATE_ENABLED: - mWifiP2pState = WifiP2pManager.WIFI_P2P_STATE_ENABLED; - mSwitch.setChecked(true); + mCheckBox.setChecked(true); break; case WifiP2pManager.WIFI_P2P_STATE_DISABLED: - mWifiP2pState = WifiP2pManager.WIFI_P2P_STATE_DISABLED; - mSwitch.setChecked(false); + mCheckBox.setChecked(false); break; default: - mWifiP2pState = WifiP2pManager.WIFI_P2P_STATE_DISABLED; Log.e(TAG,"Unhandled wifi state " + state); break; } @@ -135,10 +124,10 @@ public class WifiP2pEnabler implements CompoundButton.OnCheckedChangeListener { //Failure to set up connection Log.e(TAG, "Lost connection with wifi p2p service"); mWifiP2pManager = null; - mSwitch.setEnabled(false); + mCheckBox.setEnabled(false); break; case WifiP2pManager.ENABLE_P2P_FAILED: - mSwitch.setEnabled(true); + mCheckBox.setEnabled(true); break; default: //Ignore diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java index 0656689e3..d83201287 100644 --- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java +++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java @@ -42,7 +42,6 @@ import android.view.Gravity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.widget.Switch; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; @@ -66,7 +65,6 @@ public class WifiP2pSettings extends SettingsPreferenceFragment { private final Handler mHandler = new WifiP2pHandler(); private WifiP2pManager mWifiP2pManager; private WifiP2pManager.Channel mChannel; - private WifiP2pEnabler mWifiP2pEnabler; private WifiP2pDialog mConnectDialog; private OnClickListener mConnectListener; private OnClickListener mDisconnectListener; @@ -121,25 +119,6 @@ public class WifiP2pSettings extends SettingsPreferenceFragment { Log.e(TAG, "mWifiP2pManager is null !"); } - Switch actionBarSwitch = new Switch(activity); - - if (activity instanceof PreferenceActivity) { - PreferenceActivity preferenceActivity = (PreferenceActivity) activity; - if (preferenceActivity.onIsHidingHeaders() || !preferenceActivity.onIsMultiPane()) { - final int padding = activity.getResources().getDimensionPixelSize( - R.dimen.action_bar_switch_padding); - actionBarSwitch.setPadding(0, 0, padding, 0); - activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, - ActionBar.DISPLAY_SHOW_CUSTOM); - activity.getActionBar().setCustomView(actionBarSwitch, new ActionBar.LayoutParams( - ActionBar.LayoutParams.WRAP_CONTENT, - ActionBar.LayoutParams.WRAP_CONTENT, - Gravity.CENTER_VERTICAL | Gravity.RIGHT)); - } - } - - mWifiP2pEnabler = new WifiP2pEnabler(activity, actionBarSwitch); - //connect dialog listener mConnectListener = new OnClickListener() { @Override @@ -171,9 +150,6 @@ public class WifiP2pSettings extends SettingsPreferenceFragment { public void onResume() { super.onResume(); getActivity().registerReceiver(mReceiver, mIntentFilter); - if (mWifiP2pEnabler != null) { - mWifiP2pEnabler.resume(); - } if (mWifiP2pManager != null) mWifiP2pManager.discoverPeers(mChannel); } @@ -181,9 +157,6 @@ public class WifiP2pSettings extends SettingsPreferenceFragment { @Override public void onPause() { super.onPause(); - if (mWifiP2pEnabler != null) { - mWifiP2pEnabler.pause(); - } getActivity().unregisterReceiver(mReceiver); } |