diff --git a/app/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java b/app/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java index ecb93bc40..439bfb69a 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java @@ -10,7 +10,9 @@ import android.widget.*; import com.google.gson.*; import com.kdt.filerapi.*; import java.io.*; +import java.util.*; import net.kdt.pojavlaunch.value.customcontrols.*; +import org.lwjgl.input.*; public class CustomControlsActivity extends AppCompatActivity { @@ -45,15 +47,7 @@ public class CustomControlsActivity extends AppCompatActivity actionLoad(); break; case R.id.menu_ctrl_add: - ControlButton ctrlBtn = new ControlButton(); - ctrlBtn.name = "New"; - ctrlBtn.x = 100; - ctrlBtn.y = 100; - ctrlLayout.addControlButton(ctrlBtn); - break; - case R.id.menu_ctrl_edit: // openLogOutput(); - break; - case R.id.menu_ctrl_remove: // toggleDebug(); + ctrlLayout.addControlButton(new ControlButton("New", Keyboard.CHAR_NONE, 100, 100)); break; } //Toast.makeText(MainActivity.this, menuItem.getTitle() + ":" + menuItem.getItemId(), Toast.LENGTH_SHORT).show(); @@ -64,14 +58,8 @@ public class CustomControlsActivity extends AppCompatActivity }); mCtrl = new CustomControls(); - /* - ControlButton ctrlEx = new ControlButton(); - ctrlEx.name = "Test"; - ctrlEx.x = 100; - ctrlEx.y = 100; + generateDefaultControlMap(); - mCtrl.button.add(ctrlEx); - */ ctrlLayout = (ControlsLayout) findViewById(R.id.customctrl_controllayout); ctrlLayout.loadLayout(mCtrl); ctrlLayout.setCanMove(true); @@ -152,4 +140,19 @@ public class CustomControlsActivity extends AppCompatActivity dialog.setView(flv); dialog.show(); } + + private float dpToPx(float dp) { + return Tools.dpToPx(this, dp); + } + + private void generateDefaultControlMap() { + List btn = mCtrl.button; + btn.add(ControlButton.getSpecialButtons()[0]); // Keyboard + btn.add(ControlButton.getSpecialButtons()[1]); // GUI + // btn.add(ControlButton.getSpecialButtons()[2]); // Toggle mouse + btn.add(new ControlButton(this, R.string.control_debug, Keyboard.KEY_F3, ControlButton.pixelOf2dp, ControlButton.pixelOf2dp, false)); + btn.add(new ControlButton(this, R.string.control_chat, Keyboard.KEY_T, ControlButton.pixelOf2dp * 2 + ControlButton.pixelOf80dp, ControlButton.pixelOf2dp, false)); + btn.add(new ControlButton(this, R.string.control_listplayers, Keyboard.KEY_TAB, ControlButton.pixelOf2dp * 3 + ControlButton.pixelOf80dp * 2, ControlButton.pixelOf2dp, false)); + btn.add(new ControlButton(this, R.string.control_thirdperson, Keyboard.KEY_F5, ControlButton.pixelOf2dp, ControlButton.pixelOf2dp, false)); + } } diff --git a/app/src/main/java/net/kdt/pojavlaunch/MCLauncherActivity.java b/app/src/main/java/net/kdt/pojavlaunch/MCLauncherActivity.java index f0508ec47..f1a2edb7a 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/MCLauncherActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/MCLauncherActivity.java @@ -134,7 +134,7 @@ public class MCLauncherActivity extends AppCompatActivity versions.add(fVer.getName()); } } catch (Exception e) { - versions.add(getStr(com.android.internal.R.string.dlg_error_title) + ":"); + versions.add(getStr(R.string.global_error) + ":"); versions.add(e.getMessage()); } finally { diff --git a/app/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app/src/main/java/net/kdt/pojavlaunch/MainActivity.java index 10b4e9d81..51f0b73f0 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/MainActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/MainActivity.java @@ -1166,7 +1166,7 @@ public class MainActivity extends AppCompatActivity implements OnTouchListener, public void dialogForceClose() { new AlertDialog.Builder(this) - .setMessage(getResources().getString(R.string.mcn_exit_confirm, getResources().getString(com.android.internal.R.string.force_close))) + .setMessage(R.string.mcn_exit_confirm) .setNegativeButton(android.R.string.cancel, null) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){ diff --git a/app/src/main/java/net/kdt/pojavlaunch/PojavApplication.java b/app/src/main/java/net/kdt/pojavlaunch/PojavApplication.java index 3aa5e7ba7..4cf55709d 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/PojavApplication.java +++ b/app/src/main/java/net/kdt/pojavlaunch/PojavApplication.java @@ -23,8 +23,11 @@ public class PojavApplication extends Application Tools.datapath = getDir("files", MODE_PRIVATE).getParent(); LauncherPreferences.loadPreferences(this); - + + ControlButton.pixelOf2dp = (int) Tools.dpToPx(this, 2); + ControlButton.pixelOf30dp = (int) Tools.dpToPx(this, 30); ControlButton.pixelOf50dp = (int) Tools.dpToPx(this, 50); + ControlButton.pixelOf80dp = (int) Tools.dpToPx(this, 80); ControlButton[] specialButtons = ControlButton.getSpecialButtons(); specialButtons[0].name = getString(R.string.control_keyboard); specialButtons[1].name = getString(R.string.control_toggle); diff --git a/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java b/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java index 8361dbbb0..79de49305 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java @@ -34,7 +34,7 @@ public class PojavLoginActivity extends MineActivity // private boolean isPermGranted = false; private SharedPreferences firstLaunchPrefs; - private String PREF_IS_DONOTSHOWAGAIN_WARN = "isWarnDoNotShowAgain"; + // private String PREF_IS_DONOTSHOWAGAIN_WARN = "isWarnDoNotShowAgain"; private String PREF_IS_INSTALLED_LIBRARIES = "isLibrariesExtracted"; private boolean isInitCalled = false; @@ -553,7 +553,7 @@ public class PojavLoginActivity extends MineActivity { // TODO: Implement this method if(result[0].equals("ERROR")){ - Tools.dialogOnUiThread(PojavLoginActivity.this, getResources().getString(com.android.internal.R.string.dlg_error_title), strArrToString(result)); + Tools.dialogOnUiThread(PojavLoginActivity.this, getResources().getString(R.string.global_error), strArrToString(result)); } else{ MCProfile.Builder builder = new MCProfile.Builder(); builder.setAccessToken(result[1]); diff --git a/app/src/main/java/net/kdt/pojavlaunch/Tools.java b/app/src/main/java/net/kdt/pojavlaunch/Tools.java index b1b1b3333..4c98aaa6c 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/app/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -182,7 +182,7 @@ public final class Tools { final String errMsg = showMore ? Log.getStackTraceString(e): e.getMessage(); new AlertDialog.Builder((Context) ctx) - .setTitle(com.android.internal.R.string.dlg_error_title) + .setTitle(R.string.global_error) .setMessage(errMsg) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){ diff --git a/app/src/main/java/net/kdt/pojavlaunch/value/customcontrols/ControlButton.java b/app/src/main/java/net/kdt/pojavlaunch/value/customcontrols/ControlButton.java index bbfc403ec..ff936f6cf 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/value/customcontrols/ControlButton.java +++ b/app/src/main/java/net/kdt/pojavlaunch/value/customcontrols/ControlButton.java @@ -3,28 +3,27 @@ import net.kdt.pojavlaunch.*; import android.view.*; import java.util.*; import android.content.*; +import org.lwjgl.input.*; +import org.lwjgl.opengl.*; public class ControlButton { + public static int pixelOf2dp; + public static int pixelOf30dp; public static int pixelOf50dp; + public static int pixelOf80dp; - public static int SPECIALBTN_KEYBOARD = 0; - public static int SPECIALBTN_TOGGLECTRL = 1; + public static final int SPECIALBTN_KEYBOARD = 0; + public static final int SPECIALBTN_TOGGLECTRL = 1; private static ControlButton[] SPECIAL_BUTTONS; private static String[] SPECIAL_BUTTON_NAME_ARRAY; public static ControlButton[] getSpecialButtons(){ if (SPECIAL_BUTTONS == null) { - ControlButton keyboardBtn = new ControlButton(); - keyboardBtn.lwjglKeycode = -1; - - ControlButton toggleCtrlBtn = new ControlButton(); - toggleCtrlBtn.lwjglKeycode = -2; - SPECIAL_BUTTONS = new ControlButton[]{ - keyboardBtn, - toggleCtrlBtn + new ControlButton("Keyboard", -1, pixelOf2dp * 3 + pixelOf80dp * 2, pixelOf2dp, pixelOf80dp, pixelOf30dp), + new ControlButton("GUI", -2, pixelOf2dp, AndroidDisplay.windowHeight - pixelOf2dp - pixelOf50dp) }; } @@ -43,7 +42,6 @@ public class ControlButton return SPECIAL_BUTTON_NAME_ARRAY; } - // Concept... public String name; public float x; public float y; @@ -57,6 +55,35 @@ public class ControlButton public View.OnClickListener specialButtonListener; // public boolean hold + public ControlButton() { + this("", Keyboard.CHAR_NONE, 0, 0); + } + + public ControlButton(String name, int lwjglKeycode) { + this(name, lwjglKeycode, 0, 0); + } + + public ControlButton(String name, int lwjglKeycode, float x, float y) { + this(name, lwjglKeycode, x, y, pixelOf50dp, pixelOf50dp); + } + + public ControlButton(android.content.Context ctx, int resId, int lwjglKeycode, float x, float y, boolean isSquare) { + this(ctx.getResources().getString(resId), lwjglKeycode, x, y, isSquare ? pixelOf50dp : pixelOf80dp, isSquare ? pixelOf50dp : pixelOf30dp); + } + + public ControlButton(String name, int lwjglKeycode, float x, float y, boolean isSquare) { + this(name, lwjglKeycode, x, y, isSquare ? pixelOf50dp : pixelOf80dp, isSquare ? pixelOf50dp : pixelOf30dp); + } + + public ControlButton(String name, int lwjglKeycode, float x, float y, int width, int height) { + this.name = name; + this.lwjglKeycode = lwjglKeycode; + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + public void execute(MainActivity act, boolean isDown) { act.sendKeyPress(lwjglKeycode, isDown); } diff --git a/app/src/main/java/net/kdt/pojavlaunch/value/customcontrols/ControlView.java b/app/src/main/java/net/kdt/pojavlaunch/value/customcontrols/ControlView.java index 59e63fa78..e7382d038 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/value/customcontrols/ControlView.java +++ b/app/src/main/java/net/kdt/pojavlaunch/value/customcontrols/ControlView.java @@ -41,7 +41,7 @@ public class ControlView extends Button implements OnTouchListener setTranslationX(moveX = properties.x); setTranslationY(moveY = properties.y); } - + setLayoutParams(new FrameLayout.LayoutParams(properties.width, properties.height)); } diff --git a/app/src/main/java/net/kdt/pojavlaunch/value/customcontrols/ControlsLayout.java b/app/src/main/java/net/kdt/pojavlaunch/value/customcontrols/ControlsLayout.java index 76b4aa16c..91494930b 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/value/customcontrols/ControlsLayout.java +++ b/app/src/main/java/net/kdt/pojavlaunch/value/customcontrols/ControlsLayout.java @@ -26,25 +26,19 @@ public class ControlsLayout extends FrameLayout alert.setView(R.layout.control_setting); alert.setPositiveButton(android.R.string.ok, null); alert.setNegativeButton(android.R.string.cancel, null); - alert.setNeutralButton(com.android.internal.R.string.delete, new DialogInterface.OnClickListener(){ + String deleteText = "Delete"; + try { + // Try to get non-public delete text, which translated to multiple languages. + deleteText = getResources().getString((int) com.android.internal.R.string.class.getDeclaredField("deleteText").get(null)); + } catch (Throwable unused) { + } + + alert.setNeutralButton(deleteText, new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface p1, int p2) { - ControlButton.getSpecialButtons(); - - AlertDialog.Builder alert2 = new AlertDialog.Builder(getContext()); - alert2.setCancelable(false); - alert2.setTitle(R.string.customctrl_specialkey); - alert2.setItems(ControlButton.buildSpecialButtonArray(), new DialogInterface.OnClickListener(){ - - @Override - public void onClick(DialogInterface dInterface, int position) { - view.setProperties(ControlButton.getSpecialButtons()[position], false); - } - }); - alert2.setPositiveButton(android.R.string.cancel, null); - alert2.show(); + removeControlButton(view); } }); final AlertDialog dialog = alert.create(); @@ -63,22 +57,26 @@ public class ControlsLayout extends FrameLayout final Spinner spinnerKeycode = dialog.findViewById(R.id.controlsetting_spinner_lwjglkeycode); ArrayAdapter adapter = new ArrayAdapter(getContext(), android.R.layout.simple_spinner_item); - String[] specialArr = ControlButton.buildSpecialButtonArray(); + String[] oldSpecialArr = ControlButton.buildSpecialButtonArray(); + String[] specialArr = new String[oldSpecialArr.length]; for (int i = 0; i < specialArr.length; i++) { - specialArr[i] = "SPECIAL_" + specialArr[i]; + specialArr[i] = "SPECIAL_" + oldSpecialArr[i]; } adapter.addAll(specialArr); adapter.addAll(AndroidLWJGLKeycode.generateKeyName()); adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice); spinnerKeycode.setAdapter(adapter); - spinnerKeycode.setSelection(AndroidLWJGLKeycode.getIndexByLWJGLKey(properties.lwjglKeycode) + 2); + if (properties.lwjglKeycode < 0) { + spinnerKeycode.setSelection(properties.lwjglKeycode + 2); + } else { + spinnerKeycode.setSelection(AndroidLWJGLKeycode.getIndexByLWJGLKey(properties.lwjglKeycode + 2)); + } spinnerKeycode.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){ @Override public void onItemSelected(AdapterView adapter, View view, int position, long id) { normalBtnLayout.setVisibility(id < 2 ? View.GONE : View.VISIBLE); - } @Override @@ -118,38 +116,31 @@ public class ControlsLayout extends FrameLayout mLayout = controlLayout; removeAllViews(); for (ControlButton button : controlLayout.button) { - final ControlView view = new ControlView(getContext(), button); - view.setOnClickListener(new View.OnClickListener(){ - - @Override - public void onClick(View p1) { - showCtrlOption(view); - } - }); - view.setCanMove(mCanMove); - view.setLayoutParams(new LayoutParams((int) Tools.dpToPx(getContext(), 50), (int) Tools.dpToPx(getContext(), 50))); - addView(view); + addControlView(button); } } public void addControlButton(ControlButton controlButton) { mLayout.button.add(controlButton); - + addControlView(controlButton); + } + + private void addControlView(ControlButton controlButton) { final ControlView view = new ControlView(getContext(), controlButton); view.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View p1) { - AlertDialog.Builder alert = new AlertDialog.Builder(getContext()); - alert.setTitle(getResources().getString(R.string.global_edit) + " " + view.getText()); - // alert.setView(edit); - alert.show(); + showCtrlOption(view); } }); view.setCanMove(mCanMove); addView(view); - - // loadLayout(controlLayout); + } + + public void removeControlButton(ControlView controlButton) { + mLayout.button.remove(controlButton.getProperties()); + removeView(controlButton); } public void saveLayout(String path) throws Exception { diff --git a/app/src/main/res/layout/start_screen.xml b/app/src/main/res/layout/start_screen.xml index 871719f59..baffa4261 100644 --- a/app/src/main/res/layout/start_screen.xml +++ b/app/src/main/res/layout/start_screen.xml @@ -17,7 +17,7 @@ + android:text="@string/app_motd"/> - - - - diff --git a/app/src/main/res/menu/menu_runopt.xml b/app/src/main/res/menu/menu_runopt.xml index 96326718f..ea675d63c 100644 --- a/app/src/main/res/menu/menu_runopt.xml +++ b/app/src/main/res/menu/menu_runopt.xml @@ -2,7 +2,7 @@ + android:title="@string/control_forceclose" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fa1089683..9f9040301 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,6 +3,7 @@ PojavLauncher (Minecraft: Java Edition for Android) PojavLauncher + Launch Minecraft: Java Edition in your device! HELP @@ -111,6 +112,7 @@ Add Edit + Error Load Name Remove @@ -145,7 +147,7 @@ Exit Game Crash detected! Click OK to exit. Unable to locate crash! - Are you sure want to %s ? + Are you sure want to force close? Controls @@ -169,6 +171,7 @@ Mouse: on + Force close Log output PointerCapture Debug Send custom keycode