]> git.lizzy.rs Git - minetest.git/commitdiff
Android: Do not submit text after pressing Enter key for multi-line text (#11298)
authorMuhammad Rifqi Priyo Susanto <muhammadrifqipriyosusanto@gmail.com>
Fri, 4 Jun 2021 19:22:53 +0000 (02:22 +0700)
committerGitHub <noreply@github.com>
Fri, 4 Jun 2021 19:22:53 +0000 (21:22 +0200)
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.

build/android/app/src/main/java/net/minetest/minetest/GameActivity.java
build/android/app/src/main/res/values/strings.xml

index 38a388230b481ad5320cd5be09275de4c7f28222..bdf7641383cd1f2a4086bce20b8747120bc37bb9 100644 (file)
@@ -30,7 +30,9 @@ import android.view.KeyEvent;
 import android.view.View;
 import android.view.WindowManager;
 import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
 import android.widget.EditText;
+import android.widget.LinearLayout;
 
 import androidx.appcompat.app.AlertDialog;
 
@@ -85,9 +87,19 @@ public class GameActivity extends NativeActivity {
 
        private void showDialogUI(String hint, String current, int editType) {
                final AlertDialog.Builder builder = new AlertDialog.Builder(this);
-               EditText editText = new CustomEditText(this);
-               builder.setView(editText);
+               LinearLayout container = new LinearLayout(this);
+               container.setOrientation(LinearLayout.VERTICAL);
+               builder.setView(container);
                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.setHint(hint);
                editText.setText(current);
@@ -103,8 +115,9 @@ public class GameActivity extends NativeActivity {
                else
                        editText.setInputType(InputType.TYPE_CLASS_TEXT);
                editText.setSelection(editText.getText().length());
-               editText.setOnKeyListener((view, KeyCode, event) -> {
-                       if (KeyCode == KeyEvent.KEYCODE_ENTER) {
+               editText.setOnKeyListener((view, keyCode, event) -> {
+                       // For multi-line, do not submit the text after pressing Enter key
+                       if (keyCode == KeyEvent.KEYCODE_ENTER && editType != 1) {
                                imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
                                messageReturnCode = 0;
                                messageReturnValue = editText.getText().toString();
@@ -113,6 +126,18 @@ public class GameActivity extends NativeActivity {
                        }
                        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.setOnCancelListener(dialog -> {
                        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
index a6fba70d58524e9c3cc4cbe6086e187c9e9b1e7e..85238117f70ebf7b62e8d6d7ea7a6f7b894136db 100644 (file)
@@ -6,5 +6,6 @@
        <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_description">Less than 1 minute&#8230;</string>
+       <string name="ime_dialog_done">Done</string>
 
 </resources>