diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml
index e3a44fd32..847bd4a68 100644
--- a/core/src/main/AndroidManifest.xml
+++ b/core/src/main/AndroidManifest.xml
@@ -24,7 +24,9 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar"
- android:allowBackup="false">
+ android:allowBackup="true"
+ android:fullBackupOnly="true"
+ android:backupAgent=".BackupHandler">
+ */
+
+package com.shatteredpixel.shatteredpixeldungeon;
+
+import android.annotation.TargetApi;
+import android.app.backup.BackupAgent;
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataOutput;
+import android.app.backup.FullBackupDataOutput;
+import android.os.ParcelFileDescriptor;
+
+import com.shatteredpixel.shatteredpixeldungeon.journal.Journal;
+import com.watabou.utils.FileUtils;
+
+import java.io.File;
+
+//a handler for android backup requests
+public class BackupHandler extends BackupAgent {
+
+ //Both of these do nothing. This handler is here to support use of android 4.0+ ADB backup
+ //and android 6.0+ auto-backup. It does not support android 2.2+ key-value backup
+ public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) {}
+ public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) {}
+
+ @Override
+ @TargetApi(14)
+ public void onFullBackup(FullBackupDataOutput data) {
+ //fully overrides super.onFullBackup, meaning only files specified here are backed up
+
+ //does not backup runs in progress, to prevent cheating.
+
+ //store shared preferences
+ fullBackupFile(new File(getFilesDir().getParent() + "/shared_prefs/"+ ShatteredPixelDungeon.class.getCanonicalName() + ".xml"), data);
+
+ //store game data
+ fullBackupFile(FileUtils.getFile( getFilesDir(), Rankings.RANKINGS_FILE ), data);
+ fullBackupFile(FileUtils.getFile( getFilesDir(), Badges.BADGES_FILE ), data);
+ fullBackupFile(FileUtils.getFile( getFilesDir(), Journal.JOURNAL_FILE ), data);
+ }
+
+}
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java
index e8bc12c5c..c8e6c3ab8 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java
@@ -181,7 +181,7 @@ public class Badges {
loadGlobal();
}
- private static final String BADGES_FILE = "badges.dat";
+ public static final String BADGES_FILE = "badges.dat";
private static final String BADGES = "badges";
private static HashSet restore( Bundle bundle ) {
diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Journal.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Journal.java
index 0398d0b76..90c87207f 100644
--- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Journal.java
+++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/journal/Journal.java
@@ -29,7 +29,7 @@ import java.io.IOException;
public class Journal {
- private static final String JOURNAL_FILE = "journal.dat";
+ public static final String JOURNAL_FILE = "journal.dat";
private static boolean loaded = false;