diff --git a/app/src/googleplay/java/org/tasks/location/GeofenceApi.java b/app/src/googleplay/java/org/tasks/location/GeofenceApi.java
index d295abecb..c0dc4e6be 100644
--- a/app/src/googleplay/java/org/tasks/location/GeofenceApi.java
+++ b/app/src/googleplay/java/org/tasks/location/GeofenceApi.java
@@ -17,9 +17,7 @@ import com.google.android.gms.location.GeofencingRequest;
import com.google.android.gms.location.LocationServices;
import com.google.common.collect.Lists;
import java.util.List;
-import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
-import org.tasks.R;
import org.tasks.data.Location;
import org.tasks.injection.ForApplication;
import org.tasks.preferences.PermissionChecker;
@@ -29,7 +27,6 @@ import timber.log.Timber;
public class GeofenceApi {
private final Context context;
- private final Preferences preferences;
private final PermissionChecker permissionChecker;
@Inject
@@ -38,7 +35,6 @@ public class GeofenceApi {
Preferences preferences,
PermissionChecker permissionChecker) {
this.context = context;
- this.preferences = preferences;
this.permissionChecker = permissionChecker;
}
@@ -115,11 +111,6 @@ public class GeofenceApi {
}
private com.google.android.gms.location.Geofence toGoogleGeofence(Location location) {
- int radius = preferences.getIntegerFromString(R.string.p_geofence_radius, 250);
- int responsiveness =
- (int)
- TimeUnit.SECONDS.toMillis(
- preferences.getIntegerFromString(R.string.p_geofence_responsiveness, 60));
int transitionTypes = 0;
if (location.isArrival()) {
transitionTypes |= GeofencingRequest.INITIAL_TRIGGER_ENTER;
@@ -128,8 +119,7 @@ public class GeofenceApi {
transitionTypes |= GeofencingRequest.INITIAL_TRIGGER_EXIT;
}
return new com.google.android.gms.location.Geofence.Builder()
- .setCircularRegion(location.getLatitude(), location.getLongitude(), radius)
- .setNotificationResponsiveness(responsiveness)
+ .setCircularRegion(location.getLatitude(), location.getLongitude(), location.getRadius())
.setRequestId(Long.toString(location.getId()))
.setTransitionTypes(transitionTypes)
.setExpirationDuration(NEVER_EXPIRE)
diff --git a/app/src/googleplay/java/org/tasks/location/PlacePicker.java b/app/src/googleplay/java/org/tasks/location/PlacePicker.java
index a8e9007f0..6e3af78a8 100644
--- a/app/src/googleplay/java/org/tasks/location/PlacePicker.java
+++ b/app/src/googleplay/java/org/tasks/location/PlacePicker.java
@@ -52,7 +52,7 @@ public class PlacePicker {
}
location.setLatitude(latLng.latitude);
location.setLongitude(latLng.longitude);
- location.setRadius(preferences.getIntegerFromString(R.string.p_geofence_radius, 250));
+ location.setRadius(preferences.getInt(R.string.p_default_location_radius, 250));
Timber.i("Picked %s", location);
return location;
}
diff --git a/app/src/main/java/com/todoroo/astrid/core/DefaultsPreferences.java b/app/src/main/java/com/todoroo/astrid/core/DefaultsPreferences.java
index efcf7f879..8ac22442e 100644
--- a/app/src/main/java/com/todoroo/astrid/core/DefaultsPreferences.java
+++ b/app/src/main/java/com/todoroo/astrid/core/DefaultsPreferences.java
@@ -7,6 +7,7 @@ package com.todoroo.astrid.core;
import static org.tasks.PermissionUtil.verifyPermissions;
import static org.tasks.activities.RemoteListNativePicker.newRemoteListNativePicker;
+import static org.tasks.dialogs.NativeSeekBarDialog.newSeekBarDialog;
import android.content.Intent;
import android.os.Bundle;
@@ -22,9 +23,11 @@ import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
import org.tasks.calendars.AndroidCalendar;
import org.tasks.calendars.CalendarProvider;
+import org.tasks.dialogs.NativeSeekBarDialog;
import org.tasks.gtasks.RemoteListSelectionHandler;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingPreferenceActivity;
+import org.tasks.locale.Locale;
import org.tasks.preferences.ActivityPermissionRequestor;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Device;
@@ -33,9 +36,10 @@ import org.tasks.preferences.Preferences;
import org.tasks.sync.SyncAdapters;
public class DefaultsPreferences extends InjectingPreferenceActivity
- implements RemoteListSelectionHandler {
+ implements RemoteListSelectionHandler, NativeSeekBarDialog.SeekBarCallback {
private static final String FRAG_TAG_REMOTE_LIST_SELECTION = "frag_tag_remote_list_selection";
+ private static final String FRAG_TAG_RADIUS_PICKER = "frag_tag_radius_picker";
private static final int REQUEST_CALENDAR_SELECTION = 10412;
@@ -45,8 +49,10 @@ public class DefaultsPreferences extends InjectingPreferenceActivity
@Inject Tracker tracker;
@Inject DefaultFilterProvider defaultFilterProvider;
@Inject SyncAdapters syncAdapters;
+ @Inject Locale locale;
private Preference defaultCalendarPref;
+ private Preference defaultRadiusPref;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -76,6 +82,19 @@ public class DefaultsPreferences extends InjectingPreferenceActivity
return false;
});
updateRemoteListSummary();
+ defaultRadiusPref = findPreference(R.string.p_default_location_radius);
+ defaultRadiusPref.setOnPreferenceClickListener(
+ preference -> {
+ newSeekBarDialog(
+ R.layout.dialog_radius_seekbar,
+ 75,
+ 1000,
+ preferences.getInt(R.string.p_default_location_radius, 250),
+ 0)
+ .show(getFragmentManager(), FRAG_TAG_RADIUS_PICKER);
+ return false;
+ });
+ updateRadius();
requires(syncAdapters.isSyncEnabled(), R.string.p_default_remote_list);
requires(Device.SupportsLocationServices(this), R.string.p_default_location_reminder_key);
@@ -138,8 +157,20 @@ public class DefaultsPreferences extends InjectingPreferenceActivity
defaultFilter == null ? getString(R.string.dont_sync) : defaultFilter.listingTitle);
}
+ private void updateRadius() {
+ String radius =
+ locale.formatNumber(preferences.getInt(R.string.p_default_location_radius, 250));
+ defaultRadiusPref.setSummary(getString(R.string.location_radius_meters, radius));
+ }
+
@Override
public void inject(ActivityComponent component) {
component.inject(this);
}
+
+ @Override
+ public void valueSelected(int radius, int requestCode) {
+ preferences.setInt(R.string.p_default_location_radius, radius);
+ updateRadius();
+ }
}
diff --git a/app/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java b/app/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java
index 77390d8f8..01829814e 100644
--- a/app/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java
+++ b/app/src/main/java/com/todoroo/astrid/reminders/ReminderPreferences.java
@@ -27,12 +27,8 @@ import org.tasks.activities.FilterSelectionActivity;
import org.tasks.activities.TimePickerActivity;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingPreferenceActivity;
-import org.tasks.preferences.ActivityPermissionRequestor;
import org.tasks.preferences.DefaultFilterProvider;
-import org.tasks.preferences.Device;
-import org.tasks.preferences.PermissionChecker;
import org.tasks.receivers.Badger;
-import org.tasks.scheduling.GeofenceSchedulingIntentService;
import org.tasks.scheduling.NotificationSchedulerIntentService;
import org.tasks.time.DateTime;
import org.tasks.ui.TimePreference;
@@ -44,9 +40,6 @@ public class ReminderPreferences extends InjectingPreferenceActivity {
private static final int REQUEST_DEFAULT_REMIND = 10003;
private static final int REQUEST_BADGE_LIST = 10004;
- @Inject Device device;
- @Inject ActivityPermissionRequestor permissionRequestor;
- @Inject PermissionChecker permissionChecker;
@Inject Badger badger;
@Inject DefaultFilterProvider defaultFilterProvider;
@Inject LocalBroadcastManager localBroadcastManager;
@@ -63,7 +56,6 @@ public class ReminderPreferences extends InjectingPreferenceActivity {
R.string.p_rmd_quietStart,
R.string.p_rmd_quietEnd,
R.string.p_rmd_persistent);
- resetGeofencesOnChange(R.string.p_geofence_radius, R.string.p_geofence_responsiveness);
initializeRingtonePreference();
initializeTimePreference(getDefaultRemindTimePreference(), REQUEST_DEFAULT_REMIND);
@@ -109,7 +101,6 @@ public class ReminderPreferences extends InjectingPreferenceActivity {
return true;
});
- requires(device.supportsLocationServices(), R.string.geolocation_reminders);
requires(atLeastOreo(), R.string.notification_channel_settings);
requires(atLeastMarshmallow(), R.string.battery_optimization_settings);
requires(
@@ -143,17 +134,6 @@ public class ReminderPreferences extends InjectingPreferenceActivity {
}
}
- private void resetGeofencesOnChange(int... resIds) {
- for (int resId : resIds) {
- findPreference(getString(resId))
- .setOnPreferenceChangeListener(
- (preference, newValue) -> {
- GeofenceSchedulingIntentService.enqueueWork(this);
- return true;
- });
- }
- }
-
private void initializeTimePreference(final TimePreference preference, final int requestCode) {
preference.setOnPreferenceClickListener(
ignored -> {
diff --git a/app/src/main/java/org/tasks/dialogs/LocationDialog.java b/app/src/main/java/org/tasks/dialogs/LocationDialog.java
index c1381c3d9..39cd8f8b7 100644
--- a/app/src/main/java/org/tasks/dialogs/LocationDialog.java
+++ b/app/src/main/java/org/tasks/dialogs/LocationDialog.java
@@ -1,6 +1,8 @@
package org.tasks.dialogs;
-import android.app.Activity;
+import static android.app.Activity.RESULT_OK;
+import static org.tasks.dialogs.SeekBarDialog.newSeekBarDialog;
+
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -24,14 +26,19 @@ import org.tasks.data.Location;
import org.tasks.injection.DialogFragmentComponent;
import org.tasks.injection.ForActivity;
import org.tasks.injection.InjectingDialogFragment;
+import org.tasks.locale.Locale;
public class LocationDialog extends InjectingDialogFragment {
public static final String EXTRA_LOCATION = "extra_location";
public static final String EXTRA_ORIGINAL = "extra_original";
+ private static final String FRAG_TAG_SEEKBAR = "frag_tag_seekbar";
+ private static final int REQUEST_RADIUS = 10101;
+
@Inject DialogBuilder dialogBuilder;
@Inject @ForActivity Context context;
+ @Inject Locale locale;
@BindView(R.id.location_arrival)
Switch arrivalView;
@@ -45,6 +52,9 @@ public class LocationDialog extends InjectingDialogFragment {
@BindView(R.id.location_url)
TextView urlView;
+ @BindView(R.id.location_radius_value)
+ TextView radiusValue;
+
public static LocationDialog newLocationDialog(Location location) {
LocationDialog dialog = new LocationDialog();
Bundle args = new Bundle();
@@ -66,6 +76,7 @@ public class LocationDialog extends InjectingDialogFragment {
ButterKnife.bind(this, view);
arrivalView.setChecked(location.isArrival());
departureView.setChecked(location.isDeparture());
+ updateRadius(location.getRadius());
String phone = location.getPhone();
if (!Strings.isNullOrEmpty(phone)) {
callView.setVisibility(View.VISIBLE);
@@ -96,6 +107,7 @@ public class LocationDialog extends InjectingDialogFragment {
Location result = getOriginal();
result.setArrival(arrivalView.isChecked());
result.setDeparture(departureView.isChecked());
+ result.setRadius((int) radiusValue.getTag());
return result;
}
@@ -115,7 +127,7 @@ public class LocationDialog extends InjectingDialogFragment {
Intent data = new Intent();
data.putExtra(EXTRA_ORIGINAL, (Parcelable) getOriginal());
data.putExtra(EXTRA_LOCATION, (Parcelable) result);
- getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, data);
+ getTargetFragment().onActivityResult(getTargetRequestCode(), RESULT_OK, data);
dismiss();
}
@@ -126,6 +138,17 @@ public class LocationDialog extends InjectingDialogFragment {
outState.putParcelable(EXTRA_LOCATION, toLocation());
}
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == REQUEST_RADIUS) {
+ if (resultCode == RESULT_OK) {
+ updateRadius(data.getIntExtra(SeekBarDialog.EXTRA_VALUE, 250));
+ }
+ } else {
+ super.onActivityResult(requestCode, resultCode, data);
+ }
+ }
+
@OnClick(R.id.location_url)
void openUrl() {
Intent intent = new Intent(Intent.ACTION_VIEW);
@@ -140,6 +163,19 @@ public class LocationDialog extends InjectingDialogFragment {
startActivity(intent);
}
+ @OnClick(R.id.location_radius)
+ void selectRadius() {
+ SeekBarDialog seekBarDialog =
+ newSeekBarDialog(R.layout.dialog_radius_seekbar, 75, 1000, toLocation().getRadius());
+ seekBarDialog.setTargetFragment(this, REQUEST_RADIUS);
+ seekBarDialog.show(getFragmentManager(), FRAG_TAG_SEEKBAR);
+ }
+
+ private void updateRadius(int radius) {
+ radiusValue.setText(getString(R.string.location_radius_meters, locale.formatNumber(radius)));
+ radiusValue.setTag(radius);
+ }
+
@Override
protected void inject(DialogFragmentComponent component) {
component.inject(this);
diff --git a/app/src/main/java/org/tasks/dialogs/NativeSeekBarDialog.java b/app/src/main/java/org/tasks/dialogs/NativeSeekBarDialog.java
new file mode 100644
index 000000000..9c8c31fb4
--- /dev/null
+++ b/app/src/main/java/org/tasks/dialogs/NativeSeekBarDialog.java
@@ -0,0 +1,109 @@
+package org.tasks.dialogs;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+import androidx.annotation.NonNull;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import com.rey.material.widget.Slider;
+import javax.inject.Inject;
+import org.tasks.R;
+import org.tasks.injection.InjectingNativeDialogFragment;
+import org.tasks.injection.NativeDialogFragmentComponent;
+import org.tasks.locale.Locale;
+import org.tasks.themes.Theme;
+
+public class NativeSeekBarDialog extends InjectingNativeDialogFragment {
+
+ private static final String EXTRA_LAYOUT = "extra_layout";
+ private static final String EXTRA_INITIAL_VALUE = "extra_initial_value";
+ private static final String EXTRA_MIN = "extra_min";
+ private static final String EXTRA_MAX = "extra_max";
+ private static final String EXTRA_REQUEST_CODE = "extra_request_code";
+
+ @BindView(R.id.slider)
+ Slider slider;
+
+ @BindView(R.id.min)
+ TextView min;
+
+ @BindView(R.id.max)
+ TextView max;
+
+ @Inject DialogBuilder dialogBuilder;
+ @Inject Theme theme;
+ @Inject Locale locale;
+ private int requestCode;
+ private SeekBarCallback callback;
+
+ public static NativeSeekBarDialog newSeekBarDialog(
+ int layout, int min, int max, int initial, int requestCode) {
+ NativeSeekBarDialog dialog = new NativeSeekBarDialog();
+ Bundle args = new Bundle();
+ args.putInt(EXTRA_LAYOUT, layout);
+ args.putInt(EXTRA_MIN, min);
+ args.putInt(EXTRA_MAX, max);
+ args.putInt(EXTRA_INITIAL_VALUE, initial);
+ args.putInt(EXTRA_REQUEST_CODE, requestCode);
+ dialog.setArguments(args);
+ return dialog;
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ Bundle arguments = getArguments();
+ requestCode = arguments.getInt(EXTRA_REQUEST_CODE);
+ int initial =
+ savedInstanceState == null
+ ? arguments.getInt(EXTRA_INITIAL_VALUE)
+ : savedInstanceState.getInt(EXTRA_INITIAL_VALUE);
+ int layout = arguments.getInt(EXTRA_LAYOUT);
+
+ LayoutInflater layoutInflater = theme.getLayoutInflater(getActivity());
+ View view = layoutInflater.inflate(layout, null);
+ ButterKnife.bind(this, view);
+
+ slider.setValueDescriptionProvider(value -> locale.formatNumber(value));
+ slider.setValueRange(arguments.getInt(EXTRA_MIN), arguments.getInt(EXTRA_MAX), false);
+ slider.setValue(initial, true);
+ min.setText(locale.formatNumber(slider.getMinValue()));
+ max.setText(locale.formatNumber(slider.getMaxValue()));
+ return dialogBuilder
+ .newDialog()
+ .setView(view)
+ .setPositiveButton(
+ android.R.string.ok,
+ (dialogInterface, i) -> callback.valueSelected(slider.getValue(), requestCode))
+ .setNegativeButton(android.R.string.cancel, null)
+ .create();
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+
+ callback = (SeekBarCallback) activity;
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+
+ outState.putInt(EXTRA_INITIAL_VALUE, slider.getValue());
+ }
+
+ @Override
+ protected void inject(NativeDialogFragmentComponent component) {
+ component.inject(this);
+ }
+
+ public interface SeekBarCallback {
+
+ void valueSelected(int value, int requestCode);
+ }
+}
diff --git a/app/src/main/java/org/tasks/dialogs/SeekBarDialog.java b/app/src/main/java/org/tasks/dialogs/SeekBarDialog.java
index 02bb38976..a86f39fad 100644
--- a/app/src/main/java/org/tasks/dialogs/SeekBarDialog.java
+++ b/app/src/main/java/org/tasks/dialogs/SeekBarDialog.java
@@ -2,28 +2,29 @@ package org.tasks.dialogs;
import android.app.Activity;
import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.Intent;
import android.os.Bundle;
-import androidx.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
+import androidx.annotation.NonNull;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.rey.material.widget.Slider;
import javax.inject.Inject;
import org.tasks.R;
-import org.tasks.injection.InjectingNativeDialogFragment;
-import org.tasks.injection.NativeDialogFragmentComponent;
+import org.tasks.injection.DialogFragmentComponent;
+import org.tasks.injection.InjectingDialogFragment;
import org.tasks.locale.Locale;
import org.tasks.themes.Theme;
-public class SeekBarDialog extends InjectingNativeDialogFragment {
+public class SeekBarDialog extends InjectingDialogFragment {
private static final String EXTRA_LAYOUT = "extra_layout";
- private static final String EXTRA_INITIAL_VALUE = "extra_initial_value";
+ public static final String EXTRA_VALUE = "extra_value";
private static final String EXTRA_MIN = "extra_min";
private static final String EXTRA_MAX = "extra_max";
- private static final String EXTRA_REQUEST_CODE = "extra_request_code";
@BindView(R.id.slider)
Slider slider;
@@ -37,20 +38,15 @@ public class SeekBarDialog extends InjectingNativeDialogFragment {
@Inject DialogBuilder dialogBuilder;
@Inject Theme theme;
@Inject Locale locale;
- private int initial;
- private int requestCode;
- private SeekBarCallback callback;
- public static SeekBarDialog newSeekBarDialog(
- int layout, int min, int max, int initial, int requestCode) {
+ static SeekBarDialog newSeekBarDialog(int layout, int min, int max, int initial) {
SeekBarDialog dialog = new SeekBarDialog();
Bundle args = new Bundle();
args.putInt(EXTRA_LAYOUT, layout);
args.putInt(EXTRA_MIN, min);
args.putInt(EXTRA_MAX, max);
+ args.putInt(EXTRA_VALUE, initial);
dialog.setArguments(args);
- dialog.initial = initial;
- dialog.requestCode = requestCode;
return dialog;
}
@@ -58,53 +54,50 @@ public class SeekBarDialog extends InjectingNativeDialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Bundle arguments = getArguments();
- if (savedInstanceState != null) {
- initial = savedInstanceState.getInt(EXTRA_INITIAL_VALUE);
- requestCode = savedInstanceState.getInt(EXTRA_REQUEST_CODE);
- }
+ int initial =
+ savedInstanceState == null
+ ? arguments.getInt(EXTRA_VALUE)
+ : savedInstanceState.getInt(EXTRA_VALUE);
int layout = arguments.getInt(EXTRA_LAYOUT);
LayoutInflater layoutInflater = theme.getLayoutInflater(getActivity());
View view = layoutInflater.inflate(layout, null);
ButterKnife.bind(this, view);
- slider.setValue(initial, true);
slider.setValueDescriptionProvider(value -> locale.formatNumber(value));
slider.setValueRange(arguments.getInt(EXTRA_MIN), arguments.getInt(EXTRA_MAX), false);
+ slider.setValue(initial, true);
min.setText(locale.formatNumber(slider.getMinValue()));
max.setText(locale.formatNumber(slider.getMaxValue()));
return dialogBuilder
.newDialog()
.setView(view)
- .setPositiveButton(
- android.R.string.ok,
- (dialogInterface, i) -> callback.valueSelected(slider.getValue(), requestCode))
+ .setOnCancelListener(this::sendResult)
+ .setPositiveButton(android.R.string.ok, this::sendResult)
.setNegativeButton(android.R.string.cancel, null)
.show();
}
@Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
+ public void onCancel(DialogInterface dialog) {
+ sendResult(dialog);
+ }
- callback = (SeekBarCallback) activity;
+ private void sendResult(DialogInterface d, int... i) {
+ Intent data = new Intent();
+ data.putExtra(EXTRA_VALUE, slider.getValue());
+ getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, data);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
- outState.putInt(EXTRA_INITIAL_VALUE, slider.getValue());
- outState.putInt(EXTRA_REQUEST_CODE, requestCode);
+ outState.putInt(EXTRA_VALUE, slider.getValue());
}
@Override
- protected void inject(NativeDialogFragmentComponent component) {
+ protected void inject(DialogFragmentComponent component) {
component.inject(this);
}
-
- public interface SeekBarCallback {
-
- void valueSelected(int value, int requestCode);
- }
}
diff --git a/app/src/main/java/org/tasks/injection/DialogFragmentComponent.java b/app/src/main/java/org/tasks/injection/DialogFragmentComponent.java
index dd155d5a3..31601986b 100644
--- a/app/src/main/java/org/tasks/injection/DialogFragmentComponent.java
+++ b/app/src/main/java/org/tasks/injection/DialogFragmentComponent.java
@@ -7,6 +7,7 @@ import org.tasks.dialogs.AddAttachmentDialog;
import org.tasks.dialogs.ColorPickerDialog;
import org.tasks.dialogs.LocationDialog;
import org.tasks.dialogs.RecordAudioDialog;
+import org.tasks.dialogs.SeekBarDialog;
import org.tasks.dialogs.SortDialog;
import org.tasks.gtasks.CreateListDialog;
import org.tasks.gtasks.DeleteListDialog;
@@ -46,4 +47,6 @@ public interface DialogFragmentComponent {
void inject(BasicRecurrenceDialog basicRecurrenceDialog);
void inject(LocationDialog locationDialog);
+
+ void inject(SeekBarDialog seekBarDialog);
}
diff --git a/app/src/main/java/org/tasks/injection/NativeDialogFragmentComponent.java b/app/src/main/java/org/tasks/injection/NativeDialogFragmentComponent.java
index ce553d414..33e0c534f 100644
--- a/app/src/main/java/org/tasks/injection/NativeDialogFragmentComponent.java
+++ b/app/src/main/java/org/tasks/injection/NativeDialogFragmentComponent.java
@@ -5,8 +5,8 @@ import org.tasks.activities.RemoteListNativePicker;
import org.tasks.dialogs.ExportTasksDialog;
import org.tasks.dialogs.ImportTasksDialog;
import org.tasks.dialogs.NativeDatePickerDialog;
+import org.tasks.dialogs.NativeSeekBarDialog;
import org.tasks.dialogs.NativeTimePickerDialog;
-import org.tasks.dialogs.SeekBarDialog;
import org.tasks.locale.LocalePickerDialog;
@Subcomponent(modules = NativeDialogFragmentModule.class)
@@ -20,7 +20,7 @@ public interface NativeDialogFragmentComponent {
void inject(NativeTimePickerDialog nativeTimePickerDialog);
- void inject(SeekBarDialog seekBarDialog);
+ void inject(NativeSeekBarDialog nativeSeekBarDialog);
void inject(ExportTasksDialog exportTasksDialog);
diff --git a/app/src/main/java/org/tasks/preferences/AppearancePreferences.java b/app/src/main/java/org/tasks/preferences/AppearancePreferences.java
index 2fce5f915..9a93e14e8 100644
--- a/app/src/main/java/org/tasks/preferences/AppearancePreferences.java
+++ b/app/src/main/java/org/tasks/preferences/AppearancePreferences.java
@@ -1,6 +1,6 @@
package org.tasks.preferences;
-import static org.tasks.dialogs.SeekBarDialog.newSeekBarDialog;
+import static org.tasks.dialogs.NativeSeekBarDialog.newSeekBarDialog;
import android.content.Intent;
import android.os.Bundle;
@@ -13,13 +13,13 @@ import org.tasks.R;
import org.tasks.activities.FilterSelectionActivity;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
-import org.tasks.dialogs.SeekBarDialog;
+import org.tasks.dialogs.NativeSeekBarDialog;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.locale.Locale;
public class AppearancePreferences extends InjectingPreferenceActivity
- implements SeekBarDialog.SeekBarCallback {
+ implements NativeSeekBarDialog.SeekBarCallback {
public static final String EXTRA_RESTART = "extra_restart";
private static final String EXTRA_FILTERS_CHANGED = "extra_filters_changed";
diff --git a/app/src/main/java/org/tasks/widget/WidgetConfigActivity.java b/app/src/main/java/org/tasks/widget/WidgetConfigActivity.java
index 47a03acfd..4cf617406 100644
--- a/app/src/main/java/org/tasks/widget/WidgetConfigActivity.java
+++ b/app/src/main/java/org/tasks/widget/WidgetConfigActivity.java
@@ -1,6 +1,6 @@
package org.tasks.widget;
-import static org.tasks.dialogs.SeekBarDialog.newSeekBarDialog;
+import static org.tasks.dialogs.NativeSeekBarDialog.newSeekBarDialog;
import android.appwidget.AppWidgetManager;
import android.content.Intent;
@@ -15,7 +15,7 @@ import org.tasks.activities.ColorPickerActivity;
import org.tasks.activities.FilterSelectionActivity;
import org.tasks.analytics.Tracker;
import org.tasks.dialogs.DialogBuilder;
-import org.tasks.dialogs.SeekBarDialog;
+import org.tasks.dialogs.NativeSeekBarDialog;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.locale.Locale;
@@ -26,7 +26,7 @@ import org.tasks.themes.ThemeColor;
import org.tasks.themes.WidgetTheme;
public class WidgetConfigActivity extends InjectingPreferenceActivity
- implements SeekBarDialog.SeekBarCallback {
+ implements NativeSeekBarDialog.SeekBarCallback {
private static final String FRAG_TAG_OPACITY_SEEKBAR = "frag_tag_opacity_seekbar";
private static final String FRAG_TAG_FONT_SIZE_SEEKBAR = "frag_tag_font_size_seekbar";
diff --git a/app/src/main/res/layout/dialog_radius_seekbar.xml b/app/src/main/res/layout/dialog_radius_seekbar.xml
new file mode 100644
index 000000000..5897c18bc
--- /dev/null
+++ b/app/src/main/res/layout/dialog_radius_seekbar.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/location_details.xml b/app/src/main/res/layout/location_details.xml
index dfb34433b..5674cd90f 100644
--- a/app/src/main/res/layout/location_details.xml
+++ b/app/src/main/res/layout/location_details.xml
@@ -1,5 +1,6 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml
index ac3ac24eb..6d76fa3bb 100644
--- a/app/src/main/res/values-bg-rBG/strings.xml
+++ b/app/src/main/res/values-bg-rBG/strings.xml
@@ -330,9 +330,6 @@
Избери дата и време
След крайния срок
При краен срок
- Радиус (метри)
- Време за отговор (по-голяма стойност запазва батерията)
- Напомняния за геолокация
Тагове
Филтри
За час
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index bc360e980..0b6cdd164 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -108,7 +108,6 @@
Contribuir traduccions
Contacta amb el desenvolupador
Sense recordatoris durant les hores de silenci
- Radi (metres)
Filtres
Configuració dels filtres
Mostra ocultes
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 108c310b2..4fefea69c 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -221,9 +221,6 @@
Náhodně
Vybrat datum
Vybrat čas
- Okruh (v metrech)
- Doba odezvy (vyšší hodnota šetří baterii)
- Geolokační upomínky
Tagy
Filtry
Ráno
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 744ef7f0e..4e37ca047 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -322,9 +322,6 @@
Tag und Uhrzeit auswählen
Wenn überfällig
Wenn fällig
- Radius (Meter)
- Antwortzeit (Größere Werte sparen Akkuleistung)
- Geo-/Ortsbasierte Erinnerungen
Schlagworte
Filter
Für eine Stunde
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 8c4cc57b3..aee5ffd21 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -326,9 +326,6 @@
Elegir fecha y hora
Si está atrasada
Al vencimiento
- Radio (metros)
- Tiempo de respuesta (valores altos mejoran autonomía de batería)
- Recordatorios de Geolocalización
Etiquetas
Filtros
Por una hora
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index fc2a20214..c4375349d 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -219,9 +219,6 @@
انتخاب یک تاریخ و زمان
پس از موعود
روز موعود
- شعاع (متر)
- زمان پاسخگویی (مقدار بالاتر مصرف کمتر باتری)
- یادآوریهای وابسته به مکان
برچسب ها
فیلترها
برای یک ساعت
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 6ca01938e..41c993576 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -323,9 +323,6 @@
Valitse päivä ja aika
Kunnes yliajalla
Milloin määräaika
- Säde (metriä)
- Vasteaika (korkeampi arvo kuluttaa enemmän akkua)
- Paikannuksen muistutukset
Tunnisteet
Suodattimet
Tunnin verran
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 34c716d31..4ea4d385d 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -314,9 +314,6 @@
Choisir date et heure
En cas de retard
A l\'échéance
- Rayon (mètres)
- Temps de réponse (les valeurs élevées améliorent l\'autonomie)
- Rappels géolocalisés
Filtres
Pour une heure
Matin
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index 1b83418c4..ac99b23d6 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -245,9 +245,6 @@
Elegir fecha y hora
Si está atrasada
Al vencimiento
- Radio (metros)
- Tiempo de respuesta (valores altos mejoran autonomía de batería)
- Recordatorios de Geolocalización
Etiquetas
Filtros
Por una hora
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 33274229d..e6fe0ec87 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -330,9 +330,6 @@
Válasszon dátumot és időpontot
Határidő lejárta után
Határidő elérésekor
- Távolság (méterben)
- Válaszidő (magasabb érték kíméli az akkumulátort)
- Helyhez kötött Emlékeztetők
Címkék
Szűrők
Egy órára
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 85c137352..672557276 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -327,9 +327,6 @@
Scegli data e ora
Quando scaduta
Alla scadenza
- Raggio (metri)
- Tempo di risposta (valore elevato preserva batteria)
- Promemoria Geolocalizzazione
Etichette
Filtri
Per un\'ora
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index e76e601e8..19047a556 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -328,9 +328,6 @@
בחר תאריך ושעה
לאחר מועד היעד
במועד היעד
- רדיוס (במטרים)
- זמן תגובה (ערך גבוה חוסך בסוללה)
- התראות מיקום
תגיות
פילטרים
בעוד שעה
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 483573fb3..45d61e0ca 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -320,9 +320,6 @@
日付と時間を選択
期限を過ぎたとき
期限に
- 半径 (メートル)
- 応答時間 (大きい値の方がバッテリーを節約します)
- 位置情報リマインダー
タグ
フィルター
1時間
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index b77f42778..0e51ca2b7 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -330,9 +330,6 @@
날짜와 시간 선택
일정 마감일이 지났을 때
일정 마감일에
- 반경 (미터 단위)
- 반응 속도 (높은 수치일수록 배터리 절약)
- 위치정보 알림
태그
필터
한 시간동안
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index e64692515..6ec9843c5 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -327,9 +327,6 @@
Pasirinkti datą ir laiką
Terminui pasibaigus
Atėjus terminui
- Spindulys (metrais)
- Reakcijos laikas (didesnis taupys bateriją)
- Geolokaciniai priminimai
Etiketė
Filtrai
Valandai
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 822ba560c..b22a9242b 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -139,9 +139,6 @@
Kildekode
Kontakt utvikler
Gi Tasks din vurdering
- Radius (meter)
- Responstid (høyere verdi bruker mindre batteri)
- Geolokasjonsvarsler
Tagger
Filtere
Filtreringsinnstillinger
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 28c6dc4b4..6b2c9438f 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -325,8 +325,6 @@
Kies een datum en tijd
Na de einddatum
Op de eindtijd
- Antwoord tijd (hogere waarde verbruikt meer batterij)
- Geolocatie Herinneringen
Labels
Voor een uur
Ochtend
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 9462d58b2..bf9761449 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -311,9 +311,6 @@
Wybierz datę i czas
Gdy zaległe
Gdy w terminie
- Zasięg (metrów)
- Czas reakcji (wyższa wartość oszczędza baterię)
- Przypomnienie geolokacyjne
Tagi
Filtry
Na godzinę
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index b7de8155e..9e77ec725 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -325,9 +325,6 @@
Escolha data e horário
Quando vencida
Quando vencer
- Raio (metros)
- Tempo de resposta (valores maiores conservam bateria)
- Lembretes com Geolocalização
Etiquetas
Filtros
Por uma hora
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index cd7306807..5efd310a9 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -320,9 +320,6 @@
Escolha a data e a hora
Se data limite ultrapassada
Na data limite
- Raio (metros)
- Tempo de resposta (valores maiores poupam bateria)
- Lembretes de geolocalização
Etiquetas
Filtros
Por uma hora
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 3ed514cb1..2c87f77cc 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -326,9 +326,6 @@
Дата и время
Когда просрочено
В срок
- Радиус (в метрах)
- Период отслеживания (чем выше, тем меньше расход батареи)
- Напоминания по местонахождению
Теги
Фильтры
На час
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 6bc5ed6e2..a3e2ad924 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -320,9 +320,6 @@
Vybrať dátum a čas
Keď po termíne
Keď v termíne
- Okruh (v metroch)
- Doba odozvy (vyššia hodnota šetrí batériu)
- Pripomienky polohy
Štítky
Filtre
Za hodinu
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 7eb6e3ad5..f95288558 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -244,9 +244,6 @@
Ställ in datum och tid
Efter förfallotid
Vid förfallotid
- Radie (meter)
- Svarstid (högre värde sparar batteri)
- Platsbaserade påminnelser
Etiketter
Filter
En timme
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 46ea26c68..ceb051b51 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -332,9 +332,6 @@
Bir tarih ve zaman seç
Geciktiğinde
Zamanı geldiğinde
- Yarıçap (metre)
- Yanıt süresi (yüksek değer pili korur)
- Coğrafi Konum Hatırlatmaları
Etiketler
Süzgeçler
Bir saatliğine
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index dc698c46c..041583e79 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -247,9 +247,6 @@
Обрати дату та час
Коли прострочено
Коли заплановано час
- Радіус (метри)
- Час відклику (вище значення зберігає заряд батареї)
- Геолокаційні нагадування
Теги
Фільтри
На годину
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index b7266d29d..cbd6eb7b9 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -327,9 +327,6 @@
选个日期和时间
过期时
到期时
- 半径(米)
- 响应时间(更高的节电值)
- 地理位置提醒
标签
过滤器
一个小时
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index d7059bdc2..9ab89834c 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -197,8 +197,6 @@
貢獻翻譯
為 Tasks 評分
贊助
- 半徑 (公尺)
- 地理位置提醒
標籤
過濾
明天早上
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 73bcb79ac..74da3f307 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -1,30 +1,6 @@
-
- - 75
- - 125
- - 250
- - 500
- - 1000
-
-
-
- - 00:15
- - 00:30
- - 01:00
- - 05:00
- - 10:00
-
-
-
- - 15
- - 30
- - 60
- - 300
- - 600
-
-
- @string/due_date
- @string/due_time
diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml
index 98d4c8370..2b7db78c0 100644
--- a/app/src/main/res/values/keys.xml
+++ b/app/src/main/res/values/keys.xml
@@ -140,6 +140,7 @@
p_def_reminders
p_def_location_reminders
+ p_def_location_radius
rmd_default_reminder_mode
@@ -182,8 +183,6 @@
TEA_ctrl_comments
TEA_ctrl_gcal
TEA_ctrl_gtask
- geolocation_radius
- geofence_responsiveness
show_hidden_tasks
show_completed_tasks
reverse_sort
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 92085ee17..385272ed7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -285,6 +285,7 @@ File %1$s contained %2$s.\n\n
Default reminders
Default location reminders
+ Default radius
Default ring/vibrate type
@@ -687,9 +688,8 @@ File %1$s contained %2$s.\n\n
Pick a date and time
When overdue
When due
- Radius (meters)
- Response time (higher value conserves battery)
- Geolocation Reminders
+ Radius
+ %s m
Tags
Filters
For an hour
diff --git a/app/src/main/res/xml/preferences_defaults.xml b/app/src/main/res/xml/preferences_defaults.xml
index ba8fd2fbf..701bbc583 100644
--- a/app/src/main/res/xml/preferences_defaults.xml
+++ b/app/src/main/res/xml/preferences_defaults.xml
@@ -38,6 +38,10 @@
android:entryValues="@array/EPR_default_location_reminder_values"
android:key="@string/p_default_location_reminder_key"
android:title="@string/EPr_default_location_reminder_title" />
+
-
-
-
-
-