From 3b5adde8badf5414da41a7970fcf404075f89d8a Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 27 Mar 2018 21:20:55 -0400 Subject: [PATCH] v0.6.4: implemented backup functionality for ADB and auto backups --- core/src/main/AndroidManifest.xml | 4 +- .../shatteredpixeldungeon/BackupHandler.java | 60 +++++++++++++++++++ .../shatteredpixeldungeon/Badges.java | 2 +- .../journal/Journal.java | 2 +- 4 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/BackupHandler.java 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;