Move Android platform stuff out of data

pull/2898/head
Alex Baker 4 weeks ago
parent 2c5a497007
commit 7149308c97

@ -14,6 +14,7 @@ import org.tasks.LocalBroadcastManager
import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.dao.LocationDao
import org.tasks.data.displayName
import org.tasks.data.entity.Place
import org.tasks.data.mapPosition
import org.tasks.databinding.ActivityLocationSettingsBinding

@ -21,8 +21,9 @@ import com.google.android.material.composethemeadapter.MdcTheme
import org.tasks.R
import org.tasks.compose.DisabledText
import org.tasks.compose.TaskEditRow
import org.tasks.data.entity.Geofence
import org.tasks.data.Location
import org.tasks.data.displayName
import org.tasks.data.entity.Geofence
import org.tasks.data.entity.Place
@Composable

@ -5,3 +5,6 @@ import android.content.Context
fun Location.open(context: Context?) {
place.open(context)
}
val Location.displayName: String
get() = place.displayName

@ -1,13 +1,46 @@
package org.tasks.data
import android.content.Context
import android.location.Location
import android.net.Uri
import org.tasks.data.entity.Place
import org.tasks.extensions.Context.openUri
import org.tasks.location.MapPosition
import java.util.regex.Pattern
import kotlin.math.abs
private val pattern = Pattern.compile("(\\d+):(\\d+):(\\d+\\.\\d+)")
private val COORDS = Pattern.compile("^\\d+°\\d+'\\d+\\.\\d+\"[NS] \\d+°\\d+'\\d+\\.\\d+\"[EW]$")
fun Place.open(context: Context?) =
context?.openUri("geo:$latitude,$longitude?q=${Uri.encode(displayName)}")
val Place.mapPosition: MapPosition
get() = MapPosition(latitude, longitude)
val Place.displayName: String
get() {
if (!name.isNullOrEmpty() && !COORDS.matcher(name!!).matches()) {
return name!!
}
return if (!address.isNullOrEmpty()) {
address!!
} else {
"${formatCoordinate(latitude, true)} ${formatCoordinate(longitude, false)}"
}
}
private fun formatCoordinate(coordinates: Double, latitude: Boolean): String {
val output = Location.convert(abs(coordinates), Location.FORMAT_SECONDS)
val matcher = pattern.matcher(output)
return if (matcher.matches()) {
val direction = if (latitude) {
if (coordinates > 0) "N" else "S"
} else {
if (coordinates > 0) "E" else "W"
}
"${matcher.group(1)}°${matcher.group(2)}'${matcher.group(3)}\"$direction"
} else {
coordinates.toString()
}
}

@ -17,6 +17,7 @@ import androidx.fragment.app.DialogFragment;
import com.google.android.material.switchmaterial.SwitchMaterial;
import org.tasks.R;
import org.tasks.data.LocationExtensionsKt;
import org.tasks.data.entity.Geofence;
import org.tasks.data.Location;
import org.tasks.databinding.LocationDetailsBinding;
@ -63,7 +64,7 @@ public class GeofenceDialog extends DialogFragment {
arrivalView.setChecked(geofence.isArrival());
departureView.setChecked(geofence.isDeparture());
return dialogBuilder
.newDialog(original.getDisplayName())
.newDialog(LocationExtensionsKt.getDisplayName(original))
.setView(binding.getRoot())
.setNegativeButton(R.string.cancel, null)
.setOnCancelListener(this::sendResult)

@ -1,20 +1,21 @@
package org.tasks.filters
import android.content.Context
import org.tasks.data.sql.Criterion.Companion.and
import org.tasks.data.sql.Field.Companion.field
import org.tasks.data.sql.Join.Companion.inner
import org.tasks.data.sql.QueryTemplate
import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.FilterListItem
import kotlinx.parcelize.Parcelize
import org.tasks.data.entity.Geofence
import org.tasks.data.NO_COUNT
import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible
import org.tasks.data.displayName
import org.tasks.data.entity.Geofence
import org.tasks.data.entity.Place
import org.tasks.data.entity.Task
import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible
import org.tasks.data.open
import org.tasks.data.sql.Criterion.Companion.and
import org.tasks.data.sql.Field.Companion.field
import org.tasks.data.sql.Join.Companion.inner
import org.tasks.data.sql.QueryTemplate
import org.tasks.themes.CustomIcons
@Parcelize

@ -15,6 +15,7 @@ import androidx.recyclerview.widget.ListAdapter;
import androidx.recyclerview.widget.RecyclerView;
import org.tasks.R;
import org.tasks.billing.Inventory;
import org.tasks.data.PlaceExtensionsKt;
import org.tasks.data.entity.Place;
import org.tasks.data.PlaceUsage;
import org.tasks.location.LocationPickerAdapter.PlaceViewHolder;
@ -107,7 +108,7 @@ public class LocationPickerAdapter extends ListAdapter<PlaceUsage, PlaceViewHold
void bind(PlaceUsage placeUsage, int color, int icon) {
place = placeUsage.place;
String name = place.getDisplayName();
String name = PlaceExtensionsKt.getDisplayName(place);
String address = place.getDisplayAddress();
Drawable wrapped = DrawableUtil.getWrapped(itemView.getContext(), icon);
this.icon.setImageDrawable(wrapped);

@ -16,6 +16,7 @@ import org.tasks.R
import org.tasks.data.dao.LocationDao
import org.tasks.data.dao.NotificationDao
import org.tasks.data.dao.TaskDao
import org.tasks.data.displayName
import org.tasks.data.entity.Alarm
import org.tasks.data.entity.Notification
import org.tasks.intents.TaskIntents

@ -20,6 +20,7 @@ import org.tasks.data.dao.LocationDao
import org.tasks.data.entity.Place
import org.tasks.data.entity.TagData
import org.tasks.data.dao.TagDataDao
import org.tasks.data.displayName
import org.tasks.dialogs.FilterPicker.Companion.newFilterPicker
import org.tasks.dialogs.FilterPicker.Companion.setFilterPickerResultListener
import org.tasks.injection.InjectingPreferenceFragment

@ -16,10 +16,11 @@ import org.tasks.R
import org.tasks.Strings.isNullOrEmpty
import org.tasks.compose.collectAsStateLifecycleAware
import org.tasks.compose.edit.LocationRow
import org.tasks.data.entity.Geofence
import org.tasks.data.Location
import org.tasks.data.entity.Place
import org.tasks.data.createGeofence
import org.tasks.data.displayName
import org.tasks.data.entity.Geofence
import org.tasks.data.entity.Place
import org.tasks.data.open
import org.tasks.dialogs.DialogBuilder
import org.tasks.dialogs.GeofenceDialog

@ -43,9 +43,6 @@ data class Location(
val isDeparture: Boolean
get() = geofence.isDeparture
val displayName: String
get() = place.displayName
val displayAddress: String?
get() = place.displayAddress

@ -1,6 +1,6 @@
package org.tasks.data.entity
import android.location.Location
import android.os.Parcelable
import androidx.room.ColumnInfo
import androidx.room.Entity
@ -12,8 +12,6 @@ import kotlinx.serialization.Transient
import org.tasks.data.NO_ORDER
import org.tasks.data.UUIDHelper
import org.tasks.data.db.Table
import java.util.regex.Pattern
import kotlin.math.abs
@Serializable
@Parcelize
@ -51,20 +49,8 @@ data class Place(
@ColumnInfo(name = "radius", defaultValue = "250")
val radius: Int = 250,
) : java.io.Serializable, Parcelable {
val displayName: String
get() {
if (!name.isNullOrEmpty() && !COORDS.matcher(name!!).matches()) {
return name
}
return if (!address.isNullOrEmpty()) {
address!!
} else {
"${formatCoordinate(latitude, true)} ${formatCoordinate(longitude, false)}"
}
}
val displayAddress: String?
get() = if (address.isNullOrEmpty()) null else address!!.replace("$name, ", "")
get() = if (address.isNullOrEmpty()) null else address.replace("$name, ", "")
companion object {
const val KEY = "place"
@ -73,21 +59,5 @@ data class Place(
@JvmField val UID = TABLE.column("uid")
@JvmField val NAME = TABLE.column("name")
@JvmField val ADDRESS = TABLE.column("address")
private val pattern = Pattern.compile("(\\d+):(\\d+):(\\d+\\.\\d+)")
private val COORDS = Pattern.compile("^\\d+°\\d+'\\d+\\.\\d+\"[NS] \\d+°\\d+'\\d+\\.\\d+\"[EW]$")
private fun formatCoordinate(coordinates: Double, latitude: Boolean): String {
val output = Location.convert(abs(coordinates), Location.FORMAT_SECONDS)
val matcher = pattern.matcher(output)
return if (matcher.matches()) {
val direction = if (latitude) {
if (coordinates > 0) "N" else "S"
} else {
if (coordinates > 0) "E" else "W"
}
"${matcher.group(1)}°${matcher.group(2)}'${matcher.group(3)}\"$direction"
} else {
coordinates.toString()
}
}
}
}
Loading…
Cancel
Save