Skip to content

Commit 40acfc9

Browse files
authored
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.
1 parent 8f085e0 commit 40acfc9

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

build/android/app/src/main/java/net/minetest/minetest/GameActivity.java

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030
import android.view.View;
3131
import android.view.WindowManager;
3232
import android.view.inputmethod.InputMethodManager;
33+
import android.widget.Button;
3334
import android.widget.EditText;
35+
import android.widget.LinearLayout;
3436

3537
import androidx.appcompat.app.AlertDialog;
3638

@@ -85,9 +87,19 @@ public void showDialog(String acceptButton, String hint, String current, int edi
8587

8688
private void showDialogUI(String hint, String current, int editType) {
8789
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
88-
EditText editText = new CustomEditText(this);
89-
builder.setView(editText);
90+
LinearLayout container = new LinearLayout(this);
91+
container.setOrientation(LinearLayout.VERTICAL);
92+
builder.setView(container);
9093
AlertDialog alertDialog = builder.create();
94+
EditText editText;
95+
// For multi-line, do not close the dialog after pressing back button
96+
if (editType == 1) {
97+
editText = new EditText(this);
98+
} else {
99+
editText = new CustomEditText(this);
100+
}
101+
container.addView(editText);
102+
editText.setMaxLines(8);
91103
editText.requestFocus();
92104
editText.setHint(hint);
93105
editText.setText(current);
@@ -103,8 +115,9 @@ else if (editType == 3)
103115
else
104116
editText.setInputType(InputType.TYPE_CLASS_TEXT);
105117
editText.setSelection(editText.getText().length());
106-
editText.setOnKeyListener((view, KeyCode, event) -> {
107-
if (KeyCode == KeyEvent.KEYCODE_ENTER) {
118+
editText.setOnKeyListener((view, keyCode, event) -> {
119+
// For multi-line, do not submit the text after pressing Enter key
120+
if (keyCode == KeyEvent.KEYCODE_ENTER && editType != 1) {
108121
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
109122
messageReturnCode = 0;
110123
messageReturnValue = editText.getText().toString();
@@ -113,6 +126,18 @@ else if (editType == 3)
113126
}
114127
return false;
115128
});
129+
// For multi-line, add Done button since Enter key does not submit text
130+
if (editType == 1) {
131+
Button doneButton = new Button(this);
132+
container.addView(doneButton);
133+
doneButton.setText(R.string.ime_dialog_done);
134+
doneButton.setOnClickListener((view -> {
135+
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
136+
messageReturnCode = 0;
137+
messageReturnValue = editText.getText().toString();
138+
alertDialog.dismiss();
139+
}));
140+
}
116141
alertDialog.show();
117142
alertDialog.setOnCancelListener(dialog -> {
118143
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

build/android/app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@
66
<string name="not_granted">Required permission wasn\'t granted, Minetest can\'t run without it</string>
77
<string name="notification_title">Loading Minetest</string>
88
<string name="notification_description">Less than 1 minute&#8230;</string>
9+
<string name="ime_dialog_done">Done</string>
910

1011
</resources>

0 commit comments

Comments
 (0)