Convert Geofence to data class

pull/2266/head
Alex Baker 3 years ago
parent 1a810e0298
commit 2c697fd5b9

@ -18,9 +18,24 @@ import com.todoroo.astrid.service.Upgrader.Companion.getAndroidColor
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.caldav.VtodoCache import org.tasks.caldav.VtodoCache
import org.tasks.data.* import org.tasks.data.AlarmDao
import org.tasks.data.Attachment
import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavAccount.Companion.TYPE_GOOGLE_TASKS import org.tasks.data.CaldavAccount.Companion.TYPE_GOOGLE_TASKS
import org.tasks.data.CaldavCalendar
import org.tasks.data.CaldavDao
import org.tasks.data.CaldavTask
import org.tasks.data.FilterDao
import org.tasks.data.Geofence
import org.tasks.data.LocationDao
import org.tasks.data.Place.Companion.newPlace import org.tasks.data.Place.Companion.newPlace
import org.tasks.data.Tag
import org.tasks.data.TagDao
import org.tasks.data.TagData
import org.tasks.data.TagDataDao
import org.tasks.data.TaskAttachmentDao
import org.tasks.data.TaskListMetadataDao
import org.tasks.data.UserActivityDao
import org.tasks.db.Migrations.repeatFrom import org.tasks.db.Migrations.repeatFrom
import org.tasks.db.Migrations.withoutFrom import org.tasks.db.Migrations.withoutFrom
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -207,12 +222,14 @@ class TasksJsonImporter @Inject constructor(
place.url = location.url place.url = location.url
place.phone = location.phone place.phone = location.phone
locationDao.insert(place) locationDao.insert(place)
val geofence = Geofence() locationDao.insert(
geofence.task = taskId Geofence(
geofence.place = place.uid task = taskId,
geofence.isArrival = location.arrival place = place.uid,
geofence.isDeparture = location.departure isArrival = location.arrival,
locationDao.insert(geofence) isDeparture = location.departure,
)
)
} }
for (tag in backup.tags) { for (tag in backup.tags) {
val tagData = findTagData(tag) ?: continue val tagData = findTagData(tag) ?: continue
@ -222,8 +239,9 @@ class TasksJsonImporter @Inject constructor(
tagDao.insert(tag) tagDao.insert(tag)
} }
backup.geofences?.forEach { geofence -> backup.geofences?.forEach { geofence ->
geofence.task = taskId locationDao.insert(
locationDao.insert(geofence) geofence.copy(task = taskId)
)
} }
backup.attachments backup.attachments
?.mapNotNull { taskAttachmentDao.getAttachment(it.attachmentUid) } ?.mapNotNull { taskAttachmentDao.getAttachment(it.attachmentUid) }

@ -85,12 +85,14 @@ class iCalendar @Inject constructor(
} }
val existing = locationDao.getGeofences(taskId) val existing = locationDao.getGeofences(taskId)
if (existing == null) { if (existing == null) {
val geofence = Geofence(place.uid, preferences) locationDao.insert(
geofence.task = taskId Geofence(
geofence.id = locationDao.insert(geofence) place.uid,
preferences
).copy(task = taskId)
)
} else if (place != existing.place) { } else if (place != existing.place) {
val geofence = existing.geofence val geofence = existing.geofence.copy(place = place.uid)
geofence.place = place.uid
locationDao.update(geofence) locationDao.update(geofence)
geofenceApi.update(existing.place) geofenceApi.update(existing.place)
} }

@ -24,64 +24,73 @@ import java.io.Serializable
), ),
] ]
) )
class Geofence : Serializable, Parcelable { data class Geofence(
@PrimaryKey(autoGenerate = true) @PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "geofence_id") @ColumnInfo(name = "geofence_id")
@Transient @Transient
var id: Long = 0 val id: Long = 0,
@ColumnInfo(name = "task", index = true) @ColumnInfo(name = "task", index = true)
@Transient @Transient
var task: Long = 0 val task: Long = 0,
@ColumnInfo(name = "place") @ColumnInfo(name = "place")
var place: String? = null val place: String? = null,
@ColumnInfo(name = "arrival") @ColumnInfo(name = "arrival")
var isArrival = false val isArrival: Boolean = false,
@ColumnInfo(name = "departure") @ColumnInfo(name = "departure")
var isDeparture = false var isDeparture: Boolean = false,
) : Serializable, Parcelable {
constructor()
@Ignore @Ignore
constructor(task: Long, place: String?, arrival: Boolean, departure: Boolean) : this(place, arrival, departure) { constructor(
this.task = task task: Long,
} place: String?,
arrival: Boolean,
departure: Boolean
): this(
task = task,
place = place,
isArrival = arrival,
isDeparture = departure,
)
@Ignore @Ignore
constructor(place: String?, preferences: Preferences) { constructor(
this.place = place place: String?,
val defaultReminders = preferences.getIntegerFromString(R.string.p_default_location_reminder_key, 1) preferences: Preferences,
isArrival = defaultReminders == 1 || defaultReminders == 3 defaultReminders: Int = preferences.getIntegerFromString(R.string.p_default_location_reminder_key, 1)
isDeparture = defaultReminders == 2 || defaultReminders == 3 ): this(
} place = place,
isArrival = defaultReminders == 1 || defaultReminders == 3,
isDeparture = defaultReminders == 2 || defaultReminders == 3,
)
@Ignore @Ignore
constructor(place: String?, arrival: Boolean, departure: Boolean) { constructor(
this.place = place place: String?,
isArrival = arrival arrival: Boolean,
isDeparture = departure departure: Boolean
} ): this(
place = place,
isArrival = arrival,
isDeparture = departure,
)
@Ignore @Ignore
constructor(o: Geofence) { constructor(o: Geofence): this(
id = o.id id = o.id,
task = o.task task = o.task,
place = o.place place = o.place,
isArrival = o.isArrival isArrival = o.isArrival,
isDeparture = o.isDeparture isDeparture = o.isDeparture,
} )
@Ignore @Ignore
constructor(parcel: Parcel) { constructor(parcel: Parcel): this(
id = parcel.readLong() id = parcel.readLong(),
task = parcel.readLong() task = parcel.readLong(),
place = parcel.readString() place = parcel.readString(),
isArrival = parcel.readInt() == 1 isArrival = parcel.readInt() == 1,
isDeparture = parcel.readInt() == 1 isDeparture = parcel.readInt() == 1,
} )
override fun describeContents() = 0 override fun describeContents() = 0
@ -95,31 +104,6 @@ class Geofence : Serializable, Parcelable {
} }
} }
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is Geofence) return false
if (id != other.id) return false
if (task != other.task) return false
if (place != other.place) return false
if (isArrival != other.isArrival) return false
if (isDeparture != other.isDeparture) return false
return true
}
override fun hashCode(): Int {
var result = id.hashCode()
result = 31 * result + task.hashCode()
result = 31 * result + (place?.hashCode() ?: 0)
result = 31 * result + isArrival.hashCode()
result = 31 * result + isDeparture.hashCode()
return result
}
override fun toString(): String =
"Geofence(id=$id, task=$task, place=$place, isArrival=$isArrival, isDeparture=$isDeparture)"
companion object { companion object {
const val TABLE_NAME = "geofences" const val TABLE_NAME = "geofences"
@JvmField val TABLE = Table(TABLE_NAME) @JvmField val TABLE = Table(TABLE_NAME)

@ -77,10 +77,13 @@ public class GeofenceDialog extends DialogFragment {
} }
private Geofence toGeofence() { private Geofence toGeofence() {
Geofence geofence = new Geofence(); return new Geofence(
geofence.setArrival(arrivalView.isChecked()); 0L,
geofence.setDeparture(departureView.isChecked()); 0L,
return geofence; null,
arrivalView.isChecked(),
departureView.isChecked()
);
} }
private void sendResult(DialogInterface d, int... i) { private void sendResult(DialogInterface d, int... i) {

@ -38,9 +38,23 @@ import org.tasks.R
import org.tasks.Strings import org.tasks.Strings
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.calendars.CalendarEventProvider import org.tasks.calendars.CalendarEventProvider
import org.tasks.data.* import org.tasks.data.Alarm
import org.tasks.data.Alarm.Companion.TYPE_REL_END import org.tasks.data.Alarm.Companion.TYPE_REL_END
import org.tasks.data.Alarm.Companion.TYPE_REL_START import org.tasks.data.Alarm.Companion.TYPE_REL_START
import org.tasks.data.AlarmDao
import org.tasks.data.Attachment
import org.tasks.data.CaldavDao
import org.tasks.data.CaldavTask
import org.tasks.data.GoogleTaskDao
import org.tasks.data.Location
import org.tasks.data.LocationDao
import org.tasks.data.TagDao
import org.tasks.data.TagData
import org.tasks.data.TagDataDao
import org.tasks.data.TaskAttachment
import org.tasks.data.TaskAttachmentDao
import org.tasks.data.UserActivity
import org.tasks.data.UserActivityDao
import org.tasks.date.DateTimeUtils.toDateTime import org.tasks.date.DateTimeUtils.toDateTime
import org.tasks.files.FileHelper import org.tasks.files.FileHelper
import org.tasks.location.GeofenceApi import org.tasks.location.GeofenceApi
@ -267,10 +281,12 @@ class TaskEditViewModel @Inject constructor(
} }
selectedLocation.value?.let { location -> selectedLocation.value?.let { location ->
val place = location.place val place = location.place
val geofence = location.geofence locationDao.insert(
geofence.task = task.id location.geofence.copy(
geofence.place = place.uid task = task.id,
geofence.id = locationDao.insert(geofence) place = place.uid,
)
)
geofenceApi.update(place) geofenceApi.update(place)
} }
task.putTransitory(SyncFlags.FORCE_CALDAV_SYNC, true) task.putTransitory(SyncFlags.FORCE_CALDAV_SYNC, true)

Loading…
Cancel
Save