package io.anuke.mindustry; import android.app.Activity; import android.app.AlertDialog; import android.text.InputFilter; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager.LayoutParams; import android.widget.EditText; import com.badlogic.gdx.Gdx; public class AndroidTextFieldDialog{ private Activity activity; private EditText userInput; private AlertDialog.Builder builder; private TextPromptListener listener; private boolean isBuild; public AndroidTextFieldDialog(){ this.activity = (Activity) Gdx.app; load(); } public AndroidTextFieldDialog show(){ activity.runOnUiThread(() -> { AlertDialog dialog = builder.create(); dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); dialog.show(); }); return this; } private AndroidTextFieldDialog load(){ activity.runOnUiThread(() -> { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(activity); LayoutInflater li = LayoutInflater.from(activity); View promptsView = li.inflate(getResourceId("gdxdialogs_inputtext", "layout"), null); alertDialogBuilder.setView(promptsView); userInput = promptsView.findViewById(getResourceId("gdxDialogsEditTextInput", "id")); alertDialogBuilder.setCancelable(false); builder = alertDialogBuilder; isBuild = true; }); // Wait till TextPrompt is built. while(!isBuild){ try{ Thread.sleep(10); }catch(InterruptedException e){ } } return this; } public int getResourceId(String pVariableName, String pVariableType){ try{ return activity.getResources().getIdentifier(pVariableName, pVariableType, activity.getPackageName()); }catch(Exception e){ Gdx.app.error("Android Dialogs", "Cannot find resouce with name: " + pVariableName + " Did you copy the layouts to /res/layouts and /res/layouts_v14 ?"); e.printStackTrace(); return -1; } } public AndroidTextFieldDialog setText(CharSequence value){ userInput.append(value); return this; } public AndroidTextFieldDialog setCancelButtonLabel(CharSequence label){ builder.setNegativeButton(label, (dialog, id) -> dialog.cancel()); return this; } public AndroidTextFieldDialog setConfirmButtonLabel(CharSequence label){ builder.setPositiveButton(label, (dialog, id) -> { if(listener != null && !userInput.getText().toString().isEmpty()){ listener.confirm(userInput.getText().toString()); } }); return this; } public AndroidTextFieldDialog setTextPromptListener(TextPromptListener listener){ this.listener = listener; return this; } public AndroidTextFieldDialog setInputType(int type){ userInput.setInputType(type); return this; } public AndroidTextFieldDialog setMaxLength(int length){ userInput.setFilters(new InputFilter[]{new InputFilter.LengthFilter(length)}); return this; } public interface TextPromptListener{ void confirm(String text); } }