120 lines
3.3 KiB
Java
120 lines
3.3 KiB
Java
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);
|
|
}
|
|
|
|
}
|