diff --git a/AndorsTrail/res/values/strings.xml b/AndorsTrail/res/values/strings.xml
index 3900590d5..984ce9291 100644
--- a/AndorsTrail/res/values/strings.xml
+++ b/AndorsTrail/res/values/strings.xml
@@ -283,13 +283,11 @@
]]>
Welcome
-
- Thank you for downloading Andor\'s Trail!\n\n
- Please note that this version of Andor\'s Trail is a WORK IN PROGRESS, which means that all maps are not yet complete.\n
- Please visit the project forums to discuss the game with other players or to help make the game even better (see "about").\n
- \n
- Thanks for all the feedback!
+ Thank you for downloading Andor\'s Trail!\n\nPlease note that this version of Andor\'s Trail is a WORK IN PROGRESS, which means that all maps are not yet complete.\nPlease visit the project forums to discuss the game with other players or to help make the game even better (see "about").\n\nThanks for all the feedback!
+ \n\nIn order to save and load your games (and only for this purpose) Andor\'s Trail will ask you for permission to access your storage.
+ Loading and saving games
+ Andor\'s Trail writes saved games to a user accessible storage on your device. This allows you to easily backup your saved games, or transfer them to a new device. Please visit our forums for more information.\n\nAndor\'s Trail does not use access to your device for any other purpose and is not accessing the internet. Andor\'s Trail is open source.
Select quests to show
Hide completed quests
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Dialogs.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Dialogs.java
index 216b4ad19..19293b26a 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Dialogs.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Dialogs.java
@@ -4,13 +4,18 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import android.*;
+import android.Manifest;
+import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.View;
@@ -318,26 +323,47 @@ public final class Dialogs {
showDialogAndPause(d, controllerContext);
}
- public static void showNewVersion(final Activity currentActivity) {
+ public static void showNewVersion(final Activity currentActivity, final OnDismissListener onDismiss) {
// new AlertDialog.Builder(new ContextThemeWrapper(currentActivity, R.style.AndorsTrailStyle))
// .setTitle(R.string.dialog_newversion_title)
// .setMessage(R.string.dialog_newversion_message)
// .setNeutralButton(android.R.string.ok, null)
// .show();
+ String text = currentActivity.getResources().getString(R.string.dialog_newversion_message);
+
+ if (!hasPermissions(currentActivity)) {
+ text += currentActivity.getResources().getString(R.string.dialog_newversion_permission_information);
+ }
+
final Dialog d = CustomDialogFactory.createDialog(currentActivity,
currentActivity.getResources().getString(R.string.dialog_newversion_title),
null,
- currentActivity.getResources().getString(R.string.dialog_newversion_message),
+ text,
null,
true);
-
CustomDialogFactory.addDismissButton(d, android.R.string.ok);
-
+ CustomDialogFactory.setDismissListener(d, new OnDismissListener() {
+ @Override
+ public void onDismiss(DialogInterface arg0) {
+ if (onDismiss != null) onDismiss.onDismiss(arg0);
+ }
+ });
CustomDialogFactory.show(d);
}
+ @TargetApi(23)
+ private static boolean hasPermissions(final Activity activity) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ if (activity.getApplicationContext().checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
+ || activity.getApplicationContext().checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+ return false;
+ }
+ }
+ return true;
+ }
+
public static boolean showSave(final Activity mainActivity, final ControllerContext controllerContext, final WorldContext world) {
if (world.model.uiSelections.isInCombat) {
Toast.makeText(mainActivity, R.string.menu_save_saving_not_allowed_in_combat, Toast.LENGTH_SHORT).show();
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/StartScreenActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/StartScreenActivity.java
index bd625bbb6..e15976847 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/StartScreenActivity.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/StartScreenActivity.java
@@ -10,9 +10,13 @@ import com.gpl.rpg.AndorsTrail.activity.fragment.StartScreenActivity_NewGame.Gam
import com.gpl.rpg.AndorsTrail.resource.tiles.TileManager;
import com.gpl.rpg.AndorsTrail.util.ThemeHelper;
import com.gpl.rpg.AndorsTrail.view.CloudsAnimatorView;
+import com.gpl.rpg.AndorsTrail.view.CustomDialogFactory;
import android.Manifest;
import android.annotation.TargetApi;
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Resources;
@@ -109,34 +113,30 @@ public final class StartScreenActivity extends AndorsTrailBaseFragmentActivity i
toggleUiVisibility();
app.getWorldSetup().startResourceLoader(res);
-
- checkAndRequestPermissions();
- }
-
- private static final int READ_EXTERNAL_STORAGE_REQUEST=1;
- private static final int WRITE_EXTERNAL_STORAGE_REQUEST=2;
-
- @TargetApi(23)
- private void checkAndRequestPermissions() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- if (getApplicationContext().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
- this.requestPermissions(new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, READ_EXTERNAL_STORAGE_REQUEST);
- }
- if (getApplicationContext().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
- this.requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_REQUEST);
- }
- }
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (grantResults.length > 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {
- Toast.makeText(this, R.string.storage_permissions_mandatory, Toast.LENGTH_LONG).show();
- ((AndorsTrailApplication)getApplication()).discardWorld();
- finish();
+
+ final Dialog d = CustomDialogFactory.createDialog(this,
+ getResources().getString(R.string.dialog_permission_information_title),
+ getResources().getDrawable(android.R.drawable.ic_dialog_info),
+ getResources().getString(R.string.dialog_permission_information),
+ null,
+ true);
+ final Activity activity = this;
+ CustomDialogFactory.addDismissButton(d, android.R.string.ok);
+ CustomDialogFactory.setDismissListener(d, new DialogInterface.OnDismissListener() {
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ StartScreenActivity_MainMenu.checkAndRequestPermissions(activity);
+ }
+ });
+ CustomDialogFactory.show(d);
}
}
-
+
private void toggleUiVisibility() {
ui_visible = !ui_visible;
int visibility = ui_visible ? View.VISIBLE : View.GONE;
diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/StartScreenActivity_MainMenu.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/StartScreenActivity_MainMenu.java
index 72761c541..a85b0284f 100644
--- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/StartScreenActivity_MainMenu.java
+++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/StartScreenActivity_MainMenu.java
@@ -1,11 +1,15 @@
package com.gpl.rpg.AndorsTrail.activity.fragment;
+import android.Manifest;
import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Dialog;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
+import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@@ -140,6 +144,12 @@ public class StartScreenActivity_MainMenu extends Fragment {
} else if (AndorsTrailApplication.DEVELOPMENT_FORCE_CONTINUEGAME) {
continueGame(false, Savegames.SLOT_QUICKSAVE, null);
}
+
+ // if it is a new version we first fire a welcome screen in onResume
+ // and afterwards check the permissions
+ if (!isNewVersion()) {
+ checkAndRequestPermissions(getActivity());
+ }
return root;
}
@@ -171,13 +181,34 @@ public class StartScreenActivity_MainMenu extends Fragment {
setButtonState(playerName, displayInfo, iconID, isDead);
if (isNewVersion()) {
- Dialogs.showNewVersion(getActivity());
+ Dialogs.showNewVersion(getActivity(), new DialogInterface.OnDismissListener() {
+ @Override
+ public void onDismiss(DialogInterface arg0) {
+ setCurrentVersionForVersionCheck();
+ checkAndRequestPermissions(getActivity());
+ }
+ });
}
boolean hasSavegames = !Savegames.getUsedSavegameSlots().isEmpty();
startscreen_load.setEnabled(hasSavegames);
}
-
+
+ private static final int READ_EXTERNAL_STORAGE_REQUEST=1;
+ private static final int WRITE_EXTERNAL_STORAGE_REQUEST=2;
+
+ @TargetApi(23)
+ public static void checkAndRequestPermissions(final Activity activity) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ if (activity.getApplicationContext().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+ activity.requestPermissions(new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, READ_EXTERNAL_STORAGE_REQUEST);
+ }
+ if (activity.getApplicationContext().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+ activity.requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_REQUEST);
+ }
+ }
+ }
+
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
@@ -246,17 +277,21 @@ public class StartScreenActivity_MainMenu extends Fragment {
CustomDialogFactory.show(d);
}
-
+
+ private static final String versionCheck = "lastversion";
private boolean isNewVersion() {
- final String v = "lastversion";
SharedPreferences s = getActivity().getSharedPreferences(Constants.PREFERENCE_MODEL_LASTRUNVERSION, Activity.MODE_PRIVATE);
- int lastversion = s.getInt(v, 0);
+ int lastversion = s.getInt(versionCheck, 0);
if (lastversion >= AndorsTrailApplication.CURRENT_VERSION) return false;
- Editor e = s.edit();
- e.putInt(v, AndorsTrailApplication.CURRENT_VERSION);
- e.commit();
return true;
}
+
+ private void setCurrentVersionForVersionCheck() {
+ SharedPreferences s = getActivity().getSharedPreferences(Constants.PREFERENCE_MODEL_LASTRUNVERSION, Activity.MODE_PRIVATE);
+ Editor e = s.edit();
+ e.putInt(versionCheck, AndorsTrailApplication.CURRENT_VERSION);
+ e.commit();
+ }
@Override