From f812fee071b9992872009b2dcd7969c7ce882a90 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Tue, 25 Jan 2011 14:54:29 -0800 Subject: Argh forget to include my final part of the change. Change-Id: I1e2711e1ecde0350047f1edef9a59947ff5749eb --- core/java/android/app/Dialog.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'core/java/android/app/Dialog.java') diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java index 7365670a9aaa..f4fa567e28fd 100644 --- a/core/java/android/app/Dialog.java +++ b/core/java/android/app/Dialog.java @@ -85,6 +85,7 @@ public class Dialog implements DialogInterface, Window.Callback, */ protected boolean mCancelable = true; + private String mCancelAndDismissTaken; private Message mCancelMessage; private Message mDismissMessage; private Message mShowMessage; @@ -1029,6 +1030,11 @@ public class Dialog implements DialogInterface, Window.Callback, * @param listener The {@link DialogInterface.OnCancelListener} to use. */ public void setOnCancelListener(final OnCancelListener listener) { + if (mCancelAndDismissTaken != null) { + throw new IllegalStateException( + "OnCancelListener is already taken by " + + mCancelAndDismissTaken + " and can not be replaced."); + } if (listener != null) { mCancelMessage = mListenersHandler.obtainMessage(CANCEL, listener); } else { @@ -1050,6 +1056,11 @@ public class Dialog implements DialogInterface, Window.Callback, * @param listener The {@link DialogInterface.OnDismissListener} to use. */ public void setOnDismissListener(final OnDismissListener listener) { + if (mCancelAndDismissTaken != null) { + throw new IllegalStateException( + "OnDismissListener is already taken by " + + mCancelAndDismissTaken + " and can not be replaced."); + } if (listener != null) { mDismissMessage = mListenersHandler.obtainMessage(DISMISS, listener); } else { @@ -1077,6 +1088,22 @@ public class Dialog implements DialogInterface, Window.Callback, mDismissMessage = msg; } + /** @hide */ + public boolean takeCancelAndDismissListeners(String msg, final OnCancelListener cancel, + final OnDismissListener dismiss) { + if (mCancelAndDismissTaken != null) { + mCancelAndDismissTaken = null; + } else if (mCancelMessage != null || mDismissMessage != null) { + return false; + } + + setOnCancelListener(cancel); + setOnDismissListener(dismiss); + mCancelAndDismissTaken = msg; + + return true; + } + /** * By default, this will use the owner Activity's suggested stream type. * -- cgit v1.2.3