Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 045163ac authored by Romain Guy's avatar Romain Guy
Browse files

Fixes lock on Home. Adds a new API on Dialog to get a callback when the dialog

shows.
parent 3660c095
Loading
Loading
Loading
Loading
+33 −6
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ public class Dialog implements DialogInterface, Window.Callback,

    private Message mCancelMessage;
    private Message mDismissMessage;
    private Message mShowMessage;

    /**
     * Whether to cancel the dialog when a touch is received outside of the
@@ -140,7 +141,7 @@ public class Dialog implements DialogInterface, Window.Callback,
        w.setWindowManager(mWindowManager, null, null);
        w.setGravity(Gravity.CENTER);
        mUiThread = Thread.currentThread();
        mDismissCancelHandler = new DismissCancelHandler(this);
        mListenersHandler = new ListenersHandler(this);
    }

    /**
@@ -235,6 +236,8 @@ public class Dialog implements DialogInterface, Window.Callback,
        }
        mWindowManager.addView(mDecor, l);
        mShowing = true;

        sendShowMessage();
    }
    
    /**
@@ -289,6 +292,13 @@ public class Dialog implements DialogInterface, Window.Callback,
        }
    }

    private void sendShowMessage() {
        if (mShowMessage != null) {
            // Obtain a new message so this dialog can be re-used
            Message.obtain(mShowMessage).sendToTarget();
        }
    }

    // internal method to make sure mcreated is set properly without requiring
    // users to call through to super in onCreate
    void dispatchOnCreate(Bundle savedInstanceState) {
@@ -890,7 +900,7 @@ public class Dialog implements DialogInterface, Window.Callback,
     */
    public void setOnCancelListener(final OnCancelListener listener) {
        if (listener != null) {
            mCancelMessage = mDismissCancelHandler.obtainMessage(CANCEL, listener);
            mCancelMessage = mListenersHandler.obtainMessage(CANCEL, listener);
        } else {
            mCancelMessage = null;
        }
@@ -911,12 +921,25 @@ public class Dialog implements DialogInterface, Window.Callback,
     */
    public void setOnDismissListener(final OnDismissListener listener) {
        if (listener != null) {
            mDismissMessage = mDismissCancelHandler.obtainMessage(DISMISS, listener);
            mDismissMessage = mListenersHandler.obtainMessage(DISMISS, listener);
        } else {
            mDismissMessage = null;
        }
    }

    /**
     * Sets a listener to be invoked when the dialog is shown.
     *
     * @hide Pending API council approval
     */
    public void setOnShowListener(OnShowListener listener) {
        if (listener != null) {
            mShowMessage = mListenersHandler.obtainMessage(SHOW, listener);
        } else {
            mShowMessage = null;
        }
    }

    /**
     * Set a message to be sent when the dialog is dismissed.
     * @param msg The msg to send when the dialog is dismissed.
@@ -951,13 +974,14 @@ public class Dialog implements DialogInterface, Window.Callback,

    private static final int DISMISS = 0x43;
    private static final int CANCEL = 0x44;
    private static final int SHOW = 0x45;

    private Handler mDismissCancelHandler;
    private Handler mListenersHandler;

    private static final class DismissCancelHandler extends Handler {
    private static final class ListenersHandler extends Handler {
        private WeakReference<DialogInterface> mDialog;

        public DismissCancelHandler(Dialog dialog) {
        public ListenersHandler(Dialog dialog) {
            mDialog = new WeakReference<DialogInterface>(dialog);
        }

@@ -970,6 +994,9 @@ public class Dialog implements DialogInterface, Window.Callback,
                case CANCEL:
                    ((OnCancelListener) msg.obj).onCancel(mDialog.get());
                    break;
                case SHOW:
                    ((OnShowListener) msg.obj).onShow(mDialog.get());
                    break;
            }
        }
    }
+15 −0
Original line number Diff line number Diff line
@@ -91,6 +91,21 @@ public interface DialogInterface {
        public void onDismiss(DialogInterface dialog);
    }

    /**
     * Interface used to allow the creator of a dialog to run some code when the
     * dialog is shown.
     * @hide Pending API council approval
     */
    interface OnShowListener {
        /**
         * This method will be invoked when the dialog is shown.
         *
         * @param dialog The dialog that was shown will be passed into the
         *            method.
         */
        public void onShow(DialogInterface dialog);
    }

    /**
     * Interface used to allow the creator of a dialog to run some code when an
     * item on the dialog is clicked..