Add default location preference

pull/1174/head^2
Alex Baker 4 years ago
parent 9683479ab3
commit c4c9ac726a

@ -104,6 +104,9 @@ class TaskCreator @Inject constructor(
preferences.getIntegerFromString(R.string.p_default_recurrence_from, 0) == 1)
}
val setting = preferences.getIntegerFromString(R.string.p_default_hideUntil_key, Task.HIDE_UNTIL_NONE)
preferences.getStringValue(R.string.p_default_location)
?.takeIf { it.isNotBlank() }
?.let { task.putTransitory(Place.KEY, it) }
task.hideUntil = task.createHideUntil(setting, 0)
setDefaultReminders(preferences, task)
val tags = ArrayList<String>()

@ -1,6 +1,7 @@
package org.tasks.preferences
import android.content.Context
import android.graphics.drawable.Drawable
import android.util.AttributeSet
import android.view.View
import android.widget.ImageView
@ -16,17 +17,38 @@ class IconPreference(context: Context?, attrs: AttributeSet?) : Preference(conte
super.onBindViewHolder(holder)
imageView = holder?.findViewById(R.id.preference_icon) as ImageView?
updateVisibility()
updateIcon()
}
var tint: Int? = null
set(value) {
field = value
updateIcon()
}
var iconClickListener: View.OnClickListener? = null
set(value) {
field = value
updateIcon()
}
var drawable: Drawable? = null
set(value) {
field = value
updateIcon()
}
var iconVisible: Boolean = false
set(value) {
field = value
updateVisibility()
updateIcon()
}
private fun updateVisibility() {
private fun updateIcon() {
imageView?.visibility = if (iconVisible) View.VISIBLE else View.GONE
drawable?.let { imageView?.setImageDrawable(drawable) }
iconClickListener?.let { imageView?.setOnClickListener(it) }
tint?.let { imageView?.setColorFilter(it) }
}
init {

@ -3,6 +3,7 @@ package org.tasks.preferences.fragments
import android.app.Activity.RESULT_OK
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
import com.google.ical.values.RRule
@ -16,8 +17,13 @@ import org.tasks.activities.ListPicker
import org.tasks.calendars.CalendarPicker
import org.tasks.calendars.CalendarPicker.newCalendarPicker
import org.tasks.calendars.CalendarProvider
import org.tasks.data.LocationDao
import org.tasks.data.Place
import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.location.LocationPickerActivity
import org.tasks.location.LocationPickerActivity.Companion.EXTRA_PLACE
import org.tasks.preferences.DefaultFilterProvider
import org.tasks.preferences.IconPreference
import org.tasks.preferences.Preferences
import org.tasks.repeats.BasicRecurrenceDialog
import org.tasks.repeats.BasicRecurrenceDialog.EXTRA_RRULE
@ -36,6 +42,7 @@ class TaskDefaults : InjectingPreferenceFragment() {
@Inject lateinit var preferences: Preferences
@Inject lateinit var calendarProvider: CalendarProvider
@Inject lateinit var repeatRuleToString: RepeatRuleToString
@Inject lateinit var locationDao: LocationDao
private lateinit var defaultCalendarPref: Preference
@ -76,8 +83,19 @@ class TaskDefaults : InjectingPreferenceFragment() {
false
}
val defaultLocation = findPreference(R.string.p_default_location) as IconPreference
defaultLocation
.setOnPreferenceClickListener {
startActivityForResult(
Intent(context, LocationPickerActivity::class.java),
REQUEST_LOCATION
)
false
}
updateRemoteListSummary()
updateRecurrence()
updateDefaultLocation()
requires(device.supportsGeofences(), R.string.p_default_location_reminder_key, R.string.p_default_location_radius)
}
@ -108,16 +126,26 @@ class TaskDefaults : InjectingPreferenceFragment() {
)
updateRecurrence()
}
} else if (requestCode == REQUEST_LOCATION) {
if (resultCode == RESULT_OK) {
setDefaultLocation(data?.getParcelableExtra(EXTRA_PLACE))
}
} else {
super.onActivityResult(requestCode, resultCode, data)
}
}
private fun setDefaultLocation(place: Place?) {
preferences.setString(R.string.p_default_location, place?.uid)
updateDefaultLocation()
}
override fun onResume() {
super.onResume()
updateRemoteListSummary()
updateRecurrence()
updateDefaultLocation()
}
private fun getDefaultCalendarName(): String? {
@ -130,6 +158,24 @@ class TaskDefaults : InjectingPreferenceFragment() {
findPreference(R.string.p_default_list).summary = defaultFilter.listingTitle
}
private fun updateDefaultLocation() = lifecycleScope.launch {
val place = preferences
.getStringValue(R.string.p_default_location)
?.let { locationDao.getByUid(it) }
val defaultLocation = findPreference(R.string.p_default_location) as IconPreference
if (place == null) {
defaultLocation.iconVisible = false
defaultLocation.summary = requireContext().getString(R.string.none)
} else {
defaultLocation.drawable =
context?.getDrawable(R.drawable.ic_outline_delete_24px)?.mutate()
defaultLocation.tint = context?.getColor(R.color.icon_tint_with_alpha)
defaultLocation.iconClickListener = View.OnClickListener { setDefaultLocation(null) }
defaultLocation.iconVisible = true
defaultLocation.summary = place.displayName
}
}
private fun updateRecurrence() {
val rrule = preferences.getStringValue(R.string.p_default_recurrence)
findPreference(R.string.p_default_recurrence).summary =
@ -148,6 +194,7 @@ class TaskDefaults : InjectingPreferenceFragment() {
companion object {
const val REQUEST_RECURRENCE = 10000
const val REQUEST_LOCATION = 10001
const val FRAG_TAG_BASIC_RECURRENCE = "frag_tag_basic_recurrence"
}
}

@ -394,6 +394,7 @@
<string name="p_backups_android_backup_last">backups_android_backup_last</string>
<string name="p_backups_drive_last">backups_drive_last</string>
<string name="p_current_version">cv</string>
<string name="p_default_location">default_location</string>
<string name="event_whats_new">whats_new</string>
<string name="param_whats_new_display_rate">display_rate</string>

@ -117,6 +117,7 @@ File %1$s contained %2$s.\n\n
<string name="EPr_default_location_reminder_title">Default location reminders</string>
<string name="EPr_default_location_radius">Default radius</string>
<string name="EPr_default_reminders_mode_title">Default ring/vibrate type</string>
<string name="default_location">Default location</string>
<string name="priority_high">High</string>
<string name="priority_medium">Medium</string>
<string name="priority_low">Low</string>

@ -88,15 +88,20 @@
android:summary="%s"
android:title="@string/EPr_default_reminders_mode_title" />
<org.tasks.preferences.IconPreference
android:icon="@drawable/ic_outline_place_24px"
android:layout="@layout/preference_icon"
android:key="@string/p_default_location"
android:title="@string/default_location"
app:allowDividerAbove="true" />
<ListPreference
android:defaultValue="0"
android:entries="@array/EPr_default_location_reminder"
android:entryValues="@array/EPR_default_location_reminder_values"
android:icon="@drawable/ic_outline_place_24px"
android:key="@string/p_default_location_reminder_key"
android:summary="%s"
android:title="@string/EPr_default_location_reminder_title"
app:allowDividerAbove="true" />
android:title="@string/EPr_default_location_reminder_title" />
<SeekBarPreference
android:defaultValue="250"

Loading…
Cancel
Save