Use table join for notification filter

gtask_related_email
Alex Baker 6 years ago
parent edf46231da
commit c2e6a75b19

@ -4,12 +4,19 @@ import androidx.room.ColumnInfo;
import androidx.room.Entity; import androidx.room.Entity;
import androidx.room.Index; import androidx.room.Index;
import androidx.room.PrimaryKey; import androidx.room.PrimaryKey;
import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.Table;
@Entity( @Entity(
tableName = "notification", tableName = Notification.TABLE_NAME,
indices = {@Index(value = "task", unique = true)}) indices = {@Index(value = "task", unique = true)})
public class Notification { public class Notification {
public static final String TABLE_NAME = "notification";
public static final Table TABLE = new Table(TABLE_NAME);
public static final LongProperty TASK = new LongProperty(TABLE, "task");
@PrimaryKey(autoGenerate = true) @PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "uid") @ColumnInfo(name = "uid")
public int uid; public int uid;

@ -23,6 +23,7 @@ import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat; import androidx.core.app.NotificationManagerCompat;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
@ -37,6 +38,7 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.LocalBroadcastManager;
import org.tasks.R; import org.tasks.R;
import org.tasks.data.Location; import org.tasks.data.Location;
import org.tasks.data.LocationDao; import org.tasks.data.LocationDao;
@ -66,6 +68,7 @@ public class NotificationManager {
private static final String GROUP_KEY = "tasks"; private static final String GROUP_KEY = "tasks";
private static final int NOTIFICATIONS_PER_SECOND = 4; private static final int NOTIFICATIONS_PER_SECOND = 4;
private final NotificationManagerCompat notificationManagerCompat; private final NotificationManagerCompat notificationManagerCompat;
private final LocalBroadcastManager localBroadcastManager;
private final LocationDao locationDao; private final LocationDao locationDao;
private final NotificationDao notificationDao; private final NotificationDao notificationDao;
private final TaskDao taskDao; private final TaskDao taskDao;
@ -80,12 +83,14 @@ public class NotificationManager {
Preferences preferences, Preferences preferences,
NotificationDao notificationDao, NotificationDao notificationDao,
TaskDao taskDao, TaskDao taskDao,
LocationDao locationDao) { LocationDao locationDao,
LocalBroadcastManager localBroadcastManager) {
this.context = context; this.context = context;
this.preferences = preferences; this.preferences = preferences;
this.notificationDao = notificationDao; this.notificationDao = notificationDao;
this.taskDao = taskDao; this.taskDao = taskDao;
this.locationDao = locationDao; this.locationDao = locationDao;
this.localBroadcastManager = localBroadcastManager;
notificationManagerCompat = NotificationManagerCompat.from(context); notificationManagerCompat = NotificationManagerCompat.from(context);
} }
@ -160,6 +165,8 @@ public class NotificationManager {
} else { } else {
createNotifications(newNotifications, alert, nonstop, fiveTimes, false); createNotifications(newNotifications, alert, nonstop, fiveTimes, false);
} }
localBroadcastManager.broadcastRefresh();
} }
private void createNotifications( private void createNotifications(
@ -243,7 +250,8 @@ public class NotificationManager {
Filter filter = Filter filter =
new Filter( new Filter(
context.getString(R.string.notifications), context.getString(R.string.notifications),
new QueryTemplate().where(Task.ID.in(taskIds))); new QueryTemplate()
.join(Join.inner(Notification.TABLE, Task.ID.eq(Notification.TASK))));
long when = notificationDao.latestTimestamp(); long when = notificationDao.latestTimestamp();
int maxPriority = 3; int maxPriority = 3;
String summaryTitle = String summaryTitle =

Loading…
Cancel
Save