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

View File

@@ -4,6 +4,7 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import org.apache.commons.lang3.tuple.Pair;
import org.robovm.apple.foundation.NSAutoreleasePool; import org.robovm.apple.foundation.NSAutoreleasePool;
import org.robovm.apple.uikit.UIApplication; import org.robovm.apple.uikit.UIApplication;
import org.robovm.apple.uikit.UIPasteboard; 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 { 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); BufferedImage image = ImageIO.read(input);
ImageIO.write(image, "jpg", output); 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 AR = 480f/270f;
float fW = Forge.isLandscapeMode() ? Forge.getScreenWidth() : Forge.getScreenHeight(); int x = Forge.getDeviceAdapter().getRealScreenSize(false).getLeft();
float fH = Forge.isLandscapeMode() ? Forge.getScreenHeight() : Forge.getScreenWidth(); 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; float mul = fW/fH < AR ? AR/(fW/fH) : (fW/fH)/AR;
if (fW/fH >= 2f) {//tall display if (fW/fH >= 2f) {//tall display
mul = (fW/fH) - ((fW/fH)/AR); 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; newW = (newH * origW) / origH;
} }
float AR = 480f/270f; float AR = 480f/270f;
float fW = Forge.isLandscapeMode() ? Forge.getScreenWidth() : Forge.getScreenHeight(); int x = Forge.getDeviceAdapter().getRealScreenSize(false).getLeft();
float fH = Forge.isLandscapeMode() ? Forge.getScreenHeight() : Forge.getScreenWidth(); 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; float mul = fW/fH < AR ? AR/(fW/fH) : (fW/fH)/AR;
if (fW/fH >= 2f) {//tall display if (fW/fH >= 2f) {//tall display
mul = (fW/fH) - ((fW/fH)/AR); mul = (fW/fH) - ((fW/fH)/AR);
@@ -678,9 +687,15 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
actor.getStage().addActor(switchButton); actor.getStage().addActor(switchButton);
} }
//Vector2 point = actor.localToStageCoordinates(tmp.set(x, y)); //Vector2 point = actor.localToStageCoordinates(tmp.set(x, y));
tooltip_actor.setX(Scene.getIntendedWidth() / 2 - tooltip_actor.getWidth() / 2); if (Forge.isLandscapeMode()) {
//if (tooltip_actor.getX() + tooltip_actor.getWidth() > Scene.getIntendedWidth()) //right if poosible, if exceeds width, draw left
//tooltip_actor.setX(Math.max(0,actor.getX() - tooltip_actor.getWidth())); 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.setY(Scene.getIntendedHeight() / 2 - tooltip_actor.getHeight() / 2);
//tooltip_actor.setX(480/2 - tooltip_actor.getWidth()/2); //480 hud width //tooltip_actor.setX(480/2 - tooltip_actor.getWidth()/2); //480 hud width
//tooltip_actor.setY(270/2-tooltip_actor.getHeight()/2); //270 hud height //tooltip_actor.setY(270/2-tooltip_actor.getHeight()/2); //270 hud height

View File

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