From 726342b2922a4e1e927926707fdcefc992368f72 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 2 Mar 2017 14:02:56 -0600 Subject: [PATCH] Add preference for spacing between rows --- .../andlib/utility/AndroidUtilities.java | 6 ++++ .../preferences/AppearancePreferences.java | 28 ++++++++++++++++++- .../org/tasks/preferences/Preferences.java | 4 +++ .../java/org/tasks/tasklist/ViewHolder.java | 9 ++---- .../org/tasks/tasklist/ViewHolderFactory.java | 5 +++- src/main/res/layout/task_adapter_row_body.xml | 4 +-- src/main/res/values/keys.xml | 1 + src/main/res/xml/preferences_appearance.xml | 5 ++++ 8 files changed, 51 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java b/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java index da3c497f2..02095eb27 100644 --- a/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java +++ b/src/main/java/com/todoroo/andlib/utility/AndroidUtilities.java @@ -11,6 +11,7 @@ import android.content.ContentValues; import android.content.Context; import android.os.Build; import android.text.InputType; +import android.util.DisplayMetrics; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.TextView; @@ -203,6 +204,11 @@ public class AndroidUtilities { } } + public static int convertDpToPixels(DisplayMetrics displayMetrics, int dp) { + // developer.android.com/guide/practices/screens_support.html#dips-pels + return (int) (dp * displayMetrics.density + 0.5f); + } + public static boolean preLollipop() { return !atLeastLollipop(); } diff --git a/src/main/java/org/tasks/preferences/AppearancePreferences.java b/src/main/java/org/tasks/preferences/AppearancePreferences.java index c8b7449ba..cba210235 100644 --- a/src/main/java/org/tasks/preferences/AppearancePreferences.java +++ b/src/main/java/org/tasks/preferences/AppearancePreferences.java @@ -12,15 +12,21 @@ 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.injection.ActivityComponent; import org.tasks.injection.InjectingPreferenceActivity; +import org.tasks.locale.Locale; import javax.inject.Inject; -public class AppearancePreferences extends InjectingPreferenceActivity { +import static org.tasks.dialogs.SeekBarDialog.newSeekBarDialog; + +public class AppearancePreferences extends InjectingPreferenceActivity implements SeekBarDialog.SeekBarCallback { private static final int REQUEST_CUSTOMIZE = 1004; private static final int REQUEST_DEFAULT_LIST = 1005; + private static final int REQUEST_ROW_PADDING = 1006; + private static final String FRAG_TAG_ROW_PADDING_SEEKBAR = "frag_tag_row_padding_seekbar"; private static final String EXTRA_BUNDLE = "extra_bundle"; public static final String EXTRA_RESTART = "extra_restart"; @@ -30,6 +36,7 @@ public class AppearancePreferences extends InjectingPreferenceActivity { @Inject DefaultFilterProvider defaultFilterProvider; @Inject Tracker tracker; @Inject Broadcaster broadcaster; + @Inject Locale locale; private Bundle result; @@ -52,6 +59,12 @@ public class AppearancePreferences extends InjectingPreferenceActivity { startActivityForResult(new Intent(AppearancePreferences.this, BeastModePreferences.class), REQUEST_CUSTOMIZE); return true; }); + findPreference(R.string.p_rowPadding).setOnPreferenceClickListener(preference -> { + newSeekBarDialog(R.layout.dialog_font_size_seekbar, 0, 16, preferences.getRowPadding(), REQUEST_ROW_PADDING) + .show(getFragmentManager(), FRAG_TAG_ROW_PADDING_SEEKBAR); + return false; + }); + updateRowPadding(); Preference defaultList = findPreference(getString(R.string.p_default_list)); Filter filter = defaultFilterProvider.getDefaultFilter(); defaultList.setSummary(filter.listingTitle); @@ -108,4 +121,17 @@ public class AppearancePreferences extends InjectingPreferenceActivity { public void inject(ActivityComponent component) { component.inject(this); } + + @Override + public void valueSelected(int value, int requestCode) { + if (requestCode == REQUEST_ROW_PADDING) { + preferences.setInt(R.string.p_rowPadding, value); + result.putBoolean(EXTRA_RESTART, true); + updateRowPadding(); + } + } + + private void updateRowPadding() { + findPreference(R.string.p_rowPadding).setSummary(locale.formatNumber(preferences.getRowPadding())); + } } diff --git a/src/main/java/org/tasks/preferences/Preferences.java b/src/main/java/org/tasks/preferences/Preferences.java index 22fcc56e7..6814c5bca 100644 --- a/src/main/java/org/tasks/preferences/Preferences.java +++ b/src/main/java/org/tasks/preferences/Preferences.java @@ -149,6 +149,10 @@ public class Preferences { return getIntegerFromString(R.string.p_default_reminders_mode_key, 0); } + public int getRowPadding() { + return getInt(R.string.p_rowPadding, 16); + } + public int getIntegerFromString(int keyResource, int defaultValue) { Resources r = context.getResources(); String value = prefs.getString(r.getString(keyResource), null); diff --git a/src/main/java/org/tasks/tasklist/ViewHolder.java b/src/main/java/org/tasks/tasklist/ViewHolder.java index 1d60649f9..f250a743e 100644 --- a/src/main/java/org/tasks/tasklist/ViewHolder.java +++ b/src/main/java/org/tasks/tasklist/ViewHolder.java @@ -126,7 +126,8 @@ class ViewHolder extends MultiSelectorBindingHolder { CheckBoxes checkBoxes, TagFormatter tagFormatter, int textColorOverdue, int textColorSecondary, int textColorHint, TaskDao taskDao, DialogBuilder dialogBuilder, ViewHolderCallbacks callback, - DisplayMetrics metrics, int background, int selectedColor, MultiSelector multiSelector) { + DisplayMetrics metrics, int background, int selectedColor, MultiSelector multiSelector, + int rowPadding) { super(view, multiSelector); this.context = context; this.checkBoxes = checkBoxes; @@ -150,11 +151,7 @@ class ViewHolder extends MultiSelectorBindingHolder { nameView.setEllipsize(null); } - if (fontSize < 16) { - // developer.android.com/guide/practices/screens_support.html#dips-pels - int fontSizeInDP = (int) (fontSize * metrics.density + 0.5f); - rowBody.setPadding(0, fontSizeInDP, 0, fontSizeInDP); - } + rowBody.setPadding(0, rowPadding, 0, rowPadding); nameView.setTextSize(fontSize); int fontSizeDetails = Math.max(10, fontSize - 2); diff --git a/src/main/java/org/tasks/tasklist/ViewHolderFactory.java b/src/main/java/org/tasks/tasklist/ViewHolderFactory.java index 49cd621fc..903ee52c3 100644 --- a/src/main/java/org/tasks/tasklist/ViewHolderFactory.java +++ b/src/main/java/org/tasks/tasklist/ViewHolderFactory.java @@ -16,6 +16,7 @@ import org.tasks.ui.CheckBoxes; import javax.inject.Inject; import static android.support.v4.content.ContextCompat.getColor; +import static com.todoroo.andlib.utility.AndroidUtilities.convertDpToPixels; import static org.tasks.preferences.ResourceResolver.getData; import static org.tasks.preferences.ResourceResolver.getResourceId; @@ -34,6 +35,7 @@ public class ViewHolderFactory { private final DisplayMetrics metrics; private final int background; private final int selectedColor; + private final int rowPadding; @Inject public ViewHolderFactory(@ForActivity Context context, Preferences preferences, @@ -52,11 +54,12 @@ public class ViewHolderFactory { showFullTaskTitle = preferences.getBoolean(R.string.p_fullTaskTitle, false); fontSize = preferences.getIntegerFromString(R.string.p_fontSize, 16); metrics = context.getResources().getDisplayMetrics(); + rowPadding = convertDpToPixels(metrics, preferences.getInt(R.string.p_rowPadding, 16)); } ViewHolder newViewHolder(ViewGroup viewGroup, ViewHolder.ViewHolderCallbacks callbacks, MultiSelector multiSelector) { return new ViewHolder(context, viewGroup, showFullTaskTitle, fontSize, checkBoxes, tagFormatter, textColorOverdue, textColorSecondary, textColorHint, taskDao, - dialogBuilder, callbacks, metrics, background, selectedColor, multiSelector); + dialogBuilder, callbacks, metrics, background, selectedColor, multiSelector, rowPadding); } } diff --git a/src/main/res/layout/task_adapter_row_body.xml b/src/main/res/layout/task_adapter_row_body.xml index a22f4ee04..dfe4a8c7b 100644 --- a/src/main/res/layout/task_adapter_row_body.xml +++ b/src/main/res/layout/task_adapter_row_body.xml @@ -6,9 +6,7 @@ android:background="?attr/selectableItemBackground" android:clickable="true" android:focusable="true" - android:orientation="vertical" - android:paddingBottom="16dp" - android:paddingTop="16dp"> + android:orientation="vertical"> diff --git a/src/main/res/values/keys.xml b/src/main/res/values/keys.xml index 8c22c15a1..1ebdfbf20 100644 --- a/src/main/res/values/keys.xml +++ b/src/main/res/values/keys.xml @@ -89,6 +89,7 @@ font_size + row_padding voiceRemindersEnabled diff --git a/src/main/res/xml/preferences_appearance.xml b/src/main/res/xml/preferences_appearance.xml index 7d41e2652..e19be266a 100644 --- a/src/main/res/xml/preferences_appearance.xml +++ b/src/main/res/xml/preferences_appearance.xml @@ -15,6 +15,11 @@ android:key="@string/p_fontSize" android:title="@string/font_size" /> + +