diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsPrivacy.java b/app/src/main/java/eu/faircode/email/FragmentOptionsPrivacy.java index 67e1893a51..a10cc60ae3 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsPrivacy.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsPrivacy.java @@ -25,17 +25,21 @@ import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.text.TextUtils; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.inputmethod.EditorInfo; import android.widget.AdapterView; import android.widget.Button; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.Spinner; +import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; @@ -197,14 +201,7 @@ public class FragmentOptionsPrivacy extends FragmentBase implements SharedPrefer final View dview = LayoutInflater.from(getContext()).inflate(R.layout.dialog_pin_set, null); final EditText etPin = dview.findViewById(R.id.etPin); - new Handler().post(new Runnable() { - @Override - public void run() { - etPin.requestFocus(); - } - }); - - return new AlertDialog.Builder(getContext()) + final Dialog dialog = new AlertDialog.Builder(getContext()) .setView(dview) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override @@ -219,6 +216,41 @@ public class FragmentOptionsPrivacy extends FragmentBase implements SharedPrefer }) .setNegativeButton(android.R.string.cancel, null) .create(); + + etPin.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_DONE) { + ((AlertDialog) getDialog()).getButton(DialogInterface.BUTTON_POSITIVE).performClick(); + return true; + } else + return false; + } + }); + + etPin.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (hasFocus) + dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + } + }); + + new Handler().post(new Runnable() { + @Override + public void run() { + etPin.requestFocus(); + } + }); + + new Handler().post(new Runnable() { + @Override + public void run() { + etPin.requestFocus(); + } + }); + + return dialog; } } } diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index 920bcdcbb0..4f6834ddd5 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -53,6 +53,7 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.webkit.WebView; import android.widget.Button; @@ -824,14 +825,7 @@ public class Helper { final View dview = LayoutInflater.from(activity).inflate(R.layout.dialog_pin_ask, null); final EditText etPin = dview.findViewById(R.id.etPin); - new Handler().post(new Runnable() { - @Override - public void run() { - etPin.requestFocus(); - } - }); - - AlertDialog dialog = new AlertDialog.Builder(activity) + final AlertDialog dialog = new AlertDialog.Builder(activity) .setView(dview) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override @@ -872,6 +866,21 @@ public class Helper { } }); + etPin.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (hasFocus) + dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + } + }); + + new Handler().post(new Runnable() { + @Override + public void run() { + etPin.requestFocus(); + } + }); + dialog.show(); } } diff --git a/app/src/main/res/layout/dialog_pin_ask.xml b/app/src/main/res/layout/dialog_pin_ask.xml index 9d09a0a89a..e0d001d7c6 100644 --- a/app/src/main/res/layout/dialog_pin_ask.xml +++ b/app/src/main/res/layout/dialog_pin_ask.xml @@ -20,8 +20,6 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="24dp" - android:focusable="true" - android:focusableInTouchMode="true" android:hint="@string/title_advanced_pin" android:imeOptions="actionDone" android:inputType="numberPassword" diff --git a/app/src/main/res/layout/dialog_pin_set.xml b/app/src/main/res/layout/dialog_pin_set.xml index bd9c1f0df6..58fda05f94 100644 --- a/app/src/main/res/layout/dialog_pin_set.xml +++ b/app/src/main/res/layout/dialog_pin_set.xml @@ -20,6 +20,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="24dp" + android:imeOptions="actionDone" android:inputType="number" android:maxLines="1" app:layout_constraintEnd_toEndOf="parent"