Jelajahi Sumber

Added alwaysCallInputCallback() to receive the input callback everytime the input field text changes. getDialog() in the preference classes will no longer return null. Fixes #427, resolves #426.

Aidan Follestad 10 tahun lalu
induk
melakukan
195e3f9d38

+ 18 - 0
library/src/main/java/com/afollestad/materialdialogs/DialogInit.java

@@ -5,6 +5,8 @@ import android.content.res.ColorStateList;
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
+import android.text.Editable;
+import android.text.TextWatcher;
 import android.text.method.LinkMovementMethod;
 import android.view.View;
 import android.view.ViewGroup;
@@ -363,6 +365,22 @@ class DialogInit {
         if (dialog.input == null) return;
         if (builder.inputPrefill != null)
             dialog.input.append(builder.inputPrefill);
+        if (builder.alwaysCallInputCallback) {
+            dialog.input.addTextChangedListener(new TextWatcher() {
+                @Override
+                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+                }
+
+                @Override
+                public void onTextChanged(CharSequence s, int start, int before, int count) {
+                    dialog.mBuilder.inputCallback.onInput(dialog, s);
+                }
+
+                @Override
+                public void afterTextChanged(Editable s) {
+                }
+            });
+        }
         dialog.input.setHint(builder.inputHint);
         dialog.input.setSingleLine();
         dialog.input.setTextColor(builder.contentColor);

+ 8 - 1
library/src/main/java/com/afollestad/materialdialogs/MaterialDialog.java

@@ -19,6 +19,7 @@ import android.support.annotation.Nullable;
 import android.support.annotation.StringRes;
 import android.support.v4.content.res.ResourcesCompat;
 import android.text.TextUtils;
+import android.text.TextWatcher;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewTreeObserver;
@@ -297,7 +298,7 @@ public class MaterialDialog extends DialogBase implements
                     sendSingleChoiceCallback(v);
                 if (mBuilder.listCallbackMultiChoice != null)
                     sendMultichoiceCallback();
-                if (mBuilder.inputCallback != null && input != null)
+                if (mBuilder.inputCallback != null && input != null && !mBuilder.alwaysCallInputCallback)
                     mBuilder.inputCallback.onInput(this, input.getText());
                 if (mBuilder.autoDismiss) dismiss();
                 break;
@@ -377,6 +378,7 @@ public class MaterialDialog extends DialogBase implements
         protected CharSequence inputPrefill;
         protected CharSequence inputHint;
         protected InputCallback inputCallback;
+        protected boolean alwaysCallInputCallback;
 
         protected boolean titleColorSet = false;
         protected boolean contentColorSet = false;
@@ -980,6 +982,11 @@ public class MaterialDialog extends DialogBase implements
             return input(hint == 0 ? null : context.getString(hint), prefill == 0 ? null : context.getString(prefill), callback);
         }
 
+        public Builder alwaysCallInputCallback() {
+            this.alwaysCallInputCallback = true;
+            return this;
+        }
+
         public MaterialDialog build() {
             return new MaterialDialog(this);
         }

+ 7 - 1
library/src/main/java/com/afollestad/materialdialogs/prefs/MaterialEditTextPreference.java

@@ -30,6 +30,7 @@ import com.afollestad.materialdialogs.util.DialogUtils;
 public class MaterialEditTextPreference extends EditTextPreference {
 
     private int mColor = 0;
+    private MaterialDialog mDialog;
 
     public MaterialEditTextPreference(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -64,6 +65,11 @@ public class MaterialEditTextPreference extends EditTextPreference {
         }
     }
 
+    @Override
+    public Dialog getDialog() {
+        return mDialog;
+    }
+
     @Override
     protected void showDialog(Bundle state) {
         Builder mBuilder = new MaterialDialog.Builder(getContext())
@@ -89,7 +95,7 @@ public class MaterialEditTextPreference extends EditTextPreference {
         }
         mBuilder.customView(layout, false);
 
-        MaterialDialog mDialog = mBuilder.build();
+        mDialog = mBuilder.build();
         if (state != null)
             mDialog.onRestoreInstanceState(state);
         requestInputMethod(mDialog);

+ 6 - 0
library/src/main/java/com/afollestad/materialdialogs/prefs/MaterialListPreference.java

@@ -1,5 +1,6 @@
 package com.afollestad.materialdialogs.prefs;
 
+import android.app.Dialog;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.os.Build;
@@ -42,6 +43,11 @@ public class MaterialListPreference extends ListPreference {
             mDialog.setItems(entries);
     }
 
+    @Override
+    public Dialog getDialog() {
+        return mDialog;
+    }
+
     @Override
     protected void showDialog(Bundle state) {
         if (getEntries() == null || getEntryValues() == null) {

+ 6 - 0
library/src/main/java/com/afollestad/materialdialogs/prefs/MaterialMultiSelectListPreference.java

@@ -1,6 +1,7 @@
 package com.afollestad.materialdialogs.prefs;
 
 import android.annotation.TargetApi;
+import android.app.Dialog;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.os.Build;
@@ -49,6 +50,11 @@ public class MaterialMultiSelectListPreference extends MultiSelectListPreference
             setWidgetLayoutResource(0);
     }
 
+    @Override
+    public Dialog getDialog() {
+        return mDialog;
+    }
+
     @Override
     protected void showDialog(Bundle state) {
         List<Integer> indices = new ArrayList<>();