package monakhv.android.samlib.data.backup; import android.app.backup.BackupAgentHelper; import android.app.backup.BackupDataInput; import android.app.backup.BackupDataOutput; import android.app.backup.SharedPreferencesBackupHelper; import android.content.Context; import android.os.ParcelFileDescriptor; import android.util.Log; import com.j256.ormlite.android.apptools.OpenHelperManager; import monakhv.android.samlib.dagger.component.DaggerApplicationComponent; import monakhv.android.samlib.dagger.component.DatabaseComponent; import monakhv.android.samlib.dagger.module.ApplicationModule; import monakhv.android.samlib.dagger.module.DatabaseModule; import monakhv.android.samlib.sql.DatabaseHelper; import java.io.IOException; /* * Copyright 2014 Dmitry Monakhov * * 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. * * 4/25/14. */ public class SamLibBackupAgentHelper extends BackupAgentHelper { private static final String DEBUG_TAG = "SamLibBackupAgentHelper"; private volatile DatabaseHelper helper; private volatile boolean created = false; private volatile boolean destroyed = false; // A key to uniquely identify the set of backup data static final String PREFS_SETTINGS_KEY = "prefs"; /** * Get a helper for this action. */ public DatabaseHelper getDatabaseHelper() { if (helper == null) { if (!created) { throw new IllegalStateException(DEBUG_TAG+": A call has not been made to onCreate() yet so the helper is null"); } else if (destroyed) { throw new IllegalStateException( DEBUG_TAG+": A call to onDestroy has already been made and the helper cannot be used after that point"); } else { throw new IllegalStateException(DEBUG_TAG+": Helper is null for some unknown reason"); } } else { return helper; } } @Override public void onCreate() { Log.d(DEBUG_TAG, "onCreate"); addHelper(PREFS_SETTINGS_KEY, new SharedPreferencesBackupHelper(this, AuthorStatePrefs.PREF_NAME)); if (helper == null) { helper = getHelperInternal(this); created = true; } } private DatabaseComponent getDatabaseComponent(){ return DaggerApplicationComponent.builder() .applicationModule(new ApplicationModule(getApplicationContext())) .build().plus(new DatabaseModule(getDatabaseHelper())); } @Override public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException { // AuthorStatePrefs.load(mSettingsHelper, new AuthorController(getDatabaseHelper()),mHttpClientController); AuthorStatePrefs authorStatePrefs =getDatabaseComponent().getAuthorStatePrefs(); authorStatePrefs.load(); super.onBackup(oldState, data, newState); } @Override public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) throws IOException { super.onRestore(data, appVersionCode, newState); AuthorStatePrefs authorStatePrefs =getDatabaseComponent().getAuthorStatePrefs(); authorStatePrefs.restore(); //AuthorStatePrefs.restore(mSettingsHelper, new AuthorController(getDatabaseHelper()),mHttpClientController); } @Override public void onDestroy() { releaseHelper(); destroyed = true; super.onDestroy(); } protected DatabaseHelper getHelperInternal(Context context) { @SuppressWarnings({"unchecked", "deprecation"}) DatabaseHelper newHelper = OpenHelperManager.getHelper(context, DatabaseHelper.class); return newHelper; } protected void releaseHelper() { OpenHelperManager.releaseHelper(); this.helper = null; } }