AppModule.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. /*
  2. * Nextcloud Android client application
  3. *
  4. * @author Chris Narkiewicz
  5. * Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
  6. *
  7. * This program is free software: you can redistribute it and/or modify
  8. * it under the terms of the GNU Affero General Public License as published by
  9. * the Free Software Foundation, either version 3 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU Affero General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Affero General Public License
  18. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  19. */
  20. package com.nextcloud.client.di;
  21. import android.accounts.AccountManager;
  22. import android.app.Application;
  23. import android.app.NotificationManager;
  24. import android.content.ContentResolver;
  25. import android.content.Context;
  26. import android.content.SharedPreferences;
  27. import android.content.pm.PackageManager;
  28. import android.content.res.Resources;
  29. import android.media.AudioManager;
  30. import android.os.Handler;
  31. import com.nextcloud.client.account.CurrentAccountProvider;
  32. import com.nextcloud.client.account.UserAccountManager;
  33. import com.nextcloud.client.account.UserAccountManagerImpl;
  34. import com.nextcloud.client.appinfo.AppInfo;
  35. import com.nextcloud.client.core.AsyncRunner;
  36. import com.nextcloud.client.core.Clock;
  37. import com.nextcloud.client.core.ClockImpl;
  38. import com.nextcloud.client.core.ThreadPoolAsyncRunner;
  39. import com.nextcloud.client.database.dao.ArbitraryDataDao;
  40. import com.nextcloud.client.device.DeviceInfo;
  41. import com.nextcloud.client.files.uploader.FileUploadHelper;
  42. import com.nextcloud.client.jobs.BackgroundJobManager;
  43. import com.nextcloud.client.logger.FileLogHandler;
  44. import com.nextcloud.client.logger.Logger;
  45. import com.nextcloud.client.logger.LoggerImpl;
  46. import com.nextcloud.client.logger.LogsRepository;
  47. import com.nextcloud.client.migrations.Migrations;
  48. import com.nextcloud.client.migrations.MigrationsDb;
  49. import com.nextcloud.client.migrations.MigrationsManager;
  50. import com.nextcloud.client.migrations.MigrationsManagerImpl;
  51. import com.nextcloud.client.network.ClientFactory;
  52. import com.nextcloud.client.notifications.AppNotificationManager;
  53. import com.nextcloud.client.notifications.AppNotificationManagerImpl;
  54. import com.nextcloud.client.preferences.AppPreferences;
  55. import com.nextcloud.client.utils.Throttler;
  56. import com.owncloud.android.providers.UsersAndGroupsSearchConfig;
  57. import com.owncloud.android.authentication.PassCodeManager;
  58. import com.owncloud.android.datamodel.ArbitraryDataProvider;
  59. import com.owncloud.android.datamodel.ArbitraryDataProviderImpl;
  60. import com.owncloud.android.datamodel.FileDataStorageManager;
  61. import com.owncloud.android.datamodel.SyncedFolderProvider;
  62. import com.owncloud.android.datamodel.UploadsStorageManager;
  63. import com.owncloud.android.ui.activities.data.activities.ActivitiesRepository;
  64. import com.owncloud.android.ui.activities.data.activities.ActivitiesServiceApi;
  65. import com.owncloud.android.ui.activities.data.activities.ActivitiesServiceApiImpl;
  66. import com.owncloud.android.ui.activities.data.activities.RemoteActivitiesRepository;
  67. import com.owncloud.android.ui.activities.data.files.FilesRepository;
  68. import com.owncloud.android.ui.activities.data.files.FilesServiceApiImpl;
  69. import com.owncloud.android.ui.activities.data.files.RemoteFilesRepository;
  70. import com.owncloud.android.utils.theme.ViewThemeUtils;
  71. import org.greenrobot.eventbus.EventBus;
  72. import java.io.File;
  73. import javax.inject.Named;
  74. import javax.inject.Provider;
  75. import javax.inject.Singleton;
  76. import androidx.localbroadcastmanager.content.LocalBroadcastManager;
  77. import dagger.Module;
  78. import dagger.Provides;
  79. @Module(includes = {ComponentsModule.class, VariantComponentsModule.class, BuildTypeComponentsModule.class})
  80. class AppModule {
  81. @Provides
  82. AccountManager accountManager(Application application) {
  83. return (AccountManager) application.getSystemService(Context.ACCOUNT_SERVICE);
  84. }
  85. @Provides
  86. Context context(Application application) {
  87. return application;
  88. }
  89. @Provides
  90. PackageManager packageManager(Application application) {
  91. return application.getPackageManager();
  92. }
  93. @Provides
  94. ContentResolver contentResolver(Context context) {
  95. return context.getContentResolver();
  96. }
  97. @Provides
  98. Resources resources(Application application) {
  99. return application.getResources();
  100. }
  101. @Provides
  102. UserAccountManager userAccountManager(
  103. Context context,
  104. AccountManager accountManager
  105. ) {
  106. return new UserAccountManagerImpl(context, accountManager);
  107. }
  108. @Provides
  109. ArbitraryDataProvider arbitraryDataProvider(ArbitraryDataDao dao) {
  110. return new ArbitraryDataProviderImpl(dao);
  111. }
  112. @Provides
  113. SyncedFolderProvider syncedFolderProvider(ContentResolver contentResolver,
  114. AppPreferences appPreferences,
  115. Clock clock) {
  116. return new SyncedFolderProvider(contentResolver, appPreferences, clock);
  117. }
  118. @Provides
  119. ActivitiesServiceApi activitiesServiceApi(UserAccountManager accountManager) {
  120. return new ActivitiesServiceApiImpl(accountManager);
  121. }
  122. @Provides
  123. ActivitiesRepository activitiesRepository(ActivitiesServiceApi api) {
  124. return new RemoteActivitiesRepository(api);
  125. }
  126. @Provides
  127. FilesRepository filesRepository(UserAccountManager accountManager, ClientFactory clientFactory) {
  128. return new RemoteFilesRepository(new FilesServiceApiImpl(accountManager, clientFactory));
  129. }
  130. @Provides
  131. UploadsStorageManager uploadsStorageManager(CurrentAccountProvider currentAccountProvider,
  132. Context context) {
  133. return new UploadsStorageManager(currentAccountProvider, context.getContentResolver());
  134. }
  135. @Provides
  136. FileDataStorageManager fileDataStorageManager(CurrentAccountProvider currentAccountProvider,
  137. Context context) {
  138. return new FileDataStorageManager(currentAccountProvider.getUser(), context.getContentResolver());
  139. }
  140. @Provides
  141. CurrentAccountProvider currentAccountProvider(UserAccountManager accountManager) {
  142. return accountManager;
  143. }
  144. @Provides
  145. DeviceInfo deviceInfo() {
  146. return new DeviceInfo();
  147. }
  148. @Provides
  149. @Singleton
  150. Clock clock() {
  151. return new ClockImpl();
  152. }
  153. @Provides
  154. @Singleton
  155. Logger logger(Context context, Clock clock) {
  156. File logDir = new File(context.getFilesDir(), "logs");
  157. FileLogHandler handler = new FileLogHandler(logDir, "log.txt", 1024 * 1024);
  158. LoggerImpl logger = new LoggerImpl(clock, handler, new Handler(), 1000);
  159. logger.start();
  160. return logger;
  161. }
  162. @Provides
  163. @Singleton
  164. LogsRepository logsRepository(Logger logger) {
  165. return (LogsRepository) logger;
  166. }
  167. @Provides
  168. @Singleton
  169. AsyncRunner uiAsyncRunner() {
  170. Handler uiHandler = new Handler();
  171. return new ThreadPoolAsyncRunner(uiHandler, 4, "ui");
  172. }
  173. @Provides
  174. @Singleton
  175. @Named("io")
  176. AsyncRunner ioAsyncRunner() {
  177. Handler uiHandler = new Handler();
  178. return new ThreadPoolAsyncRunner(uiHandler, 8, "io");
  179. }
  180. @Provides
  181. NotificationManager notificationManager(Context context) {
  182. return (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
  183. }
  184. @Provides
  185. AudioManager audioManager(Context context) {
  186. return (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
  187. }
  188. @Provides
  189. @Singleton
  190. EventBus eventBus() {
  191. return EventBus.getDefault();
  192. }
  193. @Provides
  194. @Singleton
  195. MigrationsDb migrationsDb(Application application) {
  196. SharedPreferences store = application.getSharedPreferences("migrations", Context.MODE_PRIVATE);
  197. return new MigrationsDb(store);
  198. }
  199. @Provides
  200. @Singleton
  201. MigrationsManager migrationsManager(MigrationsDb migrationsDb,
  202. AppInfo appInfo,
  203. AsyncRunner asyncRunner,
  204. Migrations migrations) {
  205. return new MigrationsManagerImpl(appInfo, migrationsDb, asyncRunner, migrations.getSteps());
  206. }
  207. @Provides
  208. @Singleton
  209. AppNotificationManager notificationsManager(Context context,
  210. NotificationManager platformNotificationsManager,
  211. Provider<ViewThemeUtils> viewThemeUtilsProvider) {
  212. return new AppNotificationManagerImpl(context,
  213. context.getResources(),
  214. platformNotificationsManager,
  215. viewThemeUtilsProvider.get());
  216. }
  217. @Provides
  218. LocalBroadcastManager localBroadcastManager(Context context) {
  219. return LocalBroadcastManager.getInstance(context);
  220. }
  221. @Provides
  222. Throttler throttler(Clock clock) {
  223. return new Throttler(clock);
  224. }
  225. @Provides
  226. @Singleton
  227. PassCodeManager passCodeManager(AppPreferences preferences, Clock clock) {
  228. return new PassCodeManager(preferences, clock);
  229. }
  230. @Provides
  231. @Singleton
  232. UsersAndGroupsSearchConfig userAndGroupSearchConfig() {
  233. return new UsersAndGroupsSearchConfig();
  234. }
  235. }