diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cb10b03f1..cec705d19 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -46,12 +46,6 @@
android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"/>
-
-
(){
- @Override
- protected Void doInBackground(Void[] p1)
- {
- try{
- onCreate();
- onFinish();
- new File(Tools.worksDir + "/installer.jar").delete();
- }
- catch(Exception e){
- onErrorw(Log.getStackTraceString(e));
- }
- return null;
- }
- }.execute();
- }
- public ProgressBar getProgressBar()
- {
- return activity.getProgressBar();
- }
- public void log(String message)
- {
- activity.putLog(message);
- }
-}
diff --git a/app/src/main/java/net/kdt/pojavlaunch/AndroidLWJGLKeycode.java b/app/src/main/java/net/kdt/pojavlaunch/AndroidLWJGLKeycode.java
index a1925581d..b2b43f923 100644
--- a/app/src/main/java/net/kdt/pojavlaunch/AndroidLWJGLKeycode.java
+++ b/app/src/main/java/net/kdt/pojavlaunch/AndroidLWJGLKeycode.java
@@ -203,7 +203,22 @@ public class AndroidLWJGLKeycode {
}
public static void execKeyIndex(MainActivity mainActivity, int index) {
- mainActivity.sendKeyPress(androidToLwjglMap.valueAt(index));
+ mainActivity.sendKeyPress(getKeyIndex(index));
+ }
+
+ public static int getKeyIndex(int index) {
+ return androidToLwjglMap.valueAt(index);
+ }
+
+ public static int getIndexByLWJGLKey(int lwjglKey) {
+ for (int i = 0; i < androidToLwjglMap.size(); i++) {
+ int currKey = androidToLwjglMap.valueAt(i);
+ if (currKey == lwjglKey) {
+ return i;
+ }
+ }
+
+ return 0;
}
}
diff --git a/app/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java b/app/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java
index 2fd3efe83..ecb93bc40 100644
--- a/app/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java
+++ b/app/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java
@@ -102,7 +102,7 @@ public class CustomControlsActivity extends AppCompatActivity
@Override
public void onShow(DialogInterface dialogInterface) {
- Button button = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE);
+ Button button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
button.setOnClickListener(new View.OnClickListener() {
@Override
@@ -128,18 +128,24 @@ public class CustomControlsActivity extends AppCompatActivity
private void actionLoad() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Select OptiFine jar file");
+ builder.setTitle("Select control json file");
builder.setPositiveButton(android.R.string.cancel, null);
final AlertDialog dialog = builder.create();
FileListView flv = new FileListView(this);
+ flv.listFileAt(Tools.CTRLMAP_PATH);
flv.setFileSelectedListener(new FileSelectedListener(){
@Override
public void onFileSelected(File file, String path, String name) {
if (name.endsWith(".json")) {
- // doInstallOptiFine(file);
- dialog.dismiss();
+ try {
+ mCtrl = gson.fromJson(Tools.read(path), CustomControls.class);
+ ctrlLayout.loadLayout(mCtrl);
+ dialog.dismiss();
+ } catch (Exception e) {
+ Tools.showError(CustomControlsActivity.this, e);
+ }
}
}
});
diff --git a/app/src/main/java/net/kdt/pojavlaunch/MCLauncherActivity.java b/app/src/main/java/net/kdt/pojavlaunch/MCLauncherActivity.java
index 6b725a5b1..f0508ec47 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(R.string.error_title) + ":");
+ versions.add(getStr(com.android.internal.R.string.dlg_error_title) + ":");
versions.add(e.getMessage());
} finally {
@@ -844,18 +844,15 @@ public class MCLauncherActivity extends AppCompatActivity
case 1:{ // OptiFine installer
installOptiFine();
} break;
- case 2:{ // Check update
- checkUpdate();
- } break;
- case 3:{ // Custom controls
+ case 2:{ // Custom controls
if (Tools.enableDevFeatures) {
startActivity(new Intent(MCLauncherActivity.this, CustomControlsActivity.class));
}
} break;
- case 4:{ // Settings
+ case 3:{ // Settings
startActivity(new Intent(MCLauncherActivity.this, LauncherPreferenceActivity.class));
} break;
- case 5:{ // About
+ case 4:{ // About
final AlertDialog.Builder aboutB = new AlertDialog.Builder(MCLauncherActivity.this);
aboutB.setTitle(R.string.mcl_option_about);
try
@@ -970,7 +967,6 @@ public class MCLauncherActivity extends AppCompatActivity
dialog = new ProgressDialog(MCLauncherActivity.this);
dialog.setTitle("Installing OptiFine");
dialog.setMessage("Prepaping");
- dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setMax(5);
dialog.setCancelable(false);
dialog.show();
@@ -1010,7 +1006,7 @@ public class MCLauncherActivity extends AppCompatActivity
String[] output = Tools.patchOptifineInstaller(MCLauncherActivity.this, file[0]);
File patchedFile = new File(output[1]);
- publishProgress("Converting OptiFine", null, "1", "ADD");
+ publishProgress("Converting OptiFine", null, null, Integer.toString(ProgressDialog.STYLE_SPINNER));
System.setOut(new PrintStream(logOut));
System.setErr(new PrintStream(logErr));
@@ -1019,7 +1015,7 @@ public class MCLauncherActivity extends AppCompatActivity
@Override
public void onReceived(String msg, int max, int current)
{
- publishProgress("Converting OptiFine: " + msg, Integer.toString(max), Integer.toString(current), "SET");
+ publishProgress("Converting OptiFine: " + msg, Integer.toString(max), null);
}
});
@@ -1032,7 +1028,7 @@ public class MCLauncherActivity extends AppCompatActivity
patchedFile.delete();
}
- publishProgress("Launching OptiFine installer", null, "1", "ADD");
+ publishProgress("Launching OptiFine installer", null, null, Integer.toString(ProgressDialog.STYLE_SPINNER));
File optDir = getDir("dalvik-cache", 0);
optDir.mkdir();
@@ -1044,11 +1040,15 @@ public class MCLauncherActivity extends AppCompatActivity
Method installerMethod = installerClass.getDeclaredMethod("doInstall", File.class);
installerMethod.invoke(null, new File(Tools.MAIN_PATH));
- publishProgress("(4/5) Patching OptiFine Tweaker", null, "1", "ADD");
+ publishProgress("(4/5) Patching OptiFine Tweaker", null, null);
File optifineLibFile = new File(AndroidOptiFineUtilities.optifineOutputJar);
+ if (!optifineLibFile.exists()) {
+ throw new FileNotFoundException(optifineLibFile.getAbsolutePath() + "\n\n--- OptiFine installer log ---\n" + currentLog.toString());
+ }
new OptiFinePatcher(optifineLibFile).saveTweaker();
+ convertedFile.delete();
- publishProgress("(5/5) Done!", null, "1", "ADD");
+ publishProgress("(5/5) Done!", null, null);
Thread.sleep(500);
} catch (Throwable th) {
throwable = th;
@@ -1076,12 +1076,10 @@ public class MCLauncherActivity extends AppCompatActivity
dialog.setMessage(text[0]);
if (text.length >= 2 && text[1] != null) {
dialog.setMax(Integer.valueOf(text[1]));
+ } if (text.length >= 3) {
+ dialog.setProgress(dialog.getProgress() + 1);
} if (text.length >= 4) {
- if (text[3].equals("ADD")) {
- dialog.setProgress(dialog.getProgress() + Integer.valueOf(text[2]));
- } else if (text[3].equals("SET")) {
- dialog.setProgress(7 + Integer.valueOf(text[2]));
- }
+ dialog.setProgressStyle(Integer.parseInt(text[3]));
}
}
@@ -1100,117 +1098,6 @@ public class MCLauncherActivity extends AppCompatActivity
}
}
- public void updateAppProcess(final String ver)
- {
- new Thread(new Runnable(){
-
- @Override
- public void run()
- {
- try
- {
- DownloadUtils.downloadFile(Tools.mhomeUrl + "/installer_" + ver + ".jar", new File(Tools.worksDir + "/installer.jar"));
- startActivity(new Intent(MCLauncherActivity.this, UpdateAppActivity.class));
- }
- catch (Throwable e)
- {
- e.printStackTrace();
- mkToast("Download failed: " + e.getMessage());
- }
- }
- }).start();
- }
-
- public void checkUpdate() {
- final ProgressDialog progUp = new ProgressDialog(this);
- progUp.setMessage(getStr(R.string.mcl_option_checkupdate));
- progUp.setCancelable(false);
- progUp.show();
-
- new Thread(new Runnable(){
-
- @Override
- public void run()
- {
- final AlertDialog.Builder alUp = new AlertDialog.Builder(MCLauncherActivity.this);
- alUp.setTitle(R.string.mcl_option_checkupdate);
-
- try {
- final int myVer = Tools.usingVerCode;
- // final String currVerName = Tools.usingVerName;
-
- String[] totalNewVer = DownloadUtils.downloadString(Tools.mhomeUrl + "/update.txt").split(";");
- final int newVer = Integer.parseInt(totalNewVer[1]);
- final String newVerName = totalNewVer[0];
-
- //int myVer = 102;
-
- runOnUiThread(new Runnable(){
-
- @Override
- public void run()
- {
- if(newVer != -1){
- boolean isAvailable = myVer < newVer;
-
- String isNewVerAvailable =
- isAvailable ?
- "A new version is available!\nSee changelog at Launcher News tab." :
- "This launcher is up-to-date!";
-
- if (myVer > newVer) {
- isNewVerAvailable = "This is an unreleased version or unofficial version?";
- }
-
- alUp.setMessage(
- "Received version " + newVerName + "\n" +
- isNewVerAvailable
- );
- if(isAvailable){
- alUp.setPositiveButton("Update", new DialogInterface.OnClickListener(){
- @Override
- public void onClick(DialogInterface p1, int p2)
- {
- updateAppProcess(newVerName);
- }
- });
- }
- }
- else{
- alUp.setMessage("Failed to check for update. Reason: No Internet connection");
- }
- alUp.setNegativeButton(android.R.string.cancel, null);
- alUp.show();
- }
- });
- } catch (final Exception e) {
- Log.e(Tools.APP_NAME + ".CheckUpdateError", e.getMessage());
- e.printStackTrace();
-
- runOnUiThread(new Runnable(){
-
- @Override
- public void run()
- {
- alUp.setMessage("Failed to check for update. Reason: " + e.getMessage());
- alUp.show();
- }
- });
- } finally {
- runOnUiThread(new Runnable(){
-
- @Override
- public void run()
- {
- progUp.dismiss();
- }
- });
-
- }
- }
- }).start();
- }
-
private class ViewPagerAdapter extends FragmentPagerAdapter {
List fragmentList = new ArrayList<>();
diff --git a/app/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app/src/main/java/net/kdt/pojavlaunch/MainActivity.java
index 3d8c5413f..10b4e9d81 100644
--- a/app/src/main/java/net/kdt/pojavlaunch/MainActivity.java
+++ b/app/src/main/java/net/kdt/pojavlaunch/MainActivity.java
@@ -1069,13 +1069,11 @@ public class MainActivity extends AppCompatActivity implements OnTouchListener,
}
private void openLogOutput() {
- WindowAnimation.fadeIn(contentLog, 500);
+ contentLog.setVisibility(View.VISIBLE);
}
public void closeLogOutput(View view) {
- //scrollLog.setVisibility(View.GONE);
-
- WindowAnimation.fadeOut(contentLog, 500);
+ contentLog.setVisibility(View.GONE);
}
/*
private void openCanvasOutput() {
@@ -1168,7 +1166,7 @@ public class MainActivity extends AppCompatActivity implements OnTouchListener,
public void dialogForceClose()
{
new AlertDialog.Builder(this)
- .setMessage(R.string.mcn_exit_confirm)
+ .setMessage(getResources().getString(R.string.mcn_exit_confirm, getResources().getString(com.android.internal.R.string.force_close)))
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){
@@ -1181,7 +1179,7 @@ public class MainActivity extends AppCompatActivity implements OnTouchListener,
Log.w(Tools.APP_NAME, "Could not enable System.exit() method!", th);
}
- // If we are unable to enable exit, use method: kill myself.
+ // If unable to enable exit, use method: kill self process.
android.os.Process.killProcess(android.os.Process.myPid());
// Toast.makeText(MainActivity.this, "Could not exit. Please force close this app.", Toast.LENGTH_LONG).show();
diff --git a/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java b/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java
index 4035a95d2..8361dbbb0 100644
--- a/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java
+++ b/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java
@@ -52,6 +52,8 @@ public class PojavLoginActivity extends MineActivity
firstLaunchPrefs = getSharedPreferences("pojav_extract", MODE_PRIVATE);
new File(Tools.mpProfiles).mkdir();
+ // Remove vmos warning???
+ /*
if (isAndroid7() && !firstLaunchPrefs.getBoolean(PREF_IS_DONOTSHOWAGAIN_WARN, false)) {
AlertDialog.Builder startDlg = new AlertDialog.Builder(PojavLoginActivity.this);
startDlg.setTitle(R.string.warning_title);
@@ -109,8 +111,9 @@ public class PojavLoginActivity extends MineActivity
startDlg.show();
} else {
+ */
new InitTask().execute();
- }
+ // }
}
private class InitTask extends AsyncTask{
@@ -550,7 +553,7 @@ public class PojavLoginActivity extends MineActivity
{
// TODO: Implement this method
if(result[0].equals("ERROR")){
- Tools.dialogOnUiThread(PojavLoginActivity.this, getResources().getString(R.string.error_title), strArrToString(result));
+ Tools.dialogOnUiThread(PojavLoginActivity.this, getResources().getString(com.android.internal.R.string.dlg_error_title), strArrToString(result));
} else{
MCProfile.Builder builder = new MCProfile.Builder();
builder.setAccessToken(result[1]);
diff --git a/app/src/main/java/net/kdt/pojavlaunch/PojavProfile.java b/app/src/main/java/net/kdt/pojavlaunch/PojavProfile.java
index b4f0e8ebc..339f8c84d 100644
--- a/app/src/main/java/net/kdt/pojavlaunch/PojavProfile.java
+++ b/app/src/main/java/net/kdt/pojavlaunch/PojavProfile.java
@@ -46,11 +46,7 @@ public class PojavProfile
if (profileCon.equals(":::::")) {
throw new RuntimeException("Profile not set or reset.");
}
- /*
- if (true) {
- throw new RuntimeException(profilePath + ":" + new File(profilePath).exists());
- }
- */
+
return new File(profilePath).exists();
}
}
diff --git a/app/src/main/java/net/kdt/pojavlaunch/Tools.java b/app/src/main/java/net/kdt/pojavlaunch/Tools.java
index a06cc787c..b1b1b3333 100644
--- a/app/src/main/java/net/kdt/pojavlaunch/Tools.java
+++ b/app/src/main/java/net/kdt/pojavlaunch/Tools.java
@@ -163,71 +163,77 @@ public final class Tools
}
*/
- public static void showError(Activity ctx, Throwable e)
+ public static void showError(Context ctx, Throwable e)
{
showError(ctx, e, false);
}
- public static void showError(final Activity ctx, final Throwable e, final boolean exitIfOk)
+ public static void showError(final Context ctx, final Throwable e, final boolean exitIfOk)
{
showError(ctx, e, exitIfOk, false);
}
- private static void showError(final Activity ctx, final Throwable e, final boolean exitIfOk, final boolean showMore)
+ private static void showError(final Context ctx, final Throwable e, final boolean exitIfOk, final boolean showMore)
{
- ctx.runOnUiThread(new Runnable(){
+ Runnable runnable = new Runnable(){
- @Override
- public void run()
- {
- final String errMsg = showMore ? Log.getStackTraceString(e): e.getMessage();
- new AlertDialog.Builder((Context) ctx)
- .setTitle(R.string.error_title)
- .setMessage(errMsg)
- .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){
+ @Override
+ public void run()
+ {
+ final String errMsg = showMore ? Log.getStackTraceString(e): e.getMessage();
+ new AlertDialog.Builder((Context) ctx)
+ .setTitle(com.android.internal.R.string.dlg_error_title)
+ .setMessage(errMsg)
+ .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){
- @Override
- public void onClick(DialogInterface p1, int p2)
- {
- if(exitIfOk) {
- if (ctx instanceof MainActivity) {
- MainActivity.fullyExit();
- } else {
- ctx.finish();
- }
+ @Override
+ public void onClick(DialogInterface p1, int p2)
+ {
+ if(exitIfOk) {
+ if (ctx instanceof MainActivity) {
+ MainActivity.fullyExit();
+ } else if (ctx instanceof Activity) {
+ ((Activity) ctx).finish();
}
}
- })
- .setNegativeButton(showMore ? R.string.error_show_less : R.string.error_show_more, new DialogInterface.OnClickListener(){
+ }
+ })
+ .setNegativeButton(showMore ? R.string.error_show_less : R.string.error_show_more, new DialogInterface.OnClickListener(){
- @Override
- public void onClick(DialogInterface p1, int p2)
- {
- showError(ctx, e, exitIfOk, !showMore);
- }
- })
- .setNeutralButton(android.R.string.copy, new DialogInterface.OnClickListener(){
+ @Override
+ public void onClick(DialogInterface p1, int p2)
+ {
+ showError(ctx, e, exitIfOk, !showMore);
+ }
+ })
+ .setNeutralButton(android.R.string.copy, new DialogInterface.OnClickListener(){
- @Override
- public void onClick(DialogInterface p1, int p2)
- {
- StringSelection errData = new StringSelection(errMsg);
- Toolkit.getDefaultToolkit().getSystemClipboard().setContents(errData, null);
-
- if(exitIfOk) {
- if (ctx instanceof MainActivity) {
- MainActivity.fullyExit();
- } else {
- ctx.finish();
- }
+ @Override
+ public void onClick(DialogInterface p1, int p2)
+ {
+ StringSelection errData = new StringSelection(errMsg);
+ Toolkit.getDefaultToolkit().getSystemClipboard().setContents(errData, null);
+
+ if(exitIfOk) {
+ if (ctx instanceof MainActivity) {
+ MainActivity.fullyExit();
+ } else {
+ ((Activity) ctx).finish();
}
}
- })
- //.setNegativeButton("Report (not available)", null)
- .setCancelable(!exitIfOk)
- .show();
- }
- });
+ }
+ })
+ //.setNegativeButton("Report (not available)", null)
+ .setCancelable(!exitIfOk)
+ .show();
+ }
+ };
+
+ if (ctx instanceof Activity) {
+ ((Activity) ctx).runOnUiThread(runnable);
+ } else {
+ runnable.run();
+ }
}
public static void dialogOnUiThread(final Activity ctx, final CharSequence title, final CharSequence message) {
diff --git a/app/src/main/java/net/kdt/pojavlaunch/UpdateAppActivity.java b/app/src/main/java/net/kdt/pojavlaunch/UpdateAppActivity.java
deleted file mode 100644
index 95ce89293..000000000
--- a/app/src/main/java/net/kdt/pojavlaunch/UpdateAppActivity.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package net.kdt.pojavlaunch;
-
-import android.app.*;
-import android.graphics.*;
-import android.os.*;
-import android.widget.*;
-import dalvik.system.*;
-import java.io.*;
-import java.lang.reflect.*;
-import net.kdt.pojavlaunch.*;
-import android.util.*;
-
-public class UpdateAppActivity extends Activity
-{
- private ProgressBar progress;
- private TextView logView;
- private boolean cancelable = false;
-
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.launcher_update);
-
- progress = (ProgressBar) findViewById(R.id.launcherupdateProgressBar);
- logView = (TextView) findViewById(R.id.launcherupdateLogView);
- logView.setTypeface(Typeface.MONOSPACE);
-
- File inst = new File(Tools.worksDir + "/installer.jar");
-
- try {
- File optDir = getDir("dalvik-cache", 0);
- optDir.mkdirs();
-
- DexClassLoader mainLoader = new DexClassLoader(inst.getAbsolutePath(), optDir.getAbsolutePath(), getPackageManager().getPackageInfo(getPackageName(), 0).applicationInfo.nativeLibraryDir, MainActivity.class.getClassLoader());
- Class mClass = mainLoader.loadClass("Main");
- Method method = mClass.getMethod("main", UpdateAppActivity.class);
- method.invoke(null, this);
-
- } catch (Throwable th) {
- putLog("----- AN ERROR OCCURRED -----");
- putLog(Log.getStackTraceString(th));
- putLog("----- FAILED TO UPDATE! -----");
- } finally {
- cancelable = true;
- }
- }
- public void putLog(String message)
- {
- logView.append(message + "\n");
- }
- public ProgressBar getProgressBar()
- {
- return progress;
- }
- @Override
- public void onBackPressed()
- {
- if (cancelable) super.onBackPressed();
- }
-}
diff --git a/app/src/main/java/net/kdt/pojavlaunch/WindowAnimation.java b/app/src/main/java/net/kdt/pojavlaunch/WindowAnimation.java
deleted file mode 100644
index 5a1519e91..000000000
--- a/app/src/main/java/net/kdt/pojavlaunch/WindowAnimation.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package net.kdt.pojavlaunch;
-
-import android.view.*;
-
-public class WindowAnimation
-{
- public static void fadeIn(final View view, int duration) {
- // 0.1 -> 1.0
- doFade(view, true, duration);
- }
-
- public static void fadeOut(final View view, int duration) {
- // 1.0 -> 0.1
- doFade(view, false, duration);
- }
-
- private static void doFade(final View view, final boolean fadeIn, int duration) {
- final long millis = ((long) duration) / 10l;
-
- view.setVisibility(View.VISIBLE);
- view.setAlpha(fadeIn ? 0 : 1);
- view.setEnabled(false);
- new Thread(new Runnable(){
- private float alpha = fadeIn ? 0 : 1;
- @Override
- public void run()
- {
- try {
- while (fadeIn ? alpha < 1 : alpha > 0) {
- try {
- Thread.sleep(millis);
- } catch (InterruptedException e) {}
-
- if (fadeIn) alpha += 0.1;
- else alpha -= 0.1;
-
- view.post(new Runnable(){
-
- @Override
- public void run()
- {
- view.setAlpha(alpha);
- }
- });
- }
- } finally {
- view.post(new Runnable(){
-
- @Override
- public void run()
- {
- if (fadeIn) view.setEnabled(true);
- else {
- view.setVisibility(View.GONE);
- }
- }
- });
- }
- }
- }).start();
- }
-}
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 8b138ed47..bbfc403ec 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
@@ -1,6 +1,8 @@
package net.kdt.pojavlaunch.value.customcontrols;
import net.kdt.pojavlaunch.*;
import android.view.*;
+import java.util.*;
+import android.content.*;
public class ControlButton
{
@@ -10,11 +12,15 @@ public class ControlButton
public static 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,
@@ -25,6 +31,18 @@ public class ControlButton
return SPECIAL_BUTTONS;
}
+ public static String[] buildSpecialButtonArray() {
+ if (SPECIAL_BUTTON_NAME_ARRAY == null) {
+ List nameList = new ArrayList();
+ for (ControlButton btn : getSpecialButtons()) {
+ nameList.add(btn.name);
+ }
+ SPECIAL_BUTTON_NAME_ARRAY = nameList.toArray(new String[0]);
+ }
+
+ return SPECIAL_BUTTON_NAME_ARRAY;
+ }
+
// Concept...
public String name;
public float x;
@@ -32,6 +50,7 @@ public class ControlButton
public int width = pixelOf50dp;
public int height = pixelOf50dp;
public int lwjglKeycode;
+ public boolean hidden;
public boolean holdCtrl;
public boolean holdAlt;
public boolean holdShift;
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 666439420..59e63fa78 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
@@ -20,16 +20,31 @@ public class ControlView extends Button implements OnTouchListener
setOnTouchListener(this);
mGestureDetector = new GestureDetector(ctx, new SingleTapConfirm());
+
+ setProperties(properties);
+ }
+
+ public ControlButton getProperties() {
+ return mProperties;
+ }
+
+ public void setProperties(ControlButton properties) {
+ setProperties(properties, true);
+ }
+
+ public void setProperties(ControlButton properties, boolean changePos) {
mProperties = properties;
// com.android.internal.R.string.delete
// android.R.string.
setText(properties.name);
- setTranslationX(moveX = properties.x);
- setTranslationY(moveY = properties.y);
-
+ if (changePos) {
+ setTranslationX(moveX = properties.x);
+ setTranslationY(moveY = properties.y);
+ }
+
setLayoutParams(new FrameLayout.LayoutParams(properties.width, properties.height));
}
-
+
@Override
public void setTranslationX(float x)
{
@@ -43,6 +58,10 @@ public class ControlView extends Button implements OnTouchListener
mProperties.y = y;
}
+ public void updateProperties() {
+ setProperties(mProperties);
+ }
+
private float moveX, moveY;
private float downX, downY;
@Override
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 c910082dd..76b4aa16c 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
@@ -19,6 +19,101 @@ public class ControlsLayout extends FrameLayout
super(ctx, attrs);
}
+ private void showCtrlOption(final ControlView view) {
+ AlertDialog.Builder alert = new AlertDialog.Builder(getContext());
+ alert.setCancelable(false);
+ alert.setTitle(getResources().getString(R.string.global_edit) + " " + view.getText());
+ 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(){
+
+ @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();
+ }
+ });
+ final AlertDialog dialog = alert.create();
+
+ final ControlButton properties = view.getProperties();
+
+ dialog.setOnShowListener(new DialogInterface.OnShowListener() {
+
+ @Override
+ public void onShow(DialogInterface dialogInterface) {
+ final LinearLayout normalBtnLayout = dialog.findViewById(R.id.controlsetting_normalbtnlayout);
+
+ final EditText editName = dialog.findViewById(R.id.controlsetting_edit_name);
+ editName.setText(properties.name);
+
+ 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();
+ for (int i = 0; i < specialArr.length; i++) {
+ specialArr[i] = "SPECIAL_" + specialArr[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);
+ 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
+ public void onNothingSelected(AdapterView> adapter){
+ // Unused
+ }
+ });
+
+ final CheckBox checkHidden = dialog.findViewById(R.id.controlsetting_checkbox_hidden);
+ checkHidden.setChecked(properties.hidden);
+
+ Button button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
+ button.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View view2) {
+ if (editName.getText().toString().isEmpty()) {
+ editName.setError(getResources().getString(R.string.global_error_field_empty));
+ } else {
+ properties.lwjglKeycode = AndroidLWJGLKeycode.getKeyIndex(spinnerKeycode.getSelectedItemPosition()) - 2;
+ properties.name = editName.getText().toString();
+ properties.hidden = checkHidden.isChecked();
+
+ view.updateProperties();
+
+ dialog.dismiss();
+ }
+ }
+ });
+ }
+ });
+
+ dialog.show();
+ }
+
public void loadLayout(CustomControls controlLayout) {
mLayout = controlLayout;
removeAllViews();
@@ -28,10 +123,7 @@ public class ControlsLayout extends FrameLayout
@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);
diff --git a/app/src/main/java/net/kdt/pojavlaunch/views/MineButton.java b/app/src/main/java/net/kdt/pojavlaunch/views/MineButton.java
deleted file mode 100644
index bf5edcbf9..000000000
--- a/app/src/main/java/net/kdt/pojavlaunch/views/MineButton.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package net.kdt.pojavlaunch.views;
-
-public class MineButton
-{
-}
diff --git a/app/src/main/res/layout/control_setting.xml b/app/src/main/res/layout/control_setting.xml
index 2323d4302..a53b379d0 100644
--- a/app/src/main/res/layout/control_setting.xml
+++ b/app/src/main/res/layout/control_setting.xml
@@ -5,17 +5,6 @@
android:layout_height="fill_parent"
android:orientation="vertical">
-
-
-
-
-
+ android:orientation="vertical"
+ android:id="@+id/controlsetting_normalbtnlayout">
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/main.xml b/app/src/main/res/layout/main.xml
index a1ec0b1a4..a6244efbe 100644
--- a/app/src/main/res/layout/main.xml
+++ b/app/src/main/res/layout/main.xml
@@ -244,6 +244,7 @@
+ android:title="@*android:string/force_close" />
diff --git a/app/src/main/res/values/headings_array.xml b/app/src/main/res/values/headings_array.xml
index 292085587..e7b2c6771 100644
--- a/app/src/main/res/values/headings_array.xml
+++ b/app/src/main/res/values/headings_array.xml
@@ -3,7 +3,6 @@
- @string/mcl_option_modmgr
- @string/mcl_option_optifineinstall
- - @string/mcl_option_checkupdate
- @string/mcl_option_customcontrol
- @string/mcl_option_settings
- @string/mcl_option_about
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cbde84fd4..fa1089683 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -51,7 +51,6 @@
Error! Please check the log below: %s
- Error
No version!
Unable to load version %s
Unable to convert library %s
@@ -92,7 +91,7 @@
About
Set max DX references
- Increase If an error happend while converting: Too many ... references. You may try multi-dex option.
+ Increase If an error happend while converting: Too many ... references. You may try multi-dex option. Recommended: 4096 or 8192.
Launch Minecraft in Freeform mode
Launch Minecraft in floating window. Requires Android 7.0+
How long will trigger after long press
@@ -146,7 +145,7 @@
Exit
Game Crash detected! Click OK to exit.
Unable to locate crash!
- Are you sure want to force exit?
+ Are you sure want to %s ?
Controls
@@ -170,7 +169,6 @@
Mouse: on
- Force close
Log output
PointerCapture Debug
Send custom keycode
@@ -179,6 +177,7 @@
LWJGL Keycode
+ Special Key
Hidden