package com.openfarmanager.android;
import android.app.Application;
import android.content.res.Configuration;
import android.preference.PreferenceManager;
import com.openfarmanager.android.controllers.FileSystemController;
import com.openfarmanager.android.di.DaggerFileSystemControllerComponent;
import com.openfarmanager.android.di.FileSystemControllerComponent;
import com.openfarmanager.android.core.Settings;
import com.openfarmanager.android.core.ThreadPool;
import com.openfarmanager.android.core.appmanager.AppManager;
import com.openfarmanager.android.core.bookmark.BookmarkManager;
import com.openfarmanager.android.core.network.NetworkAccountManager;
import com.openfarmanager.android.core.network.NetworkApi;
import com.openfarmanager.android.core.network.NetworkConnectionManager;
import com.openfarmanager.android.core.network.dropbox.DropboxAPI;
import com.openfarmanager.android.core.network.ftp.FtpAPI;
import com.openfarmanager.android.core.network.ftp.SftpAPI;
import com.openfarmanager.android.core.network.googledrive.GoogleDriveApi;
import com.openfarmanager.android.core.network.mediafire.MediaFireApi;
import com.openfarmanager.android.core.network.skydrive.SkyDriveAPI;
import com.openfarmanager.android.core.network.smb.SmbAPI;
import com.openfarmanager.android.core.network.webdav.WebDavApi;
import com.openfarmanager.android.core.network.yandexdisk.YandexDiskApi;
import com.openfarmanager.android.di.FileSystemControllerModule;
import com.openfarmanager.android.model.NetworkEnum;
import com.openfarmanager.android.utils.SystemUtils;
import java.util.Locale;
public class App extends Application {
public static App sInstance;
private AppManager mAppManager;
private BookmarkManager mBookmarkManager;
private Settings mSettings;
private FileSystemController mFileSystemController;
private NetworkConnectionManager mConnectionManager;
private NetworkAccountManager mNetworkAccountManager;
private ThreadPool mThreadPool;
protected DropboxAPI mDropboxApi;
protected SkyDriveAPI mSkyDriveAPI;
protected FtpAPI mFtpAPI;
protected SftpAPI mSftpApi;
protected SmbAPI mSmbAPI;
protected YandexDiskApi mYandexDiskApi;
protected GoogleDriveApi mGoogleDriveApi;
protected MediaFireApi mMediaFireApi;
protected WebDavApi mWebDavApi;
protected FileSystemControllerComponent mFileSystemControllerComponent;
@Override
public void onCreate() {
super.onCreate();
SystemUtils.init(this);
sInstance = this;
mAppManager = new AppManager();
mBookmarkManager = new BookmarkManager();
mSettings = new Settings();
mConnectionManager = new NetworkConnectionManager();
mNetworkAccountManager = new NetworkAccountManager();
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
mDropboxApi = new DropboxAPI(DropboxAPI.createSession());
mSkyDriveAPI = new SkyDriveAPI();
mFtpAPI = new FtpAPI();
mSftpApi = new SftpAPI();
mSmbAPI = new SmbAPI();
mYandexDiskApi = new YandexDiskApi();
mGoogleDriveApi = new GoogleDriveApi();
mMediaFireApi = new MediaFireApi();
mWebDavApi = new WebDavApi();
setLocale();
}
@Override
public void onTerminate() {
if (mThreadPool != null) {
mThreadPool.shutdown();
}
super.onTerminate();
}
public synchronized ThreadPool getThreadPool() {
if (mThreadPool == null) {
mThreadPool = new ThreadPool();
}
return mThreadPool;
}
private void setLocale() {
boolean forceLocale = mSettings.isForceUseEn();
if(!forceLocale) {
return;
}
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, null);
}
public AppManager getAppManager() {
return mAppManager;
}
public BookmarkManager getBookmarkManager() {
return mBookmarkManager;
}
public NetworkConnectionManager getNetworkConnectionManager() {
return mConnectionManager;
}
public NetworkAccountManager getNetworkAccountManager() {
return mNetworkAccountManager;
}
public Settings getSettings() {
return mSettings;
}
public void setFileSystemController(FileSystemController fileSystemController) {
mFileSystemController = fileSystemController;
mConnectionManager.setFileSystemController(fileSystemController);
mFileSystemControllerComponent = DaggerFileSystemControllerComponent.builder().
fileSystemControllerModule(new FileSystemControllerModule(fileSystemController)).build();
}
public FileSystemControllerComponent getFileSystemControllerComponent() {
return mFileSystemControllerComponent;
}
public FileSystemController getFileSystemController() {
return mFileSystemController;
}
public DropboxAPI getDropboxApi() {
return mDropboxApi;
}
public SkyDriveAPI getSkyDriveApi() {
return mSkyDriveAPI;
}
public FtpAPI getFtpApi() {
return mFtpAPI;
}
public SftpAPI getSftpApi() {
return mSftpApi;
}
public SmbAPI getSmbAPI() {
return mSmbAPI;
}
public YandexDiskApi getYandexDiskApi() {
return mYandexDiskApi;
}
public GoogleDriveApi getGoogleDriveApi() {
return mGoogleDriveApi;
}
public MediaFireApi getMediaFireApi() {
return mMediaFireApi;
}
public WebDavApi getWebDavApi() {
return mWebDavApi;
}
public NetworkApi getNetworkApi(NetworkEnum networkType) {
switch (networkType) {
case FTP:
return mFtpAPI;
case SFTP:
return mSftpApi;
case Dropbox: default:
return mDropboxApi;
case SkyDrive:
return mSkyDriveAPI;
case SMB:
return mSmbAPI;
case YandexDisk:
return mYandexDiskApi;
case GoogleDrive:
return mGoogleDriveApi;
case MediaFire:
return mMediaFireApi;
case WebDav:
return mWebDavApi;
}
}
}