diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ab8387569..766e5ae6d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -7,6 +7,7 @@ plugins { id("com.cookpad.android.plugin.license-tools") version "1.2.2" id("com.github.ben-manes.versions") version "0.28.0" id("com.vanniktech.android.junit.jacoco") version "0.16.0" + id("dagger.hilt.android.plugin") } repositories { @@ -47,7 +48,7 @@ android { versionName = "9.7" targetSdkVersion(Versions.targetSdk) minSdkVersion(Versions.minSdk) - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + testInstrumentationRunner = "org.tasks.TestRunner" kapt { arguments { @@ -142,8 +143,11 @@ dependencies { implementation("com.gitlab.bitfireAT:ical4android:a675c7194b") implementation("com.gitlab.bitfireAT:cert4android:1488e39a66") - kapt("com.google.dagger:dagger-compiler:${Versions.dagger}") - implementation("com.google.dagger:dagger:${Versions.dagger}") + implementation("com.google.dagger:hilt-android:${Versions.hilt}") + kapt("com.google.dagger:hilt-android-compiler:${Versions.hilt}") + kapt("androidx.hilt:hilt-compiler:${Versions.hilt_androidx}") + implementation("androidx.hilt:hilt-work:${Versions.hilt_androidx}") + implementation("androidx.hilt:hilt-lifecycle-viewmodel:${Versions.hilt_androidx}") implementation("androidx.room:room-rxjava2:${Versions.room}") kapt("androidx.room:room-compiler:${Versions.room}") @@ -199,7 +203,9 @@ dependencies { googleplayImplementation("com.google.android.libraries.places:places:2.2.0") googleplayImplementation("com.android.billingclient:billing:1.2.2") - kaptAndroidTest("com.google.dagger:dagger-compiler:${Versions.dagger}") + androidTestImplementation("com.google.dagger:hilt-android-testing:${Versions.hilt}") + kaptAndroidTest("com.google.dagger:hilt-android-compiler:${Versions.hilt}") + kaptAndroidTest("androidx.hilt:hilt-compiler:${Versions.hilt_androidx}") kaptAndroidTest("com.jakewharton:butterknife-compiler:${Versions.butterknife}") androidTestImplementation("org.mockito:mockito-android:${Versions.mockito}") androidTestImplementation("com.natpryce:make-it-easy:${Versions.make_it_easy}") diff --git a/app/src/androidTest/java/com/todoroo/astrid/adapter/CaldavManualSortTaskAdapterTest.kt b/app/src/androidTest/java/com/todoroo/astrid/adapter/CaldavManualSortTaskAdapterTest.kt index bba35ab61..75e0bf1da 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/adapter/CaldavManualSortTaskAdapterTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/adapter/CaldavManualSortTaskAdapterTest.kt @@ -1,16 +1,16 @@ package com.todoroo.astrid.adapter -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.PropertyValue import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.data.CaldavCalendar @@ -19,7 +19,7 @@ import org.tasks.data.GoogleTaskDao import org.tasks.data.TaskContainer import org.tasks.data.TaskListQuery.getQuery import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.CaldavTaskMaker.CALENDAR import org.tasks.makers.CaldavTaskMaker.REMOTE_PARENT import org.tasks.makers.CaldavTaskMaker.TASK @@ -31,7 +31,8 @@ import org.tasks.preferences.Preferences import org.tasks.time.DateTime import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class CaldavManualSortTaskAdapterTest : InjectingTestCase() { @Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var taskDao: TaskDao @@ -241,6 +242,4 @@ class CaldavManualSortTaskAdapterTest : InjectingTestCase() { with(REMOTE_PARENT, remoteParent))) return task.id } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/com/todoroo/astrid/adapter/CaldavTaskAdapterTest.kt b/app/src/androidTest/java/com/todoroo/astrid/adapter/CaldavTaskAdapterTest.kt index ce750bb7f..758a7939a 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/adapter/CaldavTaskAdapterTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/adapter/CaldavTaskAdapterTest.kt @@ -1,24 +1,24 @@ package com.todoroo.astrid.adapter -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.PropertyValue import com.todoroo.astrid.dao.TaskDao +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.* import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.LocalBroadcastManager import org.tasks.data.* import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.TaskContainerMaker.PARENT import org.tasks.makers.TaskContainerMaker.newTaskContainer import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class CaldavTaskAdapterTest : InjectingTestCase() { - @Inject lateinit var taskDao: TaskDao @Inject lateinit var caldavDao: CaldavDao @Inject lateinit var googleTaskDao: GoogleTaskDao @@ -211,6 +211,4 @@ class CaldavTaskAdapterTest : InjectingTestCase() { result.cd_remote_parent = remoteParent return result } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/com/todoroo/astrid/adapter/GoogleTaskManualSortAdapterTest.kt b/app/src/androidTest/java/com/todoroo/astrid/adapter/GoogleTaskManualSortAdapterTest.kt index a13f30647..ede6b75f0 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/adapter/GoogleTaskManualSortAdapterTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/adapter/GoogleTaskManualSortAdapterTest.kt @@ -1,15 +1,15 @@ package com.todoroo.astrid.adapter -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.PropertyValue import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.data.CaldavDao @@ -17,7 +17,7 @@ import org.tasks.data.GoogleTaskDao import org.tasks.data.TaskContainer import org.tasks.data.TaskListQuery.getQuery import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.GoogleTaskListMaker.REMOTE_ID import org.tasks.makers.GoogleTaskListMaker.newGoogleTaskList import org.tasks.makers.GoogleTaskMaker @@ -29,9 +29,9 @@ import org.tasks.makers.TaskMaker.newTask import org.tasks.preferences.Preferences import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class GoogleTaskManualSortAdapterTest : InjectingTestCase() { - @Inject lateinit var taskDao: TaskDao @Inject lateinit var caldavDao: CaldavDao @Inject lateinit var googleTaskDao: GoogleTaskDao @@ -444,6 +444,4 @@ class GoogleTaskManualSortAdapterTest : InjectingTestCase() { false) return task.id } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/com/todoroo/astrid/adapter/NonRecursiveQueryTest.kt b/app/src/androidTest/java/com/todoroo/astrid/adapter/NonRecursiveQueryTest.kt index ce5a0e758..c788b7bd0 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/adapter/NonRecursiveQueryTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/adapter/NonRecursiveQueryTest.kt @@ -2,16 +2,16 @@ package com.todoroo.astrid.adapter import android.content.Context import androidx.test.core.app.ApplicationProvider -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.PropertyValue import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.data.CaldavDao @@ -19,15 +19,15 @@ import org.tasks.data.GoogleTaskDao import org.tasks.data.TaskContainer import org.tasks.data.TaskListQuery.getQuery import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.TaskMaker.PARENT import org.tasks.makers.TaskMaker.newTask import org.tasks.preferences.Preferences import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class NonRecursiveQueryTest : InjectingTestCase() { - @Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var caldavDao: CaldavDao @Inject lateinit var taskDao: TaskDao @@ -74,6 +74,4 @@ class NonRecursiveQueryTest : InjectingTestCase() { private fun query() { tasks.addAll(taskDao.fetchTasks { getQuery(preferences, filter, it) }) } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/com/todoroo/astrid/adapter/OfflineSubtaskTest.kt b/app/src/androidTest/java/com/todoroo/astrid/adapter/OfflineSubtaskTest.kt index 592d91d87..a01a35eb3 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/adapter/OfflineSubtaskTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/adapter/OfflineSubtaskTest.kt @@ -2,31 +2,31 @@ package com.todoroo.astrid.adapter import android.content.Context import androidx.test.core.app.ApplicationProvider -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.PropertyValue import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.LocalBroadcastManager import org.tasks.data.CaldavDao import org.tasks.data.GoogleTaskDao import org.tasks.data.TaskContainer import org.tasks.data.TaskListQuery.getQuery import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.TaskMaker.PARENT import org.tasks.makers.TaskMaker.newTask import org.tasks.preferences.Preferences import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class OfflineSubtaskTest : InjectingTestCase() { - @Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var caldavDao: CaldavDao @Inject lateinit var taskDao: TaskDao @@ -85,6 +85,4 @@ class OfflineSubtaskTest : InjectingTestCase() { private fun query() { tasks.addAll(taskDao.fetchTasks { getQuery(preferences, filter, it) }) } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/com/todoroo/astrid/alarms/AlarmJobServiceTest.kt b/app/src/androidTest/java/com/todoroo/astrid/alarms/AlarmJobServiceTest.kt index 1cb8a5041..615a071b8 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/alarms/AlarmJobServiceTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/alarms/AlarmJobServiceTest.kt @@ -1,16 +1,16 @@ package com.todoroo.astrid.alarms -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.todoroo.astrid.dao.TaskDao +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test -import org.junit.runner.RunWith import org.tasks.data.Alarm import org.tasks.data.AlarmDao import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.jobs.AlarmEntry import org.tasks.jobs.NotificationQueue import org.tasks.makers.TaskMaker.REMINDER_LAST @@ -18,7 +18,8 @@ import org.tasks.makers.TaskMaker.newTask import org.tasks.time.DateTime import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class AlarmJobServiceTest : InjectingTestCase() { @Inject lateinit var alarmDao: AlarmDao @Inject lateinit var taskDao: TaskDao @@ -47,6 +48,4 @@ class AlarmJobServiceTest : InjectingTestCase() { assertTrue(jobs.getJobs().isEmpty()) } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.kt b/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.kt index cefb4ea39..5561281ef 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.kt @@ -5,23 +5,25 @@ */ package com.todoroo.astrid.dao -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.data.Task import com.todoroo.astrid.service.TaskDeleter +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.* import org.junit.Test -import org.junit.runner.RunWith import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.TaskMaker.ID import org.tasks.makers.TaskMaker.PARENT import org.tasks.makers.TaskMaker.newTask import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class TaskDaoTests : InjectingTestCase() { + @Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDeleter: TaskDeleter @@ -162,6 +164,4 @@ class TaskDaoTests : InjectingTestCase() { taskDao.createNew(newTask(with(ID, 3L), with(PARENT, 2L))) assertEquals(listOf(2L, 3L), taskDao.getChildren(listOf(1L, 3L))) } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksListServiceTest.kt b/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksListServiceTest.kt index 7a3b73de9..48f2a2ca5 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksListServiceTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksListServiceTest.kt @@ -1,18 +1,19 @@ package com.todoroo.astrid.gtasks -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.api.services.tasks.model.TaskList import com.natpryce.makeiteasy.MakeItEasy.with import com.todoroo.astrid.service.TaskDeleter +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Assert.assertNull +import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.LocalBroadcastManager import org.tasks.data.GoogleTaskAccount import org.tasks.data.GoogleTaskListDao import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.GtaskListMaker.ID import org.tasks.makers.GtaskListMaker.NAME import org.tasks.makers.GtaskListMaker.REMOTE_ID @@ -21,7 +22,8 @@ import org.tasks.makers.RemoteGtaskListMaker import org.tasks.makers.RemoteGtaskListMaker.newRemoteList import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class GtasksListServiceTest : InjectingTestCase() { @Inject lateinit var taskDeleter: TaskDeleter @Inject lateinit var localBroadcastManager: LocalBroadcastManager @@ -29,13 +31,12 @@ class GtasksListServiceTest : InjectingTestCase() { private lateinit var gtasksListService: GtasksListService + @Before override fun setUp() { super.setUp() gtasksListService = GtasksListService(googleTaskListDao, taskDeleter, localBroadcastManager) } - override fun inject(component: TestComponent) = component.inject(this) - @Test fun testCreateNewList() { setLists( @@ -50,12 +51,12 @@ class GtasksListServiceTest : InjectingTestCase() { fun testGetListByRemoteId() { val list = newGtaskList(with(REMOTE_ID, "1")) list.id = googleTaskListDao.insertOrReplace(list) - assertEquals(list, gtasksListService.getList("1")) + assertEquals(list, googleTaskListDao.getByRemoteId("1")) } @Test fun testGetListReturnsNullWhenNotFound() { - assertNull(gtasksListService.getList("1")) + assertNull(googleTaskListDao.getByRemoteId("1")) } @Test @@ -81,7 +82,7 @@ class GtasksListServiceTest : InjectingTestCase() { @Test fun testNewListLastSyncIsZero() { setLists(TaskList().setId("1")) - assertEquals(0L, gtasksListService.getList("1").lastSync) + assertEquals(0L, googleTaskListDao.getByRemoteId("1")!!.lastSync) } private fun setLists(vararg list: TaskList) { diff --git a/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksMetadataServiceTest.kt b/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksMetadataServiceTest.kt index bf2cb00d5..d9854b23a 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksMetadataServiceTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/gtasks/GtasksMetadataServiceTest.kt @@ -5,28 +5,27 @@ */ package com.todoroo.astrid.gtasks -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Test -import org.junit.runner.RunWith import org.tasks.data.GoogleTask import org.tasks.data.GoogleTaskDao import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class GtasksMetadataServiceTest : InjectingTestCase() { @Inject lateinit var taskDao: TaskDao @Inject lateinit var googleTaskDao: GoogleTaskDao private var task: Task? = null private var metadata: GoogleTask? = null - - override fun inject(component: TestComponent) = component.inject(this) @Test fun testMetadataFound() { diff --git a/app/src/androidTest/java/com/todoroo/astrid/model/TaskTest.kt b/app/src/androidTest/java/com/todoroo/astrid/model/TaskTest.kt index 89659e3b9..1f9c98c33 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/model/TaskTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/model/TaskTest.kt @@ -1,18 +1,19 @@ package com.todoroo.astrid.model -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Test -import org.junit.runner.RunWith import org.tasks.Freeze import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.time.DateTimeUtils import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class TaskTest : InjectingTestCase() { @Inject lateinit var taskDao: TaskDao @@ -32,6 +33,4 @@ class TaskTest : InjectingTestCase() { val fromDb = taskDao.fetch(task.id) assertEquals(task, fromDb) } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.kt b/app/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.kt index 9e93a07a7..2a723382f 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/reminders/ReminderServiceTest.kt @@ -1,19 +1,20 @@ package com.todoroo.astrid.reminders -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue +import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.Freeze import org.tasks.R import org.tasks.date.DateTimeUtils import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.jobs.NotificationQueue import org.tasks.jobs.ReminderEntry import org.tasks.makers.TaskMaker.COMPLETION_TIME @@ -33,7 +34,8 @@ import org.tasks.time.DateTime import java.util.concurrent.TimeUnit import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class ReminderServiceTest : InjectingTestCase() { @Inject lateinit var preferences: Preferences @Inject lateinit var taskDao: TaskDao @@ -42,6 +44,7 @@ class ReminderServiceTest : InjectingTestCase() { private lateinit var service: ReminderService private lateinit var random: RandomStub + @Before override fun setUp() { super.setUp() random = RandomStub() @@ -49,8 +52,6 @@ class ReminderServiceTest : InjectingTestCase() { service = ReminderService(preferences, jobs, random, taskDao) } - override fun inject(component: TestComponent) = component.inject(this) - @Test fun dontScheduleDueDateReminderWhenFlagNotSet() { service.scheduleAlarm(newTask(with(ID, 1L), with(DUE_TIME, DateTimeUtils.newDateTime()))) diff --git a/app/src/androidTest/java/com/todoroo/astrid/repeats/RepeatTaskHelperTest.kt b/app/src/androidTest/java/com/todoroo/astrid/repeats/RepeatTaskHelperTest.kt index ab066d7ca..c3c4ec066 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/repeats/RepeatTaskHelperTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/repeats/RepeatTaskHelperTest.kt @@ -1,23 +1,23 @@ package com.todoroo.astrid.repeats import android.annotation.SuppressLint -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.ical.values.RRule import com.natpryce.makeiteasy.MakeItEasy.with import com.todoroo.astrid.alarms.AlarmService import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task import com.todoroo.astrid.gcal.GCalHelper +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.After import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.mockito.InOrder import org.mockito.Mockito import org.tasks.LocalBroadcastManager import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.TaskMaker.AFTER_COMPLETE import org.tasks.makers.TaskMaker.COMPLETION_TIME import org.tasks.makers.TaskMaker.DUE_TIME @@ -29,7 +29,8 @@ import java.text.ParseException import javax.inject.Inject @SuppressLint("NewApi") -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class RepeatTaskHelperTest : InjectingTestCase() { @Inject lateinit var taskDao: TaskDao private lateinit var localBroadcastManager: LocalBroadcastManager @@ -188,6 +189,4 @@ class RepeatTaskHelperTest : InjectingTestCase() { mocks.verify(alarmService).rescheduleAlarms(1, oldDueDate.millis, newDueDate.millis) mocks.verify(localBroadcastManager).broadcastRepeat(1, oldDueDate.millis, newDueDate.millis) } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.kt b/app/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.kt index 36e8cbeb4..7760be8e3 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/service/QuickAddMarkupTest.kt @@ -5,26 +5,25 @@ */ package com.todoroo.astrid.service -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.todoroo.astrid.data.Task import com.todoroo.astrid.utility.TitleParser +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Test -import org.junit.runner.RunWith import org.tasks.data.TagDataDao import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import java.util.* import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class QuickAddMarkupTest : InjectingTestCase() { private val tags = ArrayList() @Inject lateinit var tagDataDao: TagDataDao private var task: Task? = null - - override fun inject(component: TestComponent) = component.inject(this) @Test fun testTags() { diff --git a/app/src/androidTest/java/com/todoroo/astrid/service/TaskMoverTest.kt b/app/src/androidTest/java/com/todoroo/astrid/service/TaskMoverTest.kt index 13e244ef5..e94225aad 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/service/TaskMoverTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/service/TaskMoverTest.kt @@ -1,19 +1,19 @@ package com.todoroo.astrid.service -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.dao.TaskDao +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.* import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.data.CaldavCalendar import org.tasks.data.CaldavDao import org.tasks.data.GoogleTaskDao import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.jobs.WorkManager import org.tasks.makers.CaldavTaskMaker import org.tasks.makers.CaldavTaskMaker.CALENDAR @@ -31,7 +31,8 @@ import org.tasks.makers.TaskMaker.ID import org.tasks.makers.TaskMaker.newTask import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class TaskMoverTest : InjectingTestCase() { @Inject lateinit var taskDao: TaskDao @Inject lateinit var googleTaskDao: GoogleTaskDao @@ -298,6 +299,4 @@ class TaskMoverTest : InjectingTestCase() { private fun moveToCaldavList(calendar: String, vararg tasks: Long) { taskMover.move(tasks.toList(), CaldavFilter(CaldavCalendar("", calendar))) } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.kt b/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.kt index bf1903b83..57afc769b 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/service/TitleParserTest.kt @@ -5,36 +5,37 @@ */ package com.todoroo.astrid.service -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.ical.values.Frequency import com.google.ical.values.RRule import com.todoroo.astrid.data.Task import com.todoroo.astrid.utility.TitleParser +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.* +import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.R import org.tasks.data.TagDataDao import org.tasks.date.DateTimeUtils import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.preferences.Preferences import java.util.* import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class TitleParserTest : InjectingTestCase() { @Inject lateinit var tagDataDao: TagDataDao @Inject lateinit var preferences: Preferences @Inject lateinit var taskCreator: TaskCreator - + + @Before override fun setUp() { super.setUp() preferences.setStringFromInteger(R.string.p_default_urgency_key, 0) } - override fun inject(component: TestComponent) = component.inject(this) - /** * test that completing a task w/ no regular expressions creates a simple task with no date, no * repeat, no lists diff --git a/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksHelperTest.kt b/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksHelperTest.kt index e8bb14ed6..44ce65d17 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksHelperTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksHelperTest.kt @@ -1,16 +1,18 @@ package com.todoroo.astrid.subtasks -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.todoroo.astrid.data.Task +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals +import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.data.TaskListMetadata -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class SubtasksHelperTest : SubtasksTestCase() { - + @Before override fun setUp() { super.setUp() createTasks() @@ -53,8 +55,6 @@ class SubtasksHelperTest : SubtasksTestCase() { assertEquals(EXPECTED_REMOTE, mapped) } - override fun inject(component: TestComponent) = component.inject(this) - companion object { private val EXPECTED_ORDER = arrayOf("-1", "1", "2", "3", "4", "5", "6") private val EXPECTED_REMOTE = "[\"-1\", [\"6\", \"4\", [\"3\", \"1\"]], \"2\", \"5\"]".replace("\\s".toRegex(), "") diff --git a/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksMovingTest.kt b/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksMovingTest.kt index fab5489c6..956fa7883 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksMovingTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/subtasks/SubtasksMovingTest.kt @@ -1,13 +1,15 @@ package com.todoroo.astrid.subtasks -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.todoroo.astrid.data.Task +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules +import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.data.TaskListMetadata -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class SubtasksMovingTest : SubtasksTestCase() { private lateinit var A: Task private lateinit var B: Task @@ -16,6 +18,7 @@ class SubtasksMovingTest : SubtasksTestCase() { private lateinit var E: Task private lateinit var F: Task + @Before override fun setUp() { super.setUp() createTasks() @@ -33,8 +36,6 @@ class SubtasksMovingTest : SubtasksTestCase() { expectParentAndPosition(F, null, 2) } - override fun inject(component: TestComponent) = component.inject(this) - private fun createTasks() { A = createTask("A") B = createTask("B") diff --git a/app/src/androidTest/java/com/todoroo/astrid/sync/NewSyncTestCase.kt b/app/src/androidTest/java/com/todoroo/astrid/sync/NewSyncTestCase.kt index 8d1b9f225..7060da77b 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/sync/NewSyncTestCase.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/sync/NewSyncTestCase.kt @@ -5,7 +5,6 @@ import com.todoroo.astrid.data.Task import org.tasks.data.TagData import org.tasks.data.TagDataDao import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent import javax.inject.Inject open class NewSyncTestCase : InjectingTestCase() { @@ -27,8 +26,6 @@ open class NewSyncTestCase : InjectingTestCase() { return tag } - override fun inject(component: TestComponent) = component.inject(this) - companion object { private const val SYNC_TASK_TITLE = "new title" private const val SYNC_TASK_IMPORTANCE = Task.Priority.MEDIUM diff --git a/app/src/androidTest/java/com/todoroo/astrid/sync/SyncModelTest.kt b/app/src/androidTest/java/com/todoroo/astrid/sync/SyncModelTest.kt index 697daddeb..0d5dfca34 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/sync/SyncModelTest.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/sync/SyncModelTest.kt @@ -1,13 +1,16 @@ package com.todoroo.astrid.sync -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.todoroo.astrid.data.Task +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertNotEquals import org.junit.Test -import org.junit.runner.RunWith +import org.tasks.injection.ProductionModule -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class SyncModelTest : NewSyncTestCase() { + @Test fun testCreateTaskMakesUuid() { val task = createTask() diff --git a/app/src/androidTest/java/org/tasks/TestRunner.kt b/app/src/androidTest/java/org/tasks/TestRunner.kt new file mode 100644 index 000000000..cbb9363bf --- /dev/null +++ b/app/src/androidTest/java/org/tasks/TestRunner.kt @@ -0,0 +1,13 @@ +package org.tasks + +import android.app.Application +import android.content.Context +import androidx.test.runner.AndroidJUnitRunner +import dagger.hilt.android.testing.HiltTestApplication + +@Suppress("unused") +class TestRunner : AndroidJUnitRunner() { + override fun newApplication(cl: ClassLoader?, name: String?, context: Context?): Application { + return super.newApplication(cl, HiltTestApplication::class.java.name, context) + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/caldav/CaldavClientTest.kt b/app/src/androidTest/java/org/tasks/caldav/CaldavClientTest.kt index f2e27e735..8bb71e584 100644 --- a/app/src/androidTest/java/org/tasks/caldav/CaldavClientTest.kt +++ b/app/src/androidTest/java/org/tasks/caldav/CaldavClientTest.kt @@ -6,8 +6,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import org.junit.Test import org.junit.runner.RunWith import org.tasks.TestUtilities.newPreferences -import java.security.KeyManagementException -import java.security.NoSuchAlgorithmException @RunWith(AndroidJUnit4::class) class CaldavClientTest { diff --git a/app/src/androidTest/java/org/tasks/data/CaldavDaoShiftTests.kt b/app/src/androidTest/java/org/tasks/data/CaldavDaoShiftTests.kt index 2f5064762..0a1010f5b 100644 --- a/app/src/androidTest/java/org/tasks/data/CaldavDaoShiftTests.kt +++ b/app/src/androidTest/java/org/tasks/data/CaldavDaoShiftTests.kt @@ -1,25 +1,25 @@ package org.tasks.data -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.PropertyValue import com.todoroo.andlib.utility.DateUtilities.now import com.todoroo.astrid.dao.TaskDao +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Test -import org.junit.runner.RunWith import org.tasks.Freeze.Companion.freezeAt import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.TaskContainerMaker import org.tasks.makers.TaskContainerMaker.CREATED import org.tasks.time.DateTime import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class CaldavDaoShiftTests : InjectingTestCase() { - @Inject lateinit var taskDao: TaskDao @Inject lateinit var caldavDao: CaldavDao @@ -163,6 +163,4 @@ class CaldavDaoShiftTests : InjectingTestCase() { result.cd_remote_parent = remoteParent return result } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/data/CaldavDaoTests.kt b/app/src/androidTest/java/org/tasks/data/CaldavDaoTests.kt index d40b01d46..3d039791c 100644 --- a/app/src/androidTest/java/org/tasks/data/CaldavDaoTests.kt +++ b/app/src/androidTest/java/org/tasks/data/CaldavDaoTests.kt @@ -1,15 +1,14 @@ package org.tasks.data -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with -import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.helper.UUIDHelper +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.* import org.junit.Test -import org.junit.runner.RunWith import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.TagDataMaker.newTagData import org.tasks.makers.TagMaker.TAGDATA import org.tasks.makers.TagMaker.TASK @@ -20,7 +19,8 @@ import org.tasks.makers.TaskMaker.newTask import org.tasks.time.DateTime import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class CaldavDaoTests : InjectingTestCase() { @Inject lateinit var taskDao: TaskDao @Inject lateinit var tagDao: TagDao @@ -143,6 +143,4 @@ class CaldavDaoTests : InjectingTestCase() { assertEquals(order, sortOrder) } } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/data/DeletionDaoTests.kt b/app/src/androidTest/java/org/tasks/data/DeletionDaoTests.kt index a1129006d..b6ced3381 100644 --- a/app/src/androidTest/java/org/tasks/data/DeletionDaoTests.kt +++ b/app/src/androidTest/java/org/tasks/data/DeletionDaoTests.kt @@ -1,16 +1,16 @@ package org.tasks.data -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.helper.UUIDHelper +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.* import org.junit.Test -import org.junit.runner.RunWith import org.tasks.data.CaldavDao.Companion.LOCAL import org.tasks.date.DateTimeUtils.newDateTime import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.TaskMaker.CREATION_TIME import org.tasks.makers.TaskMaker.DELETION_TIME import org.tasks.makers.TaskMaker.newTask @@ -18,7 +18,8 @@ import org.tasks.time.DateTime import org.tasks.time.DateTimeUtils import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class DeletionDaoTests : InjectingTestCase() { @Inject lateinit var taskDao: TaskDao @Inject lateinit var deletionDao: DeletionDao @@ -89,6 +90,4 @@ class DeletionDaoTests : InjectingTestCase() { assertNotNull(taskDao.fetch(task.id)) } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt b/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt index 5a6bdac85..78b5d5482 100644 --- a/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt +++ b/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt @@ -1,15 +1,15 @@ package org.tasks.data -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.todoroo.astrid.dao.TaskDao +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.GoogleTaskMaker.LIST import org.tasks.makers.GoogleTaskMaker.PARENT import org.tasks.makers.GoogleTaskMaker.REMOTE_ID @@ -19,7 +19,8 @@ import org.tasks.makers.GtaskListMaker.newGtaskList import org.tasks.makers.TaskMaker.newTask import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class GoogleTaskDaoTests : InjectingTestCase() { @Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var googleTaskDao: GoogleTaskDao @@ -177,6 +178,4 @@ class GoogleTaskDaoTests : InjectingTestCase() { result.gt_parent = googleTask.parent return result } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/data/GoogleTaskListDaoTest.kt b/app/src/androidTest/java/org/tasks/data/GoogleTaskListDaoTest.kt index ea3a37151..dd6373ee5 100644 --- a/app/src/androidTest/java/org/tasks/data/GoogleTaskListDaoTest.kt +++ b/app/src/androidTest/java/org/tasks/data/GoogleTaskListDaoTest.kt @@ -1,20 +1,20 @@ package org.tasks.data -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.* import org.junit.Test -import org.junit.runner.RunWith import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.GoogleTaskListMaker.ACCOUNT import org.tasks.makers.GoogleTaskListMaker.REMOTE_ID import org.tasks.makers.GoogleTaskListMaker.newGoogleTaskList import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class GoogleTaskListDaoTest : InjectingTestCase() { - @Inject lateinit var googleTaskListDao: GoogleTaskListDao @Test @@ -49,6 +49,4 @@ class GoogleTaskListDaoTest : InjectingTestCase() { assertNull(googleTaskListDao.findExistingList("1234")) } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/data/LocationDaoTest.kt b/app/src/androidTest/java/org/tasks/data/LocationDaoTest.kt index fbe7ffdf3..25188a9bb 100644 --- a/app/src/androidTest/java/org/tasks/data/LocationDaoTest.kt +++ b/app/src/androidTest/java/org/tasks/data/LocationDaoTest.kt @@ -1,18 +1,18 @@ package org.tasks.data -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.todoroo.andlib.utility.DateUtilities.now import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.* import org.junit.Test -import org.junit.runner.RunWith import org.tasks.Freeze import org.tasks.caldav.GeoUtils.toLikeString import org.tasks.date.DateTimeUtils.newDateTime import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.GeofenceMaker.ARRIVAL import org.tasks.makers.GeofenceMaker.DEPARTURE import org.tasks.makers.GeofenceMaker.PLACE @@ -30,9 +30,9 @@ import org.tasks.makers.TaskMaker.SNOOZE_TIME import org.tasks.makers.TaskMaker.newTask import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class LocationDaoTest : InjectingTestCase() { - @Inject lateinit var locationDao: LocationDao @Inject lateinit var taskDao: TaskDao @@ -228,7 +228,5 @@ class LocationDaoTest : InjectingTestCase() { assertEquals(listOf(geofence), locationDao.getDepartureGeofences(place.uid!!, now())) } } - - override fun inject(component: TestComponent) = component.inject(this) } diff --git a/app/src/androidTest/java/org/tasks/data/ManualGoogleTaskQueryTest.kt b/app/src/androidTest/java/org/tasks/data/ManualGoogleTaskQueryTest.kt index 39f20b2dd..970a05ab5 100644 --- a/app/src/androidTest/java/org/tasks/data/ManualGoogleTaskQueryTest.kt +++ b/app/src/androidTest/java/org/tasks/data/ManualGoogleTaskQueryTest.kt @@ -1,18 +1,18 @@ package org.tasks.data -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.helper.UUIDHelper +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.R import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.GoogleTaskListMaker.REMOTE_ID import org.tasks.makers.GoogleTaskListMaker.newGoogleTaskList import org.tasks.makers.GoogleTaskMaker.LIST @@ -26,9 +26,9 @@ import org.tasks.makers.TaskMaker.UUID import org.tasks.preferences.Preferences import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class ManualGoogleTaskQueryTest : InjectingTestCase() { - @Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var taskDao: TaskDao @Inject lateinit var preferences: Preferences @@ -106,6 +106,4 @@ class ManualGoogleTaskQueryTest : InjectingTestCase() { private fun query(): List = taskDao.fetchTasks { TaskListQuery.getQuery(preferences, filter, it) } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.kt b/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.kt index 1575f86eb..be0e6011a 100644 --- a/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.kt +++ b/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.kt @@ -1,14 +1,14 @@ package org.tasks.data -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.natpryce.makeiteasy.MakeItEasy.with import com.todoroo.astrid.dao.TaskDao +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test -import org.junit.runner.RunWith import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.makers.TagDataMaker.NAME import org.tasks.makers.TagDataMaker.newTagData import org.tasks.makers.TagMaker.TAGDATA @@ -19,7 +19,8 @@ import org.tasks.makers.TaskMaker.ID import org.tasks.makers.TaskMaker.newTask import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class TagDataDaoTest : InjectingTestCase() { @Inject lateinit var taskDao: TaskDao @Inject lateinit var tagDao: TagDao @@ -136,6 +137,4 @@ class TagDataDaoTest : InjectingTestCase() { tagDao.insert(newTag(with(TASK, task), with(TAGUID, tag))) } } - - override fun inject(component: TestComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/injection/InjectingTestCase.kt b/app/src/androidTest/java/org/tasks/injection/InjectingTestCase.kt index b6f8cf08f..bb9c6686f 100644 --- a/app/src/androidTest/java/org/tasks/injection/InjectingTestCase.kt +++ b/app/src/androidTest/java/org/tasks/injection/InjectingTestCase.kt @@ -1,20 +1,16 @@ package org.tasks.injection -import android.content.Context -import androidx.test.core.app.ApplicationProvider +import dagger.hilt.android.testing.HiltAndroidRule import org.junit.Before -import timber.log.Timber +import org.junit.Rule abstract class InjectingTestCase { + + @get:Rule + var hiltRule = HiltAndroidRule(this) + @Before open fun setUp() { - Thread.setDefaultUncaughtExceptionHandler { _, e: Throwable? -> Timber.e(e) } - val context = ApplicationProvider.getApplicationContext() - val component = DaggerTestComponent.builder() - .applicationModule(ApplicationModule(context)) - .testModule(TestModule()).build() - inject(component) + hiltRule.inject() } - - protected abstract fun inject(component: TestComponent) } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/injection/TestComponent.kt b/app/src/androidTest/java/org/tasks/injection/TestComponent.kt deleted file mode 100644 index 113e2dd7e..000000000 --- a/app/src/androidTest/java/org/tasks/injection/TestComponent.kt +++ /dev/null @@ -1,52 +0,0 @@ -package org.tasks.injection - -import com.todoroo.astrid.adapter.* -import com.todoroo.astrid.alarms.AlarmJobServiceTest -import com.todoroo.astrid.dao.TaskDaoTests -import com.todoroo.astrid.gtasks.GtasksListServiceTest -import com.todoroo.astrid.gtasks.GtasksMetadataServiceTest -import com.todoroo.astrid.model.TaskTest -import com.todoroo.astrid.reminders.ReminderServiceTest -import com.todoroo.astrid.repeats.RepeatTaskHelperTest -import com.todoroo.astrid.service.QuickAddMarkupTest -import com.todoroo.astrid.service.TaskMoverTest -import com.todoroo.astrid.service.TitleParserTest -import com.todoroo.astrid.subtasks.SubtasksHelperTest -import com.todoroo.astrid.subtasks.SubtasksMovingTest -import com.todoroo.astrid.sync.NewSyncTestCase -import dagger.Component -import org.tasks.data.* -import org.tasks.jobs.BackupServiceTests -import javax.inject.Singleton - -@Singleton -@Component(modules = [TestModule::class]) -interface TestComponent : ApplicationComponent { - fun inject(tests: GtasksListServiceTest) - fun inject(tests: ReminderServiceTest) - fun inject(tests: TaskTest) - fun inject(tests: TaskDaoTests) - fun inject(tests: NewSyncTestCase) - fun inject(tests: SubtasksMovingTest) - fun inject(tests: SubtasksHelperTest) - fun inject(tests: QuickAddMarkupTest) - fun inject(tests: TitleParserTest) - fun inject(tests: BackupServiceTests) - fun inject(tests: AlarmJobServiceTest) - fun inject(tests: RepeatTaskHelperTest) - fun inject(tests: GtasksMetadataServiceTest) - fun inject(tests: DeletionDaoTests) - fun inject(tests: GoogleTaskDaoTests) - fun inject(tests: TagDataDaoTest) - fun inject(tests: CaldavDaoTests) - fun inject(tests: TaskMoverTest) - fun inject(tests: LocationDaoTest) - fun inject(tests: GoogleTaskListDaoTest) - fun inject(tests: CaldavTaskAdapterTest) - fun inject(tests: ManualGoogleTaskQueryTest) - fun inject(tests: CaldavDaoShiftTests) - fun inject(tests: CaldavManualSortTaskAdapterTest) - fun inject(tests: GoogleTaskManualSortAdapterTest) - fun inject(tests: OfflineSubtaskTest) - fun inject(tests: NonRecursiveQueryTest) -} diff --git a/app/src/androidTest/java/org/tasks/injection/TestModule.kt b/app/src/androidTest/java/org/tasks/injection/TestModule.kt index 22ba99ef1..cd004ad18 100644 --- a/app/src/androidTest/java/org/tasks/injection/TestModule.kt +++ b/app/src/androidTest/java/org/tasks/injection/TestModule.kt @@ -5,13 +5,19 @@ import androidx.room.Room import com.todoroo.astrid.dao.Database import dagger.Module import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ApplicationComponent +import dagger.hilt.android.qualifiers.ApplicationContext +import org.mockito.Mockito.mock import org.tasks.TestUtilities +import org.tasks.jobs.WorkManager import org.tasks.preferences.PermissionChecker import org.tasks.preferences.PermissivePermissionChecker import org.tasks.preferences.Preferences import javax.inject.Singleton -@Module(includes = [ApplicationModule::class]) +@Module +@InstallIn(ApplicationComponent::class) class TestModule { @Provides @Singleton @@ -30,4 +36,7 @@ class TestModule { fun getPreferences(@ApplicationContext context: Context): Preferences { return TestUtilities.newPreferences(context) } + + @Provides + fun getWorkManager(): WorkManager = mock(WorkManager::class.java) } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/jobs/BackupServiceTests.kt b/app/src/androidTest/java/org/tasks/jobs/BackupServiceTests.kt index effb7d2da..92e99b2e7 100644 --- a/app/src/androidTest/java/org/tasks/jobs/BackupServiceTests.kt +++ b/app/src/androidTest/java/org/tasks/jobs/BackupServiceTests.kt @@ -7,31 +7,34 @@ package org.tasks.jobs import android.net.Uri import androidx.test.InstrumentationRegistry -import androidx.test.ext.junit.runners.AndroidJUnit4 import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.UninstallModules import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue +import org.junit.Before import org.junit.Test -import org.junit.runner.RunWith import org.tasks.R import org.tasks.backup.TasksJsonExporter import org.tasks.backup.TasksJsonExporter.ExportType import org.tasks.injection.InjectingTestCase -import org.tasks.injection.TestComponent +import org.tasks.injection.ProductionModule import org.tasks.preferences.Preferences import java.io.File import java.io.IOException import javax.inject.Inject -@RunWith(AndroidJUnit4::class) +@UninstallModules(ProductionModule::class) +@HiltAndroidTest class BackupServiceTests : InjectingTestCase() { @Inject lateinit var jsonExporter: TasksJsonExporter @Inject lateinit var taskDao: TaskDao @Inject lateinit var preferences: Preferences private lateinit var temporaryDirectory: File - + + @Before override fun setUp() { super.setUp() temporaryDirectory = try { @@ -55,8 +58,6 @@ class BackupServiceTests : InjectingTestCase() { taskDao.createNew(task) } - override fun inject(component: TestComponent) = component.inject(this) - @After fun tearDown() { for (file in temporaryDirectory.listFiles()!!) { @@ -73,6 +74,6 @@ class BackupServiceTests : InjectingTestCase() { // assert file created val files = temporaryDirectory.listFiles() assertEquals(1, files!!.size) - assertTrue(files[0].name.matches(Regex(BackupWork.BACKUP_FILE_NAME_REGEX))) + assertTrue(files[0].name.matches(BackupWork.BACKUP_FILE_NAME_REGEX)) } } \ No newline at end of file diff --git a/app/src/androidTest/java/org/tasks/notifications/ThrottleTest.kt b/app/src/androidTest/java/org/tasks/notifications/ThrottleTest.kt index 97571fe89..098815a0e 100644 --- a/app/src/androidTest/java/org/tasks/notifications/ThrottleTest.kt +++ b/app/src/androidTest/java/org/tasks/notifications/ThrottleTest.kt @@ -7,7 +7,6 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito import org.tasks.Freeze -import org.tasks.notifications.Throttle import org.tasks.time.DateTimeUtils @RunWith(AndroidJUnit4::class) diff --git a/app/src/androidTest/java/org/tasks/preferences/PermissivePermissionChecker.kt b/app/src/androidTest/java/org/tasks/preferences/PermissivePermissionChecker.kt index 1172ed037..31de1bea7 100644 --- a/app/src/androidTest/java/org/tasks/preferences/PermissivePermissionChecker.kt +++ b/app/src/androidTest/java/org/tasks/preferences/PermissivePermissionChecker.kt @@ -1,7 +1,7 @@ package org.tasks.preferences import android.content.Context -import org.tasks.injection.ApplicationContext +import dagger.hilt.android.qualifiers.ApplicationContext class PermissivePermissionChecker(@ApplicationContext context: Context) : PermissionChecker(context) { override fun canAccessCalendars() = true diff --git a/app/src/debug/java/org/tasks/BuildSetup.kt b/app/src/debug/java/org/tasks/BuildSetup.kt index c836cd6aa..73d939f5c 100644 --- a/app/src/debug/java/org/tasks/BuildSetup.kt +++ b/app/src/debug/java/org/tasks/BuildSetup.kt @@ -11,8 +11,8 @@ import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin import com.facebook.flipper.plugins.network.NetworkFlipperPlugin import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin import com.facebook.soloader.SoLoader +import dagger.hilt.android.qualifiers.ApplicationContext import leakcanary.AppWatcher -import org.tasks.injection.ApplicationContext import org.tasks.preferences.Preferences import timber.log.Timber import timber.log.Timber.DebugTree diff --git a/app/src/debug/java/org/tasks/DebugNetworkInterceptor.kt b/app/src/debug/java/org/tasks/DebugNetworkInterceptor.kt index 5333b1056..ba08e5510 100644 --- a/app/src/debug/java/org/tasks/DebugNetworkInterceptor.kt +++ b/app/src/debug/java/org/tasks/DebugNetworkInterceptor.kt @@ -6,8 +6,8 @@ import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor import com.facebook.flipper.plugins.network.NetworkFlipperPlugin import com.google.api.client.http.HttpRequest import com.google.api.client.http.HttpResponse +import dagger.hilt.android.qualifiers.ApplicationContext import okhttp3.OkHttpClient -import org.tasks.injection.ApplicationContext import java.io.IOException import javax.inject.Inject diff --git a/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt b/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt index 910f0a60f..beaa6307a 100644 --- a/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt +++ b/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt @@ -4,14 +4,15 @@ import android.os.Bundle import androidx.annotation.StringRes import androidx.preference.Preference import at.bitfire.cert4android.CustomCertManager.Companion.resetCertificates +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.billing.BillingClient import org.tasks.billing.Inventory -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.ui.Toaster import javax.inject.Inject +@AndroidEntryPoint class Debug : InjectingPreferenceFragment() { @Inject lateinit var inventory: Inventory @@ -60,6 +61,4 @@ class Debug : InjectingPreferenceFragment() { } } } - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/generic/java/org/tasks/injection/LocationModule.kt b/app/src/generic/java/org/tasks/injection/LocationModule.kt index a199ec0a0..7a1544ca0 100644 --- a/app/src/generic/java/org/tasks/injection/LocationModule.kt +++ b/app/src/generic/java/org/tasks/injection/LocationModule.kt @@ -3,12 +3,17 @@ package org.tasks.injection import android.content.Context import dagger.Module import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.android.scopes.ActivityScoped import org.tasks.location.MapFragment import org.tasks.location.MapboxMapFragment import org.tasks.location.MapboxSearchProvider import org.tasks.location.PlaceSearchProvider @Module +@InstallIn(ActivityComponent::class) class LocationModule { @Provides @ActivityScoped diff --git a/app/src/googleplay/java/org/tasks/analytics/Firebase.kt b/app/src/googleplay/java/org/tasks/analytics/Firebase.kt index a540cd611..79385cefc 100644 --- a/app/src/googleplay/java/org/tasks/analytics/Firebase.kt +++ b/app/src/googleplay/java/org/tasks/analytics/Firebase.kt @@ -8,10 +8,10 @@ import com.crashlytics.android.Crashlytics import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.remoteconfig.FirebaseRemoteConfig import com.google.firebase.remoteconfig.ktx.remoteConfigSettings +import dagger.hilt.android.qualifiers.ApplicationContext import io.fabric.sdk.android.Fabric import org.tasks.R import org.tasks.billing.BillingClientImpl -import org.tasks.injection.ApplicationContext import org.tasks.jobs.WorkManager import org.tasks.preferences.Preferences import timber.log.Timber diff --git a/app/src/googleplay/java/org/tasks/billing/BillingClientImpl.java b/app/src/googleplay/java/org/tasks/billing/BillingClientImpl.java index 0c3666c2c..f012314d2 100644 --- a/app/src/googleplay/java/org/tasks/billing/BillingClientImpl.java +++ b/app/src/googleplay/java/org/tasks/billing/BillingClientImpl.java @@ -16,13 +16,13 @@ import com.android.billingclient.api.Purchase.PurchasesResult; import com.android.billingclient.api.PurchasesUpdatedListener; import com.google.common.base.Joiner; import com.google.common.collect.Iterables; +import dagger.hilt.android.qualifiers.ApplicationContext; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import java.util.List; import org.tasks.BuildConfig; import org.tasks.analytics.Firebase; -import org.tasks.injection.ApplicationContext; import timber.log.Timber; @SuppressWarnings("all") diff --git a/app/src/googleplay/java/org/tasks/billing/SignatureVerifier.kt b/app/src/googleplay/java/org/tasks/billing/SignatureVerifier.kt index 38ba55f7f..98582cf40 100644 --- a/app/src/googleplay/java/org/tasks/billing/SignatureVerifier.kt +++ b/app/src/googleplay/java/org/tasks/billing/SignatureVerifier.kt @@ -1,8 +1,8 @@ package org.tasks.billing import android.content.Context +import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.R -import org.tasks.injection.ApplicationContext import timber.log.Timber import java.io.IOException import javax.inject.Inject diff --git a/app/src/googleplay/java/org/tasks/gtasks/PlayServices.kt b/app/src/googleplay/java/org/tasks/gtasks/PlayServices.kt index 5cb385c0b..bc9c65028 100644 --- a/app/src/googleplay/java/org/tasks/gtasks/PlayServices.kt +++ b/app/src/googleplay/java/org/tasks/gtasks/PlayServices.kt @@ -5,6 +5,7 @@ import android.content.Context import android.widget.Toast import com.google.android.gms.common.ConnectionResult import com.google.android.gms.common.GoogleApiAvailability +import dagger.hilt.android.qualifiers.ApplicationContext import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable @@ -13,7 +14,6 @@ import io.reactivex.schedulers.Schedulers import org.tasks.R import org.tasks.data.GoogleTaskListDao import org.tasks.data.LocationDao -import org.tasks.injection.ApplicationContext import org.tasks.preferences.Preferences import timber.log.Timber import javax.inject.Inject diff --git a/app/src/googleplay/java/org/tasks/injection/LocationModule.kt b/app/src/googleplay/java/org/tasks/injection/LocationModule.kt index 8fcb39cf6..512970629 100644 --- a/app/src/googleplay/java/org/tasks/injection/LocationModule.kt +++ b/app/src/googleplay/java/org/tasks/injection/LocationModule.kt @@ -3,12 +3,17 @@ package org.tasks.injection import android.content.Context import dagger.Module import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.android.scopes.ActivityScoped import org.tasks.billing.Inventory import org.tasks.gtasks.PlayServices import org.tasks.location.* import org.tasks.preferences.Preferences @Module +@InstallIn(ActivityComponent::class) internal class LocationModule { @Provides @ActivityScoped diff --git a/app/src/googleplay/java/org/tasks/location/GeofenceApi.kt b/app/src/googleplay/java/org/tasks/location/GeofenceApi.kt index 9638a7b97..d22e13299 100644 --- a/app/src/googleplay/java/org/tasks/location/GeofenceApi.kt +++ b/app/src/googleplay/java/org/tasks/location/GeofenceApi.kt @@ -7,10 +7,10 @@ import android.content.Intent import com.google.android.gms.location.Geofence import com.google.android.gms.location.GeofencingRequest import com.google.android.gms.location.LocationServices +import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.data.LocationDao import org.tasks.data.MergedGeofence import org.tasks.data.Place -import org.tasks.injection.ApplicationContext import org.tasks.preferences.PermissionChecker import timber.log.Timber import javax.inject.Inject diff --git a/app/src/googleplay/java/org/tasks/location/GeofenceTransitionsIntentService.kt b/app/src/googleplay/java/org/tasks/location/GeofenceTransitionsIntentService.kt index 61c3a7c3a..516389e91 100644 --- a/app/src/googleplay/java/org/tasks/location/GeofenceTransitionsIntentService.kt +++ b/app/src/googleplay/java/org/tasks/location/GeofenceTransitionsIntentService.kt @@ -7,16 +7,17 @@ import com.google.android.gms.location.Geofence import com.google.android.gms.location.GeofencingEvent import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.reminders.ReminderService +import dagger.hilt.android.AndroidEntryPoint import org.tasks.Notifier import org.tasks.data.LocationDao import org.tasks.data.Place -import org.tasks.injection.ApplicationComponent import org.tasks.injection.InjectingJobIntentService import org.tasks.notifications.Notification import org.tasks.time.DateTimeUtils import timber.log.Timber import javax.inject.Inject +@AndroidEntryPoint class GeofenceTransitionsIntentService : InjectingJobIntentService() { @Inject lateinit var locationDao: LocationDao @Inject lateinit var notifier: Notifier @@ -69,8 +70,6 @@ class GeofenceTransitionsIntentService : InjectingJobIntentService() { return notification } - override fun inject(component: ApplicationComponent) = component.inject(this) - class Broadcast : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { enqueueWork( diff --git a/app/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java b/app/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java index dc2504377..cf452aa9b 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java +++ b/app/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java @@ -17,16 +17,17 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import butterknife.ButterKnife; +import dagger.hilt.android.AndroidEntryPoint; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.inject.Inject; import org.tasks.R; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.ThemedInjectingAppCompatActivity; import org.tasks.preferences.Preferences; import org.tasks.preferences.beast.BeastModeRecyclerAdapter; +@AndroidEntryPoint public class BeastModePreferences extends ThemedInjectingAppCompatActivity implements Toolbar.OnMenuItemClickListener { @@ -102,11 +103,6 @@ public class BeastModePreferences extends ThemedInjectingAppCompatActivity adapter.applyToRecyclerView(recyclerView); } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.menu_reset_to_defaults) { diff --git a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt index 328219783..aa2100091 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/MainActivity.kt @@ -17,7 +17,6 @@ import android.view.inputmethod.InputMethodManager import androidx.appcompat.view.ActionMode import androidx.drawerlayout.widget.DrawerLayout.SimpleDrawerListener import androidx.fragment.app.FragmentManager -import androidx.lifecycle.ViewModelProvider import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.astrid.activity.TaskEditFragment.TaskEditFragmentCallbackHandler import com.todoroo.astrid.activity.TaskListFragment.TaskListFragmentCallbackHandler @@ -26,6 +25,7 @@ import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task import com.todoroo.astrid.service.TaskCreator import com.todoroo.astrid.timers.TimerControlSet.TimerControlSetCallback +import dagger.hilt.android.AndroidEntryPoint import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable @@ -42,7 +42,6 @@ import org.tasks.dialogs.WhatsNewDialog import org.tasks.filters.PlaceFilter import org.tasks.fragments.CommentBarFragment.CommentBarFragmentCallback import org.tasks.gtasks.PlayServices -import org.tasks.injection.ActivityComponent import org.tasks.injection.InjectingAppCompatActivity import org.tasks.intents.TaskIntents import org.tasks.location.LocationPickerActivity @@ -57,9 +56,9 @@ import org.tasks.ui.DeadlineControlSet.DueDateChangeListener import org.tasks.ui.EmptyTaskEditFragment.Companion.newEmptyTaskEditFragment import org.tasks.ui.ListFragment.OnListChanged import org.tasks.ui.NavigationDrawerFragment -import org.tasks.ui.TaskListViewModel import javax.inject.Inject +@AndroidEntryPoint class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandler, OnListChanged, TimerControlSetCallback, DueDateChangeListener, TaskEditFragmentCallbackHandler, CommentBarFragmentCallback, SortDialogCallback { @Inject lateinit var preferences: Preferences @Inject lateinit var repeatConfirmationReceiver: RepeatConfirmationReceiver @@ -83,8 +82,7 @@ class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandl */ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - val viewModel = ViewModelProvider(this).get(TaskListViewModel::class.java) - component.inject(viewModel) + theme.applyTheme(this) currentNightMode = nightMode currentPro = inventory.hasPro() binding = TaskListActivityBinding.inflate(layoutInflater) @@ -301,11 +299,6 @@ class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandl private val nightMode: Int get() = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK - override fun inject(component: ActivityComponent) { - component.inject(this) - theme.applyTheme(this) - } - override fun onPause() { super.onPause() localBroadcastManager.unregisterReceiver(repeatConfirmationReceiver) diff --git a/app/src/main/java/com/todoroo/astrid/activity/ShareLinkActivity.java b/app/src/main/java/com/todoroo/astrid/activity/ShareLinkActivity.java index a8e800ef1..eaec0cccd 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/ShareLinkActivity.java +++ b/app/src/main/java/com/todoroo/astrid/activity/ShareLinkActivity.java @@ -16,12 +16,12 @@ import androidx.core.app.TaskStackBuilder; import com.google.common.io.Files; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.service.TaskCreator; +import dagger.hilt.android.AndroidEntryPoint; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.util.ArrayList; import javax.inject.Inject; import org.tasks.data.TaskAttachment; import org.tasks.files.FileHelper; -import org.tasks.injection.ActivityComponent; -import org.tasks.injection.ApplicationContext; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.preferences.Preferences; import timber.log.Timber; @@ -30,6 +30,7 @@ import timber.log.Timber; * @author joshuagross *

Create a new task based on incoming links from the "share" menu */ +@AndroidEntryPoint public final class ShareLinkActivity extends InjectingAppCompatActivity { @Inject @ApplicationContext Context context; @@ -49,11 +50,6 @@ public final class ShareLinkActivity extends InjectingAppCompatActivity { readIntent(); } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskEditActivity.java b/app/src/main/java/com/todoroo/astrid/activity/TaskEditActivity.java index 14cf3c6e6..79f263039 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskEditActivity.java +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskEditActivity.java @@ -2,15 +2,16 @@ package com.todoroo.astrid.activity; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.service.TaskCreator; +import dagger.hilt.android.AndroidEntryPoint; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.schedulers.Schedulers; import javax.inject.Inject; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.intents.TaskIntents; +@AndroidEntryPoint public class TaskEditActivity extends InjectingAppCompatActivity { private static final String TOKEN_ID = "id"; @@ -49,9 +50,4 @@ public class TaskEditActivity extends InjectingAppCompatActivity { disposables.dispose(); } - - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java index aecc6d650..a53bb8669 100755 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.java @@ -34,6 +34,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import com.google.android.material.appbar.AppBarLayout; @@ -46,6 +47,7 @@ import com.todoroo.astrid.notes.CommentsController; import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.service.TaskDeleter; import com.todoroo.astrid.timers.TimerPlugin; +import dagger.hilt.android.AndroidEntryPoint; import io.reactivex.Completable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; @@ -59,16 +61,14 @@ import org.tasks.databinding.FragmentTaskEditBinding; import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.Linkify; import org.tasks.fragments.TaskEditControlSetFragmentManager; -import org.tasks.injection.ActivityContext; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingFragment; import org.tasks.notifications.NotificationManager; import org.tasks.preferences.Preferences; import org.tasks.themes.ThemeColor; import org.tasks.ui.SubtaskControlSet; import org.tasks.ui.TaskEditControlFragment; -public final class TaskEditFragment extends InjectingFragment +@AndroidEntryPoint +public final class TaskEditFragment extends Fragment implements Toolbar.OnMenuItemClickListener { static final String TAG_TASKEDIT_FRAGMENT = "taskedit_fragment"; @@ -81,7 +81,7 @@ public final class TaskEditFragment extends InjectingFragment @Inject TaskDeleter taskDeleter; @Inject NotificationManager notificationManager; @Inject DialogBuilder dialogBuilder; - @Inject @ActivityContext Context context; + @Inject Activity context; @Inject TaskEditControlSetFragmentManager taskEditControlSetFragmentManager; @Inject CommentsController commentsController; @Inject Preferences preferences; @@ -118,11 +118,6 @@ public final class TaskEditFragment extends InjectingFragment outState.putBoolean(EXTRA_COMPLETED, completed); } - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } - @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt index 289dca8b5..4f94cb8c0 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -19,6 +19,7 @@ import androidx.appcompat.view.ActionMode import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.Toolbar import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.paging.PagedList @@ -44,6 +45,7 @@ import com.todoroo.astrid.service.TaskDuplicator import com.todoroo.astrid.service.TaskMover import com.todoroo.astrid.timers.TimerPlugin import com.todoroo.astrid.utility.Flags +import dagger.hilt.android.AndroidEntryPoint import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable @@ -63,8 +65,6 @@ import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.SortDialog import org.tasks.filters.PlaceFilter -import org.tasks.injection.FragmentComponent -import org.tasks.injection.InjectingFragment import org.tasks.intents.TaskIntents import org.tasks.notifications.NotificationManager import org.tasks.preferences.Device @@ -84,7 +84,8 @@ import java.util.concurrent.TimeUnit import javax.inject.Inject import kotlin.math.max -class TaskListFragment : InjectingFragment(), OnRefreshListener, Toolbar.OnMenuItemClickListener, MenuItem.OnActionExpandListener, SearchView.OnQueryTextListener, ActionMode.Callback { +@AndroidEntryPoint +class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickListener, MenuItem.OnActionExpandListener, SearchView.OnQueryTextListener, ActionMode.Callback { private val refreshReceiver = RefreshReceiver() private var disposables: CompositeDisposable? = null @@ -176,8 +177,6 @@ class TaskListFragment : InjectingFragment(), OnRefreshListener, Toolbar.OnMenuI callbacks = activity as TaskListFragmentCallbackHandler } - public override fun inject(component: FragmentComponent) = component.inject(this) - override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) val selectedTaskIds: List = taskAdapter.getSelected() diff --git a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt index ffeee858e..9adc78607 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt @@ -10,13 +10,13 @@ import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task.Companion.isUuidEmpty import com.todoroo.astrid.subtasks.SubtasksFilterUpdater import com.todoroo.astrid.subtasks.SubtasksHelper +import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.LocalBroadcastManager import org.tasks.Strings.isNullOrEmpty import org.tasks.data.CaldavDao import org.tasks.data.GoogleTaskDao import org.tasks.data.TaskListMetadata import org.tasks.data.TaskListMetadataDao -import org.tasks.injection.ApplicationContext import org.tasks.preferences.Preferences import javax.inject.Inject diff --git a/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java b/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java index 6c76a20ae..a0c542e0a 100644 --- a/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java +++ b/app/src/main/java/com/todoroo/astrid/core/BuiltInFilterExposer.java @@ -17,6 +17,7 @@ import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.timers.TimerPlugin; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -25,7 +26,6 @@ import javax.inject.Inject; import org.tasks.R; import org.tasks.filters.RecentlyModifiedFilter; import org.tasks.filters.SortableFilter; -import org.tasks.injection.ApplicationContext; import org.tasks.preferences.Preferences; import org.tasks.themes.CustomIcons; diff --git a/app/src/main/java/com/todoroo/astrid/files/FilesControlSet.kt b/app/src/main/java/com/todoroo/astrid/files/FilesControlSet.kt index 0a4c020c6..f1bdd9767 100644 --- a/app/src/main/java/com/todoroo/astrid/files/FilesControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/files/FilesControlSet.kt @@ -7,7 +7,6 @@ package com.todoroo.astrid.files import android.annotation.SuppressLint import android.app.Activity -import android.content.Context import android.content.Intent import android.net.Uri import android.os.Bundle @@ -19,21 +18,21 @@ import android.widget.TextView import butterknife.BindView import butterknife.OnClick import com.todoroo.astrid.data.Task +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.data.TaskAttachment import org.tasks.data.TaskAttachmentDao import org.tasks.dialogs.AddAttachmentDialog import org.tasks.dialogs.DialogBuilder import org.tasks.files.FileHelper -import org.tasks.injection.ActivityContext -import org.tasks.injection.FragmentComponent import org.tasks.preferences.Preferences import org.tasks.ui.TaskEditControlFragment import java.util.* import javax.inject.Inject +@AndroidEntryPoint class FilesControlSet : TaskEditControlFragment() { - @Inject @ActivityContext lateinit var activity: Context + @Inject lateinit var activity: Activity @Inject lateinit var taskAttachmentDao: TaskAttachmentDao @Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var preferences: Preferences @@ -128,8 +127,6 @@ class FilesControlSet : TaskEditControlFragment() { } } - override fun inject(component: FragmentComponent) = component.inject(this) - @SuppressLint("NewApi") private fun showFile(m: TaskAttachment) { FileHelper.startActionView(requireActivity(), m.parseUri()) diff --git a/app/src/main/java/com/todoroo/astrid/gcal/CalendarAlarmReceiver.java b/app/src/main/java/com/todoroo/astrid/gcal/CalendarAlarmReceiver.java index 7c91c6beb..9d85e8fcf 100644 --- a/app/src/main/java/com/todoroo/astrid/gcal/CalendarAlarmReceiver.java +++ b/app/src/main/java/com/todoroo/astrid/gcal/CalendarAlarmReceiver.java @@ -6,6 +6,7 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import com.todoroo.andlib.utility.DateUtilities; +import dagger.hilt.android.AndroidEntryPoint; import java.util.List; import javax.inject.Inject; import org.tasks.BuildConfig; @@ -14,12 +15,12 @@ import org.tasks.calendars.AndroidCalendarEvent; import org.tasks.calendars.AndroidCalendarEventAttendee; import org.tasks.calendars.CalendarEventProvider; import org.tasks.gtasks.GoogleAccountManager; -import org.tasks.injection.ApplicationComponent; import org.tasks.injection.InjectingBroadcastReceiver; import org.tasks.preferences.Preferences; import org.tasks.scheduling.CalendarNotificationIntentService; import timber.log.Timber; +@AndroidEntryPoint public class CalendarAlarmReceiver extends InjectingBroadcastReceiver { public static final int REQUEST_CODE_CAL_REMINDER = 100; @@ -63,11 +64,6 @@ public class CalendarAlarmReceiver extends InjectingBroadcastReceiver { } } - @Override - protected void inject(ApplicationComponent component) { - component.inject(this); - } - private void showCalReminder(Context context, final long eventId, final boolean fromPostpone) { final AndroidCalendarEvent event = calendarEventProvider.getEvent(eventId); if (event == null) { diff --git a/app/src/main/java/com/todoroo/astrid/gcal/CalendarReminderActivity.java b/app/src/main/java/com/todoroo/astrid/gcal/CalendarReminderActivity.java index a69b8687b..415bea411 100644 --- a/app/src/main/java/com/todoroo/astrid/gcal/CalendarReminderActivity.java +++ b/app/src/main/java/com/todoroo/astrid/gcal/CalendarReminderActivity.java @@ -9,10 +9,10 @@ import android.view.View.OnClickListener; import android.widget.TextView; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.activity.MainActivity; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.R; import org.tasks.dialogs.DialogBuilder; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.ThemedInjectingAppCompatActivity; import org.tasks.preferences.MainPreferences; import org.tasks.preferences.Preferences; @@ -20,6 +20,7 @@ import org.tasks.scheduling.AlarmManager; import org.tasks.scheduling.CalendarNotificationIntentService; import org.tasks.themes.ThemeAccent; +@AndroidEntryPoint public class CalendarReminderActivity extends ThemedInjectingAppCompatActivity { public static final String TOKEN_EVENT_ID = "eventId"; @@ -97,11 +98,6 @@ public class CalendarReminderActivity extends ThemedInjectingAppCompatActivity { addListeners(); } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - private void setupUi() { ((TextView) findViewById(R.id.reminder_title)).setText(getString(R.string.CRA_title)); diff --git a/app/src/main/java/com/todoroo/astrid/gcal/GCalHelper.java b/app/src/main/java/com/todoroo/astrid/gcal/GCalHelper.java index 2cafb0049..df56af25f 100644 --- a/app/src/main/java/com/todoroo/astrid/gcal/GCalHelper.java +++ b/app/src/main/java/com/todoroo/astrid/gcal/GCalHelper.java @@ -17,12 +17,12 @@ import android.text.format.Time; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.util.TimeZone; import javax.inject.Inject; import org.tasks.R; import org.tasks.calendars.AndroidCalendarEvent; import org.tasks.calendars.CalendarEventProvider; -import org.tasks.injection.ApplicationContext; import org.tasks.preferences.PermissionChecker; import org.tasks.preferences.Preferences; import timber.log.Timber; diff --git a/app/src/main/java/com/todoroo/astrid/gtasks/GtasksListService.java b/app/src/main/java/com/todoroo/astrid/gtasks/GtasksListService.java index aa288ec7a..995073604 100644 --- a/app/src/main/java/com/todoroo/astrid/gtasks/GtasksListService.java +++ b/app/src/main/java/com/todoroo/astrid/gtasks/GtasksListService.java @@ -34,10 +34,6 @@ public class GtasksListService { this.localBroadcastManager = localBroadcastManager; } - public GoogleTaskList getList(long id) { - return googleTaskListDao.getById(id); - } - /** * Reads in remote list information and updates local list objects. * @@ -89,8 +85,4 @@ public class GtasksListService { localBroadcastManager.broadcastRefreshList(); } - - public GoogleTaskList getList(String listId) { - return googleTaskListDao.getByRemoteId(listId); - } } diff --git a/app/src/main/java/com/todoroo/astrid/gtasks/api/GtasksInvoker.java b/app/src/main/java/com/todoroo/astrid/gtasks/api/GtasksInvoker.java index fa92fee31..9c1f0e295 100644 --- a/app/src/main/java/com/todoroo/astrid/gtasks/api/GtasksInvoker.java +++ b/app/src/main/java/com/todoroo/astrid/gtasks/api/GtasksInvoker.java @@ -13,12 +13,12 @@ import com.google.api.services.tasks.TasksScopes; import com.google.api.services.tasks.model.Task; import com.google.api.services.tasks.model.TaskList; import com.google.api.services.tasks.model.TaskLists; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.io.IOException; import javax.inject.Inject; import org.tasks.BuildConfig; import org.tasks.DebugNetworkInterceptor; import org.tasks.gtasks.GoogleAccountManager; -import org.tasks.injection.ApplicationContext; import org.tasks.preferences.Preferences; import timber.log.Timber; diff --git a/app/src/main/java/com/todoroo/astrid/gtasks/auth/GtasksLoginActivity.java b/app/src/main/java/com/todoroo/astrid/gtasks/auth/GtasksLoginActivity.java index 93d935fec..86664843e 100644 --- a/app/src/main/java/com/todoroo/astrid/gtasks/auth/GtasksLoginActivity.java +++ b/app/src/main/java/com/todoroo/astrid/gtasks/auth/GtasksLoginActivity.java @@ -13,13 +13,13 @@ import android.content.Intent; import android.os.Bundle; import androidx.annotation.NonNull; import com.todoroo.andlib.utility.DialogUtilities; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.R; import org.tasks.data.GoogleTaskAccount; import org.tasks.data.GoogleTaskListDao; import org.tasks.dialogs.DialogBuilder; import org.tasks.gtasks.GoogleAccountManager; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.play.AuthResultHandler; import org.tasks.preferences.ActivityPermissionRequestor; @@ -31,6 +31,7 @@ import org.tasks.preferences.PermissionRequestor; * * @author Sam Bosley */ +@AndroidEntryPoint public class GtasksLoginActivity extends InjectingAppCompatActivity { public static final String EXTRA_ERROR = "extra_error"; @@ -49,11 +50,6 @@ public class GtasksLoginActivity extends InjectingAppCompatActivity { } } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - private void chooseAccount() { Intent chooseAccountIntent = android.accounts.AccountManager.newChooseAccountIntent( diff --git a/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java b/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java index b10bcaff1..0a30f76af 100644 --- a/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java +++ b/app/src/main/java/com/todoroo/astrid/provider/Astrid2TaskProvider.java @@ -6,6 +6,7 @@ package com.todoroo.astrid.provider; +import android.content.ContentProvider; import android.content.ContentValues; import android.content.Context; import android.content.UriMatcher; @@ -17,19 +18,19 @@ import androidx.annotation.NonNull; import com.google.common.base.Joiner; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; -import dagger.Lazy; +import dagger.hilt.EntryPoint; +import dagger.hilt.InstallIn; +import dagger.hilt.android.EntryPointAccessors; +import dagger.hilt.android.components.ApplicationComponent; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.List; -import javax.inject.Inject; import org.tasks.BuildConfig; import org.tasks.R; import org.tasks.data.TagDao; import org.tasks.data.TagData; import org.tasks.data.TagDataDao; -import org.tasks.injection.ApplicationComponent; -import org.tasks.injection.InjectingContentProvider; import timber.log.Timber; /** @@ -40,7 +41,15 @@ import timber.log.Timber; * * @author Tim Su */ -public class Astrid2TaskProvider extends InjectingContentProvider { +public class Astrid2TaskProvider extends ContentProvider { + + @EntryPoint + @InstallIn(ApplicationComponent.class) + interface Astrid2TaskProviderEntryPoint { + TagDataDao getTagDataDao(); + TaskDao getTaskDao(); + TagDao getTagDao(); + } private static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".tasksprovider"; @@ -81,10 +90,6 @@ public class Astrid2TaskProvider extends InjectingContentProvider { URI_MATCHER.addURI(AUTHORITY, "tags", URI_TAGS); } - @Inject Lazy tagDataDao; - @Inject Lazy taskDao; - @Inject Lazy tagDao; - public static void notifyDatabaseModification(Context context) { try { context.getContentResolver().notifyChange(CONTENT_URI, null); @@ -110,13 +115,12 @@ public class Astrid2TaskProvider extends InjectingContentProvider { @Override public boolean onCreate() { - super.onCreate(); - return false; + return true; } - @Override - protected void inject(ApplicationComponent component) { - component.inject(this); + private Astrid2TaskProviderEntryPoint hilt() { + return EntryPointAccessors.fromApplication( + getContext().getApplicationContext(), Astrid2TaskProviderEntryPoint.class); } /** @@ -125,7 +129,7 @@ public class Astrid2TaskProvider extends InjectingContentProvider { * @return two-column cursor: tag id (string) and tag name */ private Cursor getTags() { - List tags = tagDataDao.get().tagDataOrderedByName(); + List tags = hilt().getTagDataDao().tagDataOrderedByName(); MatrixCursor ret = new MatrixCursor(TAGS_FIELD_LIST); @@ -170,7 +174,7 @@ public class Astrid2TaskProvider extends InjectingContentProvider { */ private Cursor getTasks() { MatrixCursor ret = new MatrixCursor(TASK_FIELD_LIST); - List tasks = taskDao.get().getAstrid2TaskProviderTasks(); + List tasks = hilt().getTaskDao().getAstrid2TaskProviderTasks(); for (Task task : tasks) { String taskTags = getTagsAsString(task.getId(), TAG_SEPARATOR); @@ -233,6 +237,6 @@ public class Astrid2TaskProvider extends InjectingContentProvider { * @return empty string if no tags, otherwise string */ private String getTagsAsString(long taskId, String separator) { - return Joiner.on(separator).join(tagDao.get().getTagNames(taskId)); + return Joiner.on(separator).join(hilt().getTagDao().getTagNames(taskId)); } } diff --git a/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.kt b/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.kt index e471bc834..54cd44f7a 100644 --- a/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/repeats/RepeatControlSet.kt @@ -5,7 +5,7 @@ */ package com.todoroo.astrid.repeats -import android.content.Context +import android.app.Activity import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -20,12 +20,11 @@ import com.google.ical.values.Frequency import com.google.ical.values.RRule import com.google.ical.values.WeekdayNum import com.todoroo.astrid.data.Task +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.Strings.isNullOrEmpty import org.tasks.analytics.Firebase import org.tasks.dialogs.DialogBuilder -import org.tasks.injection.ActivityContext -import org.tasks.injection.FragmentComponent import org.tasks.repeats.BasicRecurrenceDialog import org.tasks.repeats.RepeatRuleToString import org.tasks.themes.Theme @@ -42,10 +41,11 @@ import javax.inject.Inject * * @author Tim Su @todoroo.com> */ +@AndroidEntryPoint class RepeatControlSet : TaskEditControlFragment() { private val repeatTypes: MutableList = ArrayList() - @Inject @ActivityContext lateinit var activity: Context + @Inject lateinit var activity: Activity @Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var theme: Theme @Inject lateinit var firebase: Firebase @@ -158,8 +158,6 @@ class RepeatControlSet : TaskEditControlFragment() { outState.putLong(EXTRA_DUE_DATE, dueDate) } - override fun inject(component: FragmentComponent) = component.inject(this) - override fun onRowClick() { BasicRecurrenceDialog.newBasicRecurrenceDialog(this, rrule, dueDate) .show(parentFragmentManager, FRAG_TAG_BASIC_RECURRENCE) diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt b/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt index 7224e4a47..7b6242b4e 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt @@ -7,11 +7,11 @@ import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task +import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.BuildConfig import org.tasks.LocalBroadcastManager import org.tasks.data.* import org.tasks.db.DbUtils.dbchunk -import org.tasks.injection.ApplicationContext import org.tasks.preferences.Preferences import java.util.* import javax.inject.Inject diff --git a/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt b/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt index b911ca92c..7bc2e6abe 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt @@ -7,6 +7,7 @@ import com.google.common.collect.ListMultimap import com.google.common.collect.Multimaps import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.dao.TaskDao +import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.R import org.tasks.Strings.isNullOrEmpty import org.tasks.caldav.iCalendar @@ -14,7 +15,6 @@ import org.tasks.caldav.iCalendar.Companion.fromVtodo import org.tasks.caldav.iCalendar.Companion.getParent import org.tasks.caldav.iCalendar.Companion.order import org.tasks.data.* -import org.tasks.injection.ApplicationContext import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.Preferences import org.tasks.widget.AppWidgetManager diff --git a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java index b4bfa1732..b1dae8f0c 100644 --- a/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java +++ b/app/src/main/java/com/todoroo/astrid/subtasks/SubtasksHelper.java @@ -9,6 +9,7 @@ import com.todoroo.astrid.core.BuiltInFilterExposer; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.subtasks.SubtasksFilterUpdater.Node; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -18,7 +19,6 @@ import org.tasks.data.TagData; import org.tasks.data.TagDataDao; import org.tasks.data.TaskListMetadata; import org.tasks.data.TaskListMetadataDao; -import org.tasks.injection.ApplicationContext; import org.tasks.preferences.Preferences; import timber.log.Timber; diff --git a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt index 727178916..776111f1a 100644 --- a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.kt @@ -16,11 +16,11 @@ import butterknife.BindView import com.google.android.material.chip.ChipGroup import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.data.Task +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.data.TagDao import org.tasks.data.TagData import org.tasks.data.TagDataDao -import org.tasks.injection.FragmentComponent import org.tasks.tags.TagPickerActivity import org.tasks.ui.ChipProvider import org.tasks.ui.TaskEditControlFragment @@ -32,6 +32,7 @@ import javax.inject.Inject * * @author Tim Su @todoroo.com> */ +@AndroidEntryPoint class TagsControlSet : TaskEditControlFragment() { @Inject lateinit var tagDao: TagDao @Inject lateinit var tagDataDao: TagDataDao @@ -129,8 +130,6 @@ class TagsControlSet : TaskEditControlFragment() { } } - override fun inject(component: FragmentComponent) = component.inject(this) - override fun requiresId() = true companion object { diff --git a/app/src/main/java/com/todoroo/astrid/timers/TimerControlSet.kt b/app/src/main/java/com/todoroo/astrid/timers/TimerControlSet.kt index 09bd68789..7120f2f6e 100644 --- a/app/src/main/java/com/todoroo/astrid/timers/TimerControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/timers/TimerControlSet.kt @@ -6,7 +6,6 @@ package com.todoroo.astrid.timers import android.app.Activity -import android.content.Context import android.os.Bundle import android.os.SystemClock import android.text.format.DateFormat @@ -24,11 +23,10 @@ import butterknife.OnClick import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.data.Task import com.todoroo.astrid.ui.TimeDurationControlSet +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.Strings.isNullOrEmpty import org.tasks.dialogs.DialogBuilder -import org.tasks.injection.ActivityContext -import org.tasks.injection.FragmentComponent import org.tasks.themes.Theme import org.tasks.ui.TaskEditControlFragment import javax.inject.Inject @@ -38,8 +36,9 @@ import javax.inject.Inject * * @author Tim Su @todoroo.com> */ +@AndroidEntryPoint class TimerControlSet : TaskEditControlFragment() { - @Inject @ActivityContext lateinit var activity: Context + @Inject lateinit var activity: Activity @Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var theme: Theme @@ -87,8 +86,6 @@ class TimerControlSet : TaskEditControlFragment() { callback = activity as TimerControlSetCallback } - override fun inject(component: FragmentComponent) = component.inject(this) - override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putInt(EXTRA_ELAPSED, elapsed.timeDurationInSeconds) diff --git a/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.java b/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.java index b0c235293..de1504fea 100644 --- a/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.java +++ b/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.java @@ -20,11 +20,11 @@ import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.utility.Constants; +import dagger.hilt.android.qualifiers.ApplicationContext; import io.reactivex.Completable; import io.reactivex.schedulers.Schedulers; import javax.inject.Inject; import org.tasks.R; -import org.tasks.injection.ApplicationContext; import org.tasks.intents.TaskIntents; import org.tasks.notifications.NotificationManager; diff --git a/app/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.kt b/app/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.kt index 6e5ea2115..d0074f680 100644 --- a/app/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/ui/HideUntilControlSet.kt @@ -6,7 +6,6 @@ package com.todoroo.astrid.ui import android.app.Activity -import android.content.Context import android.content.Intent import android.os.Bundle import android.view.LayoutInflater @@ -18,12 +17,11 @@ import butterknife.BindView import butterknife.OnClick import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.data.Task +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.activities.DateAndTimePickerActivity import org.tasks.date.DateTimeUtils import org.tasks.dialogs.MyTimePickerDialog -import org.tasks.injection.ActivityContext -import org.tasks.injection.FragmentComponent import org.tasks.locale.Locale import org.tasks.preferences.Preferences import org.tasks.themes.ThemeBase @@ -37,10 +35,11 @@ import javax.inject.Inject * * @author Tim Su @todoroo.com> */ +@AndroidEntryPoint class HideUntilControlSet : TaskEditControlFragment(), OnItemSelectedListener { private val spinnerItems: MutableList = ArrayList() - @Inject @ActivityContext lateinit var activity: Context + @Inject lateinit var activity: Activity @Inject lateinit var themeBase: ThemeBase @Inject lateinit var preferences: Preferences @Inject lateinit var locale: Locale @@ -181,10 +180,6 @@ class HideUntilControlSet : TaskEditControlFragment(), OnItemSelectedListener { outState.putInt(EXTRA_SELECTION, selection) } - override fun inject(component: FragmentComponent) { - component.inject(this) - } - private fun updateSpinnerOptions(specificDate: Long) { spinnerItems.clear() // set up base values diff --git a/app/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.kt b/app/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.kt index 6fc7989cf..7e880f6de 100644 --- a/app/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.kt +++ b/app/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.kt @@ -6,7 +6,6 @@ package com.todoroo.astrid.ui import android.app.Activity -import android.content.Context import android.content.DialogInterface import android.content.Intent import android.graphics.Paint @@ -22,14 +21,13 @@ import butterknife.OnClick import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.alarms.AlarmService import com.todoroo.astrid.data.Task +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.activities.DateAndTimePickerActivity import org.tasks.data.Alarm import org.tasks.date.DateTimeUtils import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.MyTimePickerDialog -import org.tasks.injection.ActivityContext -import org.tasks.injection.FragmentComponent import org.tasks.locale.Locale import org.tasks.ui.TaskEditControlFragment import java.util.* @@ -41,10 +39,11 @@ import javax.inject.Inject * * @author Tim Su @todoroo.com> */ +@AndroidEntryPoint class ReminderControlSet : TaskEditControlFragment() { private val alarms: MutableSet = LinkedHashSet() - @Inject @ActivityContext lateinit var activity: Context + @Inject lateinit var activity: Activity @Inject lateinit var alarmService: AlarmService @Inject lateinit var locale: Locale @Inject lateinit var dialogBuilder: DialogBuilder @@ -291,8 +290,6 @@ class ReminderControlSet : TaskEditControlFragment() { } } - override fun inject(component: FragmentComponent) = component.inject(this) - companion object { const val TAG = R.string.TEA_ctrl_reminders_pref private const val REQUEST_NEW_ALARM = 12152 diff --git a/app/src/main/java/com/todoroo/astrid/voice/VoiceOutputAssistant.java b/app/src/main/java/com/todoroo/astrid/voice/VoiceOutputAssistant.java index c50a1627f..82aa5835b 100644 --- a/app/src/main/java/com/todoroo/astrid/voice/VoiceOutputAssistant.java +++ b/app/src/main/java/com/todoroo/astrid/voice/VoiceOutputAssistant.java @@ -4,11 +4,11 @@ import android.content.Context; import android.media.AudioManager; import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech.OnInitListener; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.util.HashMap; import java.util.Locale; import java.util.UUID; import javax.inject.Inject; -import org.tasks.injection.ApplicationContext; import timber.log.Timber; /** @author Arne Jans */ diff --git a/app/src/main/java/org/tasks/LocalBroadcastManager.java b/app/src/main/java/org/tasks/LocalBroadcastManager.java index 5f849e3e8..f37e11eee 100644 --- a/app/src/main/java/org/tasks/LocalBroadcastManager.java +++ b/app/src/main/java/org/tasks/LocalBroadcastManager.java @@ -5,8 +5,8 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import com.todoroo.astrid.api.AstridApiConstants; +import dagger.hilt.android.qualifiers.ApplicationContext; import javax.inject.Inject; -import org.tasks.injection.ApplicationContext; import org.tasks.widget.AppWidgetManager; public class LocalBroadcastManager { diff --git a/app/src/main/java/org/tasks/Notifier.kt b/app/src/main/java/org/tasks/Notifier.kt index 880445703..7f87a3553 100644 --- a/app/src/main/java/org/tasks/Notifier.kt +++ b/app/src/main/java/org/tasks/Notifier.kt @@ -10,7 +10,7 @@ import com.todoroo.astrid.api.Filter import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.reminders.ReminderService import com.todoroo.astrid.voice.VoiceOutputAssistant -import org.tasks.injection.ApplicationContext +import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.notifications.AudioManager import org.tasks.notifications.Notification import org.tasks.notifications.NotificationManager diff --git a/app/src/main/java/org/tasks/ShortcutManager.kt b/app/src/main/java/org/tasks/ShortcutManager.kt index 8ce2f3a9b..e6c525a8c 100644 --- a/app/src/main/java/org/tasks/ShortcutManager.kt +++ b/app/src/main/java/org/tasks/ShortcutManager.kt @@ -3,7 +3,7 @@ package org.tasks import android.content.Context import android.content.pm.ShortcutManager import com.todoroo.andlib.utility.AndroidUtilities -import org.tasks.injection.ApplicationContext +import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject import javax.inject.Singleton diff --git a/app/src/main/java/org/tasks/Tasks.kt b/app/src/main/java/org/tasks/Tasks.kt index 630398896..cb43df620 100644 --- a/app/src/main/java/org/tasks/Tasks.kt +++ b/app/src/main/java/org/tasks/Tasks.kt @@ -1,23 +1,25 @@ package org.tasks +import android.app.Application import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.util.Log import androidx.core.app.JobIntentService +import androidx.hilt.work.HiltWorkerFactory import androidx.work.Configuration import com.todoroo.astrid.service.Upgrader import dagger.Lazy +import dagger.hilt.android.HiltAndroidApp +import dagger.hilt.android.qualifiers.ApplicationContext import io.reactivex.Completable import io.reactivex.schedulers.Schedulers import org.tasks.billing.BillingClient import org.tasks.billing.Inventory import org.tasks.files.FileHelper -import org.tasks.injection.ApplicationComponent -import org.tasks.injection.ApplicationContext -import org.tasks.injection.InjectingApplication import org.tasks.injection.InjectingJobIntentService import org.tasks.jobs.WorkManager +import org.tasks.locale.Locale import org.tasks.location.GeofenceApi import org.tasks.preferences.Preferences import org.tasks.receivers.RefreshReceiver @@ -29,7 +31,8 @@ import org.tasks.widget.AppWidgetManager import timber.log.Timber import javax.inject.Inject -class Tasks : InjectingApplication(), Configuration.Provider { +@HiltAndroidApp +class Tasks : Application(), Configuration.Provider { @Inject @ApplicationContext lateinit var context: Context @Inject lateinit var preferences: Preferences @Inject lateinit var buildSetup: BuildSetup @@ -41,6 +44,7 @@ class Tasks : InjectingApplication(), Configuration.Provider { @Inject lateinit var geofenceApi: Lazy @Inject lateinit var billingClient: Lazy @Inject lateinit var appWidgetManager: Lazy + @Inject lateinit var workerFactory: HiltWorkerFactory override fun onCreate() { super.onCreate() @@ -49,6 +53,7 @@ class Tasks : InjectingApplication(), Configuration.Provider { preferences.isSyncOngoing = false ThemeBase.getThemeBase(preferences, inventory, null).setDefaultNightMode() localBroadcastManager.registerRefreshReceiver(RefreshBroadcastReceiver()) + Locale.getInstance(this).createConfigurationContext(applicationContext) Completable.fromAction { doInBackground() }.subscribeOn(Schedulers.io()).subscribe() } @@ -78,10 +83,9 @@ class Tasks : InjectingApplication(), Configuration.Provider { appWidgetManager.get().reconfigureWidgets() } - override fun inject(component: ApplicationComponent) = component.inject(this) - override fun getWorkManagerConfiguration(): Configuration { return Configuration.Builder() + .setWorkerFactory(workerFactory) .setMinimumLoggingLevel(if (BuildConfig.DEBUG) Log.DEBUG else Log.INFO) .build() } diff --git a/app/src/main/java/org/tasks/activities/CameraActivity.java b/app/src/main/java/org/tasks/activities/CameraActivity.java index 3f532e7a1..dcdcc41f0 100644 --- a/app/src/main/java/org/tasks/activities/CameraActivity.java +++ b/app/src/main/java/org/tasks/activities/CameraActivity.java @@ -8,15 +8,16 @@ import android.os.Bundle; import android.provider.MediaStore; import androidx.core.content.FileProvider; import com.todoroo.astrid.utility.Constants; +import dagger.hilt.android.AndroidEntryPoint; import java.io.File; import java.io.IOException; import javax.inject.Inject; import org.tasks.files.FileHelper; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.preferences.Preferences; import org.tasks.time.DateTime; +@AndroidEntryPoint public class CameraActivity extends InjectingAppCompatActivity { private static final int REQUEST_CODE_CAMERA = 75; @@ -57,11 +58,6 @@ public class CameraActivity extends InjectingAppCompatActivity { } } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_CAMERA) { diff --git a/app/src/main/java/org/tasks/activities/DateAndTimePickerActivity.java b/app/src/main/java/org/tasks/activities/DateAndTimePickerActivity.java index 9ed868132..e33318924 100644 --- a/app/src/main/java/org/tasks/activities/DateAndTimePickerActivity.java +++ b/app/src/main/java/org/tasks/activities/DateAndTimePickerActivity.java @@ -7,15 +7,16 @@ import static org.tasks.time.DateTimeUtils.currentTimeMillis; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.dialogs.MyDatePickerDialog; import org.tasks.dialogs.MyTimePickerDialog; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.preferences.Preferences; import org.tasks.themes.ThemeAccent; import org.tasks.time.DateTime; +@AndroidEntryPoint public class DateAndTimePickerActivity extends InjectingAppCompatActivity implements MyDatePickerDialog.DatePickerCallback, MyTimePickerDialog.TimePickerCallback { @@ -51,11 +52,6 @@ public class DateAndTimePickerActivity extends InjectingAppCompatActivity } } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); diff --git a/app/src/main/java/org/tasks/activities/FilterSelectionActivity.java b/app/src/main/java/org/tasks/activities/FilterSelectionActivity.java index 59140f733..c3c519a86 100644 --- a/app/src/main/java/org/tasks/activities/FilterSelectionActivity.java +++ b/app/src/main/java/org/tasks/activities/FilterSelectionActivity.java @@ -8,6 +8,8 @@ import android.os.Bundle; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.astrid.adapter.FilterAdapter; import com.todoroo.astrid.api.Filter; +import dagger.hilt.android.AndroidEntryPoint; +import dagger.hilt.android.qualifiers.ApplicationContext; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; @@ -16,13 +18,12 @@ import javax.inject.Inject; import org.tasks.LocalBroadcastManager; import org.tasks.dialogs.DialogBuilder; import org.tasks.filters.FilterProvider; -import org.tasks.injection.ActivityComponent; -import org.tasks.injection.ApplicationContext; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.Preferences; import org.tasks.widget.WidgetPreferences; +@AndroidEntryPoint public class FilterSelectionActivity extends InjectingAppCompatActivity { public static final String EXTRA_RETURN_FILTER = "extra_include_filter"; @@ -125,9 +126,4 @@ public class FilterSelectionActivity extends InjectingAppCompatActivity { .observeOn(AndroidSchedulers.mainThread()) .subscribe(items -> filterAdapter.setData(items, selected))); } - - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt b/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt index d2ef1d883..22ce2cacf 100644 --- a/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/FilterSettingsActivity.kt @@ -33,17 +33,18 @@ import com.todoroo.astrid.core.CustomFilterItemTouchHelper import com.todoroo.astrid.dao.Database import com.todoroo.astrid.dao.TaskDao.TaskCriteria.activeAndVisible import com.todoroo.astrid.data.Task +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.Strings import org.tasks.data.Filter import org.tasks.data.FilterDao import org.tasks.filters.FilterCriteriaProvider -import org.tasks.injection.ActivityComponent import org.tasks.locale.Locale import java.util.* import javax.inject.Inject import kotlin.math.max +@AndroidEntryPoint class FilterSettingsActivity : BaseListSettingsActivity() { @Inject lateinit var filterDao: FilterDao @Inject lateinit var locale: Locale @@ -225,8 +226,6 @@ class FilterSettingsActivity : BaseListSettingsActivity() { nameLayout.error = null } - override fun inject(component: ActivityComponent) = component.inject(this) - override fun save() { val newName = newName if (Strings.isNullOrEmpty(newName)) { diff --git a/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.java b/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.java index dfc50b750..1b4b55fcd 100644 --- a/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.java +++ b/app/src/main/java/org/tasks/activities/GoogleTaskListSettingsActivity.java @@ -19,15 +19,16 @@ import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.gtasks.GtasksListService; import com.todoroo.astrid.gtasks.api.GtasksInvoker; import com.todoroo.astrid.service.TaskDeleter; +import dagger.hilt.android.AndroidEntryPoint; +import dagger.hilt.android.qualifiers.ApplicationContext; import javax.inject.Inject; import org.tasks.R; import org.tasks.data.GoogleTaskAccount; import org.tasks.data.GoogleTaskList; import org.tasks.data.GoogleTaskListDao; -import org.tasks.injection.ActivityComponent; -import org.tasks.injection.ApplicationContext; import timber.log.Timber; +@AndroidEntryPoint public class GoogleTaskListSettingsActivity extends BaseListSettingsActivity { public static final String EXTRA_ACCOUNT = "extra_account"; @@ -116,11 +117,6 @@ public class GoogleTaskListSettingsActivity extends BaseListSettingsActivity { return progressView.getVisibility() == View.VISIBLE; } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override protected void save() { if (requestInProgress()) { diff --git a/app/src/main/java/org/tasks/activities/ListPicker.kt b/app/src/main/java/org/tasks/activities/ListPicker.kt index a90561264..3c5e2e98c 100644 --- a/app/src/main/java/org/tasks/activities/ListPicker.kt +++ b/app/src/main/java/org/tasks/activities/ListPicker.kt @@ -8,12 +8,14 @@ import android.content.DialogInterface import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.DialogFragment import androidx.fragment.app.Fragment import com.todoroo.astrid.adapter.FilterAdapter import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.FilterListItem import com.todoroo.astrid.api.GtasksFilter +import dagger.hilt.android.AndroidEntryPoint import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable @@ -21,11 +23,10 @@ import io.reactivex.schedulers.Schedulers import org.tasks.LocalBroadcastManager import org.tasks.dialogs.DialogBuilder import org.tasks.filters.FilterProvider -import org.tasks.injection.FragmentComponent -import org.tasks.injection.InjectingDialogFragment import javax.inject.Inject -class ListPicker : InjectingDialogFragment() { +@AndroidEntryPoint +class ListPicker : DialogFragment() { @Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var filterAdapter: FilterAdapter @Inject lateinit var filterProvider: FilterProvider @@ -63,8 +64,6 @@ class ListPicker : InjectingDialogFragment() { filterAdapter.save(outState) } - override fun inject(component: FragmentComponent) = component.inject(this) - private fun selectedList(list: Filter) { targetFragment!!.onActivityResult( targetRequestCode, diff --git a/app/src/main/java/org/tasks/activities/NavigationDrawerCustomization.kt b/app/src/main/java/org/tasks/activities/NavigationDrawerCustomization.kt index 556fe0356..387411170 100644 --- a/app/src/main/java/org/tasks/activities/NavigationDrawerCustomization.kt +++ b/app/src/main/java/org/tasks/activities/NavigationDrawerCustomization.kt @@ -16,6 +16,7 @@ import com.todoroo.astrid.adapter.FilterViewHolder import com.todoroo.astrid.adapter.NavigationDrawerAdapter import com.todoroo.astrid.api.* import com.todoroo.astrid.api.FilterListItem.Type.ITEM +import dagger.hilt.android.AndroidEntryPoint import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable @@ -29,12 +30,12 @@ import org.tasks.dialogs.NewFilterDialog.Companion.newFilterDialog import org.tasks.filters.FilterProvider import org.tasks.filters.NavigationDrawerAction import org.tasks.filters.PlaceFilter -import org.tasks.injection.ActivityComponent import org.tasks.injection.ThemedInjectingAppCompatActivity import org.tasks.preferences.Preferences import org.tasks.ui.NavigationDrawerFragment.Companion.REQUEST_NEW_FILTER import javax.inject.Inject +@AndroidEntryPoint class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolbar.OnMenuItemClickListener { @Inject lateinit var filterProvider: FilterProvider @@ -144,8 +145,6 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba } } - override fun inject(component: ActivityComponent) = component.inject(this) - override fun onMenuItemClick(item: MenuItem): Boolean { return if (item.itemId == R.id.reset_sort) { filterDao.resetOrders() diff --git a/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt b/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt index a5e356156..3b00809c5 100644 --- a/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt @@ -9,15 +9,16 @@ import com.google.android.material.textfield.TextInputEditText import com.google.android.material.textfield.TextInputLayout import com.todoroo.astrid.activity.MainActivity import com.todoroo.astrid.activity.TaskListFragment +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.Strings.isNullOrEmpty import org.tasks.data.LocationDao import org.tasks.data.Place import org.tasks.filters.PlaceFilter -import org.tasks.injection.ActivityComponent import org.tasks.location.MapFragment import javax.inject.Inject +@AndroidEntryPoint class PlaceSettingsActivity : BaseListSettingsActivity(), MapFragment.MapFragmentCallback { companion object { @@ -101,8 +102,6 @@ class PlaceSettingsActivity : BaseListSettingsActivity(), MapFragment.MapFragmen finish() } - override fun inject(component: ActivityComponent) = component.inject(this) - override fun onMapReady(mapFragment: MapFragment?) { map = mapFragment!! map.setMarkers(listOf(place)) diff --git a/app/src/main/java/org/tasks/activities/TagSettingsActivity.java b/app/src/main/java/org/tasks/activities/TagSettingsActivity.java index b90f367f9..0e3bacdb4 100644 --- a/app/src/main/java/org/tasks/activities/TagSettingsActivity.java +++ b/app/src/main/java/org/tasks/activities/TagSettingsActivity.java @@ -20,13 +20,14 @@ import com.todoroo.astrid.activity.MainActivity; import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.api.TagFilter; import com.todoroo.astrid.helper.UUIDHelper; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.R; import org.tasks.data.TagDao; import org.tasks.data.TagData; import org.tasks.data.TagDataDao; -import org.tasks.injection.ActivityComponent; +@AndroidEntryPoint public class TagSettingsActivity extends BaseListSettingsActivity { public static final String TOKEN_AUTOPOPULATE_NAME = "autopopulateName"; // $NON-NLS-1$ @@ -90,11 +91,6 @@ public class TagSettingsActivity extends BaseListSettingsActivity { nameLayout.setError(null); } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - private String getNewName() { return name.getText().toString().trim(); } diff --git a/app/src/main/java/org/tasks/activities/attribution/AttributionActivity.kt b/app/src/main/java/org/tasks/activities/attribution/AttributionActivity.kt index 089c36d40..cd29095e5 100644 --- a/app/src/main/java/org/tasks/activities/attribution/AttributionActivity.kt +++ b/app/src/main/java/org/tasks/activities/attribution/AttributionActivity.kt @@ -8,13 +8,14 @@ import androidx.recyclerview.widget.RecyclerView import butterknife.BindView import butterknife.ButterKnife import com.google.common.collect.Multimaps +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.activities.attribution.AttributionViewModel.LibraryAttribution -import org.tasks.injection.ActivityComponent import org.tasks.injection.ThemedInjectingAppCompatActivity import timber.log.Timber import java.util.* +@AndroidEntryPoint class AttributionActivity : ThemedInjectingAppCompatActivity() { @BindView(R.id.toolbar) lateinit var toolbar: Toolbar @@ -60,6 +61,4 @@ class AttributionActivity : ThemedInjectingAppCompatActivity() { AttributionRow(it, libraries.sorted().joinToString("\n")) } } - - override fun inject(component: ActivityComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/backup/TasksBackupAgent.java b/app/src/main/java/org/tasks/backup/TasksBackupAgent.java index b4802a0fd..f5122afb6 100644 --- a/app/src/main/java/org/tasks/backup/TasksBackupAgent.java +++ b/app/src/main/java/org/tasks/backup/TasksBackupAgent.java @@ -6,21 +6,31 @@ import android.app.backup.FileBackupHelper; import android.net.Uri; import android.os.ParcelFileDescriptor; import com.todoroo.astrid.backup.BackupConstants; +import dagger.hilt.EntryPoint; +import dagger.hilt.InstallIn; +import dagger.hilt.android.EntryPointAccessors; +import dagger.hilt.android.components.ApplicationComponent; import java.io.File; import java.io.IOException; -import javax.inject.Inject; -import org.tasks.injection.InjectingApplication; import timber.log.Timber; public class TasksBackupAgent extends BackupAgentHelper { + @EntryPoint + @InstallIn(ApplicationComponent.class) + interface TasksBackupAgentEntryPoint { + TasksJsonImporter getTasksJsonImporter(); + } + private static final String BACKUP_KEY = "backup"; - @Inject TasksJsonImporter importer; + private TasksJsonImporter importer; @Override public void onCreate() { - ((InjectingApplication) getApplicationContext()).getComponent().inject(this); + TasksBackupAgentEntryPoint hilt = + EntryPointAccessors.fromApplication(getApplicationContext(), TasksBackupAgentEntryPoint.class); + importer = hilt.getTasksJsonImporter(); addHelper(BACKUP_KEY, new FileBackupHelper(this, BackupConstants.INTERNAL_BACKUP)); } diff --git a/app/src/main/java/org/tasks/billing/PurchaseActivity.kt b/app/src/main/java/org/tasks/billing/PurchaseActivity.kt index 5f749f203..ffc43bd8b 100644 --- a/app/src/main/java/org/tasks/billing/PurchaseActivity.kt +++ b/app/src/main/java/org/tasks/billing/PurchaseActivity.kt @@ -12,12 +12,12 @@ import androidx.appcompat.widget.Toolbar import butterknife.ButterKnife import butterknife.OnClick import com.google.android.material.button.MaterialButtonToggleGroup +import dagger.hilt.android.AndroidEntryPoint import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.databinding.ActivityPurchaseBinding import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.IconLayoutManager -import org.tasks.injection.ActivityComponent import org.tasks.injection.ThemedInjectingAppCompatActivity import org.tasks.locale.Locale import timber.log.Timber @@ -26,6 +26,7 @@ import javax.inject.Inject private const val EXTRA_MONTHLY = "extra_monthly" private const val EXTRA_PRICE = "extra_price" +@AndroidEntryPoint class PurchaseActivity : ThemedInjectingAppCompatActivity(), OnPurchasesUpdated, Toolbar.OnMenuItemClickListener { @Inject lateinit var inventory: Inventory @@ -129,10 +130,6 @@ class PurchaseActivity : ThemedInjectingAppCompatActivity(), OnPurchasesUpdated, localBroadcastManager.unregisterReceiver(purchaseReceiver) } - override fun inject(component: ActivityComponent) { - component.inject(this) - } - private fun setup() { currentSubscription = inventory.subscription if (adapter.selected == 0) { diff --git a/app/src/main/java/org/tasks/caldav/CaldavAccountSettingsActivity.java b/app/src/main/java/org/tasks/caldav/CaldavAccountSettingsActivity.java index 4c2ce526f..ba3fdc43b 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavAccountSettingsActivity.java +++ b/app/src/main/java/org/tasks/caldav/CaldavAccountSettingsActivity.java @@ -4,12 +4,13 @@ import android.os.Bundle; import androidx.appcompat.widget.Toolbar; import androidx.lifecycle.ViewModelProvider; import com.todoroo.astrid.helper.UUIDHelper; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.R; import org.tasks.data.CaldavAccount; -import org.tasks.injection.ActivityComponent; import timber.log.Timber; +@AndroidEntryPoint public class CaldavAccountSettingsActivity extends BaseCaldavAccountSettingsActivity implements Toolbar.OnMenuItemClickListener { @@ -94,9 +95,4 @@ public class CaldavAccountSettingsActivity extends BaseCaldavAccountSettingsActi protected String getHelpUrl() { return "https://tasks.org/caldav"; } - - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.java b/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.java index e0cb6f43d..65a0eb7b9 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.java +++ b/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.java @@ -2,12 +2,13 @@ package org.tasks.caldav; import android.os.Bundle; import androidx.lifecycle.ViewModelProvider; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.R; import org.tasks.data.CaldavAccount; import org.tasks.data.CaldavCalendar; -import org.tasks.injection.ActivityComponent; +@AndroidEntryPoint public class CaldavCalendarSettingsActivity extends BaseCaldavCalendarSettingsActivity { @Inject CaldavClient client; @@ -35,11 +36,6 @@ public class CaldavCalendarSettingsActivity extends BaseCaldavCalendarSettingsAc updateCalendarViewModel.observe(this, ignored -> updateCalendar(), this::requestFailed); } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override protected void createCalendar(CaldavAccount caldavAccount, String name, int color) { createCalendarViewModel.createCalendar(client, caldavAccount, name, color); diff --git a/app/src/main/java/org/tasks/caldav/CaldavClient.java b/app/src/main/java/org/tasks/caldav/CaldavClient.java index 4f9cbbc57..f8ce44a26 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavClient.java +++ b/app/src/main/java/org/tasks/caldav/CaldavClient.java @@ -25,6 +25,7 @@ import at.bitfire.dav4jvm.property.ResourceType; import at.bitfire.dav4jvm.property.SupportedCalendarComponentSet; import at.bitfire.dav4jvm.property.SyncToken; import com.todoroo.astrid.helper.UUIDHelper; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.io.IOException; import java.io.StringWriter; import java.security.KeyManagementException; @@ -43,7 +44,6 @@ import org.tasks.DebugNetworkInterceptor; import org.tasks.R; import org.tasks.data.CaldavAccount; import org.tasks.data.CaldavCalendar; -import org.tasks.injection.ApplicationContext; import org.tasks.preferences.Preferences; import org.tasks.security.KeyStoreEncryption; import org.tasks.ui.DisplayableException; diff --git a/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.java b/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.java index 3d4bf7626..8db7f661c 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.java +++ b/app/src/main/java/org/tasks/caldav/CaldavSynchronizer.java @@ -31,6 +31,7 @@ import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.helper.UUIDHelper; import com.todoroo.astrid.service.TaskDeleter; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.io.IOException; import java.net.ConnectException; import java.net.SocketTimeoutException; @@ -55,7 +56,6 @@ import org.tasks.data.CaldavAccount; import org.tasks.data.CaldavCalendar; import org.tasks.data.CaldavDao; import org.tasks.data.CaldavTask; -import org.tasks.injection.ApplicationContext; import timber.log.Timber; public class CaldavSynchronizer { diff --git a/app/src/main/java/org/tasks/caldav/LocalListSettingsActivity.kt b/app/src/main/java/org/tasks/caldav/LocalListSettingsActivity.kt index 70a2b3515..a79bb6ebf 100644 --- a/app/src/main/java/org/tasks/caldav/LocalListSettingsActivity.kt +++ b/app/src/main/java/org/tasks/caldav/LocalListSettingsActivity.kt @@ -1,12 +1,13 @@ package org.tasks.caldav import android.os.Bundle +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.data.CaldavAccount import org.tasks.data.CaldavCalendar import org.tasks.data.CaldavDao -import org.tasks.injection.ActivityComponent +@AndroidEntryPoint class LocalListSettingsActivity : BaseCaldavCalendarSettingsActivity() { override fun getLayout() = R.layout.activity_caldav_calendar_settings @@ -17,8 +18,6 @@ class LocalListSettingsActivity : BaseCaldavCalendarSettingsActivity() { toolbar.menu.findItem(R.id.delete)?.isVisible = caldavDao.getCalendarsByAccount(CaldavDao.LOCAL).size > 1 } - override fun inject(component: ActivityComponent) = component.inject(this) - override fun createCalendar(caldavAccount: CaldavAccount, name: String, color: Int) = createSuccessful(null) diff --git a/app/src/main/java/org/tasks/calendars/CalendarEventAttendeeProvider.java b/app/src/main/java/org/tasks/calendars/CalendarEventAttendeeProvider.java index 27ab41253..0363a1053 100644 --- a/app/src/main/java/org/tasks/calendars/CalendarEventAttendeeProvider.java +++ b/app/src/main/java/org/tasks/calendars/CalendarEventAttendeeProvider.java @@ -4,11 +4,11 @@ import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.provider.CalendarContract; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.inject.Inject; -import org.tasks.injection.ApplicationContext; import org.tasks.preferences.PermissionChecker; import timber.log.Timber; diff --git a/app/src/main/java/org/tasks/calendars/CalendarEventProvider.java b/app/src/main/java/org/tasks/calendars/CalendarEventProvider.java index b355efb6e..485376899 100644 --- a/app/src/main/java/org/tasks/calendars/CalendarEventProvider.java +++ b/app/src/main/java/org/tasks/calendars/CalendarEventProvider.java @@ -10,11 +10,11 @@ import android.net.Uri; import android.provider.CalendarContract; import androidx.annotation.Nullable; import com.todoroo.astrid.data.Task; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.inject.Inject; -import org.tasks.injection.ApplicationContext; import org.tasks.preferences.PermissionChecker; import timber.log.Timber; diff --git a/app/src/main/java/org/tasks/calendars/CalendarPicker.java b/app/src/main/java/org/tasks/calendars/CalendarPicker.java index b82edf433..27391016c 100644 --- a/app/src/main/java/org/tasks/calendars/CalendarPicker.java +++ b/app/src/main/java/org/tasks/calendars/CalendarPicker.java @@ -12,21 +12,22 @@ import android.widget.ListView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; +import dagger.hilt.android.AndroidEntryPoint; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import org.tasks.R; import org.tasks.dialogs.DialogBuilder; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingDialogFragment; import org.tasks.preferences.FragmentPermissionRequestor; import org.tasks.preferences.PermissionChecker; import org.tasks.preferences.PermissionRequestor; import org.tasks.themes.Theme; import org.tasks.ui.SingleCheckedArrayAdapter; -public class CalendarPicker extends InjectingDialogFragment { +@AndroidEntryPoint +public class CalendarPicker extends DialogFragment { public static final String EXTRA_CALENDAR_ID = "extra_calendar_id"; public static final String EXTRA_CALENDAR_NAME = "extra_calendar_name"; @@ -124,9 +125,4 @@ public class CalendarPicker extends InjectingDialogFragment { super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } - - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/calendars/CalendarProvider.java b/app/src/main/java/org/tasks/calendars/CalendarProvider.java index 1372f073b..b9b89e0cd 100644 --- a/app/src/main/java/org/tasks/calendars/CalendarProvider.java +++ b/app/src/main/java/org/tasks/calendars/CalendarProvider.java @@ -9,11 +9,11 @@ import android.database.Cursor; import android.net.Uri; import android.provider.CalendarContract; import androidx.annotation.Nullable; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.inject.Inject; -import org.tasks.injection.ApplicationContext; import org.tasks.preferences.PermissionChecker; import timber.log.Timber; diff --git a/app/src/main/java/org/tasks/dashclock/DashClockExtension.java b/app/src/main/java/org/tasks/dashclock/DashClockExtension.java index bef982a6c..a5ea2bbde 100644 --- a/app/src/main/java/org/tasks/dashclock/DashClockExtension.java +++ b/app/src/main/java/org/tasks/dashclock/DashClockExtension.java @@ -8,15 +8,16 @@ import com.todoroo.astrid.activity.MainActivity; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; +import dagger.hilt.android.AndroidEntryPoint; import java.util.List; import javax.inject.Inject; import org.tasks.LocalBroadcastManager; import org.tasks.R; -import org.tasks.injection.InjectingApplication; import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.Preferences; import timber.log.Timber; +@AndroidEntryPoint public class DashClockExtension extends com.google.android.apps.dashclock.api.DashClockExtension { @Inject DefaultFilterProvider defaultFilterProvider; @@ -36,8 +37,6 @@ public class DashClockExtension extends com.google.android.apps.dashclock.api.Da public void onCreate() { super.onCreate(); - ((InjectingApplication) getApplication()).getComponent().inject(this); - localBroadcastManager.registerRefreshReceiver(refreshReceiver); } diff --git a/app/src/main/java/org/tasks/dashclock/DashClockSettings.kt b/app/src/main/java/org/tasks/dashclock/DashClockSettings.kt index 55fc4546c..20825d115 100644 --- a/app/src/main/java/org/tasks/dashclock/DashClockSettings.kt +++ b/app/src/main/java/org/tasks/dashclock/DashClockSettings.kt @@ -1,14 +1,13 @@ package org.tasks.dashclock +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R -import org.tasks.injection.ActivityComponent import org.tasks.preferences.BasePreferences import org.tasks.preferences.fragments.DashClock +@AndroidEntryPoint class DashClockSettings : BasePreferences() { override fun getRootTitle() = R.string.pro_dashclock_extension override fun getRootPreference() = DashClock() - - override fun inject(component: ActivityComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/data/CaldavTask.kt b/app/src/main/java/org/tasks/data/CaldavTask.kt index 2134f0d0f..226a2ab78 100644 --- a/app/src/main/java/org/tasks/data/CaldavTask.kt +++ b/app/src/main/java/org/tasks/data/CaldavTask.kt @@ -1,8 +1,6 @@ package org.tasks.data import androidx.room.* -import com.todoroo.andlib.data.Property -import com.todoroo.andlib.data.Property.* import com.todoroo.andlib.data.Table import com.todoroo.astrid.helper.UUIDHelper diff --git a/app/src/main/java/org/tasks/data/Geofence.kt b/app/src/main/java/org/tasks/data/Geofence.kt index 4c0ee4f93..6a475103b 100644 --- a/app/src/main/java/org/tasks/data/Geofence.kt +++ b/app/src/main/java/org/tasks/data/Geofence.kt @@ -3,7 +3,6 @@ package org.tasks.data import android.os.Parcel import android.os.Parcelable import androidx.room.* -import com.todoroo.andlib.data.Property import com.todoroo.andlib.data.Table import org.tasks.R import org.tasks.preferences.Preferences diff --git a/app/src/main/java/org/tasks/data/GoogleTask.kt b/app/src/main/java/org/tasks/data/GoogleTask.kt index d1fb1f69e..fe090da1b 100644 --- a/app/src/main/java/org/tasks/data/GoogleTask.kt +++ b/app/src/main/java/org/tasks/data/GoogleTask.kt @@ -1,8 +1,6 @@ package org.tasks.data import androidx.room.* -import com.todoroo.andlib.data.Property -import com.todoroo.andlib.data.Property.* import com.todoroo.andlib.data.Table @Entity(tableName = "google_tasks", diff --git a/app/src/main/java/org/tasks/data/SubsetGoogleTask.java b/app/src/main/java/org/tasks/data/SubsetGoogleTask.java index c86b4ecde..ed6cb79d9 100644 --- a/app/src/main/java/org/tasks/data/SubsetGoogleTask.java +++ b/app/src/main/java/org/tasks/data/SubsetGoogleTask.java @@ -33,10 +33,6 @@ public class SubsetGoogleTask { gt_order = order; } - public int getIndent() { - return gt_parent > 0 ? 1 : 0; - } - @Override public boolean equals(Object o) { if (this == o) { diff --git a/app/src/main/java/org/tasks/data/Tag.kt b/app/src/main/java/org/tasks/data/Tag.kt index 79f69340f..804717c78 100644 --- a/app/src/main/java/org/tasks/data/Tag.kt +++ b/app/src/main/java/org/tasks/data/Tag.kt @@ -1,7 +1,6 @@ package org.tasks.data import androidx.room.* -import com.todoroo.andlib.data.Property import com.todoroo.andlib.data.Table import com.todoroo.astrid.data.Task import org.tasks.backup.XmlReader diff --git a/app/src/main/java/org/tasks/data/UserActivity.kt b/app/src/main/java/org/tasks/data/UserActivity.kt index 878eb40d1..d2724bcd1 100644 --- a/app/src/main/java/org/tasks/data/UserActivity.kt +++ b/app/src/main/java/org/tasks/data/UserActivity.kt @@ -7,7 +7,6 @@ import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.Ignore import androidx.room.PrimaryKey -import com.todoroo.andlib.data.Property import com.todoroo.andlib.data.Table import com.todoroo.astrid.data.Task import org.json.JSONException diff --git a/app/src/main/java/org/tasks/dialogs/AddAttachmentDialog.java b/app/src/main/java/org/tasks/dialogs/AddAttachmentDialog.java index e516a41ec..1844c77f3 100644 --- a/app/src/main/java/org/tasks/dialogs/AddAttachmentDialog.java +++ b/app/src/main/java/org/tasks/dialogs/AddAttachmentDialog.java @@ -3,31 +3,31 @@ package org.tasks.dialogs; import static org.tasks.dialogs.RecordAudioDialog.newRecordAudioDialog; import static org.tasks.files.FileHelper.newFilePickerIntent; +import android.app.Activity; import android.app.Dialog; -import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.provider.MediaStore.Images.Media; import androidx.annotation.NonNull; +import androidx.fragment.app.DialogFragment; import com.todoroo.astrid.files.FilesControlSet; +import dagger.hilt.android.AndroidEntryPoint; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import org.tasks.R; import org.tasks.activities.CameraActivity; -import org.tasks.injection.ActivityContext; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingDialogFragment; import org.tasks.preferences.Device; -public class AddAttachmentDialog extends InjectingDialogFragment { +@AndroidEntryPoint +public class AddAttachmentDialog extends DialogFragment { public static final int REQUEST_CAMERA = 12120; public static final int REQUEST_GALLERY = 12121; public static final int REQUEST_STORAGE = 12122; public static final int REQUEST_AUDIO = 12123; private static final String FRAG_TAG_RECORD_AUDIO = "frag_tag_record_audio"; - @Inject @ActivityContext Context context; + @Inject Activity context; @Inject DialogBuilder dialogBuilder; @Inject Device device; @@ -37,11 +37,6 @@ public class AddAttachmentDialog extends InjectingDialogFragment { return dialog; } - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } - @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { diff --git a/app/src/main/java/org/tasks/dialogs/ColorPalettePicker.kt b/app/src/main/java/org/tasks/dialogs/ColorPalettePicker.kt index 1934c2e56..c456c8713 100644 --- a/app/src/main/java/org/tasks/dialogs/ColorPalettePicker.kt +++ b/app/src/main/java/org/tasks/dialogs/ColorPalettePicker.kt @@ -8,22 +8,23 @@ import android.content.Intent import android.os.Bundle import android.os.Parcelable import android.view.LayoutInflater +import androidx.fragment.app.DialogFragment import androidx.fragment.app.Fragment import androidx.recyclerview.widget.RecyclerView import butterknife.BindView import butterknife.ButterKnife +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.billing.Inventory import org.tasks.billing.PurchaseActivity import org.tasks.dialogs.ColorPickerAdapter.Palette import org.tasks.dialogs.ColorWheelPicker.Companion.newColorWheel -import org.tasks.injection.FragmentComponent -import org.tasks.injection.InjectingDialogFragment import org.tasks.themes.ColorProvider import org.tasks.themes.ThemeColor import javax.inject.Inject -class ColorPalettePicker : InjectingDialogFragment() { +@AndroidEntryPoint +class ColorPalettePicker : DialogFragment() { companion object { private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker" @@ -87,7 +88,7 @@ class ColorPalettePicker : InjectingDialogFragment() { Palette.WIDGET -> colorProvider.getWidgetColors() } - val iconPickerAdapter = ColorPickerAdapter(context as Activity, inventory, this::onSelected) + val iconPickerAdapter = ColorPickerAdapter(requireActivity(), inventory, this::onSelected) recyclerView.layoutManager = IconLayoutManager(context) recyclerView.adapter = iconPickerAdapter iconPickerAdapter.submitList(colors) @@ -133,6 +134,4 @@ class ColorPalettePicker : InjectingDialogFragment() { targetFragment?.onActivityResult(targetRequestCode, RESULT_OK, data) } } - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/dialogs/ColorWheelPicker.kt b/app/src/main/java/org/tasks/dialogs/ColorWheelPicker.kt index b1b670912..d818ac7d8 100644 --- a/app/src/main/java/org/tasks/dialogs/ColorWheelPicker.kt +++ b/app/src/main/java/org/tasks/dialogs/ColorWheelPicker.kt @@ -8,20 +8,21 @@ import android.content.DialogInterface import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.DialogFragment import androidx.fragment.app.Fragment import com.flask.colorpicker.ColorPickerView import com.flask.colorpicker.builder.ColorPickerDialogBuilder +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.billing.Inventory import org.tasks.billing.PurchaseActivity -import org.tasks.injection.FragmentComponent -import org.tasks.injection.InjectingDialogFragment import org.tasks.ui.NavigationDrawerFragment.Companion.REQUEST_PURCHASE import javax.inject.Inject private const val REQUEST_PURCHASE = 10010 -class ColorWheelPicker : InjectingDialogFragment() { +@AndroidEntryPoint +class ColorWheelPicker : DialogFragment() { companion object { const val EXTRA_SELECTED = "extra_selected" @@ -46,8 +47,6 @@ class ColorWheelPicker : InjectingDialogFragment() { var selected = -1 var callback: ColorPickedCallback? = null - override fun inject(component: FragmentComponent) = component.inject(this) - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { selected = savedInstanceState?.getInt(EXTRA_SELECTED) ?: requireArguments().getInt(EXTRA_SELECTED, 0) diff --git a/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt b/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt index 88500c810..bde975cbe 100644 --- a/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt +++ b/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt @@ -18,15 +18,15 @@ import butterknife.ButterKnife import butterknife.OnClick import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.databinding.DialogDateTimePickerBinding import org.tasks.date.DateTimeUtils.newDateTime import org.tasks.dialogs.MyTimePickerDialog.newTimePicker -import org.tasks.injection.FragmentComponent -import org.tasks.injection.InjectingBottomSheetDialogFragment import org.tasks.locale.Locale import org.tasks.notifications.NotificationManager import org.tasks.preferences.Preferences @@ -35,7 +35,8 @@ import org.tasks.time.DateTime import java.time.format.FormatStyle import javax.inject.Inject -class DateTimePicker : InjectingBottomSheetDialogFragment() { +@AndroidEntryPoint +class DateTimePicker : BottomSheetDialogFragment() { @Inject lateinit var activity: Activity @Inject lateinit var preferences: Preferences @@ -324,6 +325,4 @@ class DateTimePicker : InjectingBottomSheetDialogFragment() { super.onActivityResult(requestCode, resultCode, data) } } - - override fun inject(component: FragmentComponent) = component.inject(this) } diff --git a/app/src/main/java/org/tasks/dialogs/ExportTasksDialog.java b/app/src/main/java/org/tasks/dialogs/ExportTasksDialog.java index cadc7e9bf..604b99730 100644 --- a/app/src/main/java/org/tasks/dialogs/ExportTasksDialog.java +++ b/app/src/main/java/org/tasks/dialogs/ExportTasksDialog.java @@ -4,12 +4,13 @@ import android.app.Dialog; import android.app.ProgressDialog; import android.os.Bundle; import androidx.annotation.NonNull; +import androidx.fragment.app.DialogFragment; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.backup.TasksJsonExporter; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingDialogFragment; -public class ExportTasksDialog extends InjectingDialogFragment { +@AndroidEntryPoint +public class ExportTasksDialog extends DialogFragment { @Inject DialogBuilder dialogBuilder; @Inject TasksJsonExporter tasksJsonExporter; @@ -33,9 +34,4 @@ public class ExportTasksDialog extends InjectingDialogFragment { getActivity(), TasksJsonExporter.ExportType.EXPORT_TYPE_MANUAL, progressDialog); return progressDialog; } - - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/dialogs/GeofenceDialog.java b/app/src/main/java/org/tasks/dialogs/GeofenceDialog.java index 2bfe1f707..e82feb849 100644 --- a/app/src/main/java/org/tasks/dialogs/GeofenceDialog.java +++ b/app/src/main/java/org/tasks/dialogs/GeofenceDialog.java @@ -2,8 +2,8 @@ package org.tasks.dialogs; import static android.app.Activity.RESULT_OK; +import android.app.Activity; import android.app.Dialog; -import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; @@ -13,21 +13,21 @@ import android.view.View; import android.widget.Switch; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; import butterknife.BindView; import butterknife.ButterKnife; import com.google.android.material.slider.Slider; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.R; import org.tasks.data.Geofence; import org.tasks.data.Location; -import org.tasks.injection.ActivityContext; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingDialogFragment; import org.tasks.locale.Locale; import org.tasks.preferences.PermissionChecker; import org.tasks.ui.Toaster; -public class GeofenceDialog extends InjectingDialogFragment { +@AndroidEntryPoint +public class GeofenceDialog extends DialogFragment { public static final String EXTRA_GEOFENCE = "extra_geofence"; private static final String EXTRA_ORIGINAL = "extra_original"; @@ -35,7 +35,7 @@ public class GeofenceDialog extends InjectingDialogFragment { private static final int MAX_RADIUS = 1000; @Inject DialogBuilder dialogBuilder; - @Inject @ActivityContext Context context; + @Inject Activity context; @Inject Locale locale; @Inject PermissionChecker permissionChecker; @Inject Toaster toaster; @@ -123,9 +123,4 @@ public class GeofenceDialog extends InjectingDialogFragment { dismiss(); } } - - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/dialogs/IconPickerDialog.java b/app/src/main/java/org/tasks/dialogs/IconPickerDialog.java index d4372b1fd..8b8c0d04b 100644 --- a/app/src/main/java/org/tasks/dialogs/IconPickerDialog.java +++ b/app/src/main/java/org/tasks/dialogs/IconPickerDialog.java @@ -2,7 +2,6 @@ package org.tasks.dialogs; import android.app.Activity; import android.app.Dialog; -import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; @@ -10,19 +9,19 @@ import android.view.LayoutInflater; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import butterknife.ButterKnife; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.R; import org.tasks.billing.Inventory; import org.tasks.billing.PurchaseActivity; -import org.tasks.injection.ActivityContext; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingDialogFragment; import org.tasks.themes.CustomIcons; -public class IconPickerDialog extends InjectingDialogFragment { +@AndroidEntryPoint +public class IconPickerDialog extends DialogFragment { private static final String EXTRA_CURRENT = "extra_current"; @@ -30,7 +29,7 @@ public class IconPickerDialog extends InjectingDialogFragment { RecyclerView recyclerView; @Inject DialogBuilder dialogBuilder; - @Inject @ActivityContext Context context; + @Inject Activity context; @Inject Inventory inventory; private IconPickerCallback callback; @@ -81,11 +80,6 @@ public class IconPickerDialog extends InjectingDialogFragment { callback.onSelected(getDialog(), index); } - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } - public interface IconPickerCallback { void onSelected(DialogInterface d, int icon); } diff --git a/app/src/main/java/org/tasks/dialogs/ImportTasksDialog.java b/app/src/main/java/org/tasks/dialogs/ImportTasksDialog.java index c1cbccd6f..2d89bd789 100644 --- a/app/src/main/java/org/tasks/dialogs/ImportTasksDialog.java +++ b/app/src/main/java/org/tasks/dialogs/ImportTasksDialog.java @@ -3,23 +3,22 @@ package org.tasks.dialogs; import android.app.Activity; import android.app.Dialog; import android.app.ProgressDialog; -import android.content.Context; import android.content.res.Resources; import android.net.Uri; import android.os.Bundle; import android.os.Handler; +import androidx.fragment.app.DialogFragment; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.astrid.backup.TasksXmlImporter; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.R; import org.tasks.backup.TasksJsonImporter; import org.tasks.backup.TasksJsonImporter.ImportResult; -import org.tasks.injection.ActivityContext; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingDialogFragment; import org.tasks.ui.Toaster; -public class ImportTasksDialog extends InjectingDialogFragment { +@AndroidEntryPoint +public class ImportTasksDialog extends DialogFragment { private static final String EXTRA_URI = "extra_uri"; private static final String EXTRA_EXTENSION = "extra_extension"; @@ -27,7 +26,7 @@ public class ImportTasksDialog extends InjectingDialogFragment { @Inject TasksXmlImporter xmlImporter; @Inject TasksJsonImporter jsonImporter; @Inject DialogBuilder dialogBuilder; - @Inject @ActivityContext Context context; + @Inject Activity context; @Inject Toaster toaster; public static ImportTasksDialog newImportTasksDialog(Uri data, String extension) { @@ -90,9 +89,4 @@ public class ImportTasksDialog extends InjectingDialogFragment { .setPositiveButton(android.R.string.ok, (dialog, id) -> dialog.dismiss()) .show(); } - - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/dialogs/Linkify.java b/app/src/main/java/org/tasks/dialogs/Linkify.java index 84749ca15..8aae3d802 100644 --- a/app/src/main/java/org/tasks/dialogs/Linkify.java +++ b/app/src/main/java/org/tasks/dialogs/Linkify.java @@ -12,11 +12,11 @@ import android.text.SpannableStringBuilder; import android.text.style.URLSpan; import android.view.View; import android.widget.TextView; +import dagger.hilt.android.qualifiers.ActivityContext; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import javax.inject.Inject; import org.tasks.R; -import org.tasks.injection.ActivityContext; public class Linkify { diff --git a/app/src/main/java/org/tasks/dialogs/NewFilterDialog.kt b/app/src/main/java/org/tasks/dialogs/NewFilterDialog.kt index 1c8d4fcc0..f46fe5876 100644 --- a/app/src/main/java/org/tasks/dialogs/NewFilterDialog.kt +++ b/app/src/main/java/org/tasks/dialogs/NewFilterDialog.kt @@ -3,23 +3,22 @@ package org.tasks.dialogs import android.app.Dialog import android.content.Intent import android.os.Bundle +import androidx.fragment.app.DialogFragment import com.todoroo.astrid.api.CustomFilterCriterion import com.todoroo.astrid.core.CriterionInstance import com.todoroo.astrid.core.CriterionInstance.* +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.activities.FilterSettingsActivity import org.tasks.filters.FilterCriteriaProvider -import org.tasks.injection.FragmentComponent -import org.tasks.injection.InjectingDialogFragment import org.tasks.ui.NavigationDrawerFragment import javax.inject.Inject -class NewFilterDialog : InjectingDialogFragment() { +@AndroidEntryPoint +class NewFilterDialog : DialogFragment() { - @Inject - lateinit var dialogBuilder: DialogBuilder - @Inject - lateinit var provider: FilterCriteriaProvider + @Inject lateinit var dialogBuilder: DialogBuilder + @Inject lateinit var provider: FilterCriteriaProvider companion object { fun newFilterDialog(): NewFilterDialog = NewFilterDialog() @@ -132,6 +131,4 @@ class NewFilterDialog : InjectingDialogFragment() { criterion.type = type return criterion } - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/dialogs/RecordAudioDialog.java b/app/src/main/java/org/tasks/dialogs/RecordAudioDialog.java index 773bbde60..a8bf839db 100644 --- a/app/src/main/java/org/tasks/dialogs/RecordAudioDialog.java +++ b/app/src/main/java/org/tasks/dialogs/RecordAudioDialog.java @@ -12,6 +12,7 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.Chronometer; import androidx.annotation.NonNull; +import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import butterknife.BindView; @@ -19,19 +20,18 @@ import butterknife.ButterKnife; import butterknife.OnClick; import com.todoroo.astrid.files.FilesControlSet; import com.todoroo.astrid.voice.AACRecorder; +import dagger.hilt.android.AndroidEntryPoint; import java.io.IOException; import javax.inject.Inject; import org.tasks.R; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingDialogFragment; import org.tasks.preferences.FragmentPermissionRequestor; import org.tasks.preferences.PermissionChecker; import org.tasks.preferences.PermissionRequestor; import org.tasks.preferences.Preferences; import org.tasks.themes.Theme; -public class RecordAudioDialog extends InjectingDialogFragment - implements AACRecorder.AACRecorderCallbacks { +@AndroidEntryPoint +public class RecordAudioDialog extends DialogFragment implements AACRecorder.AACRecorderCallbacks { @Inject Preferences preferences; @Inject DialogBuilder dialogBuilder; @@ -95,11 +95,6 @@ public class RecordAudioDialog extends InjectingDialogFragment timer.stop(); } - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } - @Override public void encodingFinished(Uri uri) { Intent intent = new Intent(); diff --git a/app/src/main/java/org/tasks/dialogs/SortDialog.java b/app/src/main/java/org/tasks/dialogs/SortDialog.java index 8c1d2d45a..d2223944b 100644 --- a/app/src/main/java/org/tasks/dialogs/SortDialog.java +++ b/app/src/main/java/org/tasks/dialogs/SortDialog.java @@ -7,18 +7,19 @@ import android.os.Bundle; import android.widget.Button; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.core.SortHelper; +import dagger.hilt.android.AndroidEntryPoint; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import org.tasks.R; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingDialogFragment; import org.tasks.preferences.Preferences; import timber.log.Timber; -public class SortDialog extends InjectingDialogFragment { +@AndroidEntryPoint +public class SortDialog extends DialogFragment { private static final String EXTRA_MANUAL_ENABLED = "extra_manual_enabled"; private static final String EXTRA_ASTRID_ENABLED = "extra_astrid_enabled"; @@ -180,11 +181,6 @@ public class SortDialog extends InjectingDialogFragment { return SortHelper.SORT_ALPHA; } - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } - public interface SortDialogCallback { void sortChanged(boolean reload); } diff --git a/app/src/main/java/org/tasks/dialogs/ThemePickerDialog.kt b/app/src/main/java/org/tasks/dialogs/ThemePickerDialog.kt index e7969e6ee..b90af6e39 100644 --- a/app/src/main/java/org/tasks/dialogs/ThemePickerDialog.kt +++ b/app/src/main/java/org/tasks/dialogs/ThemePickerDialog.kt @@ -12,17 +12,18 @@ import android.view.ViewGroup import android.widget.ArrayAdapter import android.widget.TextView import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.DialogFragment import androidx.fragment.app.Fragment +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.billing.Inventory -import org.tasks.injection.FragmentComponent -import org.tasks.injection.InjectingDialogFragment import org.tasks.themes.ThemeAccent import org.tasks.themes.ThemeBase import org.tasks.themes.ThemeBase.EXTRA_THEME_OVERRIDE import javax.inject.Inject -class ThemePickerDialog : InjectingDialogFragment() { +@AndroidEntryPoint +class ThemePickerDialog : DialogFragment() { companion object { const val EXTRA_SELECTED = "extra_selected" @@ -53,8 +54,6 @@ class ThemePickerDialog : InjectingDialogFragment() { var dialog: AlertDialog? = null var selected = -1 - override fun inject(component: FragmentComponent) = component.inject(this) - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { selected = savedInstanceState?.getInt(EXTRA_SELECTED) ?: requireArguments().getInt(EXTRA_SELECTED) val widget = arguments?.getBoolean(EXTRA_WIDGET) ?: false diff --git a/app/src/main/java/org/tasks/dialogs/WhatsNewDialog.kt b/app/src/main/java/org/tasks/dialogs/WhatsNewDialog.kt index 908de84d8..3cca55bfb 100644 --- a/app/src/main/java/org/tasks/dialogs/WhatsNewDialog.kt +++ b/app/src/main/java/org/tasks/dialogs/WhatsNewDialog.kt @@ -8,21 +8,22 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.widget.TextView +import androidx.fragment.app.DialogFragment import butterknife.BindView import butterknife.ButterKnife import butterknife.OnClick import com.google.android.material.button.MaterialButton +import dagger.hilt.android.AndroidEntryPoint import org.tasks.BuildConfig import org.tasks.R import org.tasks.analytics.Firebase import org.tasks.billing.Inventory import org.tasks.billing.PurchaseActivity -import org.tasks.injection.FragmentComponent -import org.tasks.injection.InjectingDialogFragment import org.tasks.preferences.Preferences import javax.inject.Inject -class WhatsNewDialog : InjectingDialogFragment() { +@AndroidEntryPoint +class WhatsNewDialog : DialogFragment() { @Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var firebase: Firebase @@ -122,6 +123,4 @@ class WhatsNewDialog : InjectingDialogFragment() { Pair(R.string.param_user_pro, inventory.hasPro()), Pair(R.string.param_user_no_churn, firebase.noChurn())) } - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/drive/DriveInvoker.java b/app/src/main/java/org/tasks/drive/DriveInvoker.java index 83c2621b7..95ffc775a 100644 --- a/app/src/main/java/org/tasks/drive/DriveInvoker.java +++ b/app/src/main/java/org/tasks/drive/DriveInvoker.java @@ -15,6 +15,7 @@ import com.google.api.services.drive.DriveRequest; import com.google.api.services.drive.DriveScopes; import com.google.api.services.drive.model.File; import com.todoroo.astrid.gtasks.api.HttpCredentialsAdapter; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.io.IOException; import java.util.Collections; import java.util.List; @@ -23,7 +24,6 @@ import org.tasks.BuildConfig; import org.tasks.DebugNetworkInterceptor; import org.tasks.R; import org.tasks.files.FileHelper; -import org.tasks.injection.ApplicationContext; import org.tasks.preferences.Preferences; import timber.log.Timber; diff --git a/app/src/main/java/org/tasks/drive/DriveLoginActivity.java b/app/src/main/java/org/tasks/drive/DriveLoginActivity.java index d7096e0bf..78031d306 100644 --- a/app/src/main/java/org/tasks/drive/DriveLoginActivity.java +++ b/app/src/main/java/org/tasks/drive/DriveLoginActivity.java @@ -10,11 +10,11 @@ import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import com.todoroo.andlib.utility.DialogUtilities; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.R; import org.tasks.dialogs.DialogBuilder; import org.tasks.gtasks.GoogleAccountManager; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.play.AuthResultHandler; import org.tasks.preferences.Preferences; @@ -25,6 +25,7 @@ import org.tasks.preferences.Preferences; * * @author Sam Bosley */ +@AndroidEntryPoint public class DriveLoginActivity extends InjectingAppCompatActivity { private static final String EXTRA_ERROR = "extra_error"; @@ -43,11 +44,6 @@ public class DriveLoginActivity extends InjectingAppCompatActivity { startActivityForResult(chooseAccountIntent, RC_CHOOSE_ACCOUNT); } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - private void getAuthToken(String account) { final ProgressDialog pd = dialogBuilder.newProgressDialog(R.string.gtasks_GLA_authenticating); pd.show(); diff --git a/app/src/main/java/org/tasks/etesync/EncryptionSettingsActivity.java b/app/src/main/java/org/tasks/etesync/EncryptionSettingsActivity.java index aa95d4b50..fcb06ffa9 100644 --- a/app/src/main/java/org/tasks/etesync/EncryptionSettingsActivity.java +++ b/app/src/main/java/org/tasks/etesync/EncryptionSettingsActivity.java @@ -20,17 +20,18 @@ import com.etesync.journalmanager.Exceptions.IntegrityException; import com.etesync.journalmanager.Exceptions.VersionTooNewException; import com.etesync.journalmanager.UserInfoManager.UserInfo; import com.google.android.material.snackbar.Snackbar; +import dagger.hilt.android.AndroidEntryPoint; import java.net.ConnectException; import javax.inject.Inject; import org.tasks.R; import org.tasks.data.CaldavAccount; import org.tasks.databinding.ActivityEtesyncEncryptionSettingsBinding; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.ThemedInjectingAppCompatActivity; import org.tasks.security.KeyStoreEncryption; import org.tasks.ui.DisplayableException; import timber.log.Timber; +@AndroidEntryPoint public class EncryptionSettingsActivity extends ThemedInjectingAppCompatActivity implements OnMenuItemClickListener { @@ -205,11 +206,6 @@ public class EncryptionSettingsActivity extends ThemedInjectingAppCompatActivity } } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.menu_help) { diff --git a/app/src/main/java/org/tasks/etesync/EteSyncAccountSettingsActivity.java b/app/src/main/java/org/tasks/etesync/EteSyncAccountSettingsActivity.java index 1454a20ee..e4c0a5e7b 100644 --- a/app/src/main/java/org/tasks/etesync/EteSyncAccountSettingsActivity.java +++ b/app/src/main/java/org/tasks/etesync/EteSyncAccountSettingsActivity.java @@ -16,15 +16,16 @@ import com.etesync.journalmanager.Exceptions.IntegrityException; import com.etesync.journalmanager.Exceptions.VersionTooNewException; import com.etesync.journalmanager.UserInfoManager.UserInfo; import com.todoroo.astrid.helper.UUIDHelper; +import dagger.hilt.android.AndroidEntryPoint; import io.reactivex.Completable; import io.reactivex.schedulers.Schedulers; import javax.inject.Inject; import org.tasks.R; import org.tasks.caldav.BaseCaldavAccountSettingsActivity; import org.tasks.data.CaldavAccount; -import org.tasks.injection.ActivityComponent; import timber.log.Timber; +@AndroidEntryPoint public class EteSyncAccountSettingsActivity extends BaseCaldavAccountSettingsActivity implements Toolbar.OnMenuItemClickListener { @@ -171,11 +172,6 @@ public class EteSyncAccountSettingsActivity extends BaseCaldavAccountSettingsAct return "https://tasks.org/etesync"; } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { if (requestCode == REQUEST_ENCRYPTION_PASSWORD) { diff --git a/app/src/main/java/org/tasks/etesync/EteSyncCalendarSettingsActivity.java b/app/src/main/java/org/tasks/etesync/EteSyncCalendarSettingsActivity.java index aa8f7b209..bf16620f3 100644 --- a/app/src/main/java/org/tasks/etesync/EteSyncCalendarSettingsActivity.java +++ b/app/src/main/java/org/tasks/etesync/EteSyncCalendarSettingsActivity.java @@ -2,12 +2,13 @@ package org.tasks.etesync; import android.os.Bundle; import androidx.lifecycle.ViewModelProvider; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.caldav.BaseCaldavCalendarSettingsActivity; import org.tasks.data.CaldavAccount; import org.tasks.data.CaldavCalendar; -import org.tasks.injection.ActivityComponent; +@AndroidEntryPoint public class EteSyncCalendarSettingsActivity extends BaseCaldavCalendarSettingsActivity { @Inject EteSyncClient client; @@ -44,9 +45,4 @@ public class EteSyncCalendarSettingsActivity extends BaseCaldavCalendarSettingsA protected void deleteCalendar(CaldavAccount caldavAccount, CaldavCalendar caldavCalendar) { deleteCalendarViewModel.deleteCalendar(client, caldavAccount, caldavCalendar); } - - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/etesync/EteSyncClient.java b/app/src/main/java/org/tasks/etesync/EteSyncClient.java index 1f660a5a6..130b087eb 100644 --- a/app/src/main/java/org/tasks/etesync/EteSyncClient.java +++ b/app/src/main/java/org/tasks/etesync/EteSyncClient.java @@ -25,6 +25,7 @@ import com.etesync.journalmanager.UserInfoManager.UserInfo; import com.etesync.journalmanager.model.CollectionInfo; import com.etesync.journalmanager.model.SyncEntry; import com.etesync.journalmanager.util.TokenAuthenticator; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.io.IOException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; @@ -44,7 +45,6 @@ import org.tasks.DebugNetworkInterceptor; import org.tasks.caldav.MemoryCookieStore; import org.tasks.data.CaldavAccount; import org.tasks.data.CaldavCalendar; -import org.tasks.injection.ApplicationContext; import org.tasks.preferences.Preferences; import org.tasks.security.KeyStoreEncryption; import timber.log.Timber; diff --git a/app/src/main/java/org/tasks/etesync/EteSynchronizer.java b/app/src/main/java/org/tasks/etesync/EteSynchronizer.java index 99ff38f74..3a199ca05 100644 --- a/app/src/main/java/org/tasks/etesync/EteSynchronizer.java +++ b/app/src/main/java/org/tasks/etesync/EteSynchronizer.java @@ -24,6 +24,7 @@ import com.etesync.journalmanager.model.SyncEntry.Actions; import com.google.common.collect.Iterables; import com.todoroo.astrid.helper.UUIDHelper; import com.todoroo.astrid.service.TaskDeleter; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; @@ -42,7 +43,6 @@ import org.tasks.data.CaldavCalendar; import org.tasks.data.CaldavDao; import org.tasks.data.CaldavTask; import org.tasks.data.CaldavTaskContainer; -import org.tasks.injection.ApplicationContext; import timber.log.Timber; public class EteSynchronizer { diff --git a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java index 6d19a05ed..0b5f136d9 100644 --- a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java +++ b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.java @@ -16,6 +16,7 @@ import com.todoroo.astrid.api.TextInputCriterion; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task.Priority; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -31,7 +32,6 @@ import org.tasks.data.GoogleTaskListDao; import org.tasks.data.Tag; import org.tasks.data.TagData; import org.tasks.data.TagDataDao; -import org.tasks.injection.ApplicationContext; public class FilterCriteriaProvider { diff --git a/app/src/main/java/org/tasks/filters/FilterProvider.kt b/app/src/main/java/org/tasks/filters/FilterProvider.kt index 060fed1f3..85f31b394 100644 --- a/app/src/main/java/org/tasks/filters/FilterProvider.kt +++ b/app/src/main/java/org/tasks/filters/FilterProvider.kt @@ -8,6 +8,7 @@ import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.FilterListItem import com.todoroo.astrid.api.FilterListItem.NO_ORDER import com.todoroo.astrid.core.BuiltInFilterExposer +import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.BuildConfig import org.tasks.R import org.tasks.activities.GoogleTaskListSettingsActivity @@ -18,7 +19,6 @@ import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.data.* import org.tasks.data.CaldavAccount.Companion.TYPE_LOCAL import org.tasks.filters.NavigationDrawerSubheader.SubheaderType -import org.tasks.injection.ApplicationContext import org.tasks.location.LocationPickerActivity import org.tasks.preferences.HelpAndFeedback import org.tasks.preferences.MainPreferences diff --git a/app/src/main/java/org/tasks/fragments/CommentBarFragment.kt b/app/src/main/java/org/tasks/fragments/CommentBarFragment.kt index e79c07d11..17c6f981d 100644 --- a/app/src/main/java/org/tasks/fragments/CommentBarFragment.kt +++ b/app/src/main/java/org/tasks/fragments/CommentBarFragment.kt @@ -17,12 +17,12 @@ import android.widget.LinearLayout import butterknife.* import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.astrid.data.Task +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.Strings.isNullOrEmpty import org.tasks.activities.CameraActivity import org.tasks.dialogs.DialogBuilder import org.tasks.files.ImageHelper -import org.tasks.injection.FragmentComponent import org.tasks.preferences.Device import org.tasks.preferences.Preferences import org.tasks.themes.ThemeColor @@ -30,6 +30,7 @@ import org.tasks.ui.TaskEditControlFragment import java.util.* import javax.inject.Inject +@AndroidEntryPoint class CommentBarFragment : TaskEditControlFragment() { @Inject lateinit var activity: Activity @Inject lateinit var dialogBuilder: DialogBuilder @@ -57,8 +58,6 @@ class CommentBarFragment : TaskEditControlFragment() { callback = activity as CommentBarFragmentCallback } - override fun inject(component: FragmentComponent) = component.inject(this) - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(layout, container, false) diff --git a/app/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java b/app/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java index 82136cc26..e4867896b 100644 --- a/app/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java +++ b/app/src/main/java/org/tasks/fragments/TaskEditControlSetFragmentManager.java @@ -12,6 +12,7 @@ import com.todoroo.astrid.tags.TagsControlSet; import com.todoroo.astrid.timers.TimerControlSet; import com.todoroo.astrid.ui.HideUntilControlSet; import com.todoroo.astrid.ui.ReminderControlSet; +import dagger.hilt.android.qualifiers.ActivityContext; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -19,14 +20,13 @@ import java.util.Map; import javax.inject.Inject; import org.tasks.BuildConfig; import org.tasks.R; -import org.tasks.injection.ActivityContext; import org.tasks.preferences.Preferences; import org.tasks.ui.CalendarControlSet; import org.tasks.ui.DeadlineControlSet; import org.tasks.ui.DescriptionControlSet; +import org.tasks.ui.ListFragment; import org.tasks.ui.LocationControlSet; import org.tasks.ui.PriorityControlSet; -import org.tasks.ui.ListFragment; import org.tasks.ui.SubtaskControlSet; import org.tasks.ui.TaskEditControlFragment; diff --git a/app/src/main/java/org/tasks/gtasks/GoogleAccountManager.java b/app/src/main/java/org/tasks/gtasks/GoogleAccountManager.java index 106805b47..64fae7aee 100644 --- a/app/src/main/java/org/tasks/gtasks/GoogleAccountManager.java +++ b/app/src/main/java/org/tasks/gtasks/GoogleAccountManager.java @@ -17,6 +17,7 @@ import android.content.Intent; import android.os.Bundle; import com.google.api.services.drive.DriveScopes; import com.google.api.services.tasks.TasksScopes; +import dagger.hilt.android.qualifiers.ApplicationContext; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; @@ -25,7 +26,6 @@ import java.util.Collections; import java.util.List; import javax.inject.Inject; import org.tasks.R; -import org.tasks.injection.ApplicationContext; import org.tasks.play.AuthResultHandler; import org.tasks.preferences.PermissionChecker; import org.tasks.preferences.Preferences; diff --git a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.java b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.java index 9ca59b3d4..a625385ff 100644 --- a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.java +++ b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.java @@ -21,6 +21,7 @@ import com.todoroo.astrid.gtasks.api.GtasksInvoker; import com.todoroo.astrid.gtasks.api.HttpNotFoundException; import com.todoroo.astrid.service.TaskCreator; import com.todoroo.astrid.service.TaskDeleter; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.io.EOFException; import java.io.IOException; import java.net.HttpRetryException; @@ -42,7 +43,6 @@ import org.tasks.data.GoogleTaskAccount; import org.tasks.data.GoogleTaskDao; import org.tasks.data.GoogleTaskList; import org.tasks.data.GoogleTaskListDao; -import org.tasks.injection.ApplicationContext; import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.PermissionChecker; import org.tasks.preferences.Preferences; @@ -191,7 +191,7 @@ public class GoogleTaskSynchronizer { Filter defaultRemoteList = defaultFilterProvider.getDefaultList(); if (defaultRemoteList instanceof GtasksFilter) { GoogleTaskList list = - gtasksListService.getList(((GtasksFilter) defaultRemoteList).getRemoteId()); + googleTaskListDao.getByRemoteId(((GtasksFilter) defaultRemoteList).getRemoteId()); if (list == null) { preferences.setString(R.string.p_default_list, null); } diff --git a/app/src/main/java/org/tasks/injection/ActivityComponent.kt b/app/src/main/java/org/tasks/injection/ActivityComponent.kt deleted file mode 100644 index da1499878..000000000 --- a/app/src/main/java/org/tasks/injection/ActivityComponent.kt +++ /dev/null @@ -1,80 +0,0 @@ -package org.tasks.injection - -import com.todoroo.astrid.activity.BeastModePreferences -import com.todoroo.astrid.activity.MainActivity -import com.todoroo.astrid.activity.ShareLinkActivity -import com.todoroo.astrid.activity.TaskEditActivity -import com.todoroo.astrid.gcal.CalendarReminderActivity -import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity -import dagger.Subcomponent -import org.tasks.activities.* -import org.tasks.activities.attribution.AttributionActivity -import org.tasks.billing.PurchaseActivity -import org.tasks.caldav.CaldavAccountSettingsActivity -import org.tasks.caldav.CaldavCalendarSettingsActivity -import org.tasks.caldav.LocalListSettingsActivity -import org.tasks.dashclock.DashClockSettings -import org.tasks.drive.DriveLoginActivity -import org.tasks.etesync.EncryptionSettingsActivity -import org.tasks.etesync.EteSyncAccountSettingsActivity -import org.tasks.etesync.EteSyncCalendarSettingsActivity -import org.tasks.locale.ui.activity.TaskerCreateTaskActivity -import org.tasks.locale.ui.activity.TaskerSettingsActivity -import org.tasks.location.LocationPickerActivity -import org.tasks.preferences.* -import org.tasks.reminders.NotificationActivity -import org.tasks.reminders.SnoozeActivity -import org.tasks.tags.TagPickerActivity -import org.tasks.tags.TagPickerViewModel -import org.tasks.ui.TaskListViewModel -import org.tasks.voice.VoiceCommandActivity -import org.tasks.widget.ShortcutConfigActivity -import org.tasks.widget.WidgetClickActivity -import org.tasks.widget.WidgetConfigActivity - -@ActivityScoped -@Subcomponent(modules = [ActivityModule::class, LocationModule::class]) -interface ActivityComponent { - operator fun plus(module: FragmentModule): FragmentComponent - fun inject(activity: GtasksLoginActivity) - fun inject(activity: TaskerSettingsActivity) - fun inject(activity: DashClockSettings) - fun inject(activity: CalendarReminderActivity) - fun inject(activity: FilterSettingsActivity) - fun inject(activity: TagSettingsActivity) - fun inject(activity: ShareLinkActivity) - fun inject(activity: MainActivity) - fun inject(activity: BeastModePreferences) - fun inject(activity: NotificationActivity) - fun inject(activity: SnoozeActivity) - fun inject(activity: FilterSelectionActivity) - fun inject(activity: DateAndTimePickerActivity) - fun inject(activity: CameraActivity) - fun inject(activity: VoiceCommandActivity) - fun inject(activity: WidgetConfigActivity) - fun inject(activity: ShortcutConfigActivity) - fun inject(activity: GoogleTaskListSettingsActivity) - fun inject(activity: CaldavCalendarSettingsActivity) - fun inject(activity: TaskerCreateTaskActivity) - fun inject(activity: TaskListViewModel) - fun inject(activity: PurchaseActivity) - fun inject(activity: CaldavAccountSettingsActivity) - fun inject(activity: EteSyncAccountSettingsActivity) - fun inject(activity: DriveLoginActivity) - fun inject(activity: TaskEditActivity) - fun inject(activity: WidgetClickActivity) - fun inject(activity: LocationPickerActivity) - fun inject(activity: AttributionActivity) - fun inject(activity: TagPickerActivity) - fun inject(activity: TagPickerViewModel) - fun inject(activity: EteSyncCalendarSettingsActivity) - fun inject(activity: EncryptionSettingsActivity) - fun inject(activity: MainPreferences) - fun inject(activity: HelpAndFeedback) - fun inject(activity: NotificationPreferences) - fun inject(activity: ManageSpaceActivity) - fun inject(activity: SyncPreferences) - fun inject(activity: PlaceSettingsActivity) - fun inject(activity: LocalListSettingsActivity) - fun inject(activity: NavigationDrawerCustomization) -} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/ActivityContext.kt b/app/src/main/java/org/tasks/injection/ActivityContext.kt deleted file mode 100644 index 5fd36dec2..000000000 --- a/app/src/main/java/org/tasks/injection/ActivityContext.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.tasks.injection - -import javax.inject.Qualifier - -@Qualifier -@Target(AnnotationTarget.FIELD, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER) -@MustBeDocumented -@Retention(AnnotationRetention.RUNTIME) -annotation class ActivityContext \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/ActivityModule.kt b/app/src/main/java/org/tasks/injection/ActivityModule.kt index 4627fe057..c092f11ab 100644 --- a/app/src/main/java/org/tasks/injection/ActivityModule.kt +++ b/app/src/main/java/org/tasks/injection/ActivityModule.kt @@ -1,9 +1,11 @@ package org.tasks.injection import android.app.Activity -import android.content.Context import dagger.Module import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.android.scopes.ActivityScoped import org.tasks.R import org.tasks.billing.Inventory import org.tasks.preferences.Preferences @@ -13,16 +15,12 @@ import org.tasks.themes.ThemeBase import org.tasks.themes.ThemeColor @Module -class ActivityModule(@get:Provides val activity: Activity) { - - @get:ActivityContext - @get:Provides - val activityContext: Context - get() = activity +@InstallIn(ActivityComponent::class) +class ActivityModule { @Provides @ActivityScoped - fun getThemeBase(preferences: Preferences, inventory: Inventory): ThemeBase + fun getThemeBase(activity: Activity, preferences: Preferences, inventory: Inventory): ThemeBase = ThemeBase.getThemeBase(preferences, inventory, activity.intent) @Provides diff --git a/app/src/main/java/org/tasks/injection/ActivityScoped.kt b/app/src/main/java/org/tasks/injection/ActivityScoped.kt deleted file mode 100644 index 4066541e5..000000000 --- a/app/src/main/java/org/tasks/injection/ActivityScoped.kt +++ /dev/null @@ -1,7 +0,0 @@ -package org.tasks.injection - -import javax.inject.Scope - -@Scope -@Retention(AnnotationRetention.RUNTIME) -internal annotation class ActivityScoped \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/ApplicationComponent.kt b/app/src/main/java/org/tasks/injection/ApplicationComponent.kt deleted file mode 100644 index bbaf8661a..000000000 --- a/app/src/main/java/org/tasks/injection/ApplicationComponent.kt +++ /dev/null @@ -1,57 +0,0 @@ -package org.tasks.injection - -import com.todoroo.astrid.gcal.CalendarAlarmReceiver -import com.todoroo.astrid.provider.Astrid2TaskProvider -import dagger.Component -import org.tasks.Tasks -import org.tasks.backup.TasksBackupAgent -import org.tasks.dashclock.DashClockExtension -import org.tasks.jobs.* -import org.tasks.locale.receiver.TaskerIntentService -import org.tasks.location.GeofenceTransitionsIntentService -import org.tasks.notifications.NotificationClearedReceiver -import org.tasks.receivers.BootCompletedReceiver -import org.tasks.receivers.CompleteTaskReceiver -import org.tasks.receivers.MyPackageReplacedReceiver -import org.tasks.receivers.RefreshReceiver -import org.tasks.scheduling.CalendarNotificationIntentService -import org.tasks.scheduling.NotificationSchedulerIntentService -import org.tasks.widget.ScrollableWidgetUpdateService -import org.tasks.widget.TasksWidget -import javax.inject.Singleton - -@Singleton -@Component(modules = [ApplicationModule::class, ProductionModule::class]) -interface ApplicationComponent { - operator fun plus(module: ActivityModule): ActivityComponent - fun inject(dashClockExtension: DashClockExtension) - fun inject(tasks: Tasks) - fun inject(scrollableWidgetUpdateService: ScrollableWidgetUpdateService) - fun inject(tasksBackupAgent: TasksBackupAgent) - - fun inject(broadcastReceiver: CalendarAlarmReceiver) - fun inject(broadcastReceiver: MyPackageReplacedReceiver) - fun inject(broadcastReceiver: CompleteTaskReceiver) - fun inject(broadcastReceiver: BootCompletedReceiver) - fun inject(broadcastReceiver: TasksWidget) - fun inject(broadcastReceiver: NotificationClearedReceiver) - - fun inject(contentProvider: Astrid2TaskProvider) - - fun inject(service: CalendarNotificationIntentService) - fun inject(service: GeofenceTransitionsIntentService) - fun inject(service: NotificationSchedulerIntentService) - fun inject(service: TaskerIntentService) - fun inject(service: NotificationService) - fun inject(service: RefreshReceiver) - - fun inject(work: SyncWork) - fun inject(work: BackupWork) - fun inject(work: RefreshWork) - fun inject(work: CleanupWork) - fun inject(work: MidnightRefreshWork) - fun inject(work: AfterSaveWork) - fun inject(work: DriveUploader) - fun inject(work: ReverseGeocodeWork) - fun inject(work: RemoteConfigWork) -} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/ApplicationContext.kt b/app/src/main/java/org/tasks/injection/ApplicationContext.kt deleted file mode 100644 index 48fb3192f..000000000 --- a/app/src/main/java/org/tasks/injection/ApplicationContext.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.tasks.injection - -import javax.inject.Qualifier - -@Qualifier -@Target(AnnotationTarget.FIELD, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER) -@MustBeDocumented -@Retention(AnnotationRetention.RUNTIME) -annotation class ApplicationContext \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/ApplicationModule.kt b/app/src/main/java/org/tasks/injection/ApplicationModule.kt index 8d9aa8ab9..7d316159a 100644 --- a/app/src/main/java/org/tasks/injection/ApplicationModule.kt +++ b/app/src/main/java/org/tasks/injection/ApplicationModule.kt @@ -5,6 +5,9 @@ import com.todoroo.astrid.dao.Database import com.todoroo.astrid.dao.TaskDao import dagger.Module import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ApplicationComponent +import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.analytics.Firebase import org.tasks.billing.BillingClient import org.tasks.billing.BillingClientImpl @@ -18,11 +21,11 @@ import org.tasks.notifications.NotificationDao import javax.inject.Singleton @Module -class ApplicationModule(@get:Provides @get:ApplicationContext val context: Context) { +@InstallIn(ApplicationComponent::class) +class ApplicationModule { - @get:Provides - val locale: Locale - get() = Locale.getInstance(context) + @Provides + fun getLocale(@ApplicationContext context: Context): Locale = Locale.getInstance(context) @Provides @Singleton @@ -89,10 +92,9 @@ class ApplicationModule(@get:Provides @get:ApplicationContext val context: Conte fun getDeletionDao(db: Database): DeletionDao = db.deletionDao @Provides - fun getBillingClient(inventory: Inventory, firebase: Firebase): BillingClient + fun getBillingClient(@ApplicationContext context: Context, inventory: Inventory, firebase: Firebase): BillingClient = BillingClientImpl(context, inventory, firebase) - @get:Provides - val geocoder: Geocoder - get() = MapboxGeocoder(context) + @Provides + fun getGeocoder(@ApplicationContext context: Context): Geocoder = MapboxGeocoder(context) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/Dagger.kt b/app/src/main/java/org/tasks/injection/Dagger.kt deleted file mode 100644 index 5a794afd1..000000000 --- a/app/src/main/java/org/tasks/injection/Dagger.kt +++ /dev/null @@ -1,37 +0,0 @@ -package org.tasks.injection - -import android.content.Context -import org.tasks.locale.Locale -import timber.log.Timber - -internal class Dagger private constructor(context: Context) { - val applicationComponent: ApplicationComponent - - companion object { - private val lock = Any() - private var instance: Dagger? = null - operator fun get(context: Context): Dagger { - if (instance == null) { - synchronized(lock) { - if (instance == null) { - instance = Dagger(context) - } - } - } - return instance!! - } - } - - init { - var localeContext = context.applicationContext - try { - localeContext = Locale.getInstance(localeContext).createConfigurationContext(localeContext) - } catch (e: Exception) { - Timber.e(e) - } - applicationComponent = DaggerApplicationComponent.builder() - .applicationModule(ApplicationModule(localeContext)) - .productionModule(ProductionModule()) - .build() - } -} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/FragmentComponent.kt b/app/src/main/java/org/tasks/injection/FragmentComponent.kt deleted file mode 100644 index 281dbd921..000000000 --- a/app/src/main/java/org/tasks/injection/FragmentComponent.kt +++ /dev/null @@ -1,81 +0,0 @@ -package org.tasks.injection - -import com.todoroo.astrid.activity.TaskEditFragment -import com.todoroo.astrid.activity.TaskListFragment -import com.todoroo.astrid.files.FilesControlSet -import com.todoroo.astrid.repeats.RepeatControlSet -import com.todoroo.astrid.tags.TagsControlSet -import com.todoroo.astrid.timers.TimerControlSet -import com.todoroo.astrid.ui.HideUntilControlSet -import com.todoroo.astrid.ui.ReminderControlSet -import dagger.Subcomponent -import org.tasks.activities.ListPicker -import org.tasks.calendars.CalendarPicker -import org.tasks.dialogs.* -import org.tasks.fragments.CommentBarFragment -import org.tasks.locale.LocalePickerDialog -import org.tasks.preferences.fragments.* -import org.tasks.reminders.NotificationDialog -import org.tasks.reminders.SnoozeDialog -import org.tasks.repeats.BasicRecurrenceDialog -import org.tasks.repeats.CustomRecurrenceDialog -import org.tasks.ui.* - -@Subcomponent(modules = [FragmentModule::class]) -interface FragmentComponent { - fun inject(fragment: TimerControlSet) - fun inject(fragment: TaskEditFragment) - fun inject(fragment: NavigationDrawerFragment) - fun inject(fragment: PriorityControlSet) - fun inject(fragment: RepeatControlSet) - fun inject(fragment: CommentBarFragment) - fun inject(fragment: FilesControlSet) - fun inject(fragment: TagsControlSet) - fun inject(fragment: HideUntilControlSet) - fun inject(fragment: ReminderControlSet) - fun inject(fragment: DeadlineControlSet) - fun inject(fragment: DescriptionControlSet) - fun inject(fragment: CalendarControlSet) - fun inject(fragment: TaskListFragment) - fun inject(fragment: ListFragment) - fun inject(fragment: LocationControlSet) - fun inject(fragment: SubtaskControlSet) - fun inject(fragment: TaskListViewModel) - fun inject(fragment: HelpAndFeedback) - fun inject(fragment: LookAndFeel) - fun inject(fragment: Synchronization) - fun inject(fragment: Debug) - fun inject(fragment: MainSettingsFragment) - fun inject(fragment: Backups) - fun inject(fragment: Advanced) - fun inject(fragment: Notifications) - fun inject(fragment: TaskDefaults) - fun inject(fragment: ScrollableWidget) - fun inject(fragment: DashClock) - fun inject(fragment: TaskerListNotification) - fun inject(fragment: EmptyTaskEditFragment) - fun inject(fragment: NavigationDrawer) - fun inject(fragment: Widgets) - fun inject(fragment: DateAndTime) - - fun inject(dialogFragment: ListPicker) - fun inject(dialogFragment: NotificationDialog) - fun inject(dialogFragment: CalendarPicker) - fun inject(dialogFragment: AddAttachmentDialog) - fun inject(dialogFragment: SnoozeDialog) - fun inject(dialogFragment: SortDialog) - fun inject(dialogFragment: RecordAudioDialog) - fun inject(dialogFragment: CustomRecurrenceDialog) - fun inject(dialogFragment: BasicRecurrenceDialog) - fun inject(dialogFragment: GeofenceDialog) - fun inject(dialogFragment: IconPickerDialog) - fun inject(dialogFragment: ExportTasksDialog) - fun inject(dialogFragment: ImportTasksDialog) - fun inject(dialogFragment: LocalePickerDialog) - fun inject(dialogFragment: ThemePickerDialog) - fun inject(dialogFragment: ColorWheelPicker) - fun inject(dialogFragment: ColorPalettePicker) - fun inject(dialogFragment: DateTimePicker) - fun inject(dialogFragment: NewFilterDialog) - fun inject(dialogFragment: WhatsNewDialog) -} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/FragmentModule.kt b/app/src/main/java/org/tasks/injection/FragmentModule.kt deleted file mode 100644 index 3158fb857..000000000 --- a/app/src/main/java/org/tasks/injection/FragmentModule.kt +++ /dev/null @@ -1,8 +0,0 @@ -package org.tasks.injection - -import androidx.fragment.app.Fragment -import dagger.Module -import dagger.Provides - -@Module -class FragmentModule(@get:Provides val fragment: Fragment) \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/InjectingActivity.kt b/app/src/main/java/org/tasks/injection/InjectingActivity.kt deleted file mode 100644 index a8d537422..000000000 --- a/app/src/main/java/org/tasks/injection/InjectingActivity.kt +++ /dev/null @@ -1,7 +0,0 @@ -package org.tasks.injection - -interface InjectingActivity { - fun inject(component: ActivityComponent) - - val component: ActivityComponent -} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/InjectingAppCompatActivity.kt b/app/src/main/java/org/tasks/injection/InjectingAppCompatActivity.kt index d24944e56..b07e76bfc 100644 --- a/app/src/main/java/org/tasks/injection/InjectingAppCompatActivity.kt +++ b/app/src/main/java/org/tasks/injection/InjectingAppCompatActivity.kt @@ -4,14 +4,10 @@ import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import org.tasks.locale.Locale -abstract class InjectingAppCompatActivity protected constructor() : AppCompatActivity(), InjectingActivity { - override lateinit var component: ActivityComponent - +abstract class InjectingAppCompatActivity protected constructor() : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { - component = (application as InjectingApplication).component.plus(ActivityModule(this)) - inject(component) - title = "" super.onCreate(savedInstanceState) + title = "" } init { diff --git a/app/src/main/java/org/tasks/injection/InjectingAppWidgetProvider.kt b/app/src/main/java/org/tasks/injection/InjectingAppWidgetProvider.kt deleted file mode 100644 index b1d73d400..000000000 --- a/app/src/main/java/org/tasks/injection/InjectingAppWidgetProvider.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.tasks.injection - -import android.appwidget.AppWidgetProvider -import android.content.Context -import android.content.Intent - -abstract class InjectingAppWidgetProvider : AppWidgetProvider() { - override fun onReceive(context: Context, intent: Intent) { - inject((context.applicationContext as InjectingApplication).component) - super.onReceive(context, intent) - } - - protected abstract fun inject(component: ApplicationComponent) -} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/InjectingApplication.kt b/app/src/main/java/org/tasks/injection/InjectingApplication.kt deleted file mode 100644 index d8c06cd86..000000000 --- a/app/src/main/java/org/tasks/injection/InjectingApplication.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.tasks.injection - -import android.app.Application -import org.tasks.locale.Locale - -abstract class InjectingApplication : Application() { - lateinit var component: ApplicationComponent - - override fun onCreate() { - super.onCreate() - val context = Locale.getInstance(this).createConfigurationContext(applicationContext) - component = Dagger.Companion[context].applicationComponent - inject(component) - } - - protected abstract fun inject(component: ApplicationComponent) -} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/InjectingBottomSheetDialogFragment.kt b/app/src/main/java/org/tasks/injection/InjectingBottomSheetDialogFragment.kt deleted file mode 100644 index 758aa55bb..000000000 --- a/app/src/main/java/org/tasks/injection/InjectingBottomSheetDialogFragment.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.tasks.injection - -import android.app.Activity -import com.google.android.material.bottomsheet.BottomSheetDialogFragment - -abstract class InjectingBottomSheetDialogFragment : BottomSheetDialogFragment() { - private var injected = false - override fun onAttach(activity: Activity) { - super.onAttach(activity) - if (!injected) { - inject((activity as InjectingActivity).component.plus(FragmentModule(this))) - injected = true - } - } - - protected abstract fun inject(component: FragmentComponent) -} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/InjectingBroadcastReceiver.kt b/app/src/main/java/org/tasks/injection/InjectingBroadcastReceiver.kt index 048037c72..fd445fb76 100644 --- a/app/src/main/java/org/tasks/injection/InjectingBroadcastReceiver.kt +++ b/app/src/main/java/org/tasks/injection/InjectingBroadcastReceiver.kt @@ -4,10 +4,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent +// https://github.com/google/dagger/issues/1918 abstract class InjectingBroadcastReceiver : BroadcastReceiver() { - override fun onReceive(context: Context, intent: Intent) { - inject((context.applicationContext as InjectingApplication).component) - } - - protected abstract fun inject(component: ApplicationComponent) -} \ No newline at end of file + override fun onReceive(context: Context, intent: Intent) {} +} diff --git a/app/src/main/java/org/tasks/injection/InjectingContentProvider.kt b/app/src/main/java/org/tasks/injection/InjectingContentProvider.kt deleted file mode 100644 index f02d4f6c9..000000000 --- a/app/src/main/java/org/tasks/injection/InjectingContentProvider.kt +++ /dev/null @@ -1,12 +0,0 @@ -package org.tasks.injection - -import android.content.ContentProvider - -abstract class InjectingContentProvider : ContentProvider() { - override fun onCreate(): Boolean { - inject(Dagger.Companion[context!!].applicationComponent) - return true - } - - protected abstract fun inject(component: ApplicationComponent) -} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/InjectingDialogFragment.kt b/app/src/main/java/org/tasks/injection/InjectingDialogFragment.kt deleted file mode 100644 index b941958ca..000000000 --- a/app/src/main/java/org/tasks/injection/InjectingDialogFragment.kt +++ /dev/null @@ -1,18 +0,0 @@ -package org.tasks.injection - -import android.app.Activity -import androidx.fragment.app.DialogFragment - -abstract class InjectingDialogFragment : DialogFragment() { - private var injected = false - - override fun onAttach(activity: Activity) { - super.onAttach(activity) - if (!injected) { - inject((activity as InjectingActivity).component.plus(FragmentModule(this))) - injected = true - } - } - - protected abstract fun inject(component: FragmentComponent) -} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/InjectingFragment.kt b/app/src/main/java/org/tasks/injection/InjectingFragment.kt deleted file mode 100644 index a0580a7a8..000000000 --- a/app/src/main/java/org/tasks/injection/InjectingFragment.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.tasks.injection - -import android.app.Activity -import androidx.fragment.app.Fragment - -abstract class InjectingFragment : Fragment() { - private var injected = false - override fun onAttach(activity: Activity) { - super.onAttach(activity) - if (!injected) { - inject((activity as InjectingActivity).component.plus(FragmentModule(this))) - injected = true - } - } - - protected abstract fun inject(component: FragmentComponent) -} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/InjectingJobIntentService.kt b/app/src/main/java/org/tasks/injection/InjectingJobIntentService.kt index f50803351..ee8c325fc 100644 --- a/app/src/main/java/org/tasks/injection/InjectingJobIntentService.kt +++ b/app/src/main/java/org/tasks/injection/InjectingJobIntentService.kt @@ -6,8 +6,6 @@ import timber.log.Timber abstract class InjectingJobIntentService : JobIntentService() { override fun onHandleWork(intent: Intent) { - inject( - (application as InjectingApplication).component) try { doWork(intent) } catch (e: Exception) { @@ -16,7 +14,6 @@ abstract class InjectingJobIntentService : JobIntentService() { } protected abstract fun doWork(intent: Intent) - protected abstract fun inject(component: ApplicationComponent) companion object { const val JOB_ID_GEOFENCE_TRANSITION = 1081 diff --git a/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt b/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt index ceeffffb6..c913e8a8e 100644 --- a/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt +++ b/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt @@ -1,6 +1,5 @@ package org.tasks.injection -import android.app.Activity import android.os.Bundle import androidx.annotation.StringRes import androidx.preference.Preference @@ -36,8 +35,6 @@ abstract class InjectingPreferenceFragment : PreferenceFragmentCompat() { @Inject lateinit var device: Device @Inject lateinit var dialogBuilder: DialogBuilder - private var injected = false - final override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(getPreferenceXml(), rootKey) @@ -46,14 +43,6 @@ abstract class InjectingPreferenceFragment : PreferenceFragmentCompat() { setupPreferences(savedInstanceState) } - override fun onAttach(activity: Activity) { - super.onAttach(activity) - if (!injected) { - inject((activity as InjectingActivity).component.plus(FragmentModule(this))) - injected = true - } - } - protected open fun showRestartDialog() { dialogBuilder .newDialog() @@ -110,6 +99,4 @@ abstract class InjectingPreferenceFragment : PreferenceFragmentCompat() { protected fun findPreference(@StringRes prefId: Int): Preference { return findPreference(getString(prefId))!! } - - protected abstract fun inject(component: FragmentComponent) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/InjectingService.kt b/app/src/main/java/org/tasks/injection/InjectingService.kt index c7770328c..223e43c62 100644 --- a/app/src/main/java/org/tasks/injection/InjectingService.kt +++ b/app/src/main/java/org/tasks/injection/InjectingService.kt @@ -21,7 +21,6 @@ abstract class InjectingService : Service() { super.onCreate() startForeground() disposables = CompositeDisposable() - inject((application as InjectingApplication).component) } override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { @@ -67,5 +66,4 @@ abstract class InjectingService : Service() { protected open fun scheduleNext() {} protected abstract fun doWork() - protected abstract fun inject(component: ApplicationComponent) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/InjectingWorker.kt b/app/src/main/java/org/tasks/injection/InjectingWorker.kt index 88c94f9fe..b439a7edc 100644 --- a/app/src/main/java/org/tasks/injection/InjectingWorker.kt +++ b/app/src/main/java/org/tasks/injection/InjectingWorker.kt @@ -5,14 +5,14 @@ import androidx.work.Worker import androidx.work.WorkerParameters import org.tasks.analytics.Firebase import timber.log.Timber -import javax.inject.Inject -abstract class InjectingWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) { - @Inject lateinit var firebase: Firebase +abstract class InjectingWorker( + internal val context: Context, + workerParams: WorkerParameters, + internal val firebase: Firebase) : Worker(context, workerParams) { override fun doWork(): Result { Timber.d("%s.doWork()", javaClass.simpleName) - inject((applicationContext as InjectingApplication).component) return try { run() } catch (e: Exception) { @@ -22,6 +22,4 @@ abstract class InjectingWorker(context: Context, workerParams: WorkerParameters) } protected abstract fun run(): Result - - protected abstract fun inject(component: ApplicationComponent) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/ProductionModule.kt b/app/src/main/java/org/tasks/injection/ProductionModule.kt index 4f02bffa6..7b3e6e09b 100644 --- a/app/src/main/java/org/tasks/injection/ProductionModule.kt +++ b/app/src/main/java/org/tasks/injection/ProductionModule.kt @@ -5,11 +5,19 @@ import androidx.room.Room import com.todoroo.astrid.dao.Database import dagger.Module import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ApplicationComponent +import dagger.hilt.android.qualifiers.ApplicationContext +import org.tasks.data.CaldavDao +import org.tasks.data.GoogleTaskListDao import org.tasks.db.Migrations +import org.tasks.jobs.WorkManager +import org.tasks.jobs.WorkManagerImpl import org.tasks.preferences.Preferences import javax.inject.Singleton -@Module(includes = [ApplicationModule::class]) +@Module +@InstallIn(ApplicationComponent::class) internal class ProductionModule { @Provides @Singleton @@ -21,7 +29,15 @@ internal class ProductionModule { } @Provides - fun getPreferences(@ApplicationContext context: Context): Preferences { - return Preferences(context) + fun getPreferences(@ApplicationContext context: Context): Preferences = Preferences(context) + + @Provides + @Singleton + fun getWorkManager( + @ApplicationContext context: Context, + preferences: Preferences, + googleTaskListDao: GoogleTaskListDao, + caldavDao: CaldavDao): WorkManager { + return WorkManagerImpl(context, preferences, googleTaskListDao, caldavDao) } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/ThemedInjectingAppCompatActivity.kt b/app/src/main/java/org/tasks/injection/ThemedInjectingAppCompatActivity.kt index a78da51f2..3ec1a27f3 100644 --- a/app/src/main/java/org/tasks/injection/ThemedInjectingAppCompatActivity.kt +++ b/app/src/main/java/org/tasks/injection/ThemedInjectingAppCompatActivity.kt @@ -7,18 +7,14 @@ import org.tasks.themes.Theme import org.tasks.themes.ThemeColor import javax.inject.Inject -abstract class ThemedInjectingAppCompatActivity protected constructor() : AppCompatActivity(), InjectingActivity { +abstract class ThemedInjectingAppCompatActivity protected constructor() : AppCompatActivity() { @Inject lateinit var tasksTheme: Theme @Inject protected lateinit var themeColor: ThemeColor - override lateinit var component: ActivityComponent - override fun onCreate(savedInstanceState: Bundle?) { - component = (application as InjectingApplication).component.plus(ActivityModule(this)) - inject(component) - title = null - tasksTheme.applyThemeAndStatusBarColor(this) super.onCreate(savedInstanceState) + tasksTheme.applyThemeAndStatusBarColor(this) + title = null } init { diff --git a/app/src/main/java/org/tasks/jobs/AfterSaveWork.kt b/app/src/main/java/org/tasks/jobs/AfterSaveWork.kt index 9f228314a..01240a094 100644 --- a/app/src/main/java/org/tasks/jobs/AfterSaveWork.kt +++ b/app/src/main/java/org/tasks/jobs/AfterSaveWork.kt @@ -4,6 +4,8 @@ import android.content.ContentValues import android.content.Context import android.net.Uri import android.provider.CalendarContract +import androidx.hilt.Assisted +import androidx.hilt.work.WorkerInject import androidx.work.Data import androidx.work.WorkerParameters import com.todoroo.astrid.dao.TaskDao @@ -15,30 +17,30 @@ import com.todoroo.astrid.timers.TimerPlugin import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.Strings.isNullOrEmpty +import org.tasks.analytics.Firebase import org.tasks.data.CaldavDao -import org.tasks.injection.ApplicationComponent -import org.tasks.injection.ApplicationContext import org.tasks.injection.InjectingWorker import org.tasks.location.GeofenceApi import org.tasks.notifications.NotificationManager import org.tasks.scheduling.RefreshScheduler import org.tasks.sync.SyncAdapters import timber.log.Timber -import javax.inject.Inject -class AfterSaveWork(context: Context, workerParams: WorkerParameters) : InjectingWorker(context, workerParams) { - @Inject lateinit var repeatTaskHelper: RepeatTaskHelper - @Inject @ApplicationContext lateinit var context: Context - @Inject lateinit var notificationManager: NotificationManager - @Inject lateinit var geofenceApi: GeofenceApi - @Inject lateinit var timerPlugin: TimerPlugin - @Inject lateinit var reminderService: ReminderService - @Inject lateinit var refreshScheduler: RefreshScheduler - @Inject lateinit var localBroadcastManager: LocalBroadcastManager - @Inject lateinit var taskDao: TaskDao - @Inject lateinit var syncAdapters: SyncAdapters - @Inject lateinit var workManager: WorkManager - @Inject lateinit var caldavDao: CaldavDao +class AfterSaveWork @WorkerInject constructor( + @Assisted context: Context, + @Assisted workerParams: WorkerParameters, + firebase: Firebase, + private val repeatTaskHelper: RepeatTaskHelper, + private val notificationManager: NotificationManager, + private val geofenceApi: GeofenceApi, + private val timerPlugin: TimerPlugin, + private val reminderService: ReminderService, + private val refreshScheduler: RefreshScheduler, + private val localBroadcastManager: LocalBroadcastManager, + private val taskDao: TaskDao, + private val syncAdapters: SyncAdapters, + private val workManager: WorkManager, + private val caldavDao: CaldavDao) : InjectingWorker(context, workerParams, firebase) { override fun run(): Result { val data = inputData @@ -97,10 +99,6 @@ class AfterSaveWork(context: Context, workerParams: WorkerParameters) : Injectin } } - override fun inject(component: ApplicationComponent) { - component.inject(this) - } - companion object { private const val EXTRA_ID = "extra_id" private const val EXTRA_ORIG_COMPLETED = "extra_was_completed" diff --git a/app/src/main/java/org/tasks/jobs/BackupWork.kt b/app/src/main/java/org/tasks/jobs/BackupWork.kt index 11be73e82..b7ccf04d9 100644 --- a/app/src/main/java/org/tasks/jobs/BackupWork.kt +++ b/app/src/main/java/org/tasks/jobs/BackupWork.kt @@ -3,24 +3,26 @@ package org.tasks.jobs import android.content.ContentResolver import android.content.Context import androidx.documentfile.provider.DocumentFile +import androidx.hilt.Assisted +import androidx.hilt.work.WorkerInject import androidx.work.WorkerParameters import com.todoroo.andlib.utility.DateUtilities import org.tasks.R +import org.tasks.analytics.Firebase import org.tasks.backup.TasksJsonExporter -import org.tasks.injection.ApplicationComponent -import org.tasks.injection.ApplicationContext import org.tasks.preferences.Preferences import timber.log.Timber import java.io.File import java.io.FileFilter import java.util.* -import javax.inject.Inject -class BackupWork(context: Context, workerParams: WorkerParameters) : RepeatingWorker(context, workerParams) { - @Inject @ApplicationContext lateinit var context: Context - @Inject lateinit var tasksJsonExporter: TasksJsonExporter - @Inject lateinit var preferences: Preferences - @Inject lateinit var workManager: WorkManager +class BackupWork @WorkerInject constructor( + @Assisted context: Context, + @Assisted workerParams: WorkerParameters, + firebase: Firebase, + private val tasksJsonExporter: TasksJsonExporter, + private val preferences: Preferences, + private val workManager: WorkManager) : RepeatingWorker(context, workerParams, firebase) { override fun run(): Result { preferences.setLong(R.string.p_last_backup, DateUtilities.now()) @@ -30,8 +32,6 @@ class BackupWork(context: Context, workerParams: WorkerParameters) : RepeatingWo override fun scheduleNext() = workManager.scheduleBackup() - override fun inject(component: ApplicationComponent) = component.inject(this) - private fun startBackup(context: Context?) { try { deleteOldLocalBackups() diff --git a/app/src/main/java/org/tasks/jobs/CleanupWork.kt b/app/src/main/java/org/tasks/jobs/CleanupWork.kt index 9ed2a8aa3..a95ff66b3 100644 --- a/app/src/main/java/org/tasks/jobs/CleanupWork.kt +++ b/app/src/main/java/org/tasks/jobs/CleanupWork.kt @@ -1,33 +1,36 @@ package org.tasks.jobs import android.content.Context +import androidx.hilt.Assisted +import androidx.hilt.work.WorkerInject import androidx.work.WorkerParameters import com.todoroo.astrid.alarms.AlarmService import com.todoroo.astrid.reminders.ReminderService import com.todoroo.astrid.timers.TimerPlugin +import org.tasks.analytics.Firebase import org.tasks.data.DeletionDao import org.tasks.data.LocationDao import org.tasks.data.TaskAttachmentDao import org.tasks.data.UserActivityDao import org.tasks.files.FileHelper -import org.tasks.injection.ApplicationComponent import org.tasks.injection.InjectingWorker import org.tasks.location.GeofenceApi import org.tasks.notifications.NotificationManager import timber.log.Timber -import javax.inject.Inject -class CleanupWork(private val context: Context, workerParams: WorkerParameters) : InjectingWorker(context, workerParams) { - - @Inject lateinit var notificationManager: NotificationManager - @Inject lateinit var geofenceApi: GeofenceApi - @Inject lateinit var timerPlugin: TimerPlugin - @Inject lateinit var reminderService: ReminderService - @Inject lateinit var alarmService: AlarmService - @Inject lateinit var taskAttachmentDao: TaskAttachmentDao - @Inject lateinit var userActivityDao: UserActivityDao - @Inject lateinit var locationDao: LocationDao - @Inject lateinit var deletionDao: DeletionDao +class CleanupWork @WorkerInject constructor( + @Assisted context: Context, + @Assisted workerParams: WorkerParameters, + firebase: Firebase, + private val notificationManager: NotificationManager, + private val geofenceApi: GeofenceApi, + private val timerPlugin: TimerPlugin, + private val reminderService: ReminderService, + private val alarmService: AlarmService, + private val taskAttachmentDao: TaskAttachmentDao, + private val userActivityDao: UserActivityDao, + private val locationDao: LocationDao, + private val deletionDao: DeletionDao) : InjectingWorker(context, workerParams, firebase) { public override fun run(): Result { val tasks = inputData.getLongArray(EXTRA_TASK_IDS) @@ -57,8 +60,6 @@ class CleanupWork(private val context: Context, workerParams: WorkerParameters) return Result.success() } - override fun inject(component: ApplicationComponent) = component.inject(this) - companion object { const val EXTRA_TASK_IDS = "extra_task_ids" } diff --git a/app/src/main/java/org/tasks/jobs/DriveUploader.kt b/app/src/main/java/org/tasks/jobs/DriveUploader.kt index 3e132254e..d2b4d1fe6 100644 --- a/app/src/main/java/org/tasks/jobs/DriveUploader.kt +++ b/app/src/main/java/org/tasks/jobs/DriveUploader.kt @@ -2,15 +2,16 @@ package org.tasks.jobs import android.content.Context import android.net.Uri +import androidx.hilt.Assisted +import androidx.hilt.work.WorkerInject import androidx.work.Data import androidx.work.WorkerParameters import com.google.api.client.googleapis.json.GoogleJsonResponseException import com.google.api.services.drive.model.File import org.tasks.R import org.tasks.Strings.isNullOrEmpty +import org.tasks.analytics.Firebase import org.tasks.drive.DriveInvoker -import org.tasks.injection.ApplicationComponent -import org.tasks.injection.ApplicationContext import org.tasks.injection.InjectingWorker import org.tasks.preferences.Preferences import timber.log.Timber @@ -19,13 +20,14 @@ import java.net.ConnectException import java.net.SocketTimeoutException import java.net.UnknownHostException import java.util.* -import javax.inject.Inject import javax.net.ssl.SSLException -class DriveUploader(context: Context, workerParams: WorkerParameters) : InjectingWorker(context, workerParams) { - @Inject @ApplicationContext lateinit var context: Context - @Inject lateinit var drive: DriveInvoker - @Inject lateinit var preferences: Preferences +class DriveUploader @WorkerInject constructor( + @Assisted context: Context, + @Assisted workerParams: WorkerParameters, + firebase: Firebase, + private val drive: DriveInvoker, + private val preferences: Preferences) : InjectingWorker(context, workerParams, firebase) { override fun run(): Result { val inputData = inputData @@ -84,8 +86,6 @@ class DriveUploader(context: Context, workerParams: WorkerParameters) : Injectin return if (file == null || file.trashed) drive.createFolder(FOLDER_NAME) else file } - override fun inject(component: ApplicationComponent) = component.inject(this) - companion object { private const val FOLDER_NAME = "Tasks Backups" private const val EXTRA_URI = "extra_uri" diff --git a/app/src/main/java/org/tasks/jobs/MidnightRefreshWork.kt b/app/src/main/java/org/tasks/jobs/MidnightRefreshWork.kt index f21954135..30eb4c175 100644 --- a/app/src/main/java/org/tasks/jobs/MidnightRefreshWork.kt +++ b/app/src/main/java/org/tasks/jobs/MidnightRefreshWork.kt @@ -1,14 +1,18 @@ package org.tasks.jobs import android.content.Context +import androidx.hilt.Assisted +import androidx.hilt.work.WorkerInject import androidx.work.WorkerParameters import org.tasks.LocalBroadcastManager -import org.tasks.injection.ApplicationComponent -import javax.inject.Inject +import org.tasks.analytics.Firebase -class MidnightRefreshWork(context: Context, workerParams: WorkerParameters) : RepeatingWorker(context, workerParams) { - @Inject lateinit var workManager: WorkManager - @Inject lateinit var localBroadcastManager: LocalBroadcastManager +class MidnightRefreshWork @WorkerInject constructor( + @Assisted context: Context, + @Assisted workerParams: WorkerParameters, + firebase: Firebase, + private val workManager: WorkManager, + private val localBroadcastManager: LocalBroadcastManager) : RepeatingWorker(context, workerParams, firebase) { override fun run(): Result { localBroadcastManager.broadcastRefresh() @@ -16,6 +20,4 @@ class MidnightRefreshWork(context: Context, workerParams: WorkerParameters) : Re } override fun scheduleNext() = workManager.scheduleMidnightRefresh() - - override fun inject(component: ApplicationComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/jobs/NotificationService.java b/app/src/main/java/org/tasks/jobs/NotificationService.java index b23ad4d42..9a75eebbf 100644 --- a/app/src/main/java/org/tasks/jobs/NotificationService.java +++ b/app/src/main/java/org/tasks/jobs/NotificationService.java @@ -6,14 +6,15 @@ import static com.todoroo.andlib.utility.AndroidUtilities.assertNotMainThread; import android.content.Intent; import android.os.IBinder; import androidx.annotation.Nullable; +import dagger.hilt.android.AndroidEntryPoint; import java.util.List; import javax.inject.Inject; import org.tasks.Notifier; import org.tasks.R; -import org.tasks.injection.ApplicationComponent; import org.tasks.injection.InjectingService; import org.tasks.preferences.Preferences; +@AndroidEntryPoint public class NotificationService extends InjectingService { @Inject Preferences preferences; @@ -53,9 +54,4 @@ public class NotificationService extends InjectingService { protected void scheduleNext() { notificationQueue.scheduleNext(); } - - @Override - protected void inject(ApplicationComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/jobs/RefreshWork.kt b/app/src/main/java/org/tasks/jobs/RefreshWork.kt index 9ae153805..52390cd3f 100644 --- a/app/src/main/java/org/tasks/jobs/RefreshWork.kt +++ b/app/src/main/java/org/tasks/jobs/RefreshWork.kt @@ -1,22 +1,24 @@ package org.tasks.jobs import android.content.Context +import androidx.hilt.Assisted +import androidx.hilt.work.WorkerInject import androidx.work.WorkerParameters import org.tasks.LocalBroadcastManager -import org.tasks.injection.ApplicationComponent +import org.tasks.analytics.Firebase import org.tasks.scheduling.RefreshScheduler -import javax.inject.Inject -class RefreshWork(context: Context, workerParams: WorkerParameters) : RepeatingWorker(context, workerParams) { - @Inject lateinit var refreshScheduler: RefreshScheduler - @Inject lateinit var localBroadcastManager: LocalBroadcastManager +class RefreshWork @WorkerInject constructor( + @Assisted context: Context, + @Assisted workerParams: WorkerParameters, + firebase: Firebase, + private val refreshScheduler: RefreshScheduler, + private val localBroadcastManager: LocalBroadcastManager) : RepeatingWorker(context, workerParams, firebase) { public override fun run(): Result { localBroadcastManager.broadcastRefresh() return Result.success() } - override fun inject(component: ApplicationComponent) = component.inject(this) - override fun scheduleNext() = refreshScheduler.scheduleNext() } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/jobs/RemoteConfigWork.kt b/app/src/main/java/org/tasks/jobs/RemoteConfigWork.kt index fc9061857..e9dbff567 100644 --- a/app/src/main/java/org/tasks/jobs/RemoteConfigWork.kt +++ b/app/src/main/java/org/tasks/jobs/RemoteConfigWork.kt @@ -1,15 +1,19 @@ package org.tasks.jobs import android.content.Context +import androidx.hilt.Assisted +import androidx.hilt.work.WorkerInject import androidx.work.WorkerParameters -import org.tasks.injection.ApplicationComponent +import org.tasks.analytics.Firebase import org.tasks.injection.InjectingWorker -class RemoteConfigWork(context: Context, workerParams: WorkerParameters) : InjectingWorker(context, workerParams) { +class RemoteConfigWork @WorkerInject constructor( + @Assisted context: Context, + @Assisted workerParams: WorkerParameters, + firebase: Firebase) : InjectingWorker(context, workerParams, firebase) { + override fun run(): Result { firebase.updateRemoteConfig() return Result.success() } - - override fun inject(component: ApplicationComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/jobs/RepeatingWorker.kt b/app/src/main/java/org/tasks/jobs/RepeatingWorker.kt index 1c5f6e1bc..273bbe00c 100644 --- a/app/src/main/java/org/tasks/jobs/RepeatingWorker.kt +++ b/app/src/main/java/org/tasks/jobs/RepeatingWorker.kt @@ -2,9 +2,14 @@ package org.tasks.jobs import android.content.Context import androidx.work.WorkerParameters +import org.tasks.analytics.Firebase import org.tasks.injection.InjectingWorker -abstract class RepeatingWorker internal constructor(context: Context, workerParams: WorkerParameters) : InjectingWorker(context, workerParams) { +abstract class RepeatingWorker internal constructor( + context: Context, + workerParams: WorkerParameters, + firebase: Firebase) : InjectingWorker(context, workerParams, firebase) { + override fun doWork(): Result { val result = super.doWork() scheduleNext() diff --git a/app/src/main/java/org/tasks/jobs/ReverseGeocodeWork.kt b/app/src/main/java/org/tasks/jobs/ReverseGeocodeWork.kt index 3fc3f384f..68b50b576 100644 --- a/app/src/main/java/org/tasks/jobs/ReverseGeocodeWork.kt +++ b/app/src/main/java/org/tasks/jobs/ReverseGeocodeWork.kt @@ -1,26 +1,29 @@ package org.tasks.jobs import android.content.Context +import androidx.hilt.Assisted +import androidx.hilt.work.WorkerInject import androidx.work.WorkerParameters import org.tasks.LocalBroadcastManager +import org.tasks.analytics.Firebase import org.tasks.data.LocationDao -import org.tasks.injection.ApplicationComponent import org.tasks.injection.InjectingWorker import org.tasks.location.Geocoder import timber.log.Timber import java.io.IOException -import javax.inject.Inject -class ReverseGeocodeWork(context: Context, workerParams: WorkerParameters) : InjectingWorker(context, workerParams) { +class ReverseGeocodeWork @WorkerInject constructor( + @Assisted context: Context, + @Assisted workerParams: WorkerParameters, + firebase: Firebase, + private val localBroadcastManager: LocalBroadcastManager, + private val geocoder: Geocoder, + private val locationDao: LocationDao) : InjectingWorker(context, workerParams, firebase) { companion object { const val PLACE_ID = "place_id" } - @Inject lateinit var localBroadcastManager: LocalBroadcastManager - @Inject lateinit var geocoder: Geocoder - @Inject lateinit var locationDao: LocationDao - public override fun run(): Result { val id = inputData.getLong(PLACE_ID, 0) if (id == 0L) { @@ -45,6 +48,4 @@ class ReverseGeocodeWork(context: Context, workerParams: WorkerParameters) : Inj Result.failure() } } - - override fun inject(component: ApplicationComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/jobs/SyncWork.kt b/app/src/main/java/org/tasks/jobs/SyncWork.kt index bc4077199..8354d37d0 100644 --- a/app/src/main/java/org/tasks/jobs/SyncWork.kt +++ b/app/src/main/java/org/tasks/jobs/SyncWork.kt @@ -1,30 +1,34 @@ package org.tasks.jobs import android.content.Context +import androidx.hilt.Assisted +import androidx.hilt.work.WorkerInject import androidx.work.WorkerParameters import org.tasks.LocalBroadcastManager +import org.tasks.analytics.Firebase import org.tasks.caldav.CaldavSynchronizer import org.tasks.data.CaldavDao import org.tasks.data.GoogleTaskListDao import org.tasks.etesync.EteSynchronizer import org.tasks.gtasks.GoogleTaskSynchronizer -import org.tasks.injection.ApplicationComponent import org.tasks.injection.InjectingWorker import org.tasks.preferences.Preferences import org.tasks.sync.SyncAdapters import java.util.concurrent.Executors import java.util.concurrent.TimeUnit -import javax.inject.Inject -class SyncWork(context: Context, workerParams: WorkerParameters) : InjectingWorker(context, workerParams) { - @Inject lateinit var caldavSynchronizer: CaldavSynchronizer - @Inject lateinit var eteSynchronizer: EteSynchronizer - @Inject lateinit var googleTaskSynchronizer: GoogleTaskSynchronizer - @Inject lateinit var localBroadcastManager: LocalBroadcastManager - @Inject lateinit var preferences: Preferences - @Inject lateinit var caldavDao: CaldavDao - @Inject lateinit var googleTaskListDao: GoogleTaskListDao - @Inject lateinit var syncAdapters: SyncAdapters +class SyncWork @WorkerInject constructor( + @Assisted context: Context, + @Assisted workerParams: WorkerParameters, + firebase: Firebase, + private val caldavSynchronizer: CaldavSynchronizer, + private val eteSynchronizer: EteSynchronizer, + private val googleTaskSynchronizer: GoogleTaskSynchronizer, + private val localBroadcastManager: LocalBroadcastManager, + private val preferences: Preferences, + private val caldavDao: CaldavDao, + private val googleTaskListDao: GoogleTaskListDao, + private val syncAdapters: SyncAdapters) : InjectingWorker(context, workerParams, firebase) { public override fun run(): Result { if (!syncAdapters.isSyncEnabled) { @@ -69,8 +73,6 @@ class SyncWork(context: Context, workerParams: WorkerParameters) : InjectingWork executor.awaitTermination(15, TimeUnit.MINUTES) } - override fun inject(component: ApplicationComponent) = component.inject(this) - companion object { private val LOCK = Any() } diff --git a/app/src/main/java/org/tasks/jobs/WorkManager.kt b/app/src/main/java/org/tasks/jobs/WorkManager.kt index 9e95435da..d870bd59d 100644 --- a/app/src/main/java/org/tasks/jobs/WorkManager.kt +++ b/app/src/main/java/org/tasks/jobs/WorkManager.kt @@ -1,228 +1,49 @@ package org.tasks.jobs -import android.annotation.SuppressLint -import android.app.AlarmManager -import android.app.PendingIntent -import android.content.Context -import android.content.Intent import android.net.Uri -import androidx.work.* -import androidx.work.WorkManager -import com.todoroo.andlib.utility.AndroidUtilities -import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.data.Task -import io.reactivex.Single -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.functions.BiFunction -import io.reactivex.schedulers.Schedulers import org.tasks.BuildConfig -import org.tasks.R -import org.tasks.data.CaldavDao -import org.tasks.data.GoogleTaskListDao import org.tasks.data.Place -import org.tasks.date.DateTimeUtils.midnight -import org.tasks.date.DateTimeUtils.newDateTime -import org.tasks.injection.ApplicationContext -import org.tasks.preferences.Preferences -import org.tasks.time.DateTimeUtils -import timber.log.Timber -import java.util.* -import java.util.concurrent.TimeUnit -import javax.inject.Inject -import javax.inject.Singleton -import kotlin.math.max - -@Singleton -class WorkManager @Inject constructor( - @param:ApplicationContext private val context: Context, - private val preferences: Preferences, - private val googleTaskListDao: GoogleTaskListDao, - private val caldavDao: CaldavDao) { - - private val alarmManager: AlarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager - private val workManager: WorkManager = WorkManager.getInstance(context) - - fun afterSave(current: Task, original: Task?) = - workManager.enqueue( - OneTimeWorkRequest.Builder(AfterSaveWork::class.java) - .setInputData(AfterSaveWork.getInputData(current, original)) - .build()) - - fun cleanup(ids: Iterable) = ids.chunked(MAX_CLEANUP_LENGTH) { - workManager.enqueue( - OneTimeWorkRequest.Builder(CleanupWork::class.java) - .setInputData( - Data.Builder() - .putLongArray(CleanupWork.EXTRA_TASK_IDS, it.toLongArray()) - .build()) - .build()) - } - fun sync(immediate: Boolean) { - val constraints = Constraints.Builder() - .setRequiredNetworkType( - if (!immediate && preferences.getBoolean(R.string.p_background_sync_unmetered_only, false)) { - NetworkType.UNMETERED - } else { - NetworkType.CONNECTED - }) - .build() - val builder = OneTimeWorkRequest.Builder(SyncWork::class.java) - .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES) - .setConstraints(constraints) - if (!immediate) { - builder.setInitialDelay(1, TimeUnit.MINUTES) - } - val request = builder.build() - workManager.beginUniqueWork(TAG_SYNC, ExistingWorkPolicy.REPLACE, request).enqueue() - } +interface WorkManager { - fun reverseGeocode(place: Place) { - if (BuildConfig.DEBUG && place.id == 0L) { - throw RuntimeException("Missing id") - } - workManager.enqueue( - OneTimeWorkRequest.Builder(ReverseGeocodeWork::class.java) - .setInputData(Data.Builder().putLong(ReverseGeocodeWork.PLACE_ID, place.id).build()) - .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES) - .setConstraints( - Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()) - .build()) - } + fun afterSave(current: Task, original: Task?) + + fun cleanup(ids: Iterable) - fun updateBackgroundSync() = updateBackgroundSync(null, null, null) + fun sync(immediate: Boolean) + + fun reverseGeocode(place: Place) + + fun updateBackgroundSync() - @SuppressLint("CheckResult") fun updateBackgroundSync( forceAccountPresent: Boolean?, forceBackgroundEnabled: Boolean?, - forceOnlyOnUnmetered: Boolean?) { - val backgroundEnabled = forceBackgroundEnabled - ?: preferences.getBoolean(R.string.p_background_sync, true) - val onlyOnWifi = forceOnlyOnUnmetered - ?: preferences.getBoolean(R.string.p_background_sync_unmetered_only, false) - (if (forceAccountPresent == null) Single.zip( - googleTaskListDao.accountCount(), - Single.fromCallable { caldavDao.accountCount() }, - BiFunction { googleCount: Int, caldavCount: Int -> googleCount > 0 || caldavCount > 0 }) else Single.just(forceAccountPresent)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { accountsPresent: Boolean -> scheduleBackgroundSync(backgroundEnabled && accountsPresent, onlyOnWifi) } - } + forceOnlyOnUnmetered: Boolean?) - private fun scheduleBackgroundSync(enabled: Boolean, onlyOnUnmetered: Boolean) { - Timber.d("background sync enabled: %s, onlyOnUnmetered: %s", enabled, onlyOnUnmetered) - if (enabled) { - workManager.enqueueUniquePeriodicWork( - TAG_BACKGROUND_SYNC, - ExistingPeriodicWorkPolicy.KEEP, - PeriodicWorkRequest.Builder(SyncWork::class.java, 1, TimeUnit.HOURS) - .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES) - .setConstraints(getNetworkConstraints(onlyOnUnmetered)) - .build()) - } else { - workManager.cancelUniqueWork(TAG_BACKGROUND_SYNC) - } - } + fun scheduleRefresh(time: Long) - fun scheduleRefresh(time: Long) = enqueueUnique(TAG_REFRESH, RefreshWork::class.java, time) - - fun scheduleMidnightRefresh() = - enqueueUnique(TAG_MIDNIGHT_REFRESH, MidnightRefreshWork::class.java, midnight()) - - fun scheduleNotification(scheduledTime: Long) { - val time = max(DateUtilities.now(), scheduledTime) - if (time < DateTimeUtils.currentTimeMillis()) { - val intent = notificationIntent - if (AndroidUtilities.atLeastOreo()) { - context.startForegroundService(intent) - } else { - context.startService(intent) - } - } else { - val pendingIntent = notificationPendingIntent - alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time, pendingIntent) - } - } + fun scheduleMidnightRefresh() - fun scheduleBackup() { - enqueueUnique( - TAG_BACKUP, - BackupWork::class.java, - newDateTime(preferences.getLong(R.string.p_last_backup, 0L)) - .plusDays(1) - .millis - .coerceAtMost(midnight())) - } + fun scheduleNotification(scheduledTime: Long) - fun scheduleConfigRefresh() = - workManager.enqueueUniquePeriodicWork( - TAG_REMOTE_CONFIG, - ExistingPeriodicWorkPolicy.KEEP, - PeriodicWorkRequest.Builder( - RemoteConfigWork::class.java, REMOTE_CONFIG_INTERVAL_HOURS, TimeUnit.HOURS) - .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES) - .setConstraints( - Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()) - .build()) - - fun scheduleDriveUpload(uri: Uri, purge: Boolean) { - if (!preferences.getBoolean(R.string.p_google_drive_backup, false)) { - return - } - val builder = OneTimeWorkRequest.Builder(DriveUploader::class.java) - .setInputData(DriveUploader.getInputData(uri, purge)) - .setConstraints(networkConstraints) - if (purge) { - builder.setInitialDelay(Random().nextInt(3600).toLong(), TimeUnit.SECONDS) - } - workManager.enqueue(builder.build()) - } + fun scheduleBackup() - private val networkConstraints: Constraints - get() = getNetworkConstraints( - preferences.getBoolean(R.string.p_background_sync_unmetered_only, false)) - - private fun getNetworkConstraints(unmeteredOnly: Boolean) = - Constraints.Builder() - .setRequiredNetworkType(if (unmeteredOnly) NetworkType.UNMETERED else NetworkType.CONNECTED) - .build() - - private fun enqueueUnique(key: String, c: Class, time: Long) { - val delay = time - DateUtilities.now() - val builder = OneTimeWorkRequest.Builder(c) - if (delay > 0) { - builder.setInitialDelay(delay, TimeUnit.MILLISECONDS) - } - Timber.d("$key: ${DateTimeUtils.printTimestamp(time)} (${DateTimeUtils.printDuration(delay)})") - workManager.beginUniqueWork(key, ExistingWorkPolicy.REPLACE, builder.build()).enqueue() - } - - fun cancelNotifications() { - Timber.d("cancelNotifications") - alarmManager.cancel(notificationPendingIntent) - } + fun scheduleConfigRefresh() - private val notificationIntent: Intent - get() = Intent(context, NotificationService::class.java) + fun scheduleDriveUpload(uri: Uri, purge: Boolean) - private val notificationPendingIntent: PendingIntent - get() { - return if (AndroidUtilities.atLeastOreo()) { - PendingIntent.getForegroundService(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT) - } else { - PendingIntent.getService(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT) - } - } + fun cancelNotifications() companion object { val REMOTE_CONFIG_INTERVAL_HOURS = if (BuildConfig.DEBUG) 1 else 12.toLong() - private const val MAX_CLEANUP_LENGTH = 500 - private const val TAG_BACKUP = "tag_backup" - private const val TAG_REFRESH = "tag_refresh" - private const val TAG_MIDNIGHT_REFRESH = "tag_midnight_refresh" - private const val TAG_SYNC = "tag_sync" - private const val TAG_BACKGROUND_SYNC = "tag_background_sync" - private const val TAG_REMOTE_CONFIG = "tag_remote_config" + const val MAX_CLEANUP_LENGTH = 500 + const val TAG_BACKUP = "tag_backup" + const val TAG_REFRESH = "tag_refresh" + const val TAG_MIDNIGHT_REFRESH = "tag_midnight_refresh" + const val TAG_SYNC = "tag_sync" + const val TAG_BACKGROUND_SYNC = "tag_background_sync" + const val TAG_REMOTE_CONFIG = "tag_remote_config" } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt b/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt new file mode 100644 index 000000000..81c9590ed --- /dev/null +++ b/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt @@ -0,0 +1,224 @@ +package org.tasks.jobs + +import android.annotation.SuppressLint +import android.app.AlarmManager +import android.app.PendingIntent +import android.content.Context +import android.content.Intent +import android.net.Uri +import androidx.work.* +import com.todoroo.andlib.utility.AndroidUtilities +import com.todoroo.andlib.utility.DateUtilities +import com.todoroo.astrid.data.Task +import io.reactivex.Single +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.functions.BiFunction +import io.reactivex.schedulers.Schedulers +import org.tasks.BuildConfig +import org.tasks.R +import org.tasks.data.CaldavDao +import org.tasks.data.GoogleTaskListDao +import org.tasks.data.Place +import org.tasks.date.DateTimeUtils.midnight +import org.tasks.date.DateTimeUtils.newDateTime +import org.tasks.jobs.WorkManager.Companion.MAX_CLEANUP_LENGTH +import org.tasks.jobs.WorkManager.Companion.REMOTE_CONFIG_INTERVAL_HOURS +import org.tasks.jobs.WorkManager.Companion.TAG_BACKGROUND_SYNC +import org.tasks.jobs.WorkManager.Companion.TAG_BACKUP +import org.tasks.jobs.WorkManager.Companion.TAG_MIDNIGHT_REFRESH +import org.tasks.jobs.WorkManager.Companion.TAG_REFRESH +import org.tasks.jobs.WorkManager.Companion.TAG_REMOTE_CONFIG +import org.tasks.jobs.WorkManager.Companion.TAG_SYNC +import org.tasks.preferences.Preferences +import org.tasks.time.DateTimeUtils +import timber.log.Timber +import java.util.* +import java.util.concurrent.TimeUnit +import kotlin.math.max + +class WorkManagerImpl constructor( + private val context: Context, + private val preferences: Preferences, + private val googleTaskListDao: GoogleTaskListDao, + private val caldavDao: CaldavDao): WorkManager { + + private val alarmManager: AlarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager + private val workManager = androidx.work.WorkManager.getInstance(context) + + override fun afterSave(current: Task, original: Task?) { + workManager.enqueue( + OneTimeWorkRequest.Builder(AfterSaveWork::class.java) + .setInputData(AfterSaveWork.getInputData(current, original)) + .build()) + } + + override fun cleanup(ids: Iterable) { + ids.chunked(MAX_CLEANUP_LENGTH) { + workManager.enqueue( + OneTimeWorkRequest.Builder(CleanupWork::class.java) + .setInputData( + Data.Builder() + .putLongArray(CleanupWork.EXTRA_TASK_IDS, it.toLongArray()) + .build()) + .build()) + } + } + + override fun sync(immediate: Boolean) { + val constraints = Constraints.Builder() + .setRequiredNetworkType( + if (!immediate && preferences.getBoolean(R.string.p_background_sync_unmetered_only, false)) { + NetworkType.UNMETERED + } else { + NetworkType.CONNECTED + }) + .build() + val builder = OneTimeWorkRequest.Builder(SyncWork::class.java) + .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES) + .setConstraints(constraints) + if (!immediate) { + builder.setInitialDelay(1, TimeUnit.MINUTES) + } + val request = builder.build() + workManager.beginUniqueWork(TAG_SYNC, ExistingWorkPolicy.REPLACE, request).enqueue() + } + + override fun reverseGeocode(place: Place) { + if (BuildConfig.DEBUG && place.id == 0L) { + throw RuntimeException("Missing id") + } + workManager.enqueue( + OneTimeWorkRequest.Builder(ReverseGeocodeWork::class.java) + .setInputData(Data.Builder().putLong(ReverseGeocodeWork.PLACE_ID, place.id).build()) + .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES) + .setConstraints( + Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()) + .build()) + } + + override fun updateBackgroundSync() = updateBackgroundSync(null, null, null) + + @SuppressLint("CheckResult") + override fun updateBackgroundSync( + forceAccountPresent: Boolean?, + forceBackgroundEnabled: Boolean?, + forceOnlyOnUnmetered: Boolean?) { + val backgroundEnabled = forceBackgroundEnabled + ?: preferences.getBoolean(R.string.p_background_sync, true) + val onlyOnWifi = forceOnlyOnUnmetered + ?: preferences.getBoolean(R.string.p_background_sync_unmetered_only, false) + (if (forceAccountPresent == null) Single.zip( + googleTaskListDao.accountCount(), + Single.fromCallable { caldavDao.accountCount() }, + BiFunction { googleCount: Int, caldavCount: Int -> googleCount > 0 || caldavCount > 0 }) else Single.just(forceAccountPresent)) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { accountsPresent: Boolean -> scheduleBackgroundSync(backgroundEnabled && accountsPresent, onlyOnWifi) } + } + + private fun scheduleBackgroundSync(enabled: Boolean, onlyOnUnmetered: Boolean) { + Timber.d("background sync enabled: %s, onlyOnUnmetered: %s", enabled, onlyOnUnmetered) + if (enabled) { + workManager.enqueueUniquePeriodicWork( + TAG_BACKGROUND_SYNC, + ExistingPeriodicWorkPolicy.KEEP, + PeriodicWorkRequest.Builder(SyncWork::class.java, 1, TimeUnit.HOURS) + .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES) + .setConstraints(getNetworkConstraints(onlyOnUnmetered)) + .build()) + } else { + workManager.cancelUniqueWork(TAG_BACKGROUND_SYNC) + } + } + + override fun scheduleRefresh(time: Long) = enqueueUnique(TAG_REFRESH, RefreshWork::class.java, time) + + override fun scheduleMidnightRefresh() = + enqueueUnique(TAG_MIDNIGHT_REFRESH, MidnightRefreshWork::class.java, midnight()) + + override fun scheduleNotification(scheduledTime: Long) { + val time = max(DateUtilities.now(), scheduledTime) + if (time < DateTimeUtils.currentTimeMillis()) { + val intent = notificationIntent + if (AndroidUtilities.atLeastOreo()) { + context.startForegroundService(intent) + } else { + context.startService(intent) + } + } else { + val pendingIntent = notificationPendingIntent + alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time, pendingIntent) + } + } + + override fun scheduleBackup() { + enqueueUnique( + TAG_BACKUP, + BackupWork::class.java, + newDateTime(preferences.getLong(R.string.p_last_backup, 0L)) + .plusDays(1) + .millis + .coerceAtMost(midnight())) + } + + override fun scheduleConfigRefresh() { + workManager.enqueueUniquePeriodicWork( + TAG_REMOTE_CONFIG, + ExistingPeriodicWorkPolicy.KEEP, + PeriodicWorkRequest.Builder( + RemoteConfigWork::class.java, REMOTE_CONFIG_INTERVAL_HOURS, TimeUnit.HOURS) + .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES) + .setConstraints( + Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build()) + .build()) + } + + override fun scheduleDriveUpload(uri: Uri, purge: Boolean) { + if (!preferences.getBoolean(R.string.p_google_drive_backup, false)) { + return + } + val builder = OneTimeWorkRequest.Builder(DriveUploader::class.java) + .setInputData(DriveUploader.getInputData(uri, purge)) + .setConstraints(networkConstraints) + if (purge) { + builder.setInitialDelay(Random().nextInt(3600).toLong(), TimeUnit.SECONDS) + } + workManager.enqueue(builder.build()) + } + + private val networkConstraints: Constraints + get() = getNetworkConstraints( + preferences.getBoolean(R.string.p_background_sync_unmetered_only, false)) + + private fun getNetworkConstraints(unmeteredOnly: Boolean) = + Constraints.Builder() + .setRequiredNetworkType(if (unmeteredOnly) NetworkType.UNMETERED else NetworkType.CONNECTED) + .build() + + private fun enqueueUnique(key: String, c: Class, time: Long) { + val delay = time - DateUtilities.now() + val builder = OneTimeWorkRequest.Builder(c) + if (delay > 0) { + builder.setInitialDelay(delay, TimeUnit.MILLISECONDS) + } + Timber.d("$key: ${DateTimeUtils.printTimestamp(time)} (${DateTimeUtils.printDuration(delay)})") + workManager.beginUniqueWork(key, ExistingWorkPolicy.REPLACE, builder.build()).enqueue() + } + + override fun cancelNotifications() { + Timber.d("cancelNotifications") + alarmManager.cancel(notificationPendingIntent) + } + + private val notificationIntent: Intent + get() = Intent(context, NotificationService::class.java) + + private val notificationPendingIntent: PendingIntent + get() { + return if (AndroidUtilities.atLeastOreo()) { + PendingIntent.getForegroundService(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT) + } else { + PendingIntent.getService(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/locale/LocalePickerDialog.kt b/app/src/main/java/org/tasks/locale/LocalePickerDialog.kt index 384b692e5..135e4f603 100644 --- a/app/src/main/java/org/tasks/locale/LocalePickerDialog.kt +++ b/app/src/main/java/org/tasks/locale/LocalePickerDialog.kt @@ -4,14 +4,15 @@ import android.app.Activity import android.app.Dialog import android.content.Intent import android.os.Bundle +import androidx.fragment.app.DialogFragment +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.dialogs.DialogBuilder -import org.tasks.injection.FragmentComponent -import org.tasks.injection.InjectingDialogFragment import java.util.* import javax.inject.Inject -class LocalePickerDialog : InjectingDialogFragment() { +@AndroidEntryPoint +class LocalePickerDialog : DialogFragment() { @Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var locale: Locale @@ -34,8 +35,6 @@ class LocalePickerDialog : InjectingDialogFragment() { .show() } - override fun inject(component: FragmentComponent) = component.inject(this) - companion object { const val EXTRA_LOCALE = "extra_locale" fun newLocalePickerDialog(): LocalePickerDialog { diff --git a/app/src/main/java/org/tasks/locale/receiver/TaskerIntentService.java b/app/src/main/java/org/tasks/locale/receiver/TaskerIntentService.java index 390d1091a..6e4c6745a 100644 --- a/app/src/main/java/org/tasks/locale/receiver/TaskerIntentService.java +++ b/app/src/main/java/org/tasks/locale/receiver/TaskerIntentService.java @@ -1,23 +1,21 @@ package org.tasks.locale.receiver; -import android.content.Context; import android.content.Intent; import android.os.Bundle; import androidx.annotation.NonNull; import com.todoroo.astrid.api.Filter; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.Notifier; -import org.tasks.injection.ApplicationComponent; -import org.tasks.injection.ApplicationContext; import org.tasks.injection.InjectingJobIntentService; import org.tasks.locale.bundle.ListNotificationBundle; import org.tasks.locale.bundle.TaskCreationBundle; import org.tasks.preferences.DefaultFilterProvider; import timber.log.Timber; +@AndroidEntryPoint public class TaskerIntentService extends InjectingJobIntentService { - @Inject @ApplicationContext Context context; @Inject Notifier notifier; @Inject DefaultFilterProvider defaultFilterProvider; @Inject TaskerTaskCreator taskerTaskCreator; @@ -42,9 +40,4 @@ public class TaskerIntentService extends InjectingJobIntentService { Timber.e("Invalid bundle: %s", bundle); } } - - @Override - protected void inject(ApplicationComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/locale/ui/activity/AbstractFragmentPluginAppCompatActivity.java b/app/src/main/java/org/tasks/locale/ui/activity/AbstractFragmentPluginAppCompatActivity.java index 344a6ecd4..07da7038b 100644 --- a/app/src/main/java/org/tasks/locale/ui/activity/AbstractFragmentPluginAppCompatActivity.java +++ b/app/src/main/java/org/tasks/locale/ui/activity/AbstractFragmentPluginAppCompatActivity.java @@ -20,7 +20,7 @@ public abstract class AbstractFragmentPluginAppCompatActivity } @Override - public void onCreate(final Bundle savedInstanceState) { + protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (isLocalePluginIntent(getIntent())) { diff --git a/app/src/main/java/org/tasks/locale/ui/activity/TaskerCreateTaskActivity.java b/app/src/main/java/org/tasks/locale/ui/activity/TaskerCreateTaskActivity.java index 673ffcf36..e95a1b90b 100755 --- a/app/src/main/java/org/tasks/locale/ui/activity/TaskerCreateTaskActivity.java +++ b/app/src/main/java/org/tasks/locale/ui/activity/TaskerCreateTaskActivity.java @@ -5,6 +5,7 @@ import android.net.Uri; import android.os.Bundle; import android.view.MenuItem; import androidx.appcompat.widget.Toolbar; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import net.dinglisch.android.tasker.TaskerPlugin; import org.tasks.LocalBroadcastManager; @@ -12,9 +13,9 @@ import org.tasks.R; import org.tasks.billing.Inventory; import org.tasks.billing.PurchaseActivity; import org.tasks.databinding.ActivityTaskerCreateBinding; -import org.tasks.injection.ActivityComponent; import org.tasks.locale.bundle.TaskCreationBundle; +@AndroidEntryPoint public final class TaskerCreateTaskActivity extends AbstractFragmentPluginAppCompatActivity implements Toolbar.OnMenuItemClickListener { @@ -26,7 +27,7 @@ public final class TaskerCreateTaskActivity extends AbstractFragmentPluginAppCom private Bundle previousBundle; @Override - public void onCreate(final Bundle savedInstanceState) { + protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityTaskerCreateBinding.inflate(getLayoutInflater()); @@ -124,11 +125,6 @@ public final class TaskerCreateTaskActivity extends AbstractFragmentPluginAppCom outState.putParcelable(TaskCreationBundle.EXTRA_BUNDLE, previousBundle); } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.menu_help) { diff --git a/app/src/main/java/org/tasks/locale/ui/activity/TaskerSettingsActivity.kt b/app/src/main/java/org/tasks/locale/ui/activity/TaskerSettingsActivity.kt index a9e49d9eb..81c1e71f6 100644 --- a/app/src/main/java/org/tasks/locale/ui/activity/TaskerSettingsActivity.kt +++ b/app/src/main/java/org/tasks/locale/ui/activity/TaskerSettingsActivity.kt @@ -1,12 +1,13 @@ package org.tasks.locale.ui.activity import android.os.Bundle +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R -import org.tasks.injection.ActivityComponent import org.tasks.locale.bundle.ListNotificationBundle import org.tasks.preferences.fragments.TaskerListNotification import org.tasks.preferences.fragments.TaskerListNotification.Companion.newTaskerListNotification +@AndroidEntryPoint class TaskerSettingsActivity : AbstractFragmentPluginPreference() { var filter: String? = null @@ -34,8 +35,6 @@ class TaskerSettingsActivity : AbstractFragmentPluginPreference() { override fun getRootPreference() = newTaskerListNotification(filter) - override fun inject(component: ActivityComponent) = component.inject(this) - private fun getFragment() = supportFragmentManager.findFragmentById(R.id.settings) as TaskerListNotification } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/location/LocationPickerActivity.java b/app/src/main/java/org/tasks/location/LocationPickerActivity.java index 5167c6a6d..232753583 100644 --- a/app/src/main/java/org/tasks/location/LocationPickerActivity.java +++ b/app/src/main/java/org/tasks/location/LocationPickerActivity.java @@ -36,6 +36,7 @@ import com.google.android.material.appbar.CollapsingToolbarLayout; import com.mapbox.android.core.location.LocationEngineCallback; import com.mapbox.android.core.location.LocationEngineProvider; import com.mapbox.android.core.location.LocationEngineResult; +import dagger.hilt.android.AndroidEntryPoint; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; @@ -54,7 +55,6 @@ import org.tasks.data.LocationDao; import org.tasks.data.Place; import org.tasks.data.PlaceUsage; import org.tasks.dialogs.DialogBuilder; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.location.LocationPickerAdapter.OnLocationPicked; import org.tasks.location.LocationSearchAdapter.OnPredictionPicked; @@ -68,6 +68,7 @@ import org.tasks.themes.ThemeColor; import org.tasks.ui.Toaster; import timber.log.Timber; +@AndroidEntryPoint public class LocationPickerActivity extends InjectingAppCompatActivity implements OnMenuItemClickListener, MapFragmentCallback, @@ -130,6 +131,7 @@ public class LocationPickerActivity extends InjectingAppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + theme.applyTheme(this); setContentView(R.layout.activity_location_picker); ButterKnife.bind(this); @@ -414,12 +416,6 @@ public class LocationPickerActivity extends InjectingAppCompatActivity viewModel.saveState(outState); } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - theme.applyTheme(this); - } - @Override public boolean onMenuItemClick(MenuItem item) { if (item.getItemId() == R.id.menu_search) { diff --git a/app/src/main/java/org/tasks/notifications/AudioManager.java b/app/src/main/java/org/tasks/notifications/AudioManager.java index acb1fc452..9bffbda66 100644 --- a/app/src/main/java/org/tasks/notifications/AudioManager.java +++ b/app/src/main/java/org/tasks/notifications/AudioManager.java @@ -1,8 +1,8 @@ package org.tasks.notifications; import android.content.Context; +import dagger.hilt.android.qualifiers.ApplicationContext; import javax.inject.Inject; -import org.tasks.injection.ApplicationContext; public class AudioManager { diff --git a/app/src/main/java/org/tasks/notifications/Notification.kt b/app/src/main/java/org/tasks/notifications/Notification.kt index 59be3eab4..47269b3f1 100644 --- a/app/src/main/java/org/tasks/notifications/Notification.kt +++ b/app/src/main/java/org/tasks/notifications/Notification.kt @@ -4,7 +4,6 @@ import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.Index import androidx.room.PrimaryKey -import com.todoroo.andlib.data.Property import com.todoroo.andlib.data.Table @Entity(tableName = Notification.TABLE_NAME, indices = [Index(value = ["task"], unique = true)]) diff --git a/app/src/main/java/org/tasks/notifications/NotificationClearedReceiver.java b/app/src/main/java/org/tasks/notifications/NotificationClearedReceiver.java index 95900bf78..2154d4fcc 100644 --- a/app/src/main/java/org/tasks/notifications/NotificationClearedReceiver.java +++ b/app/src/main/java/org/tasks/notifications/NotificationClearedReceiver.java @@ -2,11 +2,12 @@ package org.tasks.notifications; import android.content.Context; import android.content.Intent; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; -import org.tasks.injection.ApplicationComponent; import org.tasks.injection.InjectingBroadcastReceiver; import timber.log.Timber; +@AndroidEntryPoint public class NotificationClearedReceiver extends InjectingBroadcastReceiver { @Inject NotificationManager notificationManager; @@ -19,9 +20,4 @@ public class NotificationClearedReceiver extends InjectingBroadcastReceiver { Timber.d("cleared %s", notificationId); notificationManager.cancel(notificationId); } - - @Override - protected void inject(ApplicationComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/notifications/NotificationManager.java b/app/src/main/java/org/tasks/notifications/NotificationManager.java index 91649a1d7..4f171d020 100644 --- a/app/src/main/java/org/tasks/notifications/NotificationManager.java +++ b/app/src/main/java/org/tasks/notifications/NotificationManager.java @@ -30,6 +30,7 @@ import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.reminders.ReminderService; +import dagger.hilt.android.qualifiers.ApplicationContext; import io.reactivex.Completable; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -43,7 +44,6 @@ import org.tasks.LocalBroadcastManager; import org.tasks.R; import org.tasks.data.LocationDao; import org.tasks.data.Place; -import org.tasks.injection.ApplicationContext; import org.tasks.intents.TaskIntents; import org.tasks.preferences.Preferences; import org.tasks.receivers.CompleteTaskReceiver; diff --git a/app/src/main/java/org/tasks/notifications/TelephonyManager.java b/app/src/main/java/org/tasks/notifications/TelephonyManager.java index f9d99e1e1..25352ec9c 100644 --- a/app/src/main/java/org/tasks/notifications/TelephonyManager.java +++ b/app/src/main/java/org/tasks/notifications/TelephonyManager.java @@ -1,8 +1,8 @@ package org.tasks.notifications; import android.content.Context; +import dagger.hilt.android.qualifiers.ApplicationContext; import javax.inject.Inject; -import org.tasks.injection.ApplicationContext; public class TelephonyManager { diff --git a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt index 0a4646d76..7eac5666a 100644 --- a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt +++ b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt @@ -5,11 +5,11 @@ import com.todoroo.astrid.api.* import com.todoroo.astrid.api.Filter import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.core.BuiltInFilterExposer.getMyTasksFilter +import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.R import org.tasks.Strings.isNullOrEmpty import org.tasks.data.* import org.tasks.filters.PlaceFilter -import org.tasks.injection.ApplicationContext import timber.log.Timber import javax.inject.Inject diff --git a/app/src/main/java/org/tasks/preferences/Device.java b/app/src/main/java/org/tasks/preferences/Device.java index 50053ef87..dd0fdda05 100644 --- a/app/src/main/java/org/tasks/preferences/Device.java +++ b/app/src/main/java/org/tasks/preferences/Device.java @@ -10,11 +10,11 @@ import android.os.Build; import android.provider.MediaStore; import android.speech.RecognizerIntent; import com.google.common.base.Joiner; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.util.List; import javax.inject.Inject; import org.tasks.BuildConfig; import org.tasks.R; -import org.tasks.injection.ApplicationContext; import org.tasks.locale.Locale; import timber.log.Timber; diff --git a/app/src/main/java/org/tasks/preferences/HelpAndFeedback.kt b/app/src/main/java/org/tasks/preferences/HelpAndFeedback.kt index 1b803b3ac..d1dbbdda4 100644 --- a/app/src/main/java/org/tasks/preferences/HelpAndFeedback.kt +++ b/app/src/main/java/org/tasks/preferences/HelpAndFeedback.kt @@ -1,16 +1,13 @@ package org.tasks.preferences +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R -import org.tasks.injection.ActivityComponent import org.tasks.preferences.fragments.HelpAndFeedback +@AndroidEntryPoint class HelpAndFeedback : BasePreferences() { override fun getRootTitle() = R.string.help_and_feedback override fun getRootPreference() = HelpAndFeedback() - - override fun inject(component: ActivityComponent) { - component.inject(this) - } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/MainPreferences.kt b/app/src/main/java/org/tasks/preferences/MainPreferences.kt index 120854108..dc1c10287 100644 --- a/app/src/main/java/org/tasks/preferences/MainPreferences.kt +++ b/app/src/main/java/org/tasks/preferences/MainPreferences.kt @@ -1,16 +1,13 @@ package org.tasks.preferences +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R -import org.tasks.injection.ActivityComponent import org.tasks.preferences.fragments.MainSettingsFragment +@AndroidEntryPoint class MainPreferences : BasePreferences() { override fun getRootTitle() = R.string.TLA_menu_settings override fun getRootPreference() = MainSettingsFragment() - - override fun inject(component: ActivityComponent) { - component.inject(this) - } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/ManageSpaceActivity.kt b/app/src/main/java/org/tasks/preferences/ManageSpaceActivity.kt index 79443aadf..5f469f9a6 100644 --- a/app/src/main/java/org/tasks/preferences/ManageSpaceActivity.kt +++ b/app/src/main/java/org/tasks/preferences/ManageSpaceActivity.kt @@ -1,14 +1,13 @@ package org.tasks.preferences +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R -import org.tasks.injection.ActivityComponent import org.tasks.preferences.fragments.Advanced +@AndroidEntryPoint class ManageSpaceActivity : BasePreferences() { override fun getRootTitle() = R.string.preferences_advanced override fun getRootPreference() = Advanced() - - override fun inject(component: ActivityComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/NotificationPreferences.kt b/app/src/main/java/org/tasks/preferences/NotificationPreferences.kt index 66d95eedc..e09660090 100644 --- a/app/src/main/java/org/tasks/preferences/NotificationPreferences.kt +++ b/app/src/main/java/org/tasks/preferences/NotificationPreferences.kt @@ -1,14 +1,13 @@ package org.tasks.preferences +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R -import org.tasks.injection.ActivityComponent import org.tasks.preferences.fragments.Notifications +@AndroidEntryPoint class NotificationPreferences : BasePreferences() { override fun getRootTitle() = R.string.notifications override fun getRootPreference() = Notifications() - - override fun inject(component: ActivityComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/PermissionChecker.java b/app/src/main/java/org/tasks/preferences/PermissionChecker.java index e3b45d750..41716274b 100644 --- a/app/src/main/java/org/tasks/preferences/PermissionChecker.java +++ b/app/src/main/java/org/tasks/preferences/PermissionChecker.java @@ -6,8 +6,8 @@ import static com.todoroo.andlib.utility.AndroidUtilities.atLeastQ; import android.Manifest.permission; import android.content.Context; import android.content.pm.PackageManager; +import dagger.hilt.android.qualifiers.ApplicationContext; import javax.inject.Inject; -import org.tasks.injection.ApplicationContext; import timber.log.Timber; public class PermissionChecker { diff --git a/app/src/main/java/org/tasks/preferences/SyncPreferences.kt b/app/src/main/java/org/tasks/preferences/SyncPreferences.kt index e602bdbd1..40b7a21b5 100644 --- a/app/src/main/java/org/tasks/preferences/SyncPreferences.kt +++ b/app/src/main/java/org/tasks/preferences/SyncPreferences.kt @@ -1,14 +1,13 @@ package org.tasks.preferences +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R -import org.tasks.injection.ActivityComponent import org.tasks.preferences.fragments.Synchronization +@AndroidEntryPoint class SyncPreferences : BasePreferences() { override fun getRootTitle() = R.string.synchronization override fun getRootPreference() = Synchronization() - - override fun inject(component: ActivityComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt b/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt index fc1c376c4..28f9fd572 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt @@ -8,6 +8,7 @@ import androidx.preference.Preference import androidx.preference.SwitchPreferenceCompat import com.todoroo.astrid.dao.Database import com.todoroo.astrid.dao.TaskDao +import dagger.hilt.android.AndroidEntryPoint import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable @@ -17,7 +18,6 @@ import org.tasks.PermissionUtil import org.tasks.R import org.tasks.calendars.CalendarEventProvider import org.tasks.files.FileHelper -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.preferences.FragmentPermissionRequestor import org.tasks.preferences.PermissionChecker @@ -30,6 +30,7 @@ import javax.inject.Inject private const val REQUEST_CODE_FILES_DIR = 10000 +@AndroidEntryPoint class Advanced : InjectingPreferenceFragment() { @Inject lateinit var preferences: Preferences @@ -220,6 +221,4 @@ class Advanced : InjectingPreferenceFragment() { .setNegativeButton(android.R.string.cancel, null) .show() } - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/Backups.kt b/app/src/main/java/org/tasks/preferences/fragments/Backups.kt index be53fcc65..cb29a4f0e 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Backups.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Backups.kt @@ -7,6 +7,7 @@ import androidx.preference.Preference import androidx.preference.SwitchPreferenceCompat import com.google.api.services.drive.DriveScopes import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity +import dagger.hilt.android.AndroidEntryPoint import org.tasks.PermissionUtil import org.tasks.R import org.tasks.dialogs.ExportTasksDialog @@ -14,7 +15,6 @@ import org.tasks.dialogs.ImportTasksDialog import org.tasks.drive.DriveLoginActivity import org.tasks.files.FileHelper import org.tasks.gtasks.GoogleAccountManager -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.preferences.FragmentPermissionRequestor import org.tasks.preferences.PermissionRequestor @@ -28,6 +28,7 @@ private const val REQUEST_PICKER = 10003 private const val FRAG_TAG_EXPORT_TASKS = "frag_tag_export_tasks" private const val FRAG_TAG_IMPORT_TASKS = "frag_tag_import_tasks" +@AndroidEntryPoint class Backups : InjectingPreferenceFragment() { @Inject lateinit var preferences: Preferences @@ -162,6 +163,4 @@ class Backups : InjectingPreferenceFragment() { findPreference(R.string.p_backup_dir).summary = FileHelper.uri2String(preferences.backupDirectory) } - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt b/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt index e0d836bcc..60b2e5759 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt @@ -4,16 +4,17 @@ import android.app.Activity import android.content.Intent import android.os.Bundle import com.todoroo.astrid.api.Filter +import dagger.hilt.android.AndroidEntryPoint import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.activities.FilterSelectionActivity -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.preferences.DefaultFilterProvider import javax.inject.Inject private const val REQUEST_SELECT_FILTER = 1005 +@AndroidEntryPoint class DashClock : InjectingPreferenceFragment() { @Inject lateinit var defaultFilterProvider: DefaultFilterProvider @@ -54,6 +55,4 @@ class DashClock : InjectingPreferenceFragment() { val filter = defaultFilterProvider.getFilterFromPreference(R.string.p_dashclock_filter) findPreference(R.string.p_dashclock_filter).summary = filter?.listingTitle } - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt b/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt index 26dfeaf96..d29a406ee 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt @@ -6,9 +6,9 @@ import android.os.Bundle import android.widget.Toast import androidx.preference.ListPreference import androidx.preference.Preference +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.dialogs.MyTimePickerDialog.newTimePicker -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.locale.Locale import org.tasks.preferences.Preferences @@ -23,6 +23,7 @@ private const val REQUEST_AFTERNOON = 10008 private const val REQUEST_EVENING = 10009 private const val REQUEST_NIGHT = 10010 +@AndroidEntryPoint class DateAndTime : InjectingPreferenceFragment(), Preference.OnPreferenceChangeListener { @Inject lateinit var preferences: Preferences @@ -65,8 +66,6 @@ class DateAndTime : InjectingPreferenceFragment(), Preference.OnPreferenceChange } } - override fun inject(component: FragmentComponent) = component.inject(this) - private fun initializeTimePreference(preference: TimePreference, requestCode: Int) { preference.onPreferenceChangeListener = this preference.onPreferenceClickListener = Preference.OnPreferenceClickListener { diff --git a/app/src/main/java/org/tasks/preferences/fragments/HelpAndFeedback.kt b/app/src/main/java/org/tasks/preferences/fragments/HelpAndFeedback.kt index 584a43b1f..6a19e31fa 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/HelpAndFeedback.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/HelpAndFeedback.kt @@ -4,17 +4,18 @@ import android.content.Intent import android.net.Uri import android.os.Bundle import androidx.fragment.app.FragmentManager +import dagger.hilt.android.AndroidEntryPoint import org.tasks.BuildConfig import org.tasks.R import org.tasks.billing.BillingClient import org.tasks.billing.Inventory import org.tasks.dialogs.WhatsNewDialog -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import javax.inject.Inject -private val FRAG_TAG_WHATS_NEW = "frag_tag_whats_new" +private const val FRAG_TAG_WHATS_NEW = "frag_tag_whats_new" +@AndroidEntryPoint class HelpAndFeedback : InjectingPreferenceFragment() { @Inject lateinit var billingClient: BillingClient @@ -76,7 +77,5 @@ class HelpAndFeedback : InjectingPreferenceFragment() { } } - override fun inject(component: FragmentComponent) = component.inject(this) - override fun getMenu() = 0 } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt index 815f83b84..d5afec2d2 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt @@ -12,6 +12,7 @@ import androidx.annotation.StringRes import androidx.preference.Preference import androidx.preference.SwitchPreferenceCompat import com.todoroo.astrid.api.Filter +import dagger.hilt.android.AndroidEntryPoint import org.tasks.BuildConfig import org.tasks.LocalBroadcastManager import org.tasks.R @@ -26,7 +27,6 @@ import org.tasks.dialogs.ColorWheelPicker import org.tasks.dialogs.ThemePickerDialog import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog import org.tasks.gtasks.PlayServices -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.locale.Locale import org.tasks.locale.LocalePickerDialog @@ -54,6 +54,7 @@ private const val FRAG_TAG_LOCALE_PICKER = "frag_tag_locale_picker" private const val FRAG_TAG_THEME_PICKER = "frag_tag_theme_picker" private const val FRAG_TAG_COLOR_PICKER = "frag_tag_color_picker" +@AndroidEntryPoint class LookAndFeel : InjectingPreferenceFragment() { @Inject lateinit var themeBase: ThemeBase @@ -354,10 +355,6 @@ class LookAndFeel : InjectingPreferenceFragment() { } } - override fun inject(component: FragmentComponent) { - component.inject(this) - } - private fun setupColorPreference( @StringRes prefId: Int, color: Int, diff --git a/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt b/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt index 6445936c3..c2beaf920 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt @@ -1,19 +1,18 @@ package org.tasks.preferences.fragments import android.os.Bundle +import dagger.hilt.android.AndroidEntryPoint import org.tasks.BuildConfig import org.tasks.R -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.widget.AppWidgetManager import javax.inject.Inject +@AndroidEntryPoint class MainSettingsFragment : InjectingPreferenceFragment() { @Inject lateinit var appWidgetManager: AppWidgetManager - override fun inject(component: FragmentComponent) = component.inject(this) - override fun getPreferenceXml() = R.xml.preferences override fun setupPreferences(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/org/tasks/preferences/fragments/NavigationDrawer.kt b/app/src/main/java/org/tasks/preferences/fragments/NavigationDrawer.kt index c9cee29b0..038c9431c 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/NavigationDrawer.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/NavigationDrawer.kt @@ -1,17 +1,14 @@ package org.tasks.preferences.fragments import android.os.Bundle +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment +@AndroidEntryPoint class NavigationDrawer : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_navigation_drawer - override fun setupPreferences(savedInstanceState: Bundle?) { - - } - - override fun inject(component: FragmentComponent) = component.inject(this) + override fun setupPreferences(savedInstanceState: Bundle?) {} } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt b/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt index 82fd9a1a6..6dbe28cf3 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt @@ -14,11 +14,11 @@ import androidx.preference.SwitchPreferenceCompat import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.astrid.api.Filter import com.todoroo.astrid.voice.VoiceOutputAssistant +import dagger.hilt.android.AndroidEntryPoint import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.activities.FilterSelectionActivity import org.tasks.dialogs.MyTimePickerDialog.newTimePicker -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.Preferences @@ -36,6 +36,7 @@ private const val REQUEST_BADGE_LIST = 10004 private const val REQUEST_CODE_ALERT_RINGTONE = 10005 private const val REQUEST_CODE_TTS_CHECK = 10006 +@AndroidEntryPoint class Notifications : InjectingPreferenceFragment() { @Inject lateinit var preferences: Preferences @@ -153,10 +154,6 @@ class Notifications : InjectingPreferenceFragment() { voiceOutputAssistant.shutdown() } - override fun inject(component: FragmentComponent) { - component.inject(this) - } - private fun rescheduleNotificationsOnChange(cancelExisting: Boolean, vararg resIds: Int) { for (resId in resIds) { findPreference(resId) diff --git a/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt b/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt index 942314c84..be848330b 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt @@ -6,6 +6,7 @@ import android.content.Intent import android.os.Bundle import androidx.preference.* import com.todoroo.astrid.api.Filter +import dagger.hilt.android.AndroidEntryPoint import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.activities.FilterSelectionActivity @@ -14,7 +15,6 @@ import org.tasks.dialogs.ColorPalettePicker.Companion.newColorPalette import org.tasks.dialogs.ColorPickerAdapter.Palette import org.tasks.dialogs.ColorWheelPicker import org.tasks.dialogs.ThemePickerDialog.Companion.newThemePickerDialog -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.locale.Locale import org.tasks.preferences.DefaultFilterProvider @@ -28,6 +28,7 @@ private const val REQUEST_COLOR_SELECTION = 1007 const val EXTRA_WIDGET_ID = "extra_widget_id" +@AndroidEntryPoint class ScrollableWidget : InjectingPreferenceFragment() { companion object { @@ -195,6 +196,4 @@ class ScrollableWidget : InjectingPreferenceFragment() { preference.value = preferences.getStringValue(key) ?: defaultValue return preference } - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt b/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt index e6d2b1574..d7d1ee07d 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt @@ -9,6 +9,7 @@ import androidx.preference.SwitchPreferenceCompat import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity import com.todoroo.astrid.service.TaskDeleter +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.Strings.isNullOrEmpty import org.tasks.caldav.CaldavAccountSettingsActivity @@ -18,7 +19,6 @@ import org.tasks.data.CaldavDao import org.tasks.data.GoogleTaskAccount import org.tasks.data.GoogleTaskListDao import org.tasks.etesync.EteSyncAccountSettingsActivity -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.jobs.WorkManager import org.tasks.preferences.Preferences @@ -29,6 +29,7 @@ import javax.inject.Inject const val REQUEST_CALDAV_SETTINGS = 10013 const val REQUEST_GOOGLE_TASKS = 10014 +@AndroidEntryPoint class Synchronization : InjectingPreferenceFragment() { @Inject lateinit var workManager: WorkManager @@ -195,6 +196,4 @@ class Synchronization : InjectingPreferenceFragment() { findPreference(R.string.accounts).isVisible = syncEnabled findPreference(R.string.sync_SPr_interval_title).isVisible = syncEnabled } - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt b/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt index a6897551d..b532c5bf2 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt @@ -7,12 +7,12 @@ import androidx.preference.Preference import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.GtasksFilter +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.activities.ListPicker import org.tasks.calendars.CalendarPicker import org.tasks.calendars.CalendarPicker.newCalendarPicker import org.tasks.calendars.CalendarProvider -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.Preferences @@ -23,6 +23,7 @@ private const val FRAG_TAG_CALENDAR_PICKER = "frag_tag_calendar_picker" private const val REQUEST_DEFAULT_LIST = 10010 private const val REQUEST_CALENDAR_SELECTION = 10011 +@AndroidEntryPoint class TaskDefaults : InjectingPreferenceFragment() { @Inject lateinit var defaultFilterProvider: DefaultFilterProvider @@ -90,6 +91,4 @@ class TaskDefaults : InjectingPreferenceFragment() { val defaultFilter = defaultFilterProvider.defaultList findPreference(R.string.p_default_list).summary = defaultFilter.listingTitle } - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt b/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt index c85de8925..d8062729c 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt @@ -4,11 +4,11 @@ import android.app.Activity.RESULT_OK import android.content.Intent import android.os.Bundle import com.todoroo.astrid.api.Filter +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.activities.FilterSelectionActivity import org.tasks.billing.Inventory import org.tasks.billing.PurchaseActivity -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.locale.bundle.ListNotificationBundle import org.tasks.preferences.DefaultFilterProvider @@ -18,6 +18,7 @@ const val EXTRA_FILTER = "extra_filter" private const val REQUEST_SELECT_FILTER = 10124 private const val REQUEST_SUBSCRIPTION = 10125 +@AndroidEntryPoint class TaskerListNotification : InjectingPreferenceFragment() { companion object { @@ -93,6 +94,4 @@ class TaskerListNotification : InjectingPreferenceFragment() { fun getBundle(): Bundle = ListNotificationBundle.generateBundle(defaultFilterProvider.getFilterPreferenceValue(filter)) - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt b/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt index 600a2cb14..8ecbea35d 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt @@ -3,8 +3,8 @@ package org.tasks.preferences.fragments import android.content.Intent import android.os.Bundle import androidx.preference.Preference +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R -import org.tasks.injection.FragmentComponent import org.tasks.injection.InjectingPreferenceFragment import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.Preferences @@ -13,7 +13,7 @@ import org.tasks.widget.WidgetConfigActivity import org.tasks.widget.WidgetPreferences import javax.inject.Inject - +@AndroidEntryPoint class Widgets : InjectingPreferenceFragment() { @Inject lateinit var preferences: Preferences @@ -45,6 +45,4 @@ class Widgets : InjectingPreferenceFragment() { preferenceScreen.addPreference(pref) } } - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/receivers/BootCompletedReceiver.java b/app/src/main/java/org/tasks/receivers/BootCompletedReceiver.java index 8067b2552..5dbd11ef8 100644 --- a/app/src/main/java/org/tasks/receivers/BootCompletedReceiver.java +++ b/app/src/main/java/org/tasks/receivers/BootCompletedReceiver.java @@ -1,26 +1,18 @@ package org.tasks.receivers; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import org.tasks.injection.ApplicationComponent; -import org.tasks.injection.InjectingBroadcastReceiver; import timber.log.Timber; -public class BootCompletedReceiver extends InjectingBroadcastReceiver { +public class BootCompletedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - super.onReceive(context, intent); - if (!Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { return; } Timber.d("onReceive(context, %s)", intent); } - - @Override - protected void inject(ApplicationComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/receivers/CompleteTaskReceiver.java b/app/src/main/java/org/tasks/receivers/CompleteTaskReceiver.java index 63a57bc59..37071bd07 100644 --- a/app/src/main/java/org/tasks/receivers/CompleteTaskReceiver.java +++ b/app/src/main/java/org/tasks/receivers/CompleteTaskReceiver.java @@ -3,13 +3,14 @@ package org.tasks.receivers; import android.content.Context; import android.content.Intent; import com.todoroo.astrid.service.TaskCompleter; +import dagger.hilt.android.AndroidEntryPoint; import io.reactivex.Completable; import io.reactivex.schedulers.Schedulers; import javax.inject.Inject; -import org.tasks.injection.ApplicationComponent; import org.tasks.injection.InjectingBroadcastReceiver; import timber.log.Timber; +@AndroidEntryPoint public class CompleteTaskReceiver extends InjectingBroadcastReceiver { public static final String TASK_ID = "id"; @@ -26,9 +27,4 @@ public class CompleteTaskReceiver extends InjectingBroadcastReceiver { .subscribeOn(Schedulers.io()) .subscribe(); } - - @Override - protected void inject(ApplicationComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/receivers/MyPackageReplacedReceiver.java b/app/src/main/java/org/tasks/receivers/MyPackageReplacedReceiver.java index 34f0a9664..2d7625330 100644 --- a/app/src/main/java/org/tasks/receivers/MyPackageReplacedReceiver.java +++ b/app/src/main/java/org/tasks/receivers/MyPackageReplacedReceiver.java @@ -1,26 +1,18 @@ package org.tasks.receivers; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import org.tasks.injection.ApplicationComponent; -import org.tasks.injection.InjectingBroadcastReceiver; import timber.log.Timber; -public class MyPackageReplacedReceiver extends InjectingBroadcastReceiver { +public class MyPackageReplacedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - super.onReceive(context, intent); - if (!Intent.ACTION_MY_PACKAGE_REPLACED.equals(intent.getAction())) { return; } Timber.d("onReceive(context, %s)", intent); } - - @Override - protected void inject(ApplicationComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/receivers/RefreshReceiver.java b/app/src/main/java/org/tasks/receivers/RefreshReceiver.java index 03dcdbf51..29a5cc5fd 100644 --- a/app/src/main/java/org/tasks/receivers/RefreshReceiver.java +++ b/app/src/main/java/org/tasks/receivers/RefreshReceiver.java @@ -6,14 +6,15 @@ import androidx.annotation.NonNull; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.provider.Astrid2TaskProvider; +import dagger.hilt.android.AndroidEntryPoint; +import dagger.hilt.android.qualifiers.ApplicationContext; import javax.inject.Inject; import org.tasks.R; -import org.tasks.injection.ApplicationComponent; -import org.tasks.injection.ApplicationContext; import org.tasks.injection.InjectingJobIntentService; import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.Preferences; +@AndroidEntryPoint public class RefreshReceiver extends InjectingJobIntentService { @Inject @ApplicationContext Context context; @@ -30,9 +31,4 @@ public class RefreshReceiver extends InjectingJobIntentService { Astrid2TaskProvider.notifyDatabaseModification(context); } - - @Override - protected void inject(ApplicationComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/reminders/NotificationActivity.java b/app/src/main/java/org/tasks/reminders/NotificationActivity.java index 184f2968a..af4e005a7 100644 --- a/app/src/main/java/org/tasks/reminders/NotificationActivity.java +++ b/app/src/main/java/org/tasks/reminders/NotificationActivity.java @@ -6,12 +6,12 @@ import android.content.Intent; import android.os.Bundle; import androidx.fragment.app.FragmentManager; import com.todoroo.astrid.dao.TaskDao; +import dagger.hilt.android.AndroidEntryPoint; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.schedulers.Schedulers; import javax.inject.Inject; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.intents.TaskIntents; import org.tasks.notifications.NotificationManager; @@ -19,6 +19,7 @@ import org.tasks.receivers.CompleteTaskReceiver; import org.tasks.themes.ThemeAccent; import timber.log.Timber; +@AndroidEntryPoint public class NotificationActivity extends InjectingAppCompatActivity implements NotificationDialog.NotificationHandler { @@ -41,11 +42,6 @@ public class NotificationActivity extends InjectingAppCompatActivity setup(getIntent()); } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); diff --git a/app/src/main/java/org/tasks/reminders/NotificationDialog.java b/app/src/main/java/org/tasks/reminders/NotificationDialog.java index 7025fa2bc..fd25b9da6 100644 --- a/app/src/main/java/org/tasks/reminders/NotificationDialog.java +++ b/app/src/main/java/org/tasks/reminders/NotificationDialog.java @@ -6,24 +6,20 @@ import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import androidx.annotation.NonNull; +import androidx.fragment.app.DialogFragment; +import dagger.hilt.android.AndroidEntryPoint; import java.util.List; import javax.inject.Inject; import org.tasks.R; import org.tasks.dialogs.DialogBuilder; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingDialogFragment; -public class NotificationDialog extends InjectingDialogFragment { +@AndroidEntryPoint +public class NotificationDialog extends DialogFragment { @Inject DialogBuilder dialogBuilder; private String title; private NotificationHandler handler; - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } - @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { diff --git a/app/src/main/java/org/tasks/reminders/SnoozeActivity.java b/app/src/main/java/org/tasks/reminders/SnoozeActivity.java index e1e7c0a63..42762c914 100644 --- a/app/src/main/java/org/tasks/reminders/SnoozeActivity.java +++ b/app/src/main/java/org/tasks/reminders/SnoozeActivity.java @@ -6,17 +6,18 @@ import android.os.Bundle; import androidx.fragment.app.FragmentManager; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.reminders.ReminderService; +import dagger.hilt.android.AndroidEntryPoint; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import org.tasks.activities.DateAndTimePickerActivity; import org.tasks.dialogs.MyTimePickerDialog; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.notifications.NotificationManager; import org.tasks.themes.ThemeAccent; import org.tasks.time.DateTime; +@AndroidEntryPoint public class SnoozeActivity extends InjectingAppCompatActivity implements SnoozeCallback, DialogInterface.OnCancelListener { @@ -42,11 +43,6 @@ public class SnoozeActivity extends InjectingAppCompatActivity setup(getIntent(), savedInstanceState); } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); diff --git a/app/src/main/java/org/tasks/reminders/SnoozeDialog.java b/app/src/main/java/org/tasks/reminders/SnoozeDialog.java index a3459fc64..3dac440dd 100644 --- a/app/src/main/java/org/tasks/reminders/SnoozeDialog.java +++ b/app/src/main/java/org/tasks/reminders/SnoozeDialog.java @@ -7,18 +7,19 @@ import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import androidx.annotation.NonNull; +import androidx.fragment.app.DialogFragment; +import dagger.hilt.android.AndroidEntryPoint; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import org.tasks.R; import org.tasks.dialogs.DialogBuilder; -import org.tasks.injection.ApplicationContext; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingDialogFragment; import org.tasks.preferences.Preferences; import org.tasks.time.DateTime; -public class SnoozeDialog extends InjectingDialogFragment { +@AndroidEntryPoint +public class SnoozeDialog extends DialogFragment { private final List items = new ArrayList<>(); @Inject Preferences preferences; @@ -141,9 +142,4 @@ public class SnoozeDialog extends InjectingDialogFragment { public void setOnCancelListener(DialogInterface.OnCancelListener onCancelListener) { this.onCancelListener = onCancelListener; } - - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/repeats/BasicRecurrenceDialog.java b/app/src/main/java/org/tasks/repeats/BasicRecurrenceDialog.java index 83a60b1f5..42801d597 100644 --- a/app/src/main/java/org/tasks/repeats/BasicRecurrenceDialog.java +++ b/app/src/main/java/org/tasks/repeats/BasicRecurrenceDialog.java @@ -11,31 +11,31 @@ import static org.tasks.Strings.isNullOrEmpty; import static org.tasks.repeats.CustomRecurrenceDialog.newCustomRecurrenceDialog; import static org.tasks.time.DateTimeUtils.currentTimeMillis; +import android.app.Activity; import android.app.Dialog; -import android.content.Context; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; import com.google.ical.values.Frequency; import com.google.ical.values.RRule; import com.todoroo.astrid.repeats.RepeatControlSet; +import dagger.hilt.android.AndroidEntryPoint; import java.util.List; import javax.inject.Inject; import org.tasks.R; import org.tasks.dialogs.DialogBuilder; -import org.tasks.injection.ActivityContext; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingDialogFragment; import org.tasks.ui.SingleCheckedArrayAdapter; import timber.log.Timber; -public class BasicRecurrenceDialog extends InjectingDialogFragment { +@AndroidEntryPoint +public class BasicRecurrenceDialog extends DialogFragment { private static final String EXTRA_RRULE = "extra_rrule"; private static final String EXTRA_DATE = "extra_date"; private static final String FRAG_TAG_CUSTOM_RECURRENCE = "frag_tag_custom_recurrence"; - @Inject @ActivityContext Context context; + @Inject Activity context; @Inject DialogBuilder dialogBuilder; @Inject RepeatRuleToString repeatRuleToString; @@ -158,9 +158,4 @@ public class BasicRecurrenceDialog extends InjectingDialogFragment { || rrule.getInterval() != 1 || rrule.getCount() != 0; } - - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java b/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java index a99f62b54..6f0e5f380 100644 --- a/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java +++ b/app/src/main/java/org/tasks/repeats/CustomRecurrenceDialog.java @@ -14,7 +14,6 @@ import static org.tasks.time.DateTimeUtils.currentTimeMillis; import android.app.Activity; import android.app.Dialog; -import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.res.ColorStateList; @@ -39,6 +38,7 @@ import android.widget.TextView; import android.widget.ToggleButton; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnItemSelected; @@ -49,6 +49,7 @@ import com.google.ical.values.Weekday; import com.google.ical.values.WeekdayNum; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.repeats.RepeatControlSet; +import dagger.hilt.android.AndroidEntryPoint; import java.text.DateFormatSymbols; import java.time.format.FormatStyle; import java.util.ArrayList; @@ -59,15 +60,13 @@ import javax.inject.Inject; import org.tasks.R; import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.MyDatePickerDialog; -import org.tasks.injection.ActivityContext; -import org.tasks.injection.FragmentComponent; -import org.tasks.injection.InjectingDialogFragment; import org.tasks.locale.Locale; import org.tasks.preferences.ResourceResolver; import org.tasks.time.DateTime; import timber.log.Timber; -public class CustomRecurrenceDialog extends InjectingDialogFragment { +@AndroidEntryPoint +public class CustomRecurrenceDialog extends DialogFragment { private static final List FREQUENCIES = asList(MINUTELY, HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY); @@ -76,7 +75,7 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { private static final String FRAG_TAG_DATE_PICKER = "frag_tag_date_picker"; private static final int REQUEST_PICK_DATE = 505; private final List repeatUntilOptions = new ArrayList<>(); - @Inject @ActivityContext Context context; + @Inject Activity context; @Inject DialogBuilder dialogBuilder; @Inject Locale locale; @@ -551,9 +550,4 @@ public class CustomRecurrenceDialog extends InjectingDialogFragment { } super.onActivityResult(requestCode, resultCode, data); } - - @Override - protected void inject(FragmentComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/repeats/RepeatRuleToString.java b/app/src/main/java/org/tasks/repeats/RepeatRuleToString.java index d4fdc1207..1c9eadc17 100644 --- a/app/src/main/java/org/tasks/repeats/RepeatRuleToString.java +++ b/app/src/main/java/org/tasks/repeats/RepeatRuleToString.java @@ -10,6 +10,7 @@ import com.google.ical.values.RRule; import com.google.ical.values.Weekday; import com.google.ical.values.WeekdayNum; import com.todoroo.andlib.utility.DateUtilities; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.text.DateFormatSymbols; import java.util.ArrayList; import java.util.Arrays; @@ -17,7 +18,6 @@ import java.util.Calendar; import java.util.List; import javax.inject.Inject; import org.tasks.R; -import org.tasks.injection.ApplicationContext; import org.tasks.locale.Locale; import org.tasks.time.DateTime; diff --git a/app/src/main/java/org/tasks/scheduling/AlarmManager.java b/app/src/main/java/org/tasks/scheduling/AlarmManager.java index 01c29b65e..05ff9f17d 100644 --- a/app/src/main/java/org/tasks/scheduling/AlarmManager.java +++ b/app/src/main/java/org/tasks/scheduling/AlarmManager.java @@ -3,8 +3,8 @@ package org.tasks.scheduling; import android.annotation.SuppressLint; import android.app.PendingIntent; import android.content.Context; +import dagger.hilt.android.qualifiers.ApplicationContext; import javax.inject.Inject; -import org.tasks.injection.ApplicationContext; public class AlarmManager { diff --git a/app/src/main/java/org/tasks/scheduling/CalendarNotificationIntentService.java b/app/src/main/java/org/tasks/scheduling/CalendarNotificationIntentService.java index 250ce3ed6..cf4c9944f 100644 --- a/app/src/main/java/org/tasks/scheduling/CalendarNotificationIntentService.java +++ b/app/src/main/java/org/tasks/scheduling/CalendarNotificationIntentService.java @@ -8,17 +8,18 @@ import android.net.Uri; import androidx.core.app.JobIntentService; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.gcal.CalendarAlarmReceiver; +import dagger.hilt.android.AndroidEntryPoint; +import dagger.hilt.android.qualifiers.ApplicationContext; import java.util.concurrent.TimeUnit; import javax.inject.Inject; import org.tasks.R; import org.tasks.calendars.AndroidCalendarEvent; import org.tasks.calendars.CalendarEventProvider; -import org.tasks.injection.ApplicationComponent; -import org.tasks.injection.ApplicationContext; import org.tasks.injection.InjectingJobIntentService; import org.tasks.preferences.Preferences; import timber.log.Timber; +@AndroidEntryPoint public class CalendarNotificationIntentService extends RecurringIntervalIntentService { public static final String URI_PREFIX_POSTPONE = "cal-postpone"; @@ -72,11 +73,6 @@ public class CalendarNotificationIntentService extends RecurringIntervalIntentSe : 0; } - @Override - protected void inject(ApplicationComponent component) { - component.inject(this); - } - public static class Broadcast extends BroadcastReceiver { @Override diff --git a/app/src/main/java/org/tasks/scheduling/NotificationSchedulerIntentService.java b/app/src/main/java/org/tasks/scheduling/NotificationSchedulerIntentService.java index 244560858..f679fb1b9 100644 --- a/app/src/main/java/org/tasks/scheduling/NotificationSchedulerIntentService.java +++ b/app/src/main/java/org/tasks/scheduling/NotificationSchedulerIntentService.java @@ -14,15 +14,16 @@ import android.os.Build; import androidx.core.app.JobIntentService; import com.todoroo.astrid.alarms.AlarmService; import com.todoroo.astrid.reminders.ReminderService; +import dagger.hilt.android.AndroidEntryPoint; +import dagger.hilt.android.qualifiers.ApplicationContext; import javax.inject.Inject; import org.tasks.R; -import org.tasks.injection.ApplicationComponent; -import org.tasks.injection.ApplicationContext; import org.tasks.injection.InjectingJobIntentService; import org.tasks.jobs.NotificationQueue; import org.tasks.notifications.NotificationManager; import timber.log.Timber; +@AndroidEntryPoint public class NotificationSchedulerIntentService extends InjectingJobIntentService { private static final String EXTRA_CANCEL_EXISTING_NOTIFICATIONS = @@ -92,9 +93,4 @@ public class NotificationSchedulerIntentService extends InjectingJobIntentServic notificationChannel.setShowBadge(alert); return notificationChannel; } - - @Override - protected void inject(ApplicationComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/scheduling/RecurringIntervalIntentService.java b/app/src/main/java/org/tasks/scheduling/RecurringIntervalIntentService.java index cc1bf480e..91150d356 100644 --- a/app/src/main/java/org/tasks/scheduling/RecurringIntervalIntentService.java +++ b/app/src/main/java/org/tasks/scheduling/RecurringIntervalIntentService.java @@ -8,12 +8,10 @@ import android.content.BroadcastReceiver; import android.content.Intent; import javax.inject.Inject; import org.tasks.injection.InjectingJobIntentService; -import org.tasks.preferences.Preferences; import timber.log.Timber; public abstract class RecurringIntervalIntentService extends InjectingJobIntentService { - @Inject Preferences preferences; @Inject AlarmManager alarmManager; @Override diff --git a/app/src/main/java/org/tasks/tags/TagPickerActivity.java b/app/src/main/java/org/tasks/tags/TagPickerActivity.java index 0e00aeead..36034b8c3 100644 --- a/app/src/main/java/org/tasks/tags/TagPickerActivity.java +++ b/app/src/main/java/org/tasks/tags/TagPickerActivity.java @@ -12,18 +12,19 @@ import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnTextChanged; +import dagger.hilt.android.AndroidEntryPoint; import java.util.ArrayList; import javax.inject.Inject; import org.tasks.R; import org.tasks.billing.Inventory; import org.tasks.data.TagData; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.ThemedInjectingAppCompatActivity; import org.tasks.tags.CheckBoxTriStates.State; import org.tasks.themes.ColorProvider; import org.tasks.themes.Theme; import org.tasks.themes.ThemeColor; +@AndroidEntryPoint public class TagPickerActivity extends ThemedInjectingAppCompatActivity { public static final String EXTRA_SELECTED = "extra_tags"; @@ -49,7 +50,7 @@ public class TagPickerActivity extends ThemedInjectingAppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + viewModel = new ViewModelProvider(this).get(TagPickerViewModel.class); Intent intent = getIntent(); taskIds = (ArrayList) intent.getSerializableExtra(EXTRA_TASKS); if (savedInstanceState == null) { @@ -114,11 +115,4 @@ public class TagPickerActivity extends ThemedInjectingAppCompatActivity { private void clear() { editText.setText(""); } - - @Override - public void inject(ActivityComponent component) { - component.inject(this); - viewModel = new ViewModelProvider(this).get(TagPickerViewModel.class); - component.inject(viewModel); - } } diff --git a/app/src/main/java/org/tasks/tags/TagPickerViewModel.kt b/app/src/main/java/org/tasks/tags/TagPickerViewModel.kt index c41544488..33a9a312d 100644 --- a/app/src/main/java/org/tasks/tags/TagPickerViewModel.kt +++ b/app/src/main/java/org/tasks/tags/TagPickerViewModel.kt @@ -1,5 +1,6 @@ package org.tasks.tags +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Observer @@ -13,14 +14,10 @@ import org.tasks.data.TagData import org.tasks.data.TagDataDao import org.tasks.tags.CheckBoxTriStates.State import java.util.* -import javax.inject.Inject -class TagPickerViewModel : ViewModel() { +class TagPickerViewModel @ViewModelInject constructor(private val tagDataDao: TagDataDao) : ViewModel() { private val tags = MutableLiveData>() private val disposables = CompositeDisposable() - - @Inject lateinit var tagDataDao: TagDataDao - private val selected: MutableSet = HashSet() private val partiallySelected: MutableSet = HashSet() var text: String? = null diff --git a/app/src/main/java/org/tasks/tasklist/ViewHolderFactory.kt b/app/src/main/java/org/tasks/tasklist/ViewHolderFactory.kt index 20e3b1b94..f186d7726 100644 --- a/app/src/main/java/org/tasks/tasklist/ViewHolderFactory.kt +++ b/app/src/main/java/org/tasks/tasklist/ViewHolderFactory.kt @@ -7,9 +7,9 @@ import android.view.LayoutInflater import android.view.ViewGroup import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.astrid.service.TaskCompleter +import dagger.hilt.android.qualifiers.ActivityContext import org.tasks.R import org.tasks.dialogs.Linkify -import org.tasks.injection.ActivityContext import org.tasks.preferences.Preferences import org.tasks.preferences.ResourceResolver import org.tasks.tasklist.TaskViewHolder.ViewHolderCallbacks diff --git a/app/src/main/java/org/tasks/themes/ColorProvider.kt b/app/src/main/java/org/tasks/themes/ColorProvider.kt index f321f50fc..e56b6398c 100644 --- a/app/src/main/java/org/tasks/themes/ColorProvider.kt +++ b/app/src/main/java/org/tasks/themes/ColorProvider.kt @@ -2,8 +2,8 @@ package org.tasks.themes import android.content.Context import androidx.annotation.ColorInt +import dagger.hilt.android.qualifiers.ActivityContext import org.tasks.R -import org.tasks.injection.ActivityContext import org.tasks.preferences.Preferences import javax.inject.Inject diff --git a/app/src/main/java/org/tasks/themes/Theme.java b/app/src/main/java/org/tasks/themes/Theme.java index 44b790cfd..8b4c859d8 100644 --- a/app/src/main/java/org/tasks/themes/Theme.java +++ b/app/src/main/java/org/tasks/themes/Theme.java @@ -34,10 +34,6 @@ public class Theme { return themeColor; } - public ThemeAccent getThemeAccent() { - return themeAccent; - } - public LayoutInflater getLayoutInflater(Context context) { return (LayoutInflater) wrap(context).getSystemService(Context.LAYOUT_INFLATER_SERVICE); } diff --git a/app/src/main/java/org/tasks/ui/CalendarControlSet.kt b/app/src/main/java/org/tasks/ui/CalendarControlSet.kt index caeca9df4..71561e020 100644 --- a/app/src/main/java/org/tasks/ui/CalendarControlSet.kt +++ b/app/src/main/java/org/tasks/ui/CalendarControlSet.kt @@ -2,7 +2,6 @@ package org.tasks.ui import android.app.Activity import android.content.ContentValues -import android.content.Context import android.content.Intent import android.net.Uri import android.os.Bundle @@ -16,6 +15,7 @@ import butterknife.BindView import butterknife.OnClick import com.todoroo.astrid.data.Task import com.todoroo.astrid.gcal.GCalHelper +import dagger.hilt.android.AndroidEntryPoint import org.tasks.PermissionUtil.verifyPermissions import org.tasks.R import org.tasks.Strings.isNullOrEmpty @@ -24,8 +24,6 @@ import org.tasks.calendars.CalendarEventProvider import org.tasks.calendars.CalendarPicker import org.tasks.calendars.CalendarProvider import org.tasks.dialogs.DialogBuilder -import org.tasks.injection.ActivityContext -import org.tasks.injection.FragmentComponent import org.tasks.preferences.FragmentPermissionRequestor import org.tasks.preferences.PermissionChecker import org.tasks.preferences.Preferences @@ -33,6 +31,7 @@ import org.tasks.themes.ThemeBase import timber.log.Timber import javax.inject.Inject +@AndroidEntryPoint class CalendarControlSet : TaskEditControlFragment() { @BindView(R.id.clear) lateinit var cancelButton: View @@ -40,7 +39,7 @@ class CalendarControlSet : TaskEditControlFragment() { @BindView(R.id.calendar_display_which) lateinit var calendar: TextView - @Inject @ActivityContext lateinit var activity: Context + @Inject lateinit var activity: Activity @Inject lateinit var gcalHelper: GCalHelper @Inject lateinit var calendarProvider: CalendarProvider @Inject lateinit var preferences: Preferences @@ -285,8 +284,6 @@ class CalendarControlSet : TaskEditControlFragment() { return false } - override fun inject(component: FragmentComponent) = component.inject(this) - companion object { const val TAG = R.string.TEA_ctrl_gcal private const val FRAG_TAG_CALENDAR_PICKER = "frag_tag_calendar_picker" diff --git a/app/src/main/java/org/tasks/ui/CheckBoxProvider.kt b/app/src/main/java/org/tasks/ui/CheckBoxProvider.kt index 02c13377c..0a93332bd 100644 --- a/app/src/main/java/org/tasks/ui/CheckBoxProvider.kt +++ b/app/src/main/java/org/tasks/ui/CheckBoxProvider.kt @@ -6,8 +6,8 @@ import android.graphics.Canvas import android.graphics.drawable.Drawable import androidx.annotation.DrawableRes import com.todoroo.astrid.data.Task +import dagger.hilt.android.qualifiers.ActivityContext import org.tasks.R -import org.tasks.injection.ActivityContext import org.tasks.themes.ColorProvider import org.tasks.themes.DrawableUtil import javax.inject.Inject diff --git a/app/src/main/java/org/tasks/ui/DeadlineControlSet.kt b/app/src/main/java/org/tasks/ui/DeadlineControlSet.kt index 355a23a73..849889926 100644 --- a/app/src/main/java/org/tasks/ui/DeadlineControlSet.kt +++ b/app/src/main/java/org/tasks/ui/DeadlineControlSet.kt @@ -1,7 +1,6 @@ package org.tasks.ui import android.app.Activity -import android.content.Context import android.content.Intent import android.os.Bundle import android.view.LayoutInflater @@ -13,20 +12,20 @@ import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task.Companion.createDueDate import com.todoroo.astrid.data.Task.Companion.hasDueTime +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.date.DateTimeUtils import org.tasks.dialogs.DateTimePicker import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker -import org.tasks.injection.ActivityContext -import org.tasks.injection.FragmentComponent import org.tasks.locale.Locale import org.tasks.preferences.Preferences import org.tasks.time.DateTime import java.time.format.FormatStyle import javax.inject.Inject +@AndroidEntryPoint class DeadlineControlSet : TaskEditControlFragment() { - @Inject @ActivityContext lateinit var activity: Context + @Inject lateinit var activity: Activity @Inject lateinit var locale: Locale @Inject lateinit var preferences: Preferences @@ -41,8 +40,6 @@ class DeadlineControlSet : TaskEditControlFragment() { callback = activity as DueDateChangeListener } - override fun inject(component: FragmentComponent) = component.inject(this) - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = super.onCreateView(inflater, container, savedInstanceState) diff --git a/app/src/main/java/org/tasks/ui/DescriptionControlSet.kt b/app/src/main/java/org/tasks/ui/DescriptionControlSet.kt index def969668..7014ca068 100644 --- a/app/src/main/java/org/tasks/ui/DescriptionControlSet.kt +++ b/app/src/main/java/org/tasks/ui/DescriptionControlSet.kt @@ -8,13 +8,14 @@ import android.widget.EditText import butterknife.BindView import butterknife.OnTextChanged import com.todoroo.astrid.data.Task +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.Strings.isNullOrEmpty import org.tasks.dialogs.Linkify -import org.tasks.injection.FragmentComponent import org.tasks.preferences.Preferences import javax.inject.Inject +@AndroidEntryPoint class DescriptionControlSet : TaskEditControlFragment() { @Inject lateinit var linkify: Linkify @Inject lateinit var preferences: Preferences @@ -67,8 +68,6 @@ class DescriptionControlSet : TaskEditControlFragment() { return !if (isNullOrEmpty(description)) isNullOrEmpty(original.notes) else description == stripCarriageReturns(original.notes) } - override fun inject(component: FragmentComponent) = component.inject(this) - companion object { const val TAG = R.string.TEA_ctrl_notes_pref private const val EXTRA_DESCRIPTION = "extra_description" diff --git a/app/src/main/java/org/tasks/ui/EmptyTaskEditFragment.kt b/app/src/main/java/org/tasks/ui/EmptyTaskEditFragment.kt index 5b73926a1..5461b571c 100644 --- a/app/src/main/java/org/tasks/ui/EmptyTaskEditFragment.kt +++ b/app/src/main/java/org/tasks/ui/EmptyTaskEditFragment.kt @@ -4,15 +4,16 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.Fragment import com.todoroo.astrid.api.Filter +import dagger.hilt.android.AndroidEntryPoint import org.tasks.databinding.FragmentTaskEditEmptyBinding -import org.tasks.injection.FragmentComponent -import org.tasks.injection.InjectingFragment import org.tasks.themes.ColorProvider import org.tasks.themes.ThemeColor import javax.inject.Inject -class EmptyTaskEditFragment : InjectingFragment() { +@AndroidEntryPoint +class EmptyTaskEditFragment : Fragment() { @Inject lateinit var themeColor: ThemeColor @Inject lateinit var colorProvider: ColorProvider @@ -46,6 +47,4 @@ class EmptyTaskEditFragment : InjectingFragment() { return binding.root } - - override fun inject(component: FragmentComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/ui/ListFragment.kt b/app/src/main/java/org/tasks/ui/ListFragment.kt index 8bd83eaf4..43818b2ee 100644 --- a/app/src/main/java/org/tasks/ui/ListFragment.kt +++ b/app/src/main/java/org/tasks/ui/ListFragment.kt @@ -12,23 +12,20 @@ import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.data.Task -import com.todoroo.astrid.gtasks.GtasksListService import com.todoroo.astrid.service.TaskMover +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R import org.tasks.activities.ListPicker -import org.tasks.data.CaldavDao -import org.tasks.data.CaldavTask -import org.tasks.data.GoogleTask -import org.tasks.data.GoogleTaskDao -import org.tasks.injection.FragmentComponent +import org.tasks.data.* import org.tasks.preferences.DefaultFilterProvider import javax.inject.Inject +@AndroidEntryPoint class ListFragment : TaskEditControlFragment() { @BindView(R.id.chip_group) lateinit var chipGroup: ChipGroup - @Inject lateinit var gtasksListService: GtasksListService + @Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var caldavDao: CaldavDao @Inject lateinit var defaultFilterProvider: DefaultFilterProvider @@ -58,7 +55,7 @@ class ListFragment : TaskEditControlFragment() { if (task.isNew) { if (task.hasTransitory(GoogleTask.KEY)) { val listId = task.getTransitory(GoogleTask.KEY)!! - val googleTaskList = gtasksListService.getList(listId) + val googleTaskList = googleTaskListDao.getByRemoteId(listId) if (googleTaskList != null) { originalList = GtasksFilter(googleTaskList) } @@ -72,7 +69,7 @@ class ListFragment : TaskEditControlFragment() { val googleTask = googleTaskDao.getByTaskId(task.id) val caldavTask = caldavDao.getTask(task.id) if (googleTask != null) { - val googleTaskList = gtasksListService.getList(googleTask.listId) + val googleTaskList = googleTaskListDao.getByRemoteId(googleTask.listId!!) if (googleTaskList != null) { originalList = GtasksFilter(googleTaskList) } @@ -130,8 +127,6 @@ class ListFragment : TaskEditControlFragment() { private fun hasChanges() = selectedList != originalList - override fun inject(component: FragmentComponent) = component.inject(this) - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (requestCode == REQUEST_CODE_SELECT_LIST) { if (resultCode == Activity.RESULT_OK) { diff --git a/app/src/main/java/org/tasks/ui/LocationControlSet.kt b/app/src/main/java/org/tasks/ui/LocationControlSet.kt index 96d11ae24..ee829fe0c 100644 --- a/app/src/main/java/org/tasks/ui/LocationControlSet.kt +++ b/app/src/main/java/org/tasks/ui/LocationControlSet.kt @@ -19,6 +19,7 @@ import butterknife.OnClick import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.data.SyncFlags import com.todoroo.astrid.data.Task +import dagger.hilt.android.AndroidEntryPoint import org.tasks.PermissionUtil.verifyPermissions import org.tasks.R import org.tasks.Strings.isNullOrEmpty @@ -28,13 +29,13 @@ import org.tasks.data.LocationDao import org.tasks.data.Place import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.GeofenceDialog -import org.tasks.injection.FragmentComponent import org.tasks.location.GeofenceApi import org.tasks.location.LocationPickerActivity import org.tasks.preferences.* import java.util.* import javax.inject.Inject +@AndroidEntryPoint class LocationControlSet : TaskEditControlFragment() { @Inject lateinit var preferences: Preferences @Inject lateinit var dialogBuilder: DialogBuilder @@ -270,8 +271,6 @@ class LocationControlSet : TaskEditControlFragment() { } } - override fun inject(component: FragmentComponent) = component.inject(this) - companion object { const val TAG = R.string.TEA_ctrl_locations_pref private const val REQUEST_LOCATION_REMINDER = 12153 diff --git a/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.kt b/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.kt index c86b93e7b..2baed582d 100644 --- a/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.kt +++ b/app/src/main/java/org/tasks/ui/NavigationDrawerFragment.kt @@ -12,6 +12,7 @@ import android.view.View import android.view.ViewGroup import androidx.drawerlayout.widget.DrawerLayout import androidx.drawerlayout.widget.DrawerLayout.SimpleDrawerListener +import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -20,6 +21,7 @@ import com.todoroo.astrid.adapter.NavigationDrawerAdapter import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.FilterListItem import com.todoroo.astrid.dao.TaskDao +import dagger.hilt.android.AndroidEntryPoint import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable @@ -30,12 +32,11 @@ import org.tasks.billing.PurchaseActivity import org.tasks.dialogs.NewFilterDialog.Companion.newFilterDialog import org.tasks.filters.FilterProvider import org.tasks.filters.NavigationDrawerAction -import org.tasks.injection.FragmentComponent -import org.tasks.injection.InjectingFragment import org.tasks.intents.TaskIntents import javax.inject.Inject -class NavigationDrawerFragment : InjectingFragment() { +@AndroidEntryPoint +class NavigationDrawerFragment : Fragment() { private val refreshReceiver = RefreshReceiver() @Inject lateinit var localBroadcastManager: LocalBroadcastManager @@ -129,8 +130,6 @@ class NavigationDrawerFragment : InjectingFragment() { disposables?.dispose() } - override fun inject(component: FragmentComponent) = component.inject(this) - override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) adapter.save(outState) diff --git a/app/src/main/java/org/tasks/ui/PriorityControlSet.kt b/app/src/main/java/org/tasks/ui/PriorityControlSet.kt index 253ff0b47..275fe447e 100644 --- a/app/src/main/java/org/tasks/ui/PriorityControlSet.kt +++ b/app/src/main/java/org/tasks/ui/PriorityControlSet.kt @@ -9,11 +9,12 @@ import androidx.appcompat.widget.AppCompatRadioButton import butterknife.BindView import butterknife.OnClick import com.todoroo.astrid.data.Task +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R -import org.tasks.injection.FragmentComponent import org.tasks.themes.ColorProvider import javax.inject.Inject +@AndroidEntryPoint class PriorityControlSet : TaskEditControlFragment() { @Inject lateinit var colorProvider: ColorProvider @@ -32,8 +33,6 @@ class PriorityControlSet : TaskEditControlFragment() { @Task.Priority private var priority = 0 - override fun inject(component: FragmentComponent) = component.inject(this) - @OnClick(R.id.priority_high, R.id.priority_medium, R.id.priority_low, R.id.priority_none) fun onPriorityChanged() { priority = getPriority() diff --git a/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt b/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt index 0ef2ace44..a5a587a49 100644 --- a/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt +++ b/app/src/main/java/org/tasks/ui/SubtaskControlSet.kt @@ -34,17 +34,18 @@ import com.todoroo.astrid.data.Task import com.todoroo.astrid.service.TaskCompleter import com.todoroo.astrid.service.TaskCreator import com.todoroo.astrid.ui.CheckableImageView +import dagger.hilt.android.AndroidEntryPoint import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.Strings.isNullOrEmpty import org.tasks.data.* -import org.tasks.injection.FragmentComponent import org.tasks.locale.Locale import org.tasks.tasklist.SubtaskViewHolder import org.tasks.tasklist.SubtasksRecyclerAdapter import java.util.* import javax.inject.Inject +@AndroidEntryPoint class SubtaskControlSet : TaskEditControlFragment(), SubtaskViewHolder.Callbacks { @JvmField @BindView(R.id.recycler_view) @@ -71,12 +72,6 @@ class SubtaskControlSet : TaskEditControlFragment(), SubtaskViewHolder.Callbacks private var googleTask: GoogleTask? = null private lateinit var recyclerAdapter: SubtasksRecyclerAdapter - override fun inject(component: FragmentComponent) { - component.inject(this) - viewModel = ViewModelProvider(this).get(TaskListViewModel::class.java) - component.inject(viewModel) - } - override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putParcelableArrayList(EXTRA_NEW_SUBTASKS, newSubtasks) @@ -85,6 +80,7 @@ class SubtaskControlSet : TaskEditControlFragment(), SubtaskViewHolder.Callbacks override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = super.onCreateView(inflater, container, savedInstanceState) + viewModel = ViewModelProvider(this).get(TaskListViewModel::class.java) if (savedInstanceState != null) { for (task in savedInstanceState.getParcelableArrayList(EXTRA_NEW_SUBTASKS)!!) { addSubtask(task) diff --git a/app/src/main/java/org/tasks/ui/TaskEditControlFragment.kt b/app/src/main/java/org/tasks/ui/TaskEditControlFragment.kt index cfa3e5be9..f55634ba7 100644 --- a/app/src/main/java/org/tasks/ui/TaskEditControlFragment.kt +++ b/app/src/main/java/org/tasks/ui/TaskEditControlFragment.kt @@ -7,12 +7,12 @@ import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.LinearLayout +import androidx.fragment.app.Fragment import butterknife.ButterKnife import com.todoroo.astrid.data.Task import org.tasks.R -import org.tasks.injection.InjectingFragment -abstract class TaskEditControlFragment : InjectingFragment() { +abstract class TaskEditControlFragment : Fragment() { protected lateinit var task: Task var isNew = false diff --git a/app/src/main/java/org/tasks/ui/TaskListViewModel.kt b/app/src/main/java/org/tasks/ui/TaskListViewModel.kt index c754ffcbb..315f9cdc2 100644 --- a/app/src/main/java/org/tasks/ui/TaskListViewModel.kt +++ b/app/src/main/java/org/tasks/ui/TaskListViewModel.kt @@ -1,5 +1,6 @@ package org.tasks.ui +import androidx.hilt.lifecycle.ViewModelInject import androidx.lifecycle.* import androidx.paging.LivePagedListBuilder import androidx.paging.PagedList @@ -19,11 +20,10 @@ import org.tasks.data.TaskContainer import org.tasks.data.TaskListQuery.getQuery import org.tasks.preferences.Preferences import timber.log.Timber -import javax.inject.Inject -class TaskListViewModel : ViewModel(), Observer> { - @Inject lateinit var preferences: Preferences - @Inject lateinit var taskDao: TaskDao +class TaskListViewModel @ViewModelInject constructor( + private val preferences: Preferences, + private val taskDao: TaskDao) : ViewModel(), Observer> { private var tasks = MutableLiveData>() private var filter: Filter? = null diff --git a/app/src/main/java/org/tasks/ui/Toaster.java b/app/src/main/java/org/tasks/ui/Toaster.java index 4c72cd58c..84afa8577 100644 --- a/app/src/main/java/org/tasks/ui/Toaster.java +++ b/app/src/main/java/org/tasks/ui/Toaster.java @@ -6,8 +6,8 @@ import static org.tasks.Strings.isNullOrEmpty; import android.content.Context; import android.widget.Toast; import androidx.annotation.StringRes; +import dagger.hilt.android.qualifiers.ActivityContext; import javax.inject.Inject; -import org.tasks.injection.ActivityContext; import org.tasks.locale.Locale; public class Toaster { diff --git a/app/src/main/java/org/tasks/voice/VoiceCommandActivity.java b/app/src/main/java/org/tasks/voice/VoiceCommandActivity.java index 1321ef4b3..6c8d1cc99 100644 --- a/app/src/main/java/org/tasks/voice/VoiceCommandActivity.java +++ b/app/src/main/java/org/tasks/voice/VoiceCommandActivity.java @@ -7,12 +7,13 @@ import android.content.Intent; import android.os.Bundle; import android.widget.Toast; import com.todoroo.astrid.service.TaskCreator; +import dagger.hilt.android.AndroidEntryPoint; +import dagger.hilt.android.qualifiers.ApplicationContext; import javax.inject.Inject; import org.tasks.R; -import org.tasks.injection.ActivityComponent; -import org.tasks.injection.ApplicationContext; import org.tasks.injection.InjectingAppCompatActivity; +@AndroidEntryPoint public class VoiceCommandActivity extends InjectingAppCompatActivity { @Inject TaskCreator taskCreator; @@ -34,9 +35,4 @@ public class VoiceCommandActivity extends InjectingAppCompatActivity { finish(); } } - - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } } diff --git a/app/src/main/java/org/tasks/widget/AppWidgetManager.java b/app/src/main/java/org/tasks/widget/AppWidgetManager.java index b6eda96f2..cd0dbbb47 100644 --- a/app/src/main/java/org/tasks/widget/AppWidgetManager.java +++ b/app/src/main/java/org/tasks/widget/AppWidgetManager.java @@ -3,9 +3,9 @@ package org.tasks.widget; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import dagger.hilt.android.qualifiers.ApplicationContext; import javax.inject.Inject; import org.tasks.R; -import org.tasks.injection.ApplicationContext; public class AppWidgetManager { diff --git a/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java b/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java index 13ba5b7a4..9f72acbab 100644 --- a/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java +++ b/app/src/main/java/org/tasks/widget/ScrollableWidgetUpdateService.java @@ -7,14 +7,15 @@ import android.os.Bundle; import android.widget.RemoteViewsService; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.subtasks.SubtasksHelper; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; -import org.tasks.injection.InjectingApplication; import org.tasks.locale.Locale; import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.Preferences; import org.tasks.themes.ColorProvider; import org.tasks.ui.CheckBoxProvider; +@AndroidEntryPoint public class ScrollableWidgetUpdateService extends RemoteViewsService { @Inject TaskDao taskDao; @@ -23,13 +24,6 @@ public class ScrollableWidgetUpdateService extends RemoteViewsService { @Inject DefaultFilterProvider defaultFilterProvider; @Inject Locale locale; - @Override - public void onCreate() { - super.onCreate(); - - ((InjectingApplication) getApplication()).getComponent().inject(this); - } - @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); diff --git a/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.java b/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.java index 120d774b3..666b487b8 100644 --- a/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.java +++ b/app/src/main/java/org/tasks/widget/ShortcutConfigActivity.java @@ -16,20 +16,20 @@ import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.OnFocusChange; import com.google.android.material.textfield.TextInputEditText; -import com.google.android.material.textfield.TextInputLayout; import com.todoroo.astrid.api.Filter; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.R; import org.tasks.activities.FilterSelectionActivity; import org.tasks.dialogs.ColorPalettePicker; import org.tasks.dialogs.ColorPickerAdapter.Palette; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.ThemedInjectingAppCompatActivity; import org.tasks.intents.TaskIntents; import org.tasks.preferences.DefaultFilterProvider; import org.tasks.themes.DrawableUtil; import org.tasks.themes.ThemeColor; +@AndroidEntryPoint public class ShortcutConfigActivity extends ThemedInjectingAppCompatActivity implements ColorPalettePicker.ColorPickedCallback { @@ -43,9 +43,6 @@ public class ShortcutConfigActivity extends ThemedInjectingAppCompatActivity @BindView(R.id.toolbar) Toolbar toolbar; - @BindView(R.id.shortcut_list_layout) - TextInputLayout shortcutListLayout; - @BindView(R.id.shortcut_list) TextInputEditText shortcutList; @@ -171,11 +168,6 @@ public class ShortcutConfigActivity extends ThemedInjectingAppCompatActivity finish(); } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override public void onColorPicked(int color) { selectedTheme = color; diff --git a/app/src/main/java/org/tasks/widget/TasksWidget.java b/app/src/main/java/org/tasks/widget/TasksWidget.java index 222e9e355..8279dea5f 100644 --- a/app/src/main/java/org/tasks/widget/TasksWidget.java +++ b/app/src/main/java/org/tasks/widget/TasksWidget.java @@ -6,6 +6,7 @@ import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; +import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.net.Uri; @@ -15,12 +16,11 @@ import androidx.annotation.ColorInt; import androidx.core.graphics.ColorUtils; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.dao.TaskDao; +import dagger.hilt.android.AndroidEntryPoint; +import dagger.hilt.android.qualifiers.ApplicationContext; import javax.inject.Inject; import org.tasks.R; import org.tasks.activities.FilterSelectionActivity; -import org.tasks.injection.ApplicationComponent; -import org.tasks.injection.ApplicationContext; -import org.tasks.injection.InjectingAppWidgetProvider; import org.tasks.intents.TaskIntents; import org.tasks.locale.Locale; import org.tasks.preferences.DefaultFilterProvider; @@ -28,7 +28,8 @@ import org.tasks.preferences.Preferences; import org.tasks.themes.ThemeColor; import timber.log.Timber; -public class TasksWidget extends InjectingAppWidgetProvider { +@AndroidEntryPoint +public class TasksWidget extends AppWidgetProvider { private static final int flags = FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP; @Inject Preferences preferences; @@ -37,11 +38,6 @@ public class TasksWidget extends InjectingAppWidgetProvider { @Inject TaskDao taskDao; @Inject @ApplicationContext Context context; - @Override - protected void inject(ApplicationComponent component) { - component.inject(this); - } - @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for (int id : appWidgetIds) { diff --git a/app/src/main/java/org/tasks/widget/WidgetClickActivity.java b/app/src/main/java/org/tasks/widget/WidgetClickActivity.java index b9be66eca..6718cc115 100644 --- a/app/src/main/java/org/tasks/widget/WidgetClickActivity.java +++ b/app/src/main/java/org/tasks/widget/WidgetClickActivity.java @@ -8,15 +8,16 @@ import androidx.fragment.app.FragmentManager; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.service.TaskCompleter; +import dagger.hilt.android.AndroidEntryPoint; import javax.inject.Inject; import org.tasks.LocalBroadcastManager; import org.tasks.R; import org.tasks.dialogs.DateTimePicker; -import org.tasks.injection.ActivityComponent; import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.intents.TaskIntents; import org.tasks.preferences.Preferences; +@AndroidEntryPoint public class WidgetClickActivity extends InjectingAppCompatActivity implements DateTimePicker.OnDismissHandler { @@ -79,11 +80,6 @@ public class WidgetClickActivity extends InjectingAppCompatActivity } } - @Override - public void inject(ActivityComponent component) { - component.inject(this); - } - @Override public void onDismiss() { finish(); diff --git a/app/src/main/java/org/tasks/widget/WidgetConfigActivity.kt b/app/src/main/java/org/tasks/widget/WidgetConfigActivity.kt index 05d9a8417..3af2b963e 100644 --- a/app/src/main/java/org/tasks/widget/WidgetConfigActivity.kt +++ b/app/src/main/java/org/tasks/widget/WidgetConfigActivity.kt @@ -3,11 +3,12 @@ package org.tasks.widget import android.appwidget.AppWidgetManager import android.content.Intent import android.os.Bundle +import dagger.hilt.android.AndroidEntryPoint import org.tasks.R -import org.tasks.injection.ActivityComponent import org.tasks.preferences.BasePreferences import org.tasks.preferences.fragments.ScrollableWidget.Companion.newScrollableWidget +@AndroidEntryPoint class WidgetConfigActivity : BasePreferences() { private var appWidgetId: Int = 0 @@ -32,6 +33,4 @@ class WidgetConfigActivity : BasePreferences() { override fun getRootTitle() = R.string.widget_settings override fun getRootPreference() = newScrollableWidget(appWidgetId) - - override fun inject(component: ActivityComponent) = component.inject(this) } \ No newline at end of file diff --git a/app/src/release/java/org/tasks/preferences/fragments/Debug.kt b/app/src/release/java/org/tasks/preferences/fragments/Debug.kt index 6f6899cf1..d2af0155d 100644 --- a/app/src/release/java/org/tasks/preferences/fragments/Debug.kt +++ b/app/src/release/java/org/tasks/preferences/fragments/Debug.kt @@ -1,14 +1,12 @@ package org.tasks.preferences.fragments import android.os.Bundle -import org.tasks.injection.FragmentComponent +import dagger.hilt.android.AndroidEntryPoint import org.tasks.injection.InjectingPreferenceFragment +@AndroidEntryPoint class Debug : InjectingPreferenceFragment() { - override fun getPreferenceXml() = 0 override fun setupPreferences(savedInstanceState: Bundle?) {} - - override fun inject(component: FragmentComponent) {} } \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 31eecd5fc..17e270eee 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,6 +9,7 @@ buildscript { classpath("com.google.gms:google-services:4.3.3") classpath("com.google.firebase:firebase-crashlytics-gradle:2.1.1") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}") + classpath("com.google.dagger:hilt-android-gradle-plugin:${Versions.hilt}") } } diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 77d8641eb..bbdaa266a 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -2,7 +2,6 @@ object Versions { const val kotlin = "1.3.72" const val targetSdk = 29 const val minSdk = 23 - const val dagger = "2.28" const val butterknife = "10.2.1" const val work = "2.3.4" const val leakcanary = "2.4" @@ -15,4 +14,6 @@ object Versions { const val mockito = "3.3.3" const val androidx_test = "1.2.0" const val make_it_easy = "4.0.1" + const val hilt = "2.28-alpha" + const val hilt_androidx = "1.0.0-alpha01" } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index b74633d7a..7b43fff66 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -#Mon Apr 27 10:51:33 CDT 2020 +#Mon Jun 15 15:28:40 CDT 2020 android.enableJetifier=false -org.gradle.jvmargs=-Xmx1536M -Dkotlin.daemon.jvm.options\="-Xmx1536M" android.useAndroidX=true +org.gradle.jvmargs=-Xmx2048M -Dkotlin.daemon.jvm.options\="-Xmx2048M"