Allow OnCancelListener and OnDismissListener in Settings app

for the framework-managed dialogs.

DialogFragment acts as both listeners so the application cannot set both
listeners in the embedded dialog. New hooks are added in SettingsDialogFragment
so that settings apps can do so for the framework-managed dialogs.

Bug: 3386670
Change-Id: I144e7c4ccf7f86c61f6079fa86d830c709335af1
This commit is contained in:
Hung-ying Tyan
2011-01-25 16:42:14 +08:00
parent 0385cf14a1
commit 0ee51e04fb
3 changed files with 74 additions and 27 deletions

View File

@@ -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;
}