blob: d742dc5977fad26842ff0c8097d8659351b7f92f [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* 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.android.documentsui.prefs;
import android.app.backup.BackupAgentHelper;
import android.app.backup.BackupDataInput;
import android.app.backup.BackupDataOutput;
import android.app.backup.SharedPreferencesBackupHelper;
import android.content.SharedPreferences;
import android.os.ParcelFileDescriptor;
import androidx.annotation.VisibleForTesting;
import java.io.IOException;
/**
* Provides glue between backup infrastructure and PrefsBackupHelper (which contains the core logic
* for retrieving and restoring settings).
*
* When doing backup & restore, we create and add a {@link SharedPreferencesBackupHelper} for our
* backup preferences file in {@link #onCreate}, and populate the backup preferences file in
* {@link #onBackup} and {@link #onRestore}. Then {@link BackupAgentHelper#onBackup} and
* {@link BackupAgentHelper#onRestore} will take care of the rest of the work. See external
* documentation below.
*
* https://developer.android.com/guide/topics/data/keyvaluebackup.html#BackupAgentHelper
*/
public class BackupAgent extends BackupAgentHelper {
/**
* Name of the shared preferences file used by BackupAgent. Should only be used in
* this class.
*
* @see #onBackup(ParcelFileDescriptor, BackupDataOutput, ParcelFileDescriptor)
* @see #onRestore(BackupDataInput, int, ParcelFileDescriptor)
*/
private static final String BACKUP_PREFS = "documentsui_backup_prefs";
/**
* An arbitrary string used by the BackupHelper.
*
* BackupAgentHelper works with BackupHelper. When adding a BackupHelper in #onCreate,
* it requires a "key". This string is that "key".
*
* https://developer.android.com/guide/topics/data/keyvaluebackup.html#BackupAgentHelper
* See "Backing up SharedPreference" for the purpose of this string.
*
* @see #onCreate()
*/
private static final String BACKUP_HELPER_KEY = "DOCUMENTSUI_BACKUP_HELPER_KEY";
private PrefsBackupHelper mPrefsBackupHelper;
private SharedPreferences mBackupPreferences;
@Override
public void onCreate() {
addHelper(BACKUP_HELPER_KEY, new SharedPreferencesBackupHelper(this, BACKUP_PREFS));
mPrefsBackupHelper = new PrefsBackupHelper(this);
mBackupPreferences = getSharedPreferences(BACKUP_PREFS, MODE_PRIVATE);
}
@Override
public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
ParcelFileDescriptor newState) throws IOException {
mPrefsBackupHelper.getBackupPreferences(mBackupPreferences);
super.onBackup(oldState, data, newState);
mBackupPreferences.edit().clear().apply();
}
@Override
public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState)
throws IOException {
// TODO: refresh the UI after restore finished. Currently the restore for system apps only
// happens during SUW, at which time user haven't open the app. However the restore time may
// change in ODR. Once it happens, we may need to refresh the UI after restore finished.
super.onRestore(data, appVersionCode, newState);
mPrefsBackupHelper.putBackupPreferences(mBackupPreferences);
mBackupPreferences.edit().clear().apply();
}
}