package co.smartreceipts.android.persistence;
import android.content.Context;
import android.support.annotation.NonNull;
import javax.inject.Inject;
import co.smartreceipts.android.di.scopes.ApplicationScope;
import co.smartreceipts.android.settings.UserPreferenceManager;
import wb.android.storage.InternalStorageManager;
import wb.android.storage.SDCardFileManager;
import wb.android.storage.SDCardStateException;
import wb.android.storage.StorageManager;
@ApplicationScope
public class PersistenceManager {
@Inject
Context context;
@Inject
UserPreferenceManager preferenceManager;
@Inject
StorageManager storageManager;
@Inject
DatabaseHelper database;
private SDCardFileManager mExternalStorageManager;
private InternalStorageManager mInternalStorageManager;
@Inject
public PersistenceManager() {
}
public void onDestroy() {
database.onDestroy();
storageManager = null;
mExternalStorageManager = null;
mInternalStorageManager = null;
database = null;
}
public DatabaseHelper getDatabase() {
return database;
}
public StorageManager getStorageManager() {
return storageManager;
}
public SDCardFileManager getExternalStorageManager() throws SDCardStateException {
if (mExternalStorageManager == null) {
if (storageManager == null) {
getStorageManager();
}
if (storageManager instanceof SDCardFileManager) {
mExternalStorageManager = (SDCardFileManager) storageManager;
}
else {
mExternalStorageManager = StorageManager.getExternalInstance(context);
}
}
return mExternalStorageManager;
}
public InternalStorageManager getInternalStorageManager() {
if (mInternalStorageManager == null) {
if (storageManager == null) {
getStorageManager();
}
if (storageManager instanceof InternalStorageManager) {
mInternalStorageManager = (InternalStorageManager) storageManager;
}
else {
mInternalStorageManager = StorageManager.getInternalInstance(context);
}
}
return mInternalStorageManager;
}
@NonNull
public UserPreferenceManager getPreferenceManager() {
return preferenceManager;
}
}