forked from upstream-mirrors/OpenTracks
Final touches to cloud backup: being future-compatible by not using the agent helpers (those manage the backup state themselves, and we don't want to have to follow their format)
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
android:versionName="1.0.16">
|
android:versionName="1.0.16">
|
||||||
<application android:icon="@drawable/arrow_icon"
|
<application android:icon="@drawable/arrow_icon"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:backupAgent="com.google.android.apps.mytracks.io.backup.MyTracksBackupAgentHelper">
|
android:backupAgent="com.google.android.apps.mytracks.io.backup.MyTracksBackupAgent">
|
||||||
<uses-library android:name="com.google.android.maps" />
|
<uses-library android:name="com.google.android.maps" />
|
||||||
|
|
||||||
<meta-data android:name="com.google.android.backup.api_key"
|
<meta-data android:name="com.google.android.backup.api_key"
|
||||||
|
|||||||
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010 Google Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||||
|
* use this file except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
* License for the specific language governing permissions and limitations under
|
||||||
|
* the License.
|
||||||
|
*/
|
||||||
|
package com.google.android.apps.mytracks.io.backup;
|
||||||
|
|
||||||
|
import com.google.android.apps.mytracks.MyTracksConstants;
|
||||||
|
import com.google.android.apps.mytracks.MyTracksSettings;
|
||||||
|
|
||||||
|
import android.app.backup.BackupAgent;
|
||||||
|
import android.app.backup.BackupDataInput;
|
||||||
|
import android.app.backup.BackupDataOutput;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.ParcelFileDescriptor;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Backup agent used to backup and restore all preferences.
|
||||||
|
* We use a regular {@link BackupAgent} instead of the convenient helpers in
|
||||||
|
* order to be future-proof (assuming we'll want to back up tracks later).
|
||||||
|
*
|
||||||
|
* @author Rodrigo Damazio
|
||||||
|
*/
|
||||||
|
public class MyTracksBackupAgent extends BackupAgent {
|
||||||
|
private static final String PREFERENCES_ENTITY = "prefs";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
|
||||||
|
ParcelFileDescriptor newState) throws IOException {
|
||||||
|
Log.i(MyTracksConstants.TAG, "Performing backup");
|
||||||
|
SharedPreferences preferences = this.getSharedPreferences(
|
||||||
|
MyTracksSettings.SETTINGS_NAME, 0);
|
||||||
|
|
||||||
|
backupPreferences(data, preferences);
|
||||||
|
Log.i(MyTracksConstants.TAG, "Backup complete");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void backupPreferences(BackupDataOutput data,
|
||||||
|
SharedPreferences preferences) throws IOException {
|
||||||
|
PreferenceBackupHelper preferenceDumper = createPreferenceBackupHelper();
|
||||||
|
byte[] dumpedContents = preferenceDumper.exportPreferences(preferences);
|
||||||
|
data.writeEntityHeader(PREFERENCES_ENTITY, dumpedContents.length);
|
||||||
|
data.writeEntityData(dumpedContents, dumpedContents.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected PreferenceBackupHelper createPreferenceBackupHelper() {
|
||||||
|
return new PreferenceBackupHelper();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRestore(BackupDataInput data, int appVersionCode,
|
||||||
|
ParcelFileDescriptor newState) throws IOException {
|
||||||
|
Log.i(MyTracksConstants.TAG, "Restoring from backup");
|
||||||
|
while (data.readNextHeader()) {
|
||||||
|
String key = data.getKey();
|
||||||
|
Log.d(MyTracksConstants.TAG, "Restoring entity " + key);
|
||||||
|
if (key.equals(PREFERENCES_ENTITY)) {
|
||||||
|
restorePreferences(data);
|
||||||
|
} else {
|
||||||
|
Log.e(MyTracksConstants.TAG, "Found unknown backup entity: " + key);
|
||||||
|
data.skipEntityData();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Log.i(MyTracksConstants.TAG, "Done restoring from backup");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restores all preferences from the backup.
|
||||||
|
*
|
||||||
|
* @param data the backup data to read from
|
||||||
|
* @throws IOException if there are any errors while reading
|
||||||
|
*/
|
||||||
|
private void restorePreferences(BackupDataInput data) throws IOException {
|
||||||
|
int dataSize = data.getDataSize();
|
||||||
|
byte[] dataBuffer = new byte[dataSize];
|
||||||
|
int read = data.readEntityData(dataBuffer, 0, dataSize);
|
||||||
|
if (read != dataSize) {
|
||||||
|
throw new IOException("Failed to read all the preferences data");
|
||||||
|
}
|
||||||
|
|
||||||
|
SharedPreferences preferences = this.getSharedPreferences(
|
||||||
|
MyTracksSettings.SETTINGS_NAME, 0);
|
||||||
|
PreferenceBackupHelper importer = createPreferenceBackupHelper();
|
||||||
|
importer.importPreferences(dataBuffer, preferences);
|
||||||
|
}
|
||||||
|
}
|
||||||
-40
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010 Google Inc.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
||||||
* use this file except in compliance with the License. You may obtain a copy of
|
|
||||||
* the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations under
|
|
||||||
* the License.
|
|
||||||
*/
|
|
||||||
package com.google.android.apps.mytracks.io.backup;
|
|
||||||
|
|
||||||
import com.google.android.apps.mytracks.MyTracksSettings;
|
|
||||||
|
|
||||||
import android.app.backup.BackupAgentHelper;
|
|
||||||
import android.app.backup.SharedPreferencesBackupHelper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Backup agent helper for mytracks.
|
|
||||||
*
|
|
||||||
* TODO: If/when possible, back up the database as well
|
|
||||||
* (see past revisions in rdamazio-mytracks-staging1 for the code)
|
|
||||||
*
|
|
||||||
* @author Rodrigo Damazio
|
|
||||||
*/
|
|
||||||
public class MyTracksBackupAgentHelper extends BackupAgentHelper {
|
|
||||||
@Override
|
|
||||||
public void onCreate() {
|
|
||||||
super.onCreate();
|
|
||||||
|
|
||||||
addHelper("prefs",
|
|
||||||
new SharedPreferencesBackupHelper(
|
|
||||||
this, MyTracksSettings.SETTINGS_NAME));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user