Browse Source

Fixed input dialog with max length not taking prefill into initial length. Fixes #487 again.

Aidan Follestad 10 years ago
parent
commit
1b7235cd9a

+ 1 - 2
library/src/main/java/com/afollestad/materialdialogs/DialogInit.java

@@ -377,8 +377,7 @@ class DialogInit {
 
         dialog.inputMinMax = (TextView) dialog.view.findViewById(R.id.minMax);
         if (builder.inputMaxLength > -1) {
-            dialog.inputMinMax.setText("0/" + builder.inputMaxLength);
-            dialog.inputMinMax.setTextColor(builder.contentColor);
+            dialog.invalidateInputMinMaxIndicator(dialog.input.getText().toString().trim().length());
         } else {
             dialog.inputMinMax.setVisibility(View.GONE);
             dialog.inputMinMax = null;

+ 14 - 10
library/src/main/java/com/afollestad/materialdialogs/MaterialDialog.java

@@ -1418,16 +1418,7 @@ public class MaterialDialog extends DialogBase implements
                     final View positiveAb = getActionButton(DialogAction.POSITIVE);
                     positiveAb.setEnabled(length > 0);
                 }
-                if (inputMinMax != null) {
-                    inputMinMax.setText(length + "/" + mBuilder.inputMaxLength);
-                    final boolean overMax = length > mBuilder.inputMaxLength;
-                    final int colorText = overMax ? mBuilder.inputMaxLengthErrorColor : mBuilder.contentColor;
-                    final int colorWidget = overMax ? mBuilder.inputMaxLengthErrorColor : mBuilder.widgetColor;
-                    inputMinMax.setTextColor(colorText);
-                    MDTintHelper.setTint(input, colorWidget);
-                    final View positiveAb = getActionButton(DialogAction.POSITIVE);
-                    if (positiveAb.isEnabled()) positiveAb.setEnabled(!overMax);
-                }
+                invalidateInputMinMaxIndicator(length);
             }
 
             @Override
@@ -1436,6 +1427,19 @@ public class MaterialDialog extends DialogBase implements
         });
     }
 
+    protected void invalidateInputMinMaxIndicator(int currentLength) {
+        if (inputMinMax != null) {
+            inputMinMax.setText(currentLength + "/" + mBuilder.inputMaxLength);
+            final boolean overMax = currentLength > mBuilder.inputMaxLength;
+            final int colorText = overMax ? mBuilder.inputMaxLengthErrorColor : mBuilder.contentColor;
+            final int colorWidget = overMax ? mBuilder.inputMaxLengthErrorColor : mBuilder.widgetColor;
+            inputMinMax.setTextColor(colorText);
+            MDTintHelper.setTint(input, colorWidget);
+            final View positiveAb = getActionButton(DialogAction.POSITIVE);
+            if (positiveAb.isEnabled()) positiveAb.setEnabled(!overMax);
+        }
+    }
+
     @Override
     protected void onStop() {
         super.onStop();

+ 2 - 2
sample/src/main/java/com/afollestad/materialdialogssample/MainActivity.java

@@ -599,9 +599,9 @@ public class MainActivity extends AppCompatActivity implements
                 .inputType(InputType.TYPE_CLASS_TEXT |
                         InputType.TYPE_TEXT_VARIATION_PERSON_NAME |
                         InputType.TYPE_TEXT_FLAG_CAP_WORDS)
-                .inputMaxLengthRes(20, R.color.material_indigo_600)
+                .inputMaxLengthRes(16, R.color.material_indigo_600)
                 .positiveText(R.string.submit)
-                .input(R.string.input_hint, 0, false, new MaterialDialog.InputCallback() {
+                .input(R.string.input_hint, R.string.input_hint, false, new MaterialDialog.InputCallback() {
                     @Override
                     public void onInput(MaterialDialog dialog, CharSequence input) {
                         showToast("Hello, " + input.toString() + "!");