diff --git a/forge-gui-android/AndroidManifest.xml b/forge-gui-android/AndroidManifest.xml
index 9a984611ed7..1f2dc8ae144 100644
--- a/forge-gui-android/AndroidManifest.xml
+++ b/forge-gui-android/AndroidManifest.xml
@@ -7,6 +7,7 @@
+
diff --git a/forge-gui-android/libs/android-support-v4.jar b/forge-gui-android/libs/android-support-v4.jar
index 187bdf48b1d..653cb767665 100644
Binary files a/forge-gui-android/libs/android-support-v4.jar and b/forge-gui-android/libs/android-support-v4.jar differ
diff --git a/forge-gui-android/pom.xml b/forge-gui-android/pom.xml
index a556f6c9698..194d8786a2c 100644
--- a/forge-gui-android/pom.xml
+++ b/forge-gui-android/pom.xml
@@ -104,6 +104,13 @@
gdx-backend-android
1.9.10
+
+ com.android.support
+ support-v4
+ 23.1.1
+ system
+ ${pom.basedir}/libs/android-support-v4.jar
+
diff --git a/forge-gui-android/proguard.cfg b/forge-gui-android/proguard.cfg
index 563498b6aaa..8ed1f08d7f1 100644
--- a/forge-gui-android/proguard.cfg
+++ b/forge-gui-android/proguard.cfg
@@ -29,6 +29,8 @@
-dontwarn javax.**
-dontwarn org.apache.logging.log4j.**
-dontwarn module-info
+## Support library
+-dontwarn android.support.**
-keep class forge.** { *; }
-keep class com.thoughtworks.xstream.** { *; }
diff --git a/forge-gui-android/src/forge/app/Main.java b/forge-gui-android/src/forge/app/Main.java
index 70aa9389704..0435e52c6d1 100644
--- a/forge-gui-android/src/forge/app/Main.java
+++ b/forge-gui-android/src/forge/app/Main.java
@@ -18,8 +18,16 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.PowerManager;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
+import android.view.Gravity;
+import android.view.View;
import android.view.WindowManager;
import android.webkit.MimeTypeMap;
+import android.widget.TableLayout;
+import android.widget.TableRow;
+import android.widget.TextView;
+import android.widget.Toast;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.android.AndroidApplication;
import forge.Forge;
@@ -35,13 +43,75 @@ import java.io.OutputStream;
import java.util.concurrent.Callable;
public class Main extends AndroidApplication {
-
+ AndroidAdapter Gadapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- AndroidAdapter adapter = new AndroidAdapter(this.getContext());
+ Gadapter = new AndroidAdapter(this.getContext());
+ initForge(Gadapter);
+ //permission
+ if(!checkPermission()){
+ //why does it crash when requesting permission???
+ //requestPermission();
+
+ //reminder text instead for now...
+ displayMessage(Gadapter, this);
+ }
+ }
+
+ private void displayMessage(AndroidAdapter adapter, Context context){
+ TableLayout TL = new TableLayout(context);
+ TableRow row = new TableRow(context);
+ TextView text = new TextView(context);
+ text.setGravity(Gravity.LEFT);
+ text.setText("Forge needs Storage Permission to run properly...\n" +
+ "To allow this app follow this simple steps below.\n" +
+ " 1) On your Android device, open the Settings app.\n" +
+ " 2) Tap Apps & notifications.\n" +
+ " 3) Tap the app you want to update (Forge).\n" +
+ " 4) Tap Permissions.\n" +
+ " 5) Turn on the Storage Permission.\n" +
+ "Tap anywhere to exit...");
+
+ row.addView(text);
+ row.setGravity(Gravity.CENTER);
+ TL.addView(row, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT));
+ TL.setGravity(Gravity.CENTER);
+ TL.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ adapter.exit();
+ }
+ });
+ setContentView(TL);
+ }
+ @Override
+ public void onBackPressed() {
+ if (Gadapter!=null)
+ Gadapter.exit();
+
+ super.onBackPressed();
+ }
+ private boolean checkPermission() {
+ int result = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ if (result == PackageManager.PERMISSION_GRANTED) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ private void requestPermission() {
+
+ if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
+ Toast.makeText(this, "Please allow storage permission in App Settings.", Toast.LENGTH_LONG).show();
+ } else {
+ ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
+ }
+ }
+
+ private void initForge(AndroidAdapter adapter){
//establish assets directory
if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
Gdx.app.error("Forge", "Can't access external storage");
@@ -66,14 +136,15 @@ public class Main extends AndroidApplication {
adapter.switchOrientationFile = assetsDir + "switch_orientation.ini";
boolean landscapeMode = adapter.isTablet == !FileUtil.doesFileExist(adapter.switchOrientationFile);
if (landscapeMode) {
- Main.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+ Main.this.setRequestedOrientation(Build.VERSION.SDK_INT >= 26 ?
+ ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE : //Oreo and above has virtual back/menu buttons
+ ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
else {
Main.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
- boolean value = Build.VERSION.SDK_INT >= 26;
- initialize(Forge.getApp(new AndroidClipboard(), adapter, assetsDir, value));
+ initialize(Forge.getApp(new AndroidClipboard(), adapter, assetsDir, Build.VERSION.SDK_INT >= 26));
}
/*@Override