summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2010-11-12 08:51:01 -0800
committerAmith Yamasani <yamasani@google.com>2010-11-12 10:37:20 -0800
commit928e78acea580b2dd9f4d5b8207ec50ef9fc258d (patch)
tree3bf21a3d6caadc03843a668ce22fe921ee6fb679 /src/com
parent59a48604b5a803fbec6857e07f9fa1adbc6b8bb4 (diff)
downloadpackages_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.java43
-rw-r--r--src/com/android/settings/vpn/VpnEditor.java22
-rw-r--r--src/com/android/settings/vpn/VpnSettings.java52
-rw-r--r--src/com/android/settings/vpn/VpnTypeSelection.java10
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;
}
}