-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[feature] implements backup and restore
- Loading branch information
1 parent
971da40
commit 9c19248
Showing
12 changed files
with
199 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
[submodule "libs/privacy-friendly-backup-api"] | ||
path = libs/privacy-friendly-backup-api | ||
url = https://github.com/SecUSo/privacy-friendly-backup-api.git |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
22 changes: 22 additions & 0 deletions
22
app/src/main/java/org/secuso/privacyfriendlydame/PFDameApplication.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package org.secuso.privacyfriendlydame | ||
|
||
|
||
import android.app.Application | ||
import android.util.Log | ||
import androidx.work.Configuration | ||
import org.secuso.privacyfriendlybackup.api.pfa.BackupManager | ||
import org.secuso.privacyfriendlydame.backup.BackupCreator | ||
import org.secuso.privacyfriendlydame.backup.BackupRestorer | ||
|
||
class PFDameApplication : Application(), Configuration.Provider { | ||
|
||
override fun onCreate() { | ||
super.onCreate() | ||
BackupManager.backupCreator = BackupCreator() | ||
BackupManager.backupRestorer = BackupRestorer() | ||
} | ||
|
||
override fun getWorkManagerConfiguration(): Configuration { | ||
return Configuration.Builder().setMinimumLoggingLevel(Log.INFO).build() | ||
} | ||
} |
50 changes: 50 additions & 0 deletions
50
app/src/main/java/org/secuso/privacyfriendlydame/backup/BackupCreator.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
package org.secuso.privacyfriendlydame.backup | ||
import android.content.Context | ||
import android.preference.PreferenceManager | ||
import android.util.JsonWriter | ||
import android.util.Log | ||
import org.secuso.privacyfriendlybackup.api.backup.FileUtil | ||
import org.secuso.privacyfriendlybackup.api.backup.PreferenceUtil.writePreferences | ||
import org.secuso.privacyfriendlybackup.api.pfa.IBackupCreator | ||
import org.secuso.privacyfriendlydame.ui.MainActivity | ||
import java.io.File | ||
import java.io.OutputStream | ||
import java.io.OutputStreamWriter | ||
|
||
class BackupCreator : IBackupCreator { | ||
override fun writeBackup(context: Context, outputStream: OutputStream): Boolean { | ||
Log.d(TAG, "createBackup() started") | ||
val outputStreamWriter = OutputStreamWriter(outputStream, Charsets.UTF_8) | ||
val writer = JsonWriter(outputStreamWriter) | ||
writer.setIndent("") | ||
|
||
try { | ||
writer.beginObject() | ||
|
||
Log.d(TAG, "Writing file") | ||
writer.name("file") | ||
|
||
FileUtil.writeFile(writer, context.getFileStreamPath(MainActivity.SAVE_FILE)); | ||
|
||
Log.d(TAG, "Writing preferences") | ||
writer.name("preferences") | ||
|
||
val pref = PreferenceManager.getDefaultSharedPreferences(context.applicationContext) | ||
writePreferences(writer, pref) | ||
|
||
writer.endObject() | ||
writer.close() | ||
} catch (e: Exception) { | ||
Log.e(TAG, "Error occurred", e) | ||
e.printStackTrace() | ||
return false | ||
} | ||
|
||
Log.d(TAG, "Backup created successfully") | ||
return true | ||
} | ||
|
||
companion object { | ||
const val TAG = "PFABackupCreator" | ||
} | ||
} |
77 changes: 77 additions & 0 deletions
77
app/src/main/java/org/secuso/privacyfriendlydame/backup/BackupRestorer.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
package org.secuso.privacyfriendlydame.backup | ||
|
||
import android.content.Context | ||
import android.content.SharedPreferences | ||
import android.preference.PreferenceManager | ||
import android.util.JsonReader | ||
import android.util.Log | ||
import org.secuso.privacyfriendlybackup.api.backup.FileUtil | ||
import org.secuso.privacyfriendlybackup.api.pfa.IBackupRestorer | ||
import org.secuso.privacyfriendlydame.ui.MainActivity | ||
import java.io.IOException | ||
import java.io.InputStream | ||
import java.io.InputStreamReader | ||
import kotlin.system.exitProcess | ||
|
||
|
||
class BackupRestorer : IBackupRestorer { | ||
@Throws(IOException::class) | ||
private fun readSaveFile(context: Context, reader: JsonReader) { | ||
|
||
// delete if file already exists | ||
val saveFile = context.getFileStreamPath(MainActivity.SAVE_FILE) | ||
if (saveFile.exists()) { | ||
saveFile.delete() | ||
} | ||
|
||
Log.d(TAG, "Restoring savefile...") | ||
FileUtil.readFile(reader, saveFile.parentFile!!); | ||
Log.d(TAG, "Savefile Restored") | ||
} | ||
|
||
@Throws(IOException::class) | ||
private fun readPreferences(reader: JsonReader, preferences: SharedPreferences.Editor) { | ||
reader.beginObject() | ||
while (reader.hasNext()) { | ||
val name: String = reader.nextName() | ||
when (name) { | ||
"pref_rule_flying_king", | ||
"pref_rule_white_begins" -> preferences.putBoolean(name, reader.nextBoolean()) | ||
"lastChosenPage", | ||
"lastChosenDifficulty" -> preferences.putInt(name, reader.nextInt()) | ||
else -> throw RuntimeException("Unknown preference $name") | ||
} | ||
} | ||
reader.endObject() | ||
} | ||
|
||
override fun restoreBackup(context: Context, restoreData: InputStream): Boolean { | ||
return try { | ||
val isReader = InputStreamReader(restoreData) | ||
val reader = JsonReader(isReader) | ||
val preferences = PreferenceManager.getDefaultSharedPreferences(context).edit() | ||
|
||
// START | ||
reader.beginObject() | ||
while (reader.hasNext()) { | ||
val type: String = reader.nextName() | ||
when (type) { | ||
"file" -> readSaveFile(context, reader) | ||
"preferences" -> readPreferences(reader, preferences) | ||
else -> throw RuntimeException("Can not parse type $type") | ||
} | ||
} | ||
reader.endObject() | ||
preferences.commit() | ||
|
||
exitProcess(0) | ||
} catch (e: Exception) { | ||
e.printStackTrace() | ||
false | ||
} | ||
} | ||
|
||
companion object { | ||
const val TAG = "PFABackupRestorer" | ||
} | ||
} |
5 changes: 5 additions & 0 deletions
5
app/src/main/java/org/secuso/privacyfriendlydame/backup/PFABackupService.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package org.secuso.privacyfriendlydame.backup | ||
|
||
import org.secuso.privacyfriendlybackup.api.pfa.PFAAuthService | ||
|
||
class PFABackupService : PFAAuthService() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Submodule privacy-friendly-backup-api
added at
d267b0
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,3 @@ | ||
include ':app' | ||
include ':backup-api' | ||
project(':backup-api').projectDir = new File('libs/privacy-friendly-backup-api/BackupAPI') |