Browse Source

Input dialogs no longer override onShow, onCancel, and onDismiss listeners. Also made the internal setter methods in DialogBase protected, and moved DialogBase to a private base package class.

Aidan Follestad 10 years ago
parent
commit
758648472c

+ 39 - 6
library/src/main/java/com/afollestad/materialdialogs/base/DialogBase.java → library/src/main/java/com/afollestad/materialdialogs/DialogBase.java

@@ -1,4 +1,4 @@
-package com.afollestad.materialdialogs.base;
+package com.afollestad.materialdialogs;
 
 import android.app.AlertDialog;
 import android.content.Context;
@@ -11,9 +11,11 @@ import android.view.ViewGroup;
 /**
  * @author Aidan Follestad (afollestad)
  */
-public class DialogBase extends AlertDialog implements DialogInterface.OnShowListener {
+class DialogBase extends AlertDialog implements DialogInterface.OnShowListener, DialogInterface.OnDismissListener, DialogInterface.OnCancelListener {
 
     private OnShowListener mShowListener;
+    private OnDismissListener mDismissListener;
+    private OnCancelListener mCancelListener;
     protected ContextThemeWrapper mThemedContext;
 
     protected DialogBase(Context context) {
@@ -89,12 +91,30 @@ public class DialogBase extends AlertDialog implements DialogInterface.OnShowLis
         mShowListener = listener;
     }
 
-    public final void _setViewInternal(View view) {
-        super.setView(view);
+    protected final void setOnShowListenerInternal() {
+        super.setOnShowListener(this);
     }
 
-    public final void _setOnShowListenerInternal() {
-        super.setOnShowListener(this);
+    @Override
+    public void setOnDismissListener(OnDismissListener listener) {
+        mDismissListener = listener;
+    }
+
+    public final void setOnDismissListenerInternal() {
+        super.setOnDismissListener(this);
+    }
+
+    @Override
+    public void setOnCancelListener(OnCancelListener listener) {
+        mCancelListener = listener;
+    }
+
+    public final void setOnCancelListenerInternal() {
+        super.setOnCancelListener(this);
+    }
+
+    protected final void setViewInternal(View view) {
+        super.setView(view);
     }
 
     @Override
@@ -102,4 +122,17 @@ public class DialogBase extends AlertDialog implements DialogInterface.OnShowLis
         if (mShowListener != null)
             mShowListener.onShow(dialog);
     }
+
+    @Override
+    public void onDismiss(DialogInterface dialog) {
+        if (mDismissListener != null)
+            mDismissListener.onDismiss(dialog);
+    }
+
+
+    @Override
+    public void onCancel(DialogInterface dialog) {
+        if (mCancelListener != null)
+            mCancelListener.onCancel(dialog);
+    }
 }

+ 4 - 50
library/src/main/java/com/afollestad/materialdialogs/DialogInit.java

@@ -329,8 +329,10 @@ class DialogInit {
 
         // Other internal initialization
         dialog.invalidateList();
-        dialog._setOnShowListenerInternal();
-        dialog._setViewInternal(dialog.view);
+        dialog.setOnShowListenerInternal();
+        dialog.setOnDismissListenerInternal();
+        dialog.setOnCancelListenerInternal();
+        dialog.setViewInternal(dialog.view);
         dialog.checkIfListInitScroll();
     }
 
@@ -369,54 +371,6 @@ class DialogInit {
         dialog.input.setHint(builder.inputHint);
         dialog.input.setSingleLine();
         dialog.input.setColorFilter(dialog.mBuilder.widgetColor);
-
-        dialog.setOnShowListener(new DialogInterface.OnShowListener() {
-            @Override
-            public void onShow(DialogInterface di) {
-                final MaterialDialog dialog = (MaterialDialog) di;
-                if (dialog.getInputEditText() == null) return;
-                dialog.getInputEditText().post(new Runnable() {
-                    @Override
-                    public void run() {
-                        dialog.getInputEditText().requestFocus();
-                        InputMethodManager imm = (InputMethodManager) builder.context.getSystemService(Context.INPUT_METHOD_SERVICE);
-                        if (imm != null)
-                            imm.showSoftInput(dialog.getInputEditText(), InputMethodManager.SHOW_IMPLICIT);
-                    }
-                });
-            }
-        });
-        dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
-            @Override
-            public void onCancel(DialogInterface di) {
-                final MaterialDialog dialog = (MaterialDialog) di;
-                if (dialog.getInputEditText() == null) return;
-                dialog.getInputEditText().post(new Runnable() {
-                    @Override
-                    public void run() {
-                        dialog.getInputEditText().requestFocus();
-                        InputMethodManager imm = (InputMethodManager) builder.context.getSystemService(Context.INPUT_METHOD_SERVICE);
-                        imm.hideSoftInputFromWindow(dialog.getInputEditText().getWindowToken(), 0);
-                    }
-                });
-            }
-        });
-        dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
-            @Override
-            public void onDismiss(DialogInterface di) {
-                final MaterialDialog dialog = (MaterialDialog) di;
-                if (dialog.getInputEditText() == null) return;
-                dialog.getInputEditText().post(new Runnable() {
-                    @Override
-                    public void run() {
-                        dialog.getInputEditText().requestFocus();
-                        InputMethodManager imm = (InputMethodManager) builder.context.getSystemService(Context.INPUT_METHOD_SERVICE);
-                        if (imm != null)
-                            imm.hideSoftInputFromWindow(dialog.getInputEditText().getWindowToken(), 0);
-                    }
-                });
-            }
-        });
     }
 
     private static ColorStateList getActionTextStateList(Context context, int newPrimaryColor) {

+ 26 - 2
library/src/main/java/com/afollestad/materialdialogs/MaterialDialog.java

@@ -3,6 +3,7 @@ package com.afollestad.materialdialogs;
 import android.annotation.SuppressLint;
 import android.app.AlertDialog;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.graphics.Paint;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
@@ -20,7 +21,6 @@ import android.support.annotation.StringRes;
 import android.support.v4.content.res.ResourcesCompat;
 import android.text.TextUtils;
 import android.util.Log;
-import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewTreeObserver;
@@ -36,7 +36,6 @@ import android.widget.ListAdapter;
 import android.widget.ListView;
 import android.widget.TextView;
 
-import com.afollestad.materialdialogs.base.DialogBase;
 import com.afollestad.materialdialogs.internal.MDButton;
 import com.afollestad.materialdialogs.internal.MDEditText;
 import com.afollestad.materialdialogs.internal.MDProgressBar;
@@ -400,6 +399,10 @@ public class MaterialDialog extends DialogBase implements
         @DrawableRes
         protected int btnSelectorNegative;
 
+        public final Context getContext() {
+            return context;
+        }
+
         public Builder(@NonNull Context context) {
             this.context = context;
             final int materialBlue = context.getResources().getColor(R.color.md_material_blue_600);
@@ -1313,6 +1316,27 @@ public class MaterialDialog extends DialogBase implements
         }
     }
 
+    @Override
+    public final void onShow(DialogInterface dialog) {
+        super.onShow(dialog);
+        if (input != null)
+            DialogUtils.showKeyboard(this, mBuilder);
+    }
+
+    @Override
+    public final void onCancel(DialogInterface dialog) {
+        super.onCancel(dialog);
+        if (input != null)
+            DialogUtils.hideKeyboard(this, mBuilder);
+    }
+
+    @Override
+    public final void onDismiss(DialogInterface dialog) {
+        super.onDismiss(dialog);
+        if (input != null)
+            DialogUtils.hideKeyboard(this, mBuilder);
+    }
+
     protected enum ListType {
         REGULAR, SINGLE, MULTI;
 

+ 1 - 1
library/src/main/java/com/afollestad/materialdialogs/internal/MDRootLayout.java

@@ -24,7 +24,7 @@ import com.afollestad.materialdialogs.R;
 
 /**
  * @author Kevin Barry (teslacoil) 4/02/2015
- *         <p>
+ *         <p/>
  *         This is the top level view for all MaterialDialogs
  *         It handles the layout of:
  *         titleFrame (md_stub_titleframe)

+ 31 - 0
library/src/main/java/com/afollestad/materialdialogs/util/DialogUtils.java

@@ -1,14 +1,17 @@
 package com.afollestad.materialdialogs.util;
 
 import android.content.Context;
+import android.content.DialogInterface;
 import android.content.res.TypedArray;
 import android.graphics.Color;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.support.annotation.AttrRes;
 import android.view.View;
+import android.view.inputmethod.InputMethodManager;
 
 import com.afollestad.materialdialogs.GravityEnum;
+import com.afollestad.materialdialogs.MaterialDialog;
 
 /**
  * @author Aidan Follestad (afollestad)
@@ -118,4 +121,32 @@ public class DialogUtils {
             view.setBackground(d);
         }
     }
+
+    public static void showKeyboard(DialogInterface di, final MaterialDialog.Builder builder) {
+        final MaterialDialog dialog = (MaterialDialog) di;
+        if (dialog.getInputEditText() == null) return;
+        dialog.getInputEditText().post(new Runnable() {
+            @Override
+            public void run() {
+                dialog.getInputEditText().requestFocus();
+                InputMethodManager imm = (InputMethodManager) builder.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+                if (imm != null)
+                    imm.showSoftInput(dialog.getInputEditText(), InputMethodManager.SHOW_IMPLICIT);
+            }
+        });
+    }
+
+    public static void hideKeyboard(DialogInterface di, final MaterialDialog.Builder builder) {
+        final MaterialDialog dialog = (MaterialDialog) di;
+        if (dialog.getInputEditText() == null) return;
+        dialog.getInputEditText().post(new Runnable() {
+            @Override
+            public void run() {
+                dialog.getInputEditText().requestFocus();
+                InputMethodManager imm = (InputMethodManager) builder.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+                if (imm != null)
+                    imm.hideSoftInputFromWindow(dialog.getInputEditText().getWindowToken(), 0);
+            }
+        });
+    }
 }