Android: Do not submit text after pressing Enter key for multi-line text (#11298)

Regular EditText is used for multi-line text to not close the dialog after pressing back button.
New button is added for submitting multi-line text.
This commit is contained in:
Muhammad Rifqi Priyo Susanto 2021-06-05 02:22:53 +07:00 committed by GitHub
parent 8f085e02a1
commit 40acfc938c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 4 deletions

@ -30,7 +30,9 @@ import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.LinearLayout;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
@ -85,9 +87,19 @@ public class GameActivity extends NativeActivity {
private void showDialogUI(String hint, String current, int editType) { private void showDialogUI(String hint, String current, int editType) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this); final AlertDialog.Builder builder = new AlertDialog.Builder(this);
EditText editText = new CustomEditText(this); LinearLayout container = new LinearLayout(this);
builder.setView(editText); container.setOrientation(LinearLayout.VERTICAL);
builder.setView(container);
AlertDialog alertDialog = builder.create(); AlertDialog alertDialog = builder.create();
EditText editText;
// For multi-line, do not close the dialog after pressing back button
if (editType == 1) {
editText = new EditText(this);
} else {
editText = new CustomEditText(this);
}
container.addView(editText);
editText.setMaxLines(8);
editText.requestFocus(); editText.requestFocus();
editText.setHint(hint); editText.setHint(hint);
editText.setText(current); editText.setText(current);
@ -103,8 +115,9 @@ public class GameActivity extends NativeActivity {
else else
editText.setInputType(InputType.TYPE_CLASS_TEXT); editText.setInputType(InputType.TYPE_CLASS_TEXT);
editText.setSelection(editText.getText().length()); editText.setSelection(editText.getText().length());
editText.setOnKeyListener((view, KeyCode, event) -> { editText.setOnKeyListener((view, keyCode, event) -> {
if (KeyCode == KeyEvent.KEYCODE_ENTER) { // For multi-line, do not submit the text after pressing Enter key
if (keyCode == KeyEvent.KEYCODE_ENTER && editType != 1) {
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
messageReturnCode = 0; messageReturnCode = 0;
messageReturnValue = editText.getText().toString(); messageReturnValue = editText.getText().toString();
@ -113,6 +126,18 @@ public class GameActivity extends NativeActivity {
} }
return false; return false;
}); });
// For multi-line, add Done button since Enter key does not submit text
if (editType == 1) {
Button doneButton = new Button(this);
container.addView(doneButton);
doneButton.setText(R.string.ime_dialog_done);
doneButton.setOnClickListener((view -> {
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
messageReturnCode = 0;
messageReturnValue = editText.getText().toString();
alertDialog.dismiss();
}));
}
alertDialog.show(); alertDialog.show();
alertDialog.setOnCancelListener(dialog -> { alertDialog.setOnCancelListener(dialog -> {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

@ -6,5 +6,6 @@
<string name="not_granted">Required permission wasn\'t granted, Minetest can\'t run without it</string> <string name="not_granted">Required permission wasn\'t granted, Minetest can\'t run without it</string>
<string name="notification_title">Loading Minetest</string> <string name="notification_title">Loading Minetest</string>
<string name="notification_description">Less than 1 minute&#8230;</string> <string name="notification_description">Less than 1 minute&#8230;</string>
<string name="ime_dialog_done">Done</string>
</resources> </resources>