diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java index 3fc3d524f..f8dbc9ce7 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java @@ -11,11 +11,13 @@ import static org.lwjgl.glfw.CallbackBridge.windowWidth; import android.app.*; import android.content.*; import android.content.pm.PackageManager; +import android.content.res.Configuration; import android.os.*; import android.util.*; import android.view.*; import android.widget.*; +import androidx.annotation.NonNull; import androidx.drawerlayout.widget.*; import com.google.android.material.navigation.*; import com.kdt.LoggerView; @@ -44,6 +46,7 @@ public class BaseMainActivity extends BaseActivity { private boolean mIsResuming = false; + ControlLayout mControlLayout; private MinecraftGLSurfaceView minecraftGLView; private static Touchpad touchpad; private LoggerView loggerView; @@ -69,6 +72,7 @@ public class BaseMainActivity extends BaseActivity { GLOBAL_CLIPBOARD = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); touchCharInput = findViewById(R.id.mainTouchCharInput); loggerView = findViewById(R.id.mainLoggerView); + mControlLayout = findViewById(R.id.main_control_layout); mProfile = PojavProfile.getCurrentProfileContent(this); minecraftProfile = LauncherProfiles.mainProfileJson.profiles.get(mProfile.selectedProfile); @@ -187,6 +191,13 @@ public class BaseMainActivity extends BaseActivity { super.onStop(); } + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + Tools.getDisplayMetrics(this); + minecraftGLView.refreshSize(); + } + public static void fullyExit() { android.os.Process.killProcess(android.os.Process.myPid()); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MinecraftGLSurfaceView.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MinecraftGLSurfaceView.java index 0e2630d6f..683452c1c 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MinecraftGLSurfaceView.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MinecraftGLSurfaceView.java @@ -47,10 +47,8 @@ public class MinecraftGLSurfaceView extends SurfaceView { private TextView mPointerDebugTextView; /* Resolution scaler option, allow downsizing a window */ private final float mScaleFactor = LauncherPreferences.DEFAULT_PREF.getInt("resolutionRatio",100)/100f; - /* Display properties, such as resolution and DPI */ - private final DisplayMetrics mDisplayMetrics = Tools.getDisplayMetrics((Activity) getContext()); /* Sensitivity, adjusted according to screen size */ - private final double mSensitivityFactor = (1.4 * (1080f/ mDisplayMetrics.heightPixels)); + private final double mSensitivityFactor = (1.4 * (1080f/ Tools.getDisplayMetrics((Activity) getContext()).heightPixels)); /* Use to detect simple and double taps */ private final TapDetector mSingleTapDetector = new TapDetector(1, TapDetector.DETECTION_METHOD_BOTH); private final TapDetector mDoubleTapDetector = new TapDetector(2, TapDetector.DETECTION_METHOD_DOWN); @@ -140,19 +138,23 @@ public class MinecraftGLSurfaceView extends SurfaceView { @Override public void surfaceCreated(@NonNull SurfaceHolder holder) { + //Load Minecraft options: MCOptionUtils.load(); + MCOptionUtils.set("fullscreen", "off"); MCOptionUtils.set("overrideWidth", String.valueOf(windowWidth)); MCOptionUtils.set("overrideHeight", String.valueOf(windowHeight)); MCOptionUtils.save(); getMcScale(); - // Should we do that? - if(isCalled) return; + // Resize stuff + if(isCalled){ + //getHolder().setFixedSize(windowWidth, windowHeight); + //JREUtils.setupBridgeWindow(getHolder().getSurface()); + return; + } isCalled = true; - getHolder().setFixedSize(windowWidth, windowHeight); - - + refreshSize(); JREUtils.setupBridgeWindow(getHolder().getSurface()); new Thread(() -> { @@ -169,18 +171,12 @@ public class MinecraftGLSurfaceView extends SurfaceView { @Override public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) { - windowWidth = Tools.getDisplayFriendlyRes(mDisplayMetrics.widthPixels, mScaleFactor); - windowHeight = Tools.getDisplayFriendlyRes(mDisplayMetrics.heightPixels, mScaleFactor); - CallbackBridge.sendUpdateWindowSize(windowWidth, windowHeight); - getMcScale(); - Toast.makeText(getContext(), "width: " + width, Toast.LENGTH_SHORT).show(); - Toast.makeText(getContext(), "height: " + height, Toast.LENGTH_SHORT).show(); - getHolder().setFixedSize(windowWidth, windowHeight); + refreshSize(); } @Override public void surfaceDestroyed(@NonNull SurfaceHolder holder) { - + JREUtils.releaseBridgeWindow(); } }); } @@ -588,6 +584,26 @@ public class MinecraftGLSurfaceView extends SurfaceView { mPointerDebugTextView.setVisibility(mPointerDebugTextView.getVisibility() == View.GONE ? View.VISIBLE : View.GONE); } + /** Called when the size need to be set at any point during the surface lifecycle **/ + public void refreshSize(){ + windowWidth = Tools.getDisplayFriendlyRes(Tools.currentDisplayMetrics.widthPixels, mScaleFactor); + windowHeight = Tools.getDisplayFriendlyRes(Tools.currentDisplayMetrics.heightPixels, mScaleFactor); + getHolder().setFixedSize(windowWidth, windowHeight); + + // Set the new frame size + + MCOptionUtils.load(); + MCOptionUtils.set("overrideWidth", String.valueOf(windowWidth)); + MCOptionUtils.set("overrideHeight", String.valueOf(windowHeight)); + MCOptionUtils.save(); + + CallbackBridge.sendUpdateWindowSize(windowWidth, windowHeight); + getMcScale(); + //Toast.makeText(getContext(), "width: " + width, Toast.LENGTH_SHORT).show(); + //Toast.makeText(getContext(), "height: " + height, Toast.LENGTH_SHORT).show(); + + } + /** A small interface called when the listener is ready for the first time */ public interface SurfaceReadyListener { void isReady(); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java index ee4bfdc5f..a8f253556 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -243,14 +243,17 @@ public final class Tools { } } } + /* minecraftArgs.add("--width"); minecraftArgs.add(Integer.toString(CallbackBridge.windowWidth)); minecraftArgs.add("--height"); minecraftArgs.add(Integer.toString(CallbackBridge.windowHeight)); + minecraftArgs.add("--fullscreenWidth"); minecraftArgs.add(Integer.toString(CallbackBridge.windowWidth)); minecraftArgs.add("--fullscreenHeight"); minecraftArgs.add(Integer.toString(CallbackBridge.windowHeight)); + */ String[] argsFromJson = JSONUtils.insertJSONValueList( splitAndFilterEmpty( @@ -280,7 +283,7 @@ public final class Tools { strList.add(arg); } } - strList.add("--fullscreen"); + //strList.add("--fullscreen"); return strList.toArray(new String[0]); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java index 21d2e69d0..a2d24b829 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java @@ -547,6 +547,7 @@ public class JREUtils { public static native boolean dlopen(String libPath); public static native void setLdLibraryPath(String ldLibraryPath); public static native void setupBridgeWindow(Object surface); + public static native void releaseBridgeWindow(); public static native void setupExitTrap(Context context); // Obtain AWT screen pixels to render on Android SurfaceView public static native int[] renderAWTScreenFrame(/* Object canvas, int width, int height */); diff --git a/app_pojavlauncher/src/main/jni/egl_bridge.c b/app_pojavlauncher/src/main/jni/egl_bridge.c index bf34577c2..687cf8550 100644 --- a/app_pojavlauncher/src/main/jni/egl_bridge.c +++ b/app_pojavlauncher/src/main/jni/egl_bridge.c @@ -674,6 +674,12 @@ JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_utils_JREUtils_setupBridgeWindow free(ptrStr); } + +JNIEXPORT void JNICALL +Java_net_kdt_pojavlaunch_utils_JREUtils_releaseBridgeWindow(JNIEnv *env, jclass clazz) { + ANativeWindow_release(potatoBridge.androidWindow); +} + void* pojavGetCurrentContext() { switch (config_renderer) { case RENDERER_GL4ES: