diff --git a/forge-gui-android/AndroidManifest.xml b/forge-gui-android/AndroidManifest.xml index c8617a41c1b..4a93bf1c4e4 100644 --- a/forge-gui-android/AndroidManifest.xml +++ b/forge-gui-android/AndroidManifest.xml @@ -24,11 +24,18 @@ + android:configChanges="keyboard|keyboardHidden|navigation|orientation|screenSize|screenLayout" + android:launchMode="singleInstance" + android:theme="@android:style/Theme.Black.NoTitleBar"> + + + + + diff --git a/forge-gui-android/src/forge/app/Main.java b/forge-gui-android/src/forge/app/Main.java index b7b83289f27..45140d7925d 100644 --- a/forge-gui-android/src/forge/app/Main.java +++ b/forge-gui-android/src/forge/app/Main.java @@ -3,6 +3,7 @@ package forge.app; import java.io.File; import java.io.InputStream; import java.io.OutputStream; +import java.text.Normalizer; import java.util.ArrayList; import android.graphics.Point; @@ -62,11 +63,44 @@ import org.apache.commons.lang3.tuple.Pair; public class Main extends AndroidApplication { AndroidAdapter Gadapter; ArrayList gamepads; + AndroidClipboard androidClipboard; + boolean hasLaunched; + + private AndroidClipboard getAndroidClipboard() { + if (androidClipboard == null) + androidClipboard = new AndroidClipboard(); + return androidClipboard; + } + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + String action = intent.getAction(); + String type = intent.getType(); + + if (Intent.ACTION_SEND.equals(action) && type != null) { + if ("text/plain".equals(type)) { + getAndroidClipboard().setContents(intent.getStringExtra(Intent.EXTRA_TEXT)); + } + } + } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); gamepads = getGameControllers(); + + Intent intent = getIntent(); + String action = intent.getAction(); + String type = intent.getType(); + + if (Intent.ACTION_SEND.equals(action) && type != null) { + if ("text/plain".equals(type)) { + getAndroidClipboard().setContents(intent.getStringExtra(Intent.EXTRA_TEXT)); + } + } + if (hasLaunched) + return; + hasLaunched = true; //init Sentry //SentryAndroid.init(this); @@ -211,7 +245,7 @@ public class Main extends AndroidApplication { String message = getDeviceName()+"\n"+"Android "+AndroidRelease+"\n"+"RAM "+ totalRAM+"MB" +"\n"+"LibGDX "+ Version.VERSION+"\n"+"Can't access external storage"; Sentry.addBreadcrumb(new Breadcrumb(message)); Main.this.setRequestedOrientation(Main.this.getResources().getConfiguration().orientation); - initialize(Forge.getApp(new AndroidClipboard(), adapter, "", false, true, totalRAM, isTabletDevice, AndroidAPI, AndroidRelease, getDeviceName())); + initialize(Forge.getApp(getAndroidClipboard(), adapter, "", false, true, totalRAM, isTabletDevice, AndroidAPI, AndroidRelease, getDeviceName())); displayMessage(adapter, true, message); return; } @@ -224,7 +258,7 @@ public class Main extends AndroidApplication { String message = getDeviceName()+"\n"+"Android "+AndroidRelease+"\n"+"RAM "+ totalRAM+"MB" +"\n"+"LibGDX "+ Version.VERSION+"\n"+"Can't access external storage\nPath: " + assetsDir; Sentry.addBreadcrumb(new Breadcrumb(message)); Main.this.setRequestedOrientation(Main.this.getResources().getConfiguration().orientation); - initialize(Forge.getApp(new AndroidClipboard(), adapter, "", false, true, totalRAM, isTabletDevice, AndroidAPI, AndroidRelease, getDeviceName())); + initialize(Forge.getApp(getAndroidClipboard(), adapter, "", false, true, totalRAM, isTabletDevice, AndroidAPI, AndroidRelease, getDeviceName())); displayMessage(adapter, true, message); return; } @@ -250,18 +284,19 @@ public class Main extends AndroidApplication { isPortrait = true; Main.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } - initialize(Forge.getApp(new AndroidClipboard(), adapter, assetsDir, propertyConfig, isPortrait, totalRAM, isTabletDevice, AndroidAPI, AndroidRelease, getDeviceName())); + initialize(Forge.getApp(getAndroidClipboard(), adapter, assetsDir, propertyConfig, isPortrait, totalRAM, isTabletDevice, AndroidAPI, AndroidRelease, getDeviceName())); } else { isPortrait = true; //fake init for permission instruction Main.this.setRequestedOrientation(Main.this.getResources().getConfiguration().orientation); - initialize(Forge.getApp(new AndroidClipboard(), adapter, "", false, isPortrait, totalRAM, isTabletDevice, AndroidAPI, AndroidRelease, getDeviceName())); + initialize(Forge.getApp(getAndroidClipboard(), adapter, "", false, isPortrait, totalRAM, isTabletDevice, AndroidAPI, AndroidRelease, getDeviceName())); displayMessage(adapter, false, ""); } } @Override protected void onDestroy() { + hasLaunched = false; try { final Forge forge = (Forge) Gdx.app.getApplicationListener(); if (forge != null) @@ -315,7 +350,8 @@ public class Main extends AndroidApplication { public String getContents() { if (cm.getPrimaryClip().getItemCount() > 0) { try { - return cm.getPrimaryClip().getItemAt(0).coerceToText(getContext()).toString(); + String text = cm.getPrimaryClip().getItemAt(0).coerceToText(getContext()).toString(); + return Normalizer.normalize(text, Normalizer.Form.NFD); } catch (Exception ex) { ex.printStackTrace();