diff options
author | Amith Yamasani <yamasani@google.com> | 2010-11-12 08:51:01 -0800 |
---|---|---|
committer | Amith Yamasani <yamasani@google.com> | 2010-11-12 10:37:20 -0800 |
commit | 928e78acea580b2dd9f4d5b8207ec50ef9fc258d (patch) | |
tree | 3bf21a3d6caadc03843a668ce22fe921ee6fb679 /src/com | |
parent | 59a48604b5a803fbec6857e07f9fa1adbc6b8bb4 (diff) | |
download | packages_apps_settings-928e78acea580b2dd9f4d5b8207ec50ef9fc258d.zip packages_apps_settings-928e78acea580b2dd9f4d5b8207ec50ef9fc258d.tar.gz packages_apps_settings-928e78acea580b2dd9f4d5b8207ec50ef9fc258d.tar.bz2 |
Fix VPN settings flow.
Bug: 3053019
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/settings/SettingsPreferenceFragment.java | 43 | ||||
-rw-r--r-- | src/com/android/settings/vpn/VpnEditor.java | 22 | ||||
-rw-r--r-- | src/com/android/settings/vpn/VpnSettings.java | 52 | ||||
-rw-r--r-- | src/com/android/settings/vpn/VpnTypeSelection.java | 10 |
4 files changed, 57 insertions, 70 deletions
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index 41ff87f..3c771f5 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -64,49 +64,11 @@ 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 3ab0b90..1b3bdb5 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 e9a4c3d..0b77930 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 5990ac0..45e33b9 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; } } |