123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package com.afollestad.materialdialogs.prefs;
- import android.app.Dialog;
- import android.content.Context;
- import android.graphics.PorterDuff;
- import android.os.Build.VERSION;
- import android.os.Build.VERSION_CODES;
- import android.os.Bundle;
- import android.preference.EditTextPreference;
- import android.support.annotation.NonNull;
- import android.util.AttributeSet;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.ViewParent;
- import android.view.Window;
- import android.view.WindowManager;
- import android.widget.EditText;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- import com.afollestad.materialdialogs.MaterialDialog;
- import com.afollestad.materialdialogs.MaterialDialog.Builder;
- import com.afollestad.materialdialogs.MaterialDialog.ButtonCallback;
- import com.afollestad.materialdialogs.R;
- import com.afollestad.materialdialogs.util.DialogUtils;
- /**
- * @author Aidan Follestad (afollestad)
- */
- public class MaterialEditTextPreference extends EditTextPreference {
- private int mColor = 0;
- public MaterialEditTextPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP)
- mColor = DialogUtils.resolveColor(context, R.attr.colorAccent);
- }
- public MaterialEditTextPreference(Context context) {
- this(context, null);
- }
- @Override
- protected void onAddEditTextToDialogView(@NonNull View dialogView, @NonNull EditText editText) {
- if (editText.getParent() != null)
- ((ViewGroup) getEditText().getParent()).removeView(editText);
- ((ViewGroup) dialogView).addView(editText, new LinearLayout.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
- }
- @Override
- protected void onBindDialogView(@NonNull View view) {
- getEditText().setText("");
- if (getText() != null)
- getEditText().append(getText());
- ViewParent oldParent = getEditText().getParent();
- if (oldParent != view) {
- if (oldParent != null)
- ((ViewGroup) oldParent).removeView(getEditText());
- onAddEditTextToDialogView(view, getEditText());
- }
- }
- @Override
- protected void showDialog(Bundle state) {
- Builder mBuilder = new MaterialDialog.Builder(getContext())
- .title(getDialogTitle())
- .icon(getDialogIcon())
- .positiveText(getPositiveButtonText())
- .negativeText(getNegativeButtonText())
- .callback(callback)
- .dismissListener(this)
- .content(getDialogMessage());
- View layout = LayoutInflater.from(getContext()).inflate(R.layout.md_stub_inputpref, null);
- onBindDialogView(layout);
- if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP)
- getEditText().getBackground().setColorFilter(mColor, PorterDuff.Mode.SRC_ATOP);
- TextView message = (TextView) layout.findViewById(android.R.id.message);
- if (getDialogMessage() != null && getDialogMessage().toString().length() > 0) {
- message.setVisibility(View.VISIBLE);
- message.setText(getDialogMessage());
- } else {
- message.setVisibility(View.GONE);
- }
- mBuilder.customView(layout, false);
- MaterialDialog mDialog = mBuilder.build();
- if (state != null)
- mDialog.onRestoreInstanceState(state);
- requestInputMethod(mDialog);
- mDialog.show();
- }
- /**
- * Callback listener for the MaterialDialog. Positive button checks with
- * OnPreferenceChangeListener before committing user entered text
- */
- private final ButtonCallback callback = new ButtonCallback() {
- @Override
- public void onPositive(MaterialDialog dialog) {
- String value = getEditText().getText().toString();
- if (callChangeListener(value) && isPersistent())
- setText(value);
- }
- };
- /**
- * Copied from DialogPreference.java
- */
- private void requestInputMethod(Dialog dialog) {
- Window window = dialog.getWindow();
- window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
- }
- }
|