From 40acfc938ce2306dbf6704f8091a89817a73c71b Mon Sep 17 00:00:00 2001
From: Muhammad Rifqi Priyo Susanto <muhammadrifqipriyosusanto@gmail.com>
Date: Sat, 5 Jun 2021 02:22:53 +0700
Subject: 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.
---
 .../java/net/minetest/minetest/GameActivity.java   | 33 +++++++++++++++++++---
 build/android/app/src/main/res/values/strings.xml  |  1 +
 2 files changed, 30 insertions(+), 4 deletions(-)

(limited to 'build/android/app/src')

diff --git a/build/android/app/src/main/java/net/minetest/minetest/GameActivity.java b/build/android/app/src/main/java/net/minetest/minetest/GameActivity.java
index 38a388230..bdf764138 100644
--- a/build/android/app/src/main/java/net/minetest/minetest/GameActivity.java
+++ b/build/android/app/src/main/java/net/minetest/minetest/GameActivity.java
@@ -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);
diff --git a/build/android/app/src/main/res/values/strings.xml b/build/android/app/src/main/res/values/strings.xml
index a6fba70d5..85238117f 100644
--- a/build/android/app/src/main/res/values/strings.xml
+++ b/build/android/app/src/main/res/values/strings.xml
@@ -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>
-- 
cgit v1.2.3