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) {