package co.smartreceipts.android.sync.manual; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import com.google.common.base.Preconditions; import co.smartreceipts.android.persistence.PersistenceManager; public class ManualBackupAndRestoreTaskCache { private final BackupTaskCacheHeadlessFragment mHeadlessFragment; private final PersistenceManager mPersistenceManager; private final Context mContext; public ManualBackupAndRestoreTaskCache(@NonNull FragmentManager fragmentManager, @NonNull PersistenceManager persistenceManager, @NonNull Context context) { Preconditions.checkNotNull(fragmentManager); mPersistenceManager = Preconditions.checkNotNull(persistenceManager); mContext = Preconditions.checkNotNull(context.getApplicationContext()); BackupTaskCacheHeadlessFragment headlessFragment = (BackupTaskCacheHeadlessFragment) fragmentManager.findFragmentByTag(BackupTaskCacheHeadlessFragment.TAG); if (headlessFragment == null) { headlessFragment = new BackupTaskCacheHeadlessFragment(); fragmentManager.beginTransaction().add(headlessFragment, BackupTaskCacheHeadlessFragment.TAG).commit(); } mHeadlessFragment = headlessFragment; } @NonNull public synchronized ManualBackupTask getManualBackupTask() { if (mHeadlessFragment.manualBackupTask == null) { mHeadlessFragment.manualBackupTask = new ManualBackupTask(mPersistenceManager); } return mHeadlessFragment.manualBackupTask; } @NonNull public synchronized ManualRestoreTask getManualRestoreTask() { if (mHeadlessFragment.manualRestoreTask == null) { mHeadlessFragment.manualRestoreTask = new ManualRestoreTask(mPersistenceManager, mContext); } return mHeadlessFragment.manualRestoreTask; } public static final class BackupTaskCacheHeadlessFragment extends Fragment { private static final String TAG = ManualBackupAndRestoreTaskCache.class.getName(); private ManualBackupTask manualBackupTask; private ManualRestoreTask manualRestoreTask; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } } }