Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use EditTextPreference as a masked Password text field?

I have a very simple question:
I have a EditTextPreference dialog which I want to use for getting the user's password and I want it to be masked.

How can I do that?

like image 595
Avi Shukron Avatar asked May 28 '11 21:05

Avi Shukron


2 Answers

Here is a short example using xml:

<EditTextPreference     android:key="@string/key"     android:title="@string/title"     android:summary="@string/summary"        android:inputType="textPassword" /> 

Or you can use numberPassword instead of textPassword.

like image 74
inazaruk Avatar answered Sep 23 '22 20:09

inazaruk


For androidx library you should do it programmatically for example you could do it as follows, optionally I am setting the summary with asterisks according to the length of password:

[...] import android.os.Bundle; import android.text.InputType; import android.widget.EditText;  import androidx.annotation.NonNull;  import androidx.preference.EditTextPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceManager;  import static androidx.preference.EditTextPreference.*;  public class MySettingsFragment extends PreferenceFragmentCompat {     @Override     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {         setPreferencesFromResource(R.xml.preferences, rootKey);          final EditTextPreference preference = findPreference("password");          if (preference != null) {             preference.setSummaryProvider(new SummaryProvider() {                 @Override                 public CharSequence provideSummary(Preference preference) {                      String getPassword = PreferenceManager.getDefaultSharedPreferences(getContext()).getString("password", "not set");                      //we assume getPassword is not null                     assert getPassword != null;                      //return "not set" else return password with asterisks                     if (getPassword.equals("not set")) {                         return getPassword;                     } else {                         return (setAsterisks(getPassword.length()));                     }                 }             });              //set input type as password and set summary with asterisks the new password             preference.setOnBindEditTextListener(                     new OnBindEditTextListener() {                         @Override                         public void onBindEditText(@NonNull final EditText editText) {                             editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);                             preference.setSummaryProvider(new SummaryProvider() {                                 @Override                                 public CharSequence provideSummary(Preference preference) {                                     return setAsterisks(editText.getText().toString().length());                                 }                             });                         }                     });         }     }      //return the password in asterisks     private String setAsterisks(int length) {         StringBuilder sb = new StringBuilder();         for (int s = 0; s < length; s++) {             sb.append("*");         }         return sb.toString();     } } 

In xml you should have something like:

<EditTextPreference     android:dialogMessage="Enter your password"     android:dialogTitle="Password"     android:key="password"     android:title="Password" /> 

For more info please look at developer.android

like image 40
F.Mysir Avatar answered Sep 20 '22 20:09

F.Mysir