/* Minetest Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik Copyright (C) 2014-2020 ubulem, Bektur Mambetov This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package net.minetest.minetest; import android.app.NativeActivity; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.text.InputType; import android.view.KeyEvent; import android.view.View; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import androidx.appcompat.app.AlertDialog; import java.util.Objects; public class GameActivity extends NativeActivity { static { System.loadLibrary("c++_shared"); System.loadLibrary("Minetest"); } private int messageReturnCode = -1; private String messageReturnValue = ""; public static native void putMessageBoxResult(String text); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } private void makeFullScreen() { if (Build.VERSION.SDK_INT >= 19) this.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) makeFullScreen(); } @Override protected void onResume() { super.onResume(); makeFullScreen(); } @Override public void onBackPressed() { // Ignore the back press so Minetest can handle it } public void showDialog(String acceptButton, String hint, String current, int editType) { runOnUiThread(() -> showDialogUI(hint, current, editType)); } 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); AlertDialog alertDialog = builder.create(); editText.requestFocus(); editText.setHint(hint); editText.setText(current); final InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); Objects.requireNonNull(imm).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); if (editType == 1) editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE); else if (editType == 3) editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); else editText.setInputType(InputType.TYPE_CLASS_TEXT); editText.setSelection(editText.getText().length()); editText.setOnKeyListener((view, KeyCode, event) -> { if (KeyCode == KeyEvent.KEYCODE_ENTER) { imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); messageReturnCode = 0; messageReturnValue = editText.getText().toString(); alertDialog.dismiss(); return true; } return false; }); alertDialog.show(); alertDialog.setOnCancelListener(dialog -> { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); messageReturnValue = current; messageReturnCode = -1; }); } public int getDialogState() { return messageReturnCode; } public String getDialogValue() { messageReturnCode = -1; return messageReturnValue; } public float getDensity() { return getResources().getDisplayMetrics().density; } public int getDisplayHeight() { return getResources().getDisplayMetrics().heightPixels; } public int getDisplayWidth() { return getResources().getDisplayMetrics().widthPixels; } public void openURL(String url) { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(browserIntent); } }