From c991208b9b0286d1dc47508ea5d57cc7a0350c0a Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sat, 20 Mar 2021 17:13:33 -0400 Subject: [PATCH] v0.9.2b: fixed URL opening bug in Android 11, and re-final commit --- .../java/com/watabou/utils/DeviceCompat.java | 2 +- .../com/watabou/utils/PlatformSupport.java | 4 ++++ .../android/AndroidPlatformSupport.java | 22 +++++++++++++++++++ build.gradle | 2 +- .../desktop/DesktopPlatformSupport.java | 5 +++++ 5 files changed, 33 insertions(+), 2 deletions(-) diff --git a/SPD-classes/src/main/java/com/watabou/utils/DeviceCompat.java b/SPD-classes/src/main/java/com/watabou/utils/DeviceCompat.java index a656d927f..32ecc80ad 100644 --- a/SPD-classes/src/main/java/com/watabou/utils/DeviceCompat.java +++ b/SPD-classes/src/main/java/com/watabou/utils/DeviceCompat.java @@ -64,7 +64,7 @@ public class DeviceCompat { } public static void openURI( String URI ){ - Gdx.net.openURI( URI ); + Game.platform.openURI(URI); } public static void log( String tag, String message ){ diff --git a/SPD-classes/src/main/java/com/watabou/utils/PlatformSupport.java b/SPD-classes/src/main/java/com/watabou/utils/PlatformSupport.java index 6478b528a..3817c70e4 100644 --- a/SPD-classes/src/main/java/com/watabou/utils/PlatformSupport.java +++ b/SPD-classes/src/main/java/com/watabou/utils/PlatformSupport.java @@ -30,6 +30,10 @@ public abstract class PlatformSupport { public abstract void updateSystemUI(); public abstract boolean connectedToUnmeteredNetwork(); + + //FIXME this is a temporary method to workaround a bug in libGDX with Android 11+ + //it can be removed once Shattered is updated to libGDX 1.9.14+ + public abstract boolean openURI( String URI ); //FIXME this is currently used because no platform-agnostic text input has been implemented. //should look into doing that using either plain openGL or libgdx's libraries diff --git a/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidPlatformSupport.java b/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidPlatformSupport.java index 57afc94e5..f3595e982 100644 --- a/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidPlatformSupport.java +++ b/android/src/main/java/com/shatteredpixel/shatteredpixeldungeon/android/AndroidPlatformSupport.java @@ -22,16 +22,21 @@ package com.shatteredpixel.shatteredpixeldungeon.android; import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.ActivityNotFoundException; import android.content.Context; +import android.content.Intent; import android.content.pm.ActivityInfo; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import android.net.Uri; import android.opengl.GLSurfaceView; import android.os.Build; import android.view.View; import android.view.WindowManager; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.backends.android.AndroidApplication; import com.badlogic.gdx.backends.android.AndroidGraphics; import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.g2d.BitmapFont; @@ -168,6 +173,23 @@ public class AndroidPlatformSupport extends PlatformSupport { } } + @Override + public boolean openURI(String URI) { + //copied from LibGDX 1.9.14 source + final Uri uri = Uri.parse(URI); + try { + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + // LiveWallpaper and Daydream applications need this flag + if (!(((AndroidApplication)Gdx.app).getContext() instanceof Activity)) { + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + } + ((AndroidApplication)Gdx.app).startActivity(intent); + return true; + } catch (ActivityNotFoundException e) { + return false; + } + } + @Override public void promptTextInput(final String title, final String hintText, final int maxLen, final boolean multiLine, final String posTxt, final String negTxt, final TextCallback callback) { Game.runOnRenderThread( new Callback() { diff --git a/build.gradle b/build.gradle index 3878930fb..456a43f0c 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ allprojects { appName = 'Shattered Pixel Dungeon' appPackageName = 'com.shatteredpixel.shatteredpixeldungeon' - appVersionCode = 526 + appVersionCode = 528 appVersionName = '0.9.2b' appJavaCompatibility = JavaVersion.VERSION_1_8 diff --git a/desktop/src/main/java/com/shatteredpixel/shatteredpixeldungeon/desktop/DesktopPlatformSupport.java b/desktop/src/main/java/com/shatteredpixel/shatteredpixeldungeon/desktop/DesktopPlatformSupport.java index 38d95866a..2ab64c691 100644 --- a/desktop/src/main/java/com/shatteredpixel/shatteredpixeldungeon/desktop/DesktopPlatformSupport.java +++ b/desktop/src/main/java/com/shatteredpixel/shatteredpixeldungeon/desktop/DesktopPlatformSupport.java @@ -66,6 +66,11 @@ public class DesktopPlatformSupport extends PlatformSupport { return true; //no easy way to check this in desktop, just assume user doesn't care } + @Override + public boolean openURI(String URI) { + return Gdx.net.openURI(URI); + } + @Override //FIXME tinyfd_inputBox isn't a full solution for this. No support for multiline, looks ugly. Ideally we'd have an opengl-based input box public void promptTextInput(String title, String hintText, int maxLen, boolean multiLine, String posTxt, String negTxt, TextCallback callback) {