get realScreen size for android

- to check if the app renders different resolution and update the tooltips size
This commit is contained in:
Anthony Calosa
2022-08-01 08:46:47 +08:00
parent 002591fa48
commit 6b1c8d30f4
7 changed files with 89 additions and 53 deletions

View File

@@ -16,6 +16,7 @@ import forge.util.FileUtil;
import forge.util.OperatingSystem;
import forge.util.RestartUtil;
import io.sentry.Sentry;
import org.apache.commons.lang3.tuple.Pair;
import javax.imageio.ImageIO;
import java.awt.*;
@@ -186,5 +187,10 @@ public class Main {
BufferedImage image = ImageIO.read(input);
ImageIO.write(image, "jpg", output);
}
@Override
public Pair<Integer, Integer> getRealScreenSize(boolean real) {
return Pair.of(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
}
}
}

View File

@@ -3,7 +3,6 @@ package forge.app;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.Callable;
import com.badlogic.gdx.Version;
import com.badlogic.gdx.backends.android.AndroidApplication;
@@ -16,7 +15,6 @@ import android.app.PendingIntent;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
@@ -40,7 +38,6 @@ import android.text.style.StyleSpan;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.webkit.MimeTypeMap;
import android.widget.Button;
@@ -55,6 +52,7 @@ import forge.util.FileUtil;
import forge.util.ThreadUtil;
import io.sentry.Breadcrumb;
import io.sentry.Sentry;
import org.apache.commons.lang3.tuple.Pair;
//import io.sentry.android.core.SentryAndroid;
public class Main extends AndroidApplication {
@@ -138,15 +136,12 @@ public class Main extends AndroidApplication {
button.setBackground(states);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
}
button.setOnClickListener(v -> {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
});
row2.addView(button);
@@ -155,12 +150,7 @@ public class Main extends AndroidApplication {
TL.addView(row, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT));
TL.addView(row2, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT));
TL.setGravity(Gravity.CENTER);
TL.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.exit();
}
});
TL.setOnClickListener(v -> adapter.exit());
setContentView(TL);
}
@Override
@@ -189,13 +179,10 @@ public class Main extends AndroidApplication {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Storage Permission Denied...");
builder.setMessage("This app needs storage permission to run properly.\n\n\n\n");
builder.setPositiveButton("Open App Details", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
//ActivityCompat crashes... maybe it needs the appcompat v7???
//ActivityCompat.requestPermissions(Main.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
builder.setPositiveButton("Open App Details", (dialog, which) -> {
dialog.cancel();
//ActivityCompat crashes... maybe it needs the appcompat v7???
//ActivityCompat.requestPermissions(Main.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
});
/*builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
@@ -347,23 +334,17 @@ public class Main extends AndroidApplication {
@Override
public boolean isConnectedToInternet() {
return Boolean.TRUE.equals(ThreadUtil.executeWithTimeout(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
NetworkInfo activeNetworkInfo = connManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
return Boolean.TRUE.equals(ThreadUtil.executeWithTimeout(() -> {
NetworkInfo activeNetworkInfo = connManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}, 2000)); //if can't determine Internet connection within two seconds, assume not connected
}
@Override
public boolean isConnectedToWifi() {
return Boolean.TRUE.equals(ThreadUtil.executeWithTimeout(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return wifi.isConnected();
}
return Boolean.TRUE.equals(ThreadUtil.executeWithTimeout(() -> {
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return wifi.isConnected();
}, 2000)); //if can't determine Internet connection within two seconds, assume not connected
}
@@ -445,15 +426,12 @@ public class Main extends AndroidApplication {
// Setting getWindow() Flags needs to run on UI thread.
// Should fix android.view.ViewRoot$CalledFromWrongThreadException:
// Only the original thread that created a view hierarchy can touch its views.
runOnUiThread(new Runnable() {
@Override
public void run() {
if (preventSleep) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
runOnUiThread(() -> {
if (preventSleep) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
});
}
@@ -463,6 +441,19 @@ public class Main extends AndroidApplication {
Bitmap bmp = BitmapFactory.decodeStream(input);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, output);
}
@Override
public Pair<Integer, Integer> getRealScreenSize(boolean real) {
//app size
WindowManager windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
Point size = new Point();
if (real)
display.getRealSize(size);
else
display.getSize(size);
//real size
return Pair.of(size.x, size.y);
}
}
public String getDeviceName() {

View File

@@ -4,6 +4,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.lang3.tuple.Pair;
import org.robovm.apple.foundation.NSAutoreleasePool;
import org.robovm.apple.uikit.UIApplication;
import org.robovm.apple.uikit.UIPasteboard;
@@ -114,5 +115,10 @@ public class Main extends IOSApplication.Delegate {
public void convertToJPEG(InputStream input, OutputStream output) throws IOException {
}
@Override
public Pair<Integer, Integer> getRealScreenSize(boolean real) {
return Pair.of(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
}
}
}

View File

@@ -224,5 +224,10 @@ public class Main {
BufferedImage image = ImageIO.read(input);
ImageIO.write(image, "jpg", output);
}
@Override
public Pair<Integer, Integer> getRealScreenSize(boolean real) {
return Pair.of(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
}
}
}

View File

@@ -213,8 +213,18 @@ public class RewardScene extends UIScene {
}
}
float AR = 480f/270f;
float fW = Forge.isLandscapeMode() ? Forge.getScreenWidth() : Forge.getScreenHeight();
float fH = Forge.isLandscapeMode() ? Forge.getScreenHeight() : Forge.getScreenWidth();
int x = Forge.getDeviceAdapter().getRealScreenSize(false).getLeft();
int y = Forge.getDeviceAdapter().getRealScreenSize(false).getRight();
int realX = Forge.getDeviceAdapter().getRealScreenSize(true).getLeft();
int realY = Forge.getDeviceAdapter().getRealScreenSize(true).getRight();
if (realX > x || realY > y) {
if (x > y)
x *= 1.1f;
else
y *= 1.1f;
}
float fW = x > y ? x : y;
float fH = x > y ? y : x;
float mul = fW/fH < AR ? AR/(fW/fH) : (fW/fH)/AR;
if (fW/fH >= 2f) {//tall display
mul = (fW/fH) - ((fW/fH)/AR);

View File

@@ -349,8 +349,17 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
newW = (newH * origW) / origH;
}
float AR = 480f/270f;
float fW = Forge.isLandscapeMode() ? Forge.getScreenWidth() : Forge.getScreenHeight();
float fH = Forge.isLandscapeMode() ? Forge.getScreenHeight() : Forge.getScreenWidth();
int x = Forge.getDeviceAdapter().getRealScreenSize(false).getLeft();
int y = Forge.getDeviceAdapter().getRealScreenSize(false).getRight();
int realX = Forge.getDeviceAdapter().getRealScreenSize(true).getLeft();
int realY = Forge.getDeviceAdapter().getRealScreenSize(true).getRight();
if (realX > x) {
x *= 1.1f;
} else if (realY > y) {
y *= 1.1f;
}
float fW = x > y ? x : y;
float fH = x > y ? y : x;
float mul = fW/fH < AR ? AR/(fW/fH) : (fW/fH)/AR;
if (fW/fH >= 2f) {//tall display
mul = (fW/fH) - ((fW/fH)/AR);
@@ -678,9 +687,15 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
actor.getStage().addActor(switchButton);
}
//Vector2 point = actor.localToStageCoordinates(tmp.set(x, y));
tooltip_actor.setX(Scene.getIntendedWidth() / 2 - tooltip_actor.getWidth() / 2);
//if (tooltip_actor.getX() + tooltip_actor.getWidth() > Scene.getIntendedWidth())
//tooltip_actor.setX(Math.max(0,actor.getX() - tooltip_actor.getWidth()));
if (Forge.isLandscapeMode()) {
//right if poosible, if exceeds width, draw left
tooltip_actor.setX(actor.getRight());
if (tooltip_actor.getX() + tooltip_actor.getWidth() > Scene.getIntendedWidth())
tooltip_actor.setX(Math.max(0,actor.getX() - tooltip_actor.getWidth()));
} else {
//middle
tooltip_actor.setX(Scene.getIntendedWidth() / 2 - tooltip_actor.getWidth() / 2);
}
tooltip_actor.setY(Scene.getIntendedHeight() / 2 - tooltip_actor.getHeight() / 2);
//tooltip_actor.setX(480/2 - tooltip_actor.getWidth()/2); //480 hud width
//tooltip_actor.setY(270/2-tooltip_actor.getHeight()/2); //270 hud height

View File

@@ -1,5 +1,7 @@
package forge.interfaces;
import org.apache.commons.lang3.tuple.Pair;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -15,4 +17,5 @@ public interface IDeviceAdapter {
void restart();
void exit();
void convertToJPEG(InputStream input, OutputStream output) throws IOException;
Pair<Integer, Integer> getRealScreenSize(boolean real);
}