diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index 09faf4142cf..5fbfe7b71f5 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -21,6 +21,7 @@ import android.app.Dialog; import android.app.DialogFragment; import android.app.Fragment; import android.content.ContentResolver; +import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; @@ -111,6 +112,28 @@ public class SettingsPreferenceFragment extends PreferenceFragment mDialogFragment = null; } + /** + * Sets the OnCancelListener of the dialog shown. This method can only be + * called after showDialog(int) and before removeDialog(int). The method + * does nothing otherwise. + */ + protected void setOnCancelListener(DialogInterface.OnCancelListener listener) { + if (mDialogFragment != null) { + mDialogFragment.mOnCancelListener = listener; + } + } + + /** + * Sets the OnDismissListener of the dialog shown. This method can only be + * called after showDialog(int) and before removeDialog(int). The method + * does nothing otherwise. + */ + protected void setOnDismissListener(DialogInterface.OnDismissListener listener) { + if (mDialogFragment != null) { + mDialogFragment.mOnDismissListener = listener; + } + } + public static class SettingsDialogFragment extends DialogFragment { private static final String KEY_DIALOG_ID = "key_dialog_id"; private static final String KEY_PARENT_FRAGMENT_ID = "key_parent_fragment_id"; @@ -119,6 +142,9 @@ public class SettingsPreferenceFragment extends PreferenceFragment private Fragment mParentFragment; + private DialogInterface.OnCancelListener mOnCancelListener; + private DialogInterface.OnDismissListener mOnDismissListener; + public SettingsDialogFragment() { /* do nothing */ } @@ -163,6 +189,21 @@ public class SettingsPreferenceFragment extends PreferenceFragment return ((DialogCreatable) mParentFragment).onCreateDialog(mDialogId); } + @Override + public void onCancel(DialogInterface dialog) { + super.onCancel(dialog); + if (mOnCancelListener != null) { + mOnCancelListener.onCancel(dialog); + } + } + + @Override + public void onDismiss(DialogInterface dialog) { + super.onDismiss(dialog); + if (mOnDismissListener != null) { + mOnDismissListener.onDismiss(dialog); + } + } public int getDialogId() { return mDialogId; } diff --git a/src/com/android/settings/deviceinfo/Memory.java b/src/com/android/settings/deviceinfo/Memory.java index c3df2d54529..3e0f0a2843e 100644 --- a/src/com/android/settings/deviceinfo/Memory.java +++ b/src/com/android/settings/deviceinfo/Memory.java @@ -311,19 +311,29 @@ public class Memory extends SettingsPreferenceFragment implements OnCancelListen }}) .setNegativeButton(R.string.cancel, null) .setMessage(R.string.dlg_confirm_unmount_text) - .setOnCancelListener(this) .create(); case DLG_ERROR_UNMOUNT: return new AlertDialog.Builder(getActivity()) .setTitle(R.string.dlg_error_unmount_title) .setNeutralButton(R.string.dlg_ok, null) .setMessage(R.string.dlg_error_unmount_text) - .setOnCancelListener(this) .create(); } return null; } + @Override + protected void showDialog(int id) { + super.showDialog(id); + + switch (id) { + case DLG_CONFIRM_UNMOUNT: + case DLG_ERROR_UNMOUNT: + setOnCancelListener(this); + break; + } + } + private void doUnmount(boolean force) { // Present a toast here Toast.makeText(getActivity(), R.string.unmount_inform_text, Toast.LENGTH_SHORT).show(); diff --git a/src/com/android/settings/vpn/VpnSettings.java b/src/com/android/settings/vpn/VpnSettings.java index 03687f2db69..1e02d502856 100644 --- a/src/com/android/settings/vpn/VpnSettings.java +++ b/src/com/android/settings/vpn/VpnSettings.java @@ -238,6 +238,17 @@ public class VpnSettings extends SettingsPreferenceFragment } } + @Override + protected void showDialog(int dialogId) { + super.showDialog(dialogId); + + setOnCancelListener(new DialogInterface.OnCancelListener() { + public void onCancel(DialogInterface dialog) { + onIdle(); + } + }); + } + @Override public Dialog onCreateDialog (int id) { switch (id) { @@ -267,27 +278,17 @@ public class VpnSettings extends SettingsPreferenceFragment } } - private class ConnectDialog extends AlertDialog { - public ConnectDialog(Context context) { - super(context); - setTitle(String.format(getString(R.string.vpn_connect_to), - mConnectingActor.getProfile().getName())); - setButton(DialogInterface.BUTTON_POSITIVE, - getString(R.string.vpn_connect_button), - VpnSettings.this); - setButton(DialogInterface.BUTTON_NEGATIVE, - getString(android.R.string.cancel), - VpnSettings.this); - setView(mConnectingActor.createConnectView()); - } - public void onBackPressed() { - changeState(mActiveProfile, VpnState.IDLE); - super.onBackPressed(); - } - } - private Dialog createConnectDialog() { - return new ConnectDialog(getActivity()); + final Activity activity = getActivity(); + return new AlertDialog.Builder(activity) + .setView(mConnectingActor.createConnectView()) + .setTitle(String.format(activity.getString(R.string.vpn_connect_to), + mConnectingActor.getProfile().getName())) + .setPositiveButton(activity.getString(R.string.vpn_connect_button), + this) + .setNegativeButton(activity.getString(android.R.string.cancel), + this) + .create(); } private Dialog createReconnectDialog(int id) { @@ -375,11 +376,6 @@ public class VpnSettings extends SettingsPreferenceFragment public void onClick(DialogInterface dialog, int w) { onIdle(); } - }) - .setOnCancelListener(new DialogInterface.OnCancelListener() { - public void onCancel(DialogInterface dialog) { - onIdle(); - } }); }