Fix locale number formatting issues

pull/437/head
Alex Baker 8 years ago
parent 7871fdda6c
commit 33b8218463

@ -31,6 +31,7 @@ import org.tasks.filters.FilterProvider;
import org.tasks.filters.NavigationDrawerAction;
import org.tasks.filters.NavigationDrawerSeparator;
import org.tasks.filters.NavigationDrawerSubheader;
import org.tasks.locale.Locale;
import org.tasks.preferences.BasicPreferences;
import org.tasks.preferences.HelpAndFeedbackActivity;
import org.tasks.themes.Theme;
@ -51,6 +52,7 @@ public class FilterAdapter extends ArrayAdapter<FilterListItem> {
private final FilterCounter filterCounter;
private final Activity activity;
private boolean navigationDrawer;
private final Locale locale;
private final FilterListUpdateReceiver filterListUpdateReceiver = new FilterListUpdateReceiver();
/** layout inflater */
@ -58,12 +60,13 @@ public class FilterAdapter extends ArrayAdapter<FilterListItem> {
private final ThemeCache themeCache;
public FilterAdapter(FilterProvider filterProvider, FilterCounter filterCounter, Activity activity,
boolean navigationDrawer, Theme theme, ThemeCache themeCache) {
boolean navigationDrawer, Theme theme, ThemeCache themeCache, Locale locale) {
super(activity, 0);
this.filterProvider = filterProvider;
this.filterCounter = filterCounter;
this.activity = activity;
this.navigationDrawer = navigationDrawer;
this.locale = locale;
this.inflater = theme.getLayoutInflater(activity);
this.themeCache = themeCache;
}
@ -294,7 +297,7 @@ public class FilterAdapter extends ArrayAdapter<FilterListItem> {
int countInt = 0;
if(filterCounter.containsKey(filter)) {
countInt = filterCounter.get(filter);
viewHolder.size.setText(Integer.toString(countInt));
viewHolder.size.setText(locale.formatNumber(countInt));
}
viewHolder.size.setVisibility(countInt > 0 ? View.VISIBLE : View.INVISIBLE);

@ -40,6 +40,7 @@ import org.tasks.dialogs.DialogBuilder;
import org.tasks.filters.FilterCriteriaProvider;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.ThemedInjectingAppCompatActivity;
import org.tasks.locale.Locale;
import org.tasks.ui.MenuColorizer;
import java.util.ArrayList;
@ -134,6 +135,7 @@ public class CustomFilterActivity extends ThemedInjectingAppCompatActivity imple
@Inject StoreObjectDao storeObjectDao;
@Inject DialogBuilder dialogBuilder;
@Inject FilterCriteriaProvider filterCriteriaProvider;
@Inject Locale locale;
@BindView(R.id.tag_name) EditText filterName;
@BindView(R.id.toolbar) Toolbar toolbar;
@ -157,7 +159,7 @@ public class CustomFilterActivity extends ThemedInjectingAppCompatActivity imple
List<CriterionInstance> startingCriteria = new ArrayList<>();
startingCriteria.add(getStartingUniverse());
adapter = new CustomFilterAdapter(this, dialogBuilder, startingCriteria);
adapter = new CustomFilterAdapter(this, dialogBuilder, startingCriteria, locale);
listView.setAdapter(adapter);
updateList();

@ -24,6 +24,7 @@ import com.todoroo.astrid.core.CustomFilterActivity.CriterionInstance;
import org.tasks.R;
import org.tasks.dialogs.AlertDialogBuilder;
import org.tasks.dialogs.DialogBuilder;
import org.tasks.locale.Locale;
import java.util.List;
@ -38,11 +39,14 @@ public class CustomFilterAdapter extends ArrayAdapter<CriterionInstance> {
private final CustomFilterActivity activity;
private DialogBuilder dialogBuilder;
private final LayoutInflater inflater;
private final Locale locale;
public CustomFilterAdapter(CustomFilterActivity activity, DialogBuilder dialogBuilder, List<CriterionInstance> objects) {
public CustomFilterAdapter(CustomFilterActivity activity, DialogBuilder dialogBuilder,
List<CriterionInstance> objects, Locale locale) {
super(activity, R.id.name, objects);
this.activity = activity;
this.dialogBuilder = dialogBuilder;
this.locale = locale;
inflater = activity.getLayoutInflater();
}
@ -189,7 +193,7 @@ public class CustomFilterAdapter extends ArrayAdapter<CriterionInstance> {
}
viewHolder.name.setText(title);
viewHolder.filterCount.setText(Integer.toString(item.end));
viewHolder.filterCount.setText(locale.formatNumber(item.end));
}

@ -12,6 +12,7 @@ import org.tasks.filters.FilterCounter;
import org.tasks.filters.FilterProvider;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingAppCompatActivity;
import org.tasks.locale.Locale;
import org.tasks.themes.Theme;
import org.tasks.themes.ThemeCache;
@ -30,6 +31,7 @@ public class FilterSelectionActivity extends InjectingAppCompatActivity {
@Inject DialogBuilder dialogBuilder;
@Inject Theme theme;
@Inject ThemeCache themeCache;
@Inject Locale locale;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -38,7 +40,7 @@ public class FilterSelectionActivity extends InjectingAppCompatActivity {
final boolean returnFilter = getIntent().getBooleanExtra(EXTRA_RETURN_FILTER, false);
final FilterAdapter filterAdapter = new FilterAdapter(filterProvider, filterCounter, this,
false, theme, themeCache);
false, theme, themeCache, locale);
filterAdapter.populateList();
dialogBuilder.newDialog()

@ -6,12 +6,14 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import com.rey.material.widget.Slider;
import org.tasks.R;
import org.tasks.injection.InjectingNativeDialogFragment;
import org.tasks.injection.NativeDialogFragmentComponent;
import org.tasks.locale.Locale;
import org.tasks.themes.Theme;
import javax.inject.Inject;
@ -23,12 +25,16 @@ public class SeekBarDialog 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";
public static SeekBarDialog newSeekBarDialog(int layout, int initial, int requestCode) {
public static SeekBarDialog newSeekBarDialog(int layout, int min, int max, int initial, int requestCode) {
SeekBarDialog dialog = new SeekBarDialog();
Bundle args = new Bundle();
args.putInt(EXTRA_LAYOUT, layout);
args.putInt(EXTRA_MIN, min);
args.putInt(EXTRA_MAX, max);
dialog.setArguments(args);
dialog.initial = initial;
dialog.requestCode = requestCode;
@ -40,9 +46,12 @@ public class SeekBarDialog extends InjectingNativeDialogFragment {
}
@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 initial;
private int requestCode;
@ -63,6 +72,10 @@ public class SeekBarDialog extends InjectingNativeDialogFragment {
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);
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))

@ -15,6 +15,8 @@ import com.google.common.base.Strings;
import org.tasks.R;
import java.text.NumberFormat;
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastJellybeanMR1;
public class Locale {
@ -138,6 +140,14 @@ public class Locale {
return locale.getDisplayName(locale);
}
public String formatNumber(int number) {
return NumberFormat.getNumberInstance(appLocale).format(number);
}
public String formatPercentage(int percentage) {
return NumberFormat.getPercentInstance(appLocale).format(percentage / 100.0);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;

@ -27,6 +27,7 @@ import org.tasks.filters.FilterProvider;
import org.tasks.filters.NavigationDrawerAction;
import org.tasks.injection.FragmentComponent;
import org.tasks.injection.InjectingFragment;
import org.tasks.locale.Locale;
import org.tasks.preferences.AppearancePreferences;
import org.tasks.themes.Theme;
import org.tasks.themes.ThemeCache;
@ -64,6 +65,7 @@ public class NavigationDrawerFragment extends InjectingFragment {
@Inject FilterProvider filterProvider;
@Inject Theme theme;
@Inject ThemeCache themeCache;
@Inject Locale locale;
@Override
public void onCreate(Bundle savedInstanceState) {
@ -133,7 +135,7 @@ public class NavigationDrawerFragment extends InjectingFragment {
private void setUpList() {
adapter = new FilterAdapter(filterProvider, filterCounter, getActivity(),
true, theme, themeCache);
true, theme, themeCache, locale);
mDrawerListView.setAdapter(adapter);
registerForContextMenu(mDrawerListView);
}

@ -18,14 +18,13 @@ import org.tasks.dialogs.DialogBuilder;
import org.tasks.dialogs.SeekBarDialog;
import org.tasks.injection.ActivityComponent;
import org.tasks.injection.InjectingPreferenceActivity;
import org.tasks.locale.Locale;
import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences;
import org.tasks.themes.ThemeCache;
import org.tasks.themes.ThemeColor;
import org.tasks.themes.WidgetTheme;
import java.text.NumberFormat;
import javax.inject.Inject;
import static org.tasks.dialogs.SeekBarDialog.newSeekBarDialog;
@ -47,6 +46,7 @@ public class WidgetConfigActivity extends InjectingPreferenceActivity implements
@Inject Preferences preferences;
@Inject DefaultFilterProvider defaultFilterProvider;
@Inject ThemeCache themeCache;
@Inject Locale locale;
private WidgetPreferences widgetPreferences;
private int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
@ -99,13 +99,13 @@ public class WidgetConfigActivity extends InjectingPreferenceActivity implements
});
getPref(R.string.p_widget_opacity).setOnPreferenceClickListener(preference -> {
newSeekBarDialog(R.layout.dialog_opacity_seekbar, widgetPreferences.getOpacity(), REQUEST_OPACITY)
newSeekBarDialog(R.layout.dialog_opacity_seekbar, 0, 100, widgetPreferences.getOpacity(), REQUEST_OPACITY)
.show(getFragmentManager(), FRAG_TAG_OPACITY_SEEKBAR);
return false;
});
getPref(R.string.p_widget_font_size).setOnPreferenceClickListener(preference -> {
newSeekBarDialog(R.layout.dialog_font_size_seekbar, widgetPreferences.getFontSize(), REQUEST_FONT_SIZE)
newSeekBarDialog(R.layout.dialog_font_size_seekbar, 10, 22, widgetPreferences.getFontSize(), REQUEST_FONT_SIZE)
.show(getFragmentManager(), FRAG_TAG_FONT_SIZE_SEEKBAR);
return false;
});
@ -127,12 +127,12 @@ public class WidgetConfigActivity extends InjectingPreferenceActivity implements
private void updateOpacity() {
int opacity = widgetPreferences.getOpacity();
getPref(R.string.p_widget_opacity).setSummary(NumberFormat.getPercentInstance().format(opacity / 100.0));
getPref(R.string.p_widget_opacity).setSummary(locale.formatPercentage(opacity));
}
private void updateFontSize() {
int fontSize = widgetPreferences.getFontSize();
getPref(R.string.p_widget_font_size).setSummary(NumberFormat.getIntegerInstance().format(fontSize));
getPref(R.string.p_widget_font_size).setSummary(locale.formatNumber(fontSize));
}
private void updateFilter() {

@ -15,12 +15,11 @@
android:paddingRight="@dimen/keyline_first"
android:paddingStart="@dimen/keyline_first"
app:sl_discreteMode="true"
app:sl_maxValue="22"
app:sl_minValue="10"
app:sl_stepValue="2"
app:sl_travelAnimDuration="100" />
<TextView
android:id="@+id/min"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
@ -30,10 +29,10 @@
android:paddingLeft="@dimen/keyline_first"
android:paddingRight="@dimen/keyline_first"
android:paddingStart="@dimen/keyline_first"
android:paddingTop="5dp"
android:text="10" />
android:paddingTop="5dp" />
<TextView
android:id="@+id/max"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
@ -43,7 +42,6 @@
android:paddingLeft="@dimen/keyline_first"
android:paddingRight="@dimen/keyline_first"
android:paddingStart="@dimen/keyline_first"
android:paddingTop="5dp"
android:text="22" />
android:paddingTop="5dp" />
</RelativeLayout>

@ -15,12 +15,11 @@
android:paddingRight="@dimen/keyline_first"
android:paddingStart="@dimen/keyline_first"
app:sl_discreteMode="true"
app:sl_maxValue="100"
app:sl_minValue="0"
app:sl_stepValue="5"
app:sl_travelAnimDuration="100" />
<TextView
android:id="@+id/min"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
@ -30,10 +29,10 @@
android:paddingLeft="@dimen/keyline_first"
android:paddingRight="@dimen/keyline_first"
android:paddingStart="@dimen/keyline_first"
android:paddingTop="5dp"
android:text="0" />
android:paddingTop="5dp" />
<TextView
android:id="@+id/max"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
@ -43,7 +42,6 @@
android:paddingLeft="@dimen/keyline_first"
android:paddingRight="@dimen/keyline_first"
android:paddingStart="@dimen/keyline_first"
android:paddingTop="5dp"
android:text="100" />
android:paddingTop="5dp" />
</RelativeLayout>

@ -1,12 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="vertical"
android:paddingTop="8dp">
<View style="@style/horizontal_divider"
<View
android:id="@+id/divider"
style="@style/horizontal_divider"
android:layout_gravity="top" />
<TextView
@ -14,6 +16,9 @@
android:paddingEnd="0dp"
android:paddingLeft="@dimen/keyline_first"
android:paddingStart="@dimen/keyline_first"
android:layout_below="@id/divider"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:gravity="start|center_vertical"
android:id="@+id/subheader_text"
android:textColor="?attr/asTextColor"
@ -21,8 +26,8 @@
android:textAlignment="viewStart"
android:fontFamily="@string/font_fontFamily_medium"
android:alpha="0.54"
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
tools:ignore="UnusedAttribute" />
</LinearLayout>
</RelativeLayout>
Loading…
Cancel
Save