mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 17:58:01 +00:00
Merge pull request #1255 from kevlahnota/master
get screensize for Android
This commit is contained in:
@@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,9 @@ 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 android.graphics.Point;
|
||||||
|
import com.badlogic.gdx.Gdx;
|
||||||
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 +17,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 +40,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 +54,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 +138,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 +152,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 +181,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 +336,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 +428,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 +443,34 @@ 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 (Build.VERSION.SDK_INT >= 17) {
|
||||||
|
// Seems it doesn't compile if using 4.1.1.4 since it's missing this method
|
||||||
|
/*if (real)
|
||||||
|
display.getRealSize(size);
|
||||||
|
else
|
||||||
|
display.getSize(size);*/
|
||||||
|
//remove this line below and use the method above if using Android libs higher than 4.1.1.4
|
||||||
|
return Pair.of(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); // this method don't take account the soft navigation bars taken in rendered screen
|
||||||
|
} else if (Build.VERSION.SDK_INT >= 14) {
|
||||||
|
try {
|
||||||
|
size.x = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
|
||||||
|
size.y = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
|
||||||
|
} catch (Exception e) {
|
||||||
|
size.x = Gdx.graphics.getWidth();
|
||||||
|
size.y = Gdx.graphics.getHeight();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
size.x = Gdx.graphics.getWidth();
|
||||||
|
size.y = Gdx.graphics.getHeight();
|
||||||
|
}
|
||||||
|
return Pair.of(size.x, size.y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDeviceName() {
|
public String getDeviceName() {
|
||||||
|
|||||||
@@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -13,6 +13,7 @@ import forge.util.OperatingSystem;
|
|||||||
import forge.util.RestartUtil;
|
import forge.util.RestartUtil;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
import org.apache.commons.cli.*;
|
import org.apache.commons.cli.*;
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
@@ -224,5 +225,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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -213,8 +213,12 @@ 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();
|
||||||
|
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);
|
||||||
@@ -224,6 +228,9 @@ public class RewardScene extends UIScene {
|
|||||||
mul *= 0.8f;
|
mul *= 0.8f;
|
||||||
}
|
}
|
||||||
cardHeight = bestCardHeight * 0.90f ;
|
cardHeight = bestCardHeight * 0.90f ;
|
||||||
|
if (realX > x || realY > y) {
|
||||||
|
mul *= Forge.isLandscapeMode() ? 0.95f : 1.05f;
|
||||||
|
}
|
||||||
cardWidth = (cardHeight / CARD_WIDTH_TO_HEIGHT)*mul;
|
cardWidth = (cardHeight / CARD_WIDTH_TO_HEIGHT)*mul;
|
||||||
|
|
||||||
yOff += (targetHeight - (cardHeight * numberOfRows)) / 2f;
|
yOff += (targetHeight - (cardHeight * numberOfRows)) / 2f;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user