From 2fbc356e840e360129f1c09f2ecf166b8a044fa5 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 1 Feb 2019 14:47:43 -0600 Subject: [PATCH] Remove StartupService --- app/src/main/AndroidManifest.xml | 8 --- .../astrid/service/StartupService.java | 52 ------------------- .../com/todoroo/astrid/service/Upgrader.java | 51 ++++++++---------- app/src/main/java/org/tasks/Tasks.java | 46 ++++++++++++++-- .../injection/InjectingJobIntentService.java | 1 - .../org/tasks/injection/ServiceComponent.java | 6 --- .../main/java/org/tasks/jobs/WorkManager.java | 10 +--- .../org/tasks/location/GeofenceService.java | 4 -- .../tasks/scheduling/BackgroundScheduler.java | 52 ------------------- .../GeofenceSchedulingIntentService.java | 36 ------------- .../tasks/scheduling/RefreshScheduler.java | 11 +++- 11 files changed, 75 insertions(+), 202 deletions(-) delete mode 100644 app/src/main/java/com/todoroo/astrid/service/StartupService.java delete mode 100644 app/src/main/java/org/tasks/scheduling/BackgroundScheduler.java delete mode 100644 app/src/main/java/org/tasks/scheduling/GeofenceSchedulingIntentService.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 00c87c46c..e595eef8d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -371,14 +371,6 @@ - - upgrader; - - @Inject - public StartupService( - Preferences preferences, - Tracker tracker, - @ForApplication Context context, - Lazy upgrader) { - this.preferences = preferences; - this.context = context; - this.upgrader = upgrader; - } - - /** Called when this application is started up */ - public synchronized void onStartupApplication() { - // read current version - final int lastVersion = preferences.getLastSetVersion(); - final int currentVersion = BuildConfig.VERSION_CODE; - - Timber.i("Astrid Startup. %s => %s", lastVersion, currentVersion); - - // invoke upgrade service - if (lastVersion != currentVersion) { - upgrader.get().upgrade(lastVersion, currentVersion); - preferences.setDefaults(); - } - - BackgroundScheduler.enqueueWork(context); - } -} diff --git a/app/src/main/java/com/todoroo/astrid/service/Upgrader.java b/app/src/main/java/com/todoroo/astrid/service/Upgrader.java index 276ac8351..10dba6feb 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.java +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.java @@ -22,7 +22,6 @@ import com.todoroo.astrid.tags.TagService; import java.io.File; import java.util.List; import javax.inject.Inject; -import org.tasks.LocalBroadcastManager; import org.tasks.R; import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracking; @@ -55,7 +54,6 @@ public class Upgrader { private final Tracker tracker; private final TagDataDao tagDataDao; private final TagService tagService; - private final LocalBroadcastManager localBroadcastManager; private final TagDao tagDao; private final FilterDao filterDao; private final DefaultFilterProvider defaultFilterProvider; @@ -71,7 +69,6 @@ public class Upgrader { Tracker tracker, TagDataDao tagDataDao, TagService tagService, - LocalBroadcastManager localBroadcastManager, TagDao tagDao, FilterDao filterDao, DefaultFilterProvider defaultFilterProvider, @@ -83,7 +80,6 @@ public class Upgrader { this.tracker = tracker; this.tagDataDao = tagDataDao; this.tagService = tagService; - this.localBroadcastManager = localBroadcastManager; this.tagDao = tagDao; this.filterDao = filterDao; this.defaultFilterProvider = defaultFilterProvider; @@ -93,33 +89,29 @@ public class Upgrader { } public void upgrade(int from, int to) { - try { - if (from > 0) { - if (from < V4_8_0) { - performMarshmallowMigration(); - } - if (from < V4_9_5) { - removeDuplicateTags(); - } - if (from < V5_3_0) { - migrateFilters(); - } - if (from < V6_0_beta_1) { - migrateDefaultSyncList(); - } - if (from < V6_0_beta_2) { - migrateGoogleTaskAccount(); - } - if (from < V6_4) { - migrateUris(); - } - tracker.reportEvent(Tracking.Events.UPGRADE, Integer.toString(from)); + if (from > 0) { + if (from < V4_8_0) { + performMarshmallowMigration(); + } + if (from < V4_9_5) { + removeDuplicateTags(); + } + if (from < V5_3_0) { + migrateFilters(); + } + if (from < V6_0_beta_1) { + migrateDefaultSyncList(); + } + if (from < V6_0_beta_2) { + migrateGoogleTaskAccount(); + } + if (from < V6_4) { + migrateUris(); } - createNotificationChannels(); - preferences.setCurrentVersion(to); - } finally { - localBroadcastManager.broadcastRefresh(); + tracker.reportEvent(Tracking.Events.UPGRADE, Integer.toString(from)); } + createNotificationChannels(); + preferences.setCurrentVersion(to); } private void createNotificationChannels() { @@ -180,7 +172,6 @@ public class Upgrader { removeDuplicateTagData(tagsByUuid.get(uuid)); removeDuplicateTagMetadata(uuid); } - localBroadcastManager.broadcastRefresh(); } private void migrateFilters() { diff --git a/app/src/main/java/org/tasks/Tasks.java b/app/src/main/java/org/tasks/Tasks.java index 43c993d30..f6609573c 100644 --- a/app/src/main/java/org/tasks/Tasks.java +++ b/app/src/main/java/org/tasks/Tasks.java @@ -1,25 +1,39 @@ package org.tasks; +import android.content.Context; import com.jakewharton.processphoenix.ProcessPhoenix; import com.jakewharton.threetenabp.AndroidThreeTen; -import com.todoroo.astrid.service.StartupService; +import com.todoroo.astrid.service.Upgrader; +import dagger.Lazy; +import io.reactivex.Completable; +import io.reactivex.schedulers.Schedulers; import javax.inject.Inject; +import org.tasks.files.FileHelper; import org.tasks.injection.ApplicationComponent; +import org.tasks.injection.ForApplication; import org.tasks.injection.InjectingApplication; import org.tasks.jobs.WorkManager; +import org.tasks.location.GeofenceService; import org.tasks.preferences.Preferences; import org.tasks.receivers.Badger; +import org.tasks.scheduling.CalendarNotificationIntentService; +import org.tasks.scheduling.NotificationSchedulerIntentService; +import org.tasks.scheduling.RefreshScheduler; import org.tasks.themes.ThemeCache; +import timber.log.Timber; public class Tasks extends InjectingApplication { - @Inject StartupService startupService; + @Inject @ForApplication Context context; + @Inject Lazy upgrader; @Inject Preferences preferences; @Inject FlavorSetup flavorSetup; @Inject BuildSetup buildSetup; @Inject ThemeCache themeCache; @Inject Badger badger; @Inject WorkManager workManager; + @Inject RefreshScheduler refreshScheduler; + @Inject GeofenceService geofenceService; @Override public void onCreate() { @@ -29,6 +43,8 @@ public class Tasks extends InjectingApplication { return; } + upgrade(); + workManager.init(); AndroidThreeTen.init(this); @@ -41,9 +57,31 @@ public class Tasks extends InjectingApplication { themeCache.getThemeBase(preferences.getInt(R.string.p_theme, 0)).setDefaultNightMode(); - startupService.onStartupApplication(); + Completable.fromAction(this::doInBackground).subscribeOn(Schedulers.io()).subscribe(); + } + + private void upgrade() { + final int lastVersion = preferences.getLastSetVersion(); + final int currentVersion = BuildConfig.VERSION_CODE; + + Timber.i("Astrid Startup. %s => %s", lastVersion, currentVersion); + + // invoke upgrade service + if (lastVersion != currentVersion) { + upgrader.get().upgrade(lastVersion, currentVersion); + preferences.setDefaults(); + } + } - workManager.onStartup(); + private void doInBackground() { + NotificationSchedulerIntentService.enqueueWork(context, false); + CalendarNotificationIntentService.enqueueWork(context); + refreshScheduler.scheduleAll(); + workManager.updateBackgroundSync(); + workManager.scheduleMidnightRefresh(); + workManager.scheduleBackup(); + geofenceService.setupGeofences(); + FileHelper.delete(context, preferences.getCacheDirectory()); } @Override diff --git a/app/src/main/java/org/tasks/injection/InjectingJobIntentService.java b/app/src/main/java/org/tasks/injection/InjectingJobIntentService.java index 561337f4d..b44c40851 100644 --- a/app/src/main/java/org/tasks/injection/InjectingJobIntentService.java +++ b/app/src/main/java/org/tasks/injection/InjectingJobIntentService.java @@ -8,7 +8,6 @@ import timber.log.Timber; public abstract class InjectingJobIntentService extends JobIntentService { - public static final int JOB_ID_BACKGROUND_SCHEDULER = 1080; public static final int JOB_ID_GEOFENCE_TRANSITION = 1081; public static final int JOB_ID_GEOFENCE_SCHEDULING = 1082; public static final int JOB_ID_NOTIFICATION_SCHEDULER = 1084; diff --git a/app/src/main/java/org/tasks/injection/ServiceComponent.java b/app/src/main/java/org/tasks/injection/ServiceComponent.java index 735268b90..335349f2a 100644 --- a/app/src/main/java/org/tasks/injection/ServiceComponent.java +++ b/app/src/main/java/org/tasks/injection/ServiceComponent.java @@ -4,24 +4,18 @@ import dagger.Subcomponent; import org.tasks.jobs.NotificationService; import org.tasks.locale.receiver.TaskerIntentService; import org.tasks.location.GeofenceTransitionsIntentService; -import org.tasks.scheduling.BackgroundScheduler; import org.tasks.scheduling.CalendarNotificationIntentService; -import org.tasks.scheduling.GeofenceSchedulingIntentService; import org.tasks.scheduling.NotificationSchedulerIntentService; @Subcomponent(modules = ServiceModule.class) public interface ServiceComponent { - void inject(GeofenceSchedulingIntentService geofenceSchedulingIntentService); - void inject(CalendarNotificationIntentService calendarNotificationIntentService); void inject(GeofenceTransitionsIntentService geofenceTransitionsIntentService); void inject(NotificationSchedulerIntentService notificationSchedulerIntentService); - void inject(BackgroundScheduler backgroundScheduler); - void inject(TaskerIntentService taskerIntentService); void inject(NotificationService notificationService); diff --git a/app/src/main/java/org/tasks/jobs/WorkManager.java b/app/src/main/java/org/tasks/jobs/WorkManager.java index a8a084776..98ecf2295 100644 --- a/app/src/main/java/org/tasks/jobs/WorkManager.java +++ b/app/src/main/java/org/tasks/jobs/WorkManager.java @@ -161,7 +161,7 @@ public class WorkManager { enqueueUnique(TAG_REFRESH, RefreshWork.class, time); } - void scheduleMidnightRefresh() { + public void scheduleMidnightRefresh() { enqueueUnique(TAG_MIDNIGHT_REFRESH, MidnightRefreshWork.class, midnight()); } @@ -186,7 +186,7 @@ public class WorkManager { } } - void scheduleBackup() { + public void scheduleBackup() { long lastBackup = preferences.getLong(R.string.p_last_backup, 0L); enqueueUnique( TAG_BACKUP, @@ -236,12 +236,6 @@ public class WorkManager { alarmManager.cancel(getNotificationPendingIntent()); } - public void onStartup() { - updateBackgroundSync(); - scheduleMidnightRefresh(); - scheduleBackup(); - } - private Intent getNotificationIntent() { return new Intent(context, NotificationService.class); } diff --git a/app/src/main/java/org/tasks/location/GeofenceService.java b/app/src/main/java/org/tasks/location/GeofenceService.java index 130146acb..02aab39c4 100644 --- a/app/src/main/java/org/tasks/location/GeofenceService.java +++ b/app/src/main/java/org/tasks/location/GeofenceService.java @@ -33,10 +33,6 @@ public class GeofenceService { geofenceApi.register(getGeofencesForTask(taskId)); } - public void cancelGeofences() { - geofenceApi.cancel(getActiveGeofences()); - } - public void cancelGeofences(long taskId) { for (Location location : getGeofences(taskId)) { geofenceApi.cancel(location); diff --git a/app/src/main/java/org/tasks/scheduling/BackgroundScheduler.java b/app/src/main/java/org/tasks/scheduling/BackgroundScheduler.java deleted file mode 100644 index 189700607..000000000 --- a/app/src/main/java/org/tasks/scheduling/BackgroundScheduler.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.tasks.scheduling; - -import android.content.Context; -import android.content.Intent; -import androidx.annotation.NonNull; -import com.todoroo.astrid.dao.TaskDao; -import com.todoroo.astrid.data.Task; -import javax.inject.Inject; -import org.tasks.files.FileHelper; -import org.tasks.injection.ForApplication; -import org.tasks.injection.InjectingJobIntentService; -import org.tasks.injection.ServiceComponent; -import org.tasks.jobs.WorkManager; -import org.tasks.preferences.Preferences; -import timber.log.Timber; - -public class BackgroundScheduler extends InjectingJobIntentService { - - @Inject @ForApplication Context context; - @Inject TaskDao taskDao; - @Inject WorkManager jobManager; - @Inject RefreshScheduler refreshScheduler; - @Inject Preferences preferences; - - public static void enqueueWork(Context context) { - BackgroundScheduler.enqueueWork( - context, - BackgroundScheduler.class, - InjectingJobIntentService.JOB_ID_BACKGROUND_SCHEDULER, - new Intent(context, BackgroundScheduler.class)); - } - - @Override - protected void doWork(@NonNull Intent intent) { - Timber.d("onHandleWork(%s)", intent); - - NotificationSchedulerIntentService.enqueueWork(context, false); - CalendarNotificationIntentService.enqueueWork(context); - GeofenceSchedulingIntentService.enqueueWork(context); - - for (Task task : taskDao.needsRefresh()) { - refreshScheduler.scheduleRefresh(task); - } - - FileHelper.delete(context, preferences.getCacheDirectory()); - } - - @Override - protected void inject(ServiceComponent component) { - component.inject(this); - } -} diff --git a/app/src/main/java/org/tasks/scheduling/GeofenceSchedulingIntentService.java b/app/src/main/java/org/tasks/scheduling/GeofenceSchedulingIntentService.java deleted file mode 100644 index e55f9e061..000000000 --- a/app/src/main/java/org/tasks/scheduling/GeofenceSchedulingIntentService.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.tasks.scheduling; - -import android.content.Context; -import android.content.Intent; -import androidx.core.app.JobIntentService; -import javax.inject.Inject; -import org.tasks.injection.InjectingJobIntentService; -import org.tasks.injection.ServiceComponent; -import org.tasks.location.GeofenceService; -import timber.log.Timber; - -public class GeofenceSchedulingIntentService extends InjectingJobIntentService { - - @Inject GeofenceService geofenceService; - - public static void enqueueWork(Context context) { - JobIntentService.enqueueWork( - context, - GeofenceSchedulingIntentService.class, - InjectingJobIntentService.JOB_ID_GEOFENCE_SCHEDULING, - new Intent(context, GeofenceSchedulingIntentService.class)); - } - - @Override - protected void doWork(Intent intent) { - Timber.d("onHandleWork(%s)", intent); - - geofenceService.cancelGeofences(); - geofenceService.setupGeofences(); - } - - @Override - protected void inject(ServiceComponent component) { - component.inject(this); - } -} diff --git a/app/src/main/java/org/tasks/scheduling/RefreshScheduler.java b/app/src/main/java/org/tasks/scheduling/RefreshScheduler.java index b06fa2744..bf3d5b5b2 100644 --- a/app/src/main/java/org/tasks/scheduling/RefreshScheduler.java +++ b/app/src/main/java/org/tasks/scheduling/RefreshScheduler.java @@ -4,6 +4,7 @@ import static com.todoroo.andlib.utility.DateUtilities.ONE_MINUTE; import static org.tasks.time.DateTimeUtils.currentTimeMillis; import com.google.common.collect.ImmutableList; +import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.data.Task; import java.util.List; import java.util.SortedSet; @@ -16,11 +17,19 @@ import org.tasks.jobs.WorkManager; public class RefreshScheduler { private final WorkManager workManager; + private final TaskDao taskDao; private final SortedSet jobs = new TreeSet<>(); @Inject - public RefreshScheduler(WorkManager workManager) { + public RefreshScheduler(WorkManager workManager, TaskDao taskDao) { this.workManager = workManager; + this.taskDao = taskDao; + } + + public synchronized void scheduleAll() { + for (Task task : taskDao.needsRefresh()) { + scheduleRefresh(task); + } } public synchronized void scheduleRefresh(Task task) {