From 91e9683d8f8679d346f6029f6ab349b7039f5b00 Mon Sep 17 00:00:00 2001 From: Daisuke Miyakawa Date: Thu, 11 Nov 2010 19:50:48 -0800 Subject: [PATCH 1/6] Set attachToRoot instead of manually doing so. Bug: 3053354 Change-Id: I065c16cd5af3b438d02d6a0b0da080295e9c17cb --- src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java | 2 +- src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java b/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java index c49f5ac0f09..61e59d94b74 100644 --- a/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java +++ b/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java @@ -67,7 +67,7 @@ public class WifiConfigUiForSetupWizardXL implements WifiConfigUiBase, OnFocusCh mEdit = edit; mInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - mView = mInflater.inflate(R.layout.wifi_config_ui_for_setup_wizard, parent, false); + mView = mInflater.inflate(R.layout.wifi_config_ui_for_setup_wizard, parent, true); mController = new WifiConfigController(this, mView, mAccessPoint, edit); // Set Focus to password View. diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java index f59816eaff2..f5a779a67a2 100644 --- a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java +++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java @@ -334,7 +334,7 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis } else { view.findViewById(R.id.wifi_general_info).setVisibility(View.GONE); } - parent.addView(view); + // parent.addView(view); mStatusText.setText(R.string.wifi_setup_status_edit_network); mAddNetworkButton.setVisibility(View.GONE); From 928e78acea580b2dd9f4d5b8207ec50ef9fc258d Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Fri, 12 Nov 2010 08:51:01 -0800 Subject: [PATCH 2/6] Fix VPN settings flow. Bug: 3053019 --- res/values/strings.xml | 2 + .../settings/SettingsPreferenceFragment.java | 43 +-------------- src/com/android/settings/vpn/VpnEditor.java | 22 +++++--- src/com/android/settings/vpn/VpnSettings.java | 52 +++++++++++++------ .../settings/vpn/VpnTypeSelection.java | 10 ++-- 5 files changed, 59 insertions(+), 70 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 3aaed74c3d5..7a5174e7242 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2711,6 +2711,8 @@ found in the list of installed applications. Add VPN Add VPN + + VPN details Add %s VPN diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index 41ff87f0c28..3c771f592ee 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -63,50 +63,12 @@ public class SettingsPreferenceFragment extends PreferenceFragment private Button mNextButton; - @Override - public void onResume() { - super.onResume(); - - final Fragment f = getTargetFragment(); - final int requestCode = getTargetRequestCode(); - - // TargetFragment becomes invalid when this object is resumed. Notify it to - // FragmentManager. Without this code, FragmentManager wrongly take the TargetFragment - // as live, and throws IllegalStateException. - setTargetFragment(null, -1); - - if (f != null && (f instanceof SettingsPreferenceFragment)) { - final SettingsPreferenceFragment spf = (SettingsPreferenceFragment)f; - final int resultCode = spf.getResultCode(); - final Intent resultData = spf.getResultData(); - onActivityResult(requestCode, resultCode, resultData); - } - } - @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setupButtonBar(); } - public final void setResult(int resultCode) { - mResultCode = resultCode; - mResultData = null; - } - - public final void setResult(int resultCode, Intent data) { - mResultCode = resultCode; - mResultData = data; - } - - public final int getResultCode() { - return mResultCode; - } - - public final Intent getResultData() { - return mResultData; - } - /* * The name is intentionally made different from Activity#finish(), so that * users won't misunderstand its meaning. @@ -196,9 +158,8 @@ public class SettingsPreferenceFragment extends PreferenceFragment Fragment caller, String fragmentClass, int requestCode, Bundle extras) { if (getActivity() instanceof PreferenceActivity) { PreferenceActivity preferenceActivity = (PreferenceActivity)getActivity(); - Fragment f = Fragment.instantiate(getActivity(), fragmentClass, extras); - caller.setTargetFragment(f, requestCode); - preferenceActivity.switchToHeader(fragmentClass, extras); + preferenceActivity.startPreferencePanel(fragmentClass, extras, 0, null, caller, + requestCode); return true; } else { Log.w(TAG, "Parent isn't PreferenceActivity, thus there's no way to launch the " diff --git a/src/com/android/settings/vpn/VpnEditor.java b/src/com/android/settings/vpn/VpnEditor.java index 3ab0b909d06..1b3bdb59b49 100644 --- a/src/com/android/settings/vpn/VpnEditor.java +++ b/src/com/android/settings/vpn/VpnEditor.java @@ -32,8 +32,8 @@ import android.net.vpn.VpnProfile; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; +import android.preference.PreferenceActivity; import android.text.TextUtils; -import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -109,7 +109,11 @@ public class VpnEditor extends SettingsPreferenceFragment { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_SAVE: - if (validateAndSetResult()) finishFragment(); + Intent resultIntent = validateAndGetResult(); + if (resultIntent != null) { + ((PreferenceActivity) getActivity()).finishPreferencePanel( + this, Activity.RESULT_OK, resultIntent); + } return true; case MENU_CANCEL: @@ -152,22 +156,24 @@ public class VpnEditor extends SettingsPreferenceFragment { * Checks the validity of the inputs and set the profile as result if valid. * @return true if the result is successfully set */ - private boolean validateAndSetResult() { + private Intent validateAndGetResult() { String errorMsg = mProfileEditor.validate(); if (errorMsg != null) { Util.showErrorMessage(getActivity(), errorMsg); - return false; + return null; } - if (profileChanged()) setResult(getProfile()); - return true; + if (profileChanged()) { + return getResult(getProfile()); + } + return null; } - private void setResult(VpnProfile p) { + private Intent getResult(VpnProfile p) { Intent intent = new Intent(getActivity(), VpnSettings.class); intent.putExtra(VpnSettings.KEY_VPN_PROFILE, (Parcelable) p); - setResult(Activity.RESULT_OK, intent); + return intent; } private VpnProfileEditor getEditor(VpnProfile p) { diff --git a/src/com/android/settings/vpn/VpnSettings.java b/src/com/android/settings/vpn/VpnSettings.java index e9a4c3dc07e..0b77930670c 100644 --- a/src/com/android/settings/vpn/VpnSettings.java +++ b/src/com/android/settings/vpn/VpnSettings.java @@ -22,7 +22,6 @@ import com.android.settings.SettingsPreferenceFragment; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; -import android.app.Fragment; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -39,19 +38,21 @@ import android.net.vpn.VpnState; import android.net.vpn.VpnType; import android.os.Bundle; import android.os.ConditionVariable; +import android.os.Handler; import android.os.IBinder; import android.preference.Preference; -import android.preference.Preference.OnPreferenceClickListener; +import android.preference.PreferenceActivity; import android.preference.PreferenceCategory; import android.preference.PreferenceScreen; +import android.preference.Preference.OnPreferenceClickListener; import android.security.Credentials; import android.security.KeyStore; import android.text.TextUtils; import android.util.Log; import android.view.ContextMenu; -import android.view.ContextMenu.ContextMenuInfo; import android.view.MenuItem; import android.view.View; +import android.view.ContextMenu.ContextMenuInfo; import android.widget.AdapterView.AdapterContextMenuInfo; import java.io.File; @@ -72,6 +73,9 @@ import java.util.Map; */ public class VpnSettings extends SettingsPreferenceFragment implements DialogInterface.OnClickListener { + + private static final boolean DEBUG = false; + // Key to the field exchanged for profile editing. static final String KEY_VPN_PROFILE = "vpn_profile"; @@ -87,7 +91,7 @@ public class VpnSettings extends SettingsPreferenceFragment private static final String PROFILE_OBJ_FILE = ".pobj"; private static final int REQUEST_ADD_OR_EDIT_PROFILE = 1; - private static final int REQUEST_SELECT_VPN_TYPE = 2; + static final int REQUEST_SELECT_VPN_TYPE = 2; private static final int CONTEXT_MENU_CONNECT_ID = ContextMenu.FIRST + 0; private static final int CONTEXT_MENU_DISCONNECT_ID = ContextMenu.FIRST + 1; @@ -134,6 +138,8 @@ public class VpnSettings extends SettingsPreferenceFragment private StatusChecker mStatusChecker = new StatusChecker(); + private Handler mHandler = new Handler(); + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -171,7 +177,8 @@ public class VpnSettings extends SettingsPreferenceFragment @Override public void onResume() { super.onResume(); - + if (DEBUG) + Log.d(TAG, "onResume"); if ((mUnlockAction != null) && isKeyStoreUnlocked()) { Runnable action = mUnlockAction; mUnlockAction = null; @@ -282,7 +289,7 @@ public class VpnSettings extends SettingsPreferenceFragment .setPositiveButton(R.string.vpn_yes_button, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int w) { - startVpnEditor(mActiveProfile); + startVpnEditor(mActiveProfile, false); } }) .create(); @@ -295,7 +302,7 @@ public class VpnSettings extends SettingsPreferenceFragment public void onClick(DialogInterface dialog, int w) { VpnProfile p = mActiveProfile; onIdle(); - startVpnEditor(p); + startVpnEditor(p, false); } }); } @@ -362,7 +369,7 @@ public class VpnSettings extends SettingsPreferenceFragment return true; case CONTEXT_MENU_EDIT_ID: - startVpnEditor(p); + startVpnEditor(p, false); return true; case CONTEXT_MENU_DELETE_ID: @@ -376,14 +383,21 @@ public class VpnSettings extends SettingsPreferenceFragment @Override public void onActivityResult(final int requestCode, final int resultCode, final Intent data) { + + if (DEBUG) Log.d(TAG, "onActivityResult , result = " + resultCode + ", data = " + data); if ((resultCode == Activity.RESULT_CANCELED) || (data == null)) { Log.d(TAG, "no result returned by editor"); return; } if (requestCode == REQUEST_SELECT_VPN_TYPE) { - String typeName = data.getStringExtra(KEY_VPN_TYPE); - startVpnEditor(createVpnProfile(typeName)); + final String typeName = data.getStringExtra(KEY_VPN_TYPE); + mHandler.post(new Runnable() { + + public void run() { + startVpnEditor(createVpnProfile(typeName), true); + } + }); } else if (requestCode == REQUEST_ADD_OR_EDIT_PROFILE) { VpnProfile p = data.getParcelableExtra(KEY_VPN_PROFILE); if (p == null) { @@ -400,7 +414,7 @@ public class VpnSettings extends SettingsPreferenceFragment p.getName()), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int w) { - startVpnEditor(profile); + startVpnEditor(profile, false); } }); return; @@ -431,7 +445,7 @@ public class VpnSettings extends SettingsPreferenceFragment Util.showErrorMessage(activity, e + ": " + e.getMessage(), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int w) { - startVpnEditor(profile); + startVpnEditor(profile, false); } }); } @@ -615,8 +629,9 @@ public class VpnSettings extends SettingsPreferenceFragment } private void startVpnTypeSelection() { - startFragment(this, VpnTypeSelection.class.getCanonicalName(), - REQUEST_SELECT_VPN_TYPE, null); + ((PreferenceActivity)getActivity()).startPreferencePanel( + VpnTypeSelection.class.getCanonicalName(), null, R.string.vpn_type_title, null, + this, REQUEST_SELECT_VPN_TYPE); } private boolean isKeyStoreUnlocked() { @@ -666,11 +681,14 @@ public class VpnSettings extends SettingsPreferenceFragment return false; } - private void startVpnEditor(final VpnProfile profile) { + private void startVpnEditor(final VpnProfile profile, boolean add) { Bundle args = new Bundle(); args.putParcelable(KEY_VPN_PROFILE, profile); - startFragment(this, VpnEditor.class.getCanonicalName(), - REQUEST_ADD_OR_EDIT_PROFILE, args); + // TODO: Show different titles for add and edit. + ((PreferenceActivity)getActivity()).startPreferencePanel( + VpnEditor.class.getCanonicalName(), args, + add ? R.string.vpn_details_title : R.string.vpn_details_title, null, + this, REQUEST_ADD_OR_EDIT_PROFILE); } private synchronized void connect(final VpnProfile p) { diff --git a/src/com/android/settings/vpn/VpnTypeSelection.java b/src/com/android/settings/vpn/VpnTypeSelection.java index 5990ac0ac35..45e33b99cc4 100644 --- a/src/com/android/settings/vpn/VpnTypeSelection.java +++ b/src/com/android/settings/vpn/VpnTypeSelection.java @@ -25,6 +25,7 @@ import android.net.vpn.VpnManager; import android.net.vpn.VpnType; import android.os.Bundle; import android.preference.Preference; +import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import java.util.HashMap; @@ -46,8 +47,9 @@ public class VpnTypeSelection extends SettingsPreferenceFragment { @Override public boolean onPreferenceTreeClick(PreferenceScreen ps, Preference pref) { - setResult(mTypeMap.get(pref.getTitle().toString())); - finishFragment(); + ((PreferenceActivity)getActivity()) + .finishPreferencePanel(this, Activity.RESULT_OK, + getResultIntent(mTypeMap.get(pref.getTitle().toString()))); return true; } @@ -67,9 +69,9 @@ public class VpnTypeSelection extends SettingsPreferenceFragment { } } - private void setResult(VpnType type) { + private Intent getResultIntent(VpnType type) { Intent intent = new Intent(getActivity(), VpnSettings.class); intent.putExtra(VpnSettings.KEY_VPN_TYPE, type.toString()); - setResult(Activity.RESULT_OK, intent); + return intent; } } From c05dedf9bee2445b6a35e7ca2f2d67f9b570bfaa Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Fri, 12 Nov 2010 12:44:52 -0800 Subject: [PATCH 3/6] Buttons in battery details now switch fragments. These were launching a whole new settings activity. Change-Id: I6876acf54d484119eec339c8597b5d9d843bae56 --- .../settings/fuelgauge/PowerUsageDetail.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java index c4b6db4779c..7717503945a 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java @@ -42,8 +42,14 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; + +import com.android.settings.DisplaySettings; import com.android.settings.R; +import com.android.settings.SecuritySettings; +import com.android.settings.WirelessSettings; import com.android.settings.applications.InstalledAppDetails; +import com.android.settings.bluetooth.BluetoothSettings; +import com.android.settings.wifi.WifiSettings; public class PowerUsageDetail extends Fragment implements Button.OnClickListener { @@ -253,24 +259,30 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener } private void doAction(int action) { + PreferenceActivity pa = (PreferenceActivity)getActivity(); switch (action) { case ACTION_DISPLAY_SETTINGS: - startActivity(new Intent(Settings.ACTION_DISPLAY_SETTINGS)); + pa.startPreferencePanel(DisplaySettings.class.getName(), null, + R.string.display_settings_title, null, null, 0); break; case ACTION_WIFI_SETTINGS: - startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); + pa.startPreferencePanel(WifiSettings.class.getName(), null, + R.string.wifi_settings, null, null, 0); break; case ACTION_BLUETOOTH_SETTINGS: - startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)); + pa.startPreferencePanel(BluetoothSettings.class.getName(), null, + R.string.bluetooth_settings, null, null, 0); break; case ACTION_WIRELESS_SETTINGS: - startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); + pa.startPreferencePanel(WirelessSettings.class.getName(), null, + R.string.radio_controls_title, null, null, 0); break; case ACTION_APP_DETAILS: startApplicationDetailsActivity(); break; case ACTION_SECURITY_SETTINGS: - startActivity(new Intent(Settings.ACTION_SECURITY_SETTINGS)); + pa.startPreferencePanel(SecuritySettings.class.getName(), null, + R.string.security_settings_title, null, null, 0); break; case ACTION_FORCE_STOP: killProcesses(); From d925e25a34804781177ef73e9885817b2af710f5 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Fri, 12 Nov 2010 13:18:26 -0800 Subject: [PATCH 4/6] Some more theme adjustment. Also fix battery use button on device info to do the right thing. Change-Id: I663429d5eb15ac4500feabeebd7ad2e3b8238409 --- AndroidManifest.xml | 35 +++++++++++++++++++++----------- res/values/styles.xml | 2 +- res/xml/device_info_settings.xml | 4 +--- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 596057292b8..c5e5eb73409 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -130,7 +130,8 @@ - + @@ -138,7 +139,8 @@ - + @@ -146,7 +148,8 @@ - + @@ -154,7 +157,8 @@ - + @@ -163,7 +167,7 @@ + android:targetActivity="Settings"> @@ -311,7 +315,8 @@ + android:label="@string/builtin_keyboard_settings_title" + android:theme="@android:style/Theme.Holo.DialogWhenLarge"> @@ -391,7 +396,7 @@ @@ -407,7 +412,7 @@ + android:theme="@*android:style/Theme.Holo.Dialog.Alert"> @@ -416,7 +421,7 @@ + android:theme="@*android:style/Theme.Holo.Dialog.Alert"> @@ -586,7 +591,9 @@ - @@ -667,7 +674,9 @@ - @@ -692,7 +701,9 @@ android:resource="@id/storage_settings" /> - + diff --git a/res/values/styles.xml b/res/values/styles.xml index c24359b1652..991637b8997 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -79,7 +79,7 @@ @null - diff --git a/res/xml/device_info_settings.xml b/res/xml/device_info_settings.xml index 860c2ea012b..492c9d12ddb 100644 --- a/res/xml/device_info_settings.xml +++ b/res/xml/device_info_settings.xml @@ -35,11 +35,9 @@ - From 5fd39cafe1de792300e9e3dd60258a1ce5079f73 Mon Sep 17 00:00:00 2001 From: satok Date: Tue, 9 Nov 2010 23:31:26 +0900 Subject: [PATCH 5/6] Not to set IME when the current IME was disabled, because framework will find an applicable IME when the current IME was unset. Bug: 3186000 - This enables us to share the code between Settings and the framework. - Removed the parameter for lastImeTicked because an applicable IME can be found in the framework. Change-Id: Icfb6168c5a22506f225bfe58425adeb540835456 --- .../InputMethodAndLanguageSettings.java | 9 +------ .../InputMethodAndSubtypeEnabler.java | 10 +------- .../InputMethodAndSubtypeUtil.java | 25 ++++++------------- 3 files changed, 10 insertions(+), 34 deletions(-) diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java index 25ab6dabd35..a13a292c8c6 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java +++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java @@ -52,8 +52,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment { final TextUtils.SimpleStringSplitter mStringColonSplitter = new TextUtils.SimpleStringSplitter(':'); - - private String mLastTickedInputMethodId; private AlertDialog mDialog = null; @@ -145,7 +143,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment { InputMethodAndSubtypeUtil.loadInputMethodSubtypeList( this, getContentResolver(), mInputMethodProperties); - mLastTickedInputMethodId = null; if (mLanguagePref != null) { Configuration conf = getResources().getConfiguration(); @@ -161,7 +158,7 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment { public void onPause() { super.onPause(); InputMethodAndSubtypeUtil.saveInputMethodSubtypeList(this, getContentResolver(), - mInputMethodProperties, mHaveHardKeyboard, mLastTickedInputMethodId); + mInputMethodProperties, mHaveHardKeyboard); } @Override @@ -184,7 +181,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment { selImi = imi; if (isSystemIme(imi)) { // This is a built-in IME, so no need to warn. - mLastTickedInputMethodId = id; return super.onPreferenceTreeClick(preferenceScreen, preference); } } @@ -203,7 +199,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment { new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { chkPref.setChecked(true); - mLastTickedInputMethodId = id; } }) @@ -223,8 +218,6 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment { R.string.ime_security_warning, selImi.getServiceInfo().applicationInfo.loadLabel(getPackageManager()))); mDialog.show(); - } else if (id.equals(mLastTickedInputMethodId)) { - mLastTickedInputMethodId = null; } } else if (preference instanceof PreferenceScreen) { if (preference.getFragment() != null) { diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java index 3659dbbf623..cb9051428e5 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java +++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java @@ -42,8 +42,6 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { private List mInputMethodProperties; - private String mLastTickedInputMethodId; - private AlertDialog mDialog = null; @Override @@ -60,14 +58,13 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { super.onResume(); InputMethodAndSubtypeUtil.loadInputMethodSubtypeList( this, getContentResolver(), mInputMethodProperties); - mLastTickedInputMethodId = null; } @Override public void onPause() { super.onPause(); InputMethodAndSubtypeUtil.saveInputMethodSubtypeList(this, getContentResolver(), - mInputMethodProperties, mHaveHardKeyboard, mLastTickedInputMethodId); + mInputMethodProperties, mHaveHardKeyboard); } @Override @@ -89,7 +86,6 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { InputMethodAndSubtypeUtil.setSubtypesPreferenceEnabled( this, mInputMethodProperties, id, true); // This is a built-in IME, so no need to warn. - mLastTickedInputMethodId = id; return super.onPreferenceTreeClick(preferenceScreen, preference); } break; @@ -111,7 +107,6 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { InputMethodAndSubtypeUtil.setSubtypesPreferenceEnabled( InputMethodAndSubtypeEnabler.this, mInputMethodProperties, id, true); - mLastTickedInputMethodId = id; } }) @@ -132,9 +127,6 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { selImi.getServiceInfo().applicationInfo.loadLabel(getPackageManager()))); mDialog.show(); } else { - if (id.equals(mLastTickedInputMethodId)) { - mLastTickedInputMethodId = null; - } InputMethodAndSubtypeUtil.setSubtypesPreferenceEnabled( this, mInputMethodProperties, id, false); } diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java index 709dacecb11..288e6c26f03 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java +++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java @@ -98,15 +98,13 @@ public class InputMethodAndSubtypeUtil { public static void saveInputMethodSubtypeList( SettingsPreferenceFragment context, ContentResolver resolver, - List inputMethodProperties, - boolean hasHardKeyboard, String lastTickedInputMethodId) { + List inputMethodProperties, boolean hasHardKeyboard) { String currentInputMethodId = Settings.Secure.getString(resolver, Settings.Secure.DEFAULT_INPUT_METHOD); final int selectedInputMethodSubtype = getInputMethodSubtypeSelected(resolver); StringBuilder builder = new StringBuilder(); StringBuilder disabledSysImes = new StringBuilder(); - InputMethodInfo firstEnabledIMI = null; int firstSubtypeHashCode = NOT_A_SUBTYPE_ID; final boolean onlyOneIME = inputMethodProperties.size() == 1; @@ -121,9 +119,6 @@ public class InputMethodAndSubtypeUtil { || (pref != null && pref.isChecked())) { if (builder.length() > 0) builder.append(INPUT_METHOD_SEPARATER); builder.append(id); - if (firstEnabledIMI == null) { - firstEnabledIMI = property; - } for (InputMethodSubtype subtype : property.getSubtypes()) { CheckBoxPreference subtypePref = (CheckBoxPreference) context.findPreference( id + subtype.hashCode()); @@ -141,8 +136,11 @@ public class InputMethodAndSubtypeUtil { } else if (isCurrentInputMethod) { // We are processing the current input method, but found that it's not enabled. // This means that the current input method has been uninstalled. - // If currentInputMethod is already uninstalled, selects last ticked IME - currentInputMethodId = lastTickedInputMethodId; + // If currentInputMethod is already uninstalled, InputMethodManagerService will + // find the applicable IME from the history and the system locale. + if (DEBUG) { + Log.d(TAG, "Current IME was uninstalled or disabled."); + } } // If it's a disabled system ime, add it to the disabled list so that it // doesn't get enabled automatically on any changes to the package list @@ -152,15 +150,6 @@ public class InputMethodAndSubtypeUtil { } } - // If the last input method is unset, set it as the first enabled one. - if (TextUtils.isEmpty(currentInputMethodId)) { - if (firstEnabledIMI != null) { - currentInputMethodId = firstEnabledIMI.getId(); - } else { - currentInputMethodId = null; - } - } - if (DEBUG) { Log.d(TAG, "--- Save enabled inputmethod settings. :" + builder.toString()); Log.d(TAG, "--- Save disable system inputmethod settings. :" @@ -183,6 +172,8 @@ public class InputMethodAndSubtypeUtil { Settings.Secure.ENABLED_INPUT_METHODS, builder.toString()); Settings.Secure.putString(resolver, Settings.Secure.DISABLED_SYSTEM_INPUT_METHODS, disabledSysImes.toString()); + // If the current input method is unset, InputMethodManagerService will find the applicable + // IME from the history and the system locale. Settings.Secure.putString(resolver, Settings.Secure.DEFAULT_INPUT_METHOD, currentInputMethodId != null ? currentInputMethodId : ""); } From fdb9343ef660fc424bb8c29b48d5c06dff0241c1 Mon Sep 17 00:00:00 2001 From: Daisuke Miyakawa Date: Fri, 12 Nov 2010 16:04:04 -0800 Subject: [PATCH 6/6] Stop showing software keyboard when appropriate This change assumes the structure inside layout file. We will change the structure inside the layout, so fundemental fix should come along the layout change. Also let software keyboard hide when appropriate. onBackButtonPressed() loses the focus and hiding the keyboard doesn't work fine after the call. Bug: 3192886 Change-Id: Ifd28d1f1fd0d6f72dc1c32c066dd793c6f9f36ab --- .../wifi/WifiConfigUiForSetupWizardXL.java | 31 ++++++++++++------- .../wifi/WifiSettingsForSetupWizardXL.java | 2 +- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java b/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java index 61e59d94b74..4de7ef5afb5 100644 --- a/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java +++ b/src/com/android/settings/wifi/WifiConfigUiForSetupWizardXL.java @@ -70,17 +70,26 @@ public class WifiConfigUiForSetupWizardXL implements WifiConfigUiBase, OnFocusCh mView = mInflater.inflate(R.layout.wifi_config_ui_for_setup_wizard, parent, true); mController = new WifiConfigController(this, mView, mAccessPoint, edit); - // Set Focus to password View. - final View viewToBeFocused = mView.findViewById(R.id.password); - if (viewToBeFocused != null && viewToBeFocused.getVisibility() == View.VISIBLE && - viewToBeFocused instanceof EditText) { - // After acquiring the focus, we show software keyboard. - viewToBeFocused.setOnFocusChangeListener(this); - final boolean requestFocusResult = viewToBeFocused.requestFocus(); - Log.i(TAG, String.format("Focus request %s.", - (requestFocusResult ? "successful" : "failed"))); - if (!requestFocusResult) { - viewToBeFocused.setOnFocusChangeListener(null); + // Assumes R.id.password is inside security_fields. + // TODO: confirm it is ok to assume R.id.password is the only EditText to be focused, and + // R.id.security_fields is the only parent for possible EditTexts. Possibly we need to + // check parentand detect visibility manually. + if (mView.findViewById(R.id.security_fields).getVisibility() == View.VISIBLE) { + // Set Focus to password View. + final View viewToBeFocused = mView.findViewById(R.id.password); + if (viewToBeFocused == null) { + Log.w(TAG, "password field to be focused not found."); + } else if (!(viewToBeFocused instanceof EditText)) { + Log.w(TAG, "password field is not EditText"); + } else { + // After acquiring the focus, we show software keyboard. + viewToBeFocused.setOnFocusChangeListener(this); + final boolean requestFocusResult = viewToBeFocused.requestFocus(); + Log.i(TAG, String.format("Focus request %s.", + (requestFocusResult ? "successful" : "failed"))); + if (!requestFocusResult) { + viewToBeFocused.setOnFocusChangeListener(null); + } } } } diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java index f5a779a67a2..468e5c26108 100644 --- a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java +++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java @@ -163,6 +163,7 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis @Override public void onClick(View view) { + hideSoftwareKeyboard(); if (view == mAddNetworkButton) { onAddNetworkButtonPressed(); } else if (view == mRefreshButton) { @@ -184,7 +185,6 @@ public class WifiSettingsForSetupWizardXL extends Activity implements OnClickLis } else if (view == mDetailButton) { mWifiSettings.showDialogForSelectedPreference(); } - hideSoftwareKeyboard(); } private void hideSoftwareKeyboard() {