diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/settings/SettingsPreferenceFragment.java | 12 | ||||
-rw-r--r-- | src/com/android/settings/vpn/VpnSettings.java | 77 |
2 files changed, 46 insertions, 43 deletions
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index 77f703c..17bf02d 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -182,6 +182,8 @@ public class SettingsPreferenceFragment extends PreferenceFragment + DialogCreatable.class.getName()); } } + // restore mDialogFragment in mParentFragment + ((SettingsPreferenceFragment) mParentFragment).mDialogFragment = this; } return ((DialogCreatable) mParentFragment).onCreateDialog(mDialogId); } @@ -204,6 +206,16 @@ public class SettingsPreferenceFragment extends PreferenceFragment public int getDialogId() { return mDialogId; } + + @Override + public void onDetach() { + super.onDetach(); + + // in case the dialog is not explicitly removed by removeDialog() + if (((SettingsPreferenceFragment) mParentFragment).mDialogFragment == this) { + ((SettingsPreferenceFragment) mParentFragment).mDialogFragment = null; + } + } } protected boolean hasNextButton() { diff --git a/src/com/android/settings/vpn/VpnSettings.java b/src/com/android/settings/vpn/VpnSettings.java index 318a5bf..539a51e 100644 --- a/src/com/android/settings/vpn/VpnSettings.java +++ b/src/com/android/settings/vpn/VpnSettings.java @@ -86,6 +86,7 @@ public class VpnSettings extends SettingsPreferenceFragment private static final String KEY_ACTIVE_PROFILE = "ActiveProfile"; private static final String KEY_PROFILE_CONNECTING = "ProfileConnecting"; + private static final String KEY_CONNECT_DIALOG_SHOWING = "ConnectDialogShowing"; private static final int REQUEST_ADD_OR_EDIT_PROFILE = 1; static final int REQUEST_SELECT_VPN_TYPE = 2; @@ -140,6 +141,23 @@ public class VpnSettings extends SettingsPreferenceFragment public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.vpn_settings); + + mVpnManager = new VpnManager(getActivity()); + // restore VpnProfile list and construct VpnPreference map + mVpnListContainer = (PreferenceCategory) findPreference(PREF_VPN_LIST); + + // set up the "add vpn" preference + mAddVpn = (PreferenceScreen) findPreference(PREF_ADD_VPN); + mAddVpn.setOnPreferenceClickListener( + new OnPreferenceClickListener() { + public boolean onPreferenceClick(Preference preference) { + startVpnTypeSelection(); + return true; + } + }); + + retrieveVpnListFromStorage(); + restoreInstanceState(savedInstanceState); } @Override @@ -149,6 +167,8 @@ public class VpnSettings extends SettingsPreferenceFragment mActiveProfile.getId()); savedInstanceState.putBoolean(KEY_PROFILE_CONNECTING, (mConnectingActor != null)); + savedInstanceState.putBoolean(KEY_CONNECT_DIALOG_SHOWING, + mConnectDialogShowing); } super.onSaveInstanceState(savedInstanceState); } @@ -161,6 +181,7 @@ public class VpnSettings extends SettingsPreferenceFragment if (savedInstanceState.getBoolean(KEY_PROFILE_CONNECTING)) { mConnectingActor = getActor(mActiveProfile); } + mConnectDialogShowing = savedInstanceState.getBoolean(KEY_CONNECT_DIALOG_SHOWING); } } @@ -168,25 +189,8 @@ public class VpnSettings extends SettingsPreferenceFragment public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - mVpnManager = new VpnManager(getActivity()); - // restore VpnProfile list and construct VpnPreference map - mVpnListContainer = (PreferenceCategory) findPreference(PREF_VPN_LIST); - - // set up the "add vpn" preference - mAddVpn = (PreferenceScreen) findPreference(PREF_ADD_VPN); - mAddVpn.setOnPreferenceClickListener( - new OnPreferenceClickListener() { - public boolean onPreferenceClick(Preference preference) { - startVpnTypeSelection(); - return true; - } - }); - // for long-press gesture on a profile preference registerForContextMenu(getListView()); - - retrieveVpnListFromStorage(); - restoreInstanceState(savedInstanceState); } @Override @@ -205,8 +209,7 @@ public class VpnSettings extends SettingsPreferenceFragment super.onResume(); updatePreferenceMap(); - if (DEBUG) - Log.d(TAG, "onResume"); + if (DEBUG) Log.d(TAG, "onResume"); // listen to vpn connectivity event mVpnManager.registerConnectivityReceiver(mConnectivityReceiver); @@ -249,17 +252,7 @@ public class VpnSettings extends SettingsPreferenceFragment } @Override - protected void showDialog(int dialogId) { - super.showDialog(dialogId); - - if (dialogId == DIALOG_CONNECT) { - mConnectDialogShowing = true; - setOnDismissListener(new DialogInterface.OnDismissListener() { - public void onDismiss(DialogInterface dialog) { - mConnectDialogShowing = false; - } - }); - } + public Dialog onCreateDialog (int id) { setOnCancelListener(new DialogInterface.OnCancelListener() { public void onCancel(DialogInterface dialog) { if (mActiveProfile != null) { @@ -272,12 +265,15 @@ public class VpnSettings extends SettingsPreferenceFragment onIdle(); } }); - } - @Override - public Dialog onCreateDialog (int id) { switch (id) { case DIALOG_CONNECT: + mConnectDialogShowing = true; + setOnDismissListener(new DialogInterface.OnDismissListener() { + public void onDismiss(DialogInterface dialog) { + mConnectDialogShowing = false; + } + }); return createConnectDialog(); case DIALOG_SECRET_NOT_SET: @@ -524,7 +520,6 @@ public class VpnSettings extends SettingsPreferenceFragment String error = mConnectingActor.validateInputs(d); if (error == null) { mConnectingActor.connect(d); - return; } else { // show error dialog final Activity activity = getActivity(); @@ -795,7 +790,6 @@ public class VpnSettings extends SettingsPreferenceFragment private void changeState(VpnProfile p, VpnState state) { VpnState oldState = p.getState(); - if (oldState == state) return; p.setState(state); mVpnPreferenceMap.get(p.getName()).setSummary( getProfileSummaryString(p)); @@ -808,7 +802,9 @@ public class VpnSettings extends SettingsPreferenceFragment break; case CONNECTING: - mConnectingActor = getActor(p); + if (mConnectingActor == null) { + mConnectingActor = getActor(p); + } // $FALL-THROUGH$ case DISCONNECTING: mActiveProfile = p; @@ -883,12 +879,12 @@ public class VpnSettings extends SettingsPreferenceFragment mVpnPreferenceMap = new LinkedHashMap<String, VpnPreference>(); mVpnListContainer.removeAll(); for (VpnProfile p : sVpnProfileList) { - addPreferenceFor(p, false); + addPreferenceFor(p, true); } // reset the mActiveProfile if the profile has been removed from the // other instance. if ((mActiveProfile != null) - && mVpnPreferenceMap.containsKey(mActiveProfile.getName())) { + && !mVpnPreferenceMap.containsKey(mActiveProfile.getName())) { onIdle(); } } @@ -924,11 +920,6 @@ public class VpnSettings extends SettingsPreferenceFragment for (VpnProfile p : sVpnProfileList) { changeState(p, mVpnManager.getState(p)); } - // make preferences appear - for (VpnProfile p : sVpnProfileList) { - VpnPreference pref = mVpnPreferenceMap.get(p.getName()); - mVpnListContainer.addPreference(pref); - } } // A sanity check. Returns true if the profile directory name and profile ID |