From 9b540831dbb96d5113e3b894b64ac2d667568669 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 17 Jun 2023 16:11:15 +0800 Subject: [PATCH] [Android] support receiving text intent - allow deck manager to import shared text intent --- forge-gui-android/AndroidManifest.xml | 9 +++++- forge-gui-android/src/forge/app/Main.java | 38 ++++++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) 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..edfc0da6b09 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); @@ -262,6 +296,7 @@ public class Main extends AndroidApplication { @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();