Skip to content

Commit 0c18ea0

Browse files
committed
FoodDishPicker improvement: PFCV info added
1 parent 0ed395e commit 0c18ea0

File tree

6 files changed

+351
-33
lines changed

6 files changed

+351
-33
lines changed

portable/comp-android/diacomp/src/main/java/org/bosik/diacomp/android/frontend/views/fdpicker/FoodDishPicker.java

Lines changed: 55 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.bosik.diacomp.core.entities.business.dishbase.DishItem;
4242
import org.bosik.diacomp.core.entities.business.foodbase.FoodItem;
4343
import org.bosik.diacomp.core.entities.business.interfaces.Named;
44+
import org.bosik.diacomp.core.entities.business.interfaces.NamedRelative;
4445
import org.bosik.diacomp.core.utils.Utils;
4546
import org.bosik.merklesync.Versioned;
4647

@@ -49,53 +50,81 @@
4950
import java.util.Locale;
5051
import java.util.stream.Collectors;
5152

52-
class ItemAdapter extends ArrayAdapter<Versioned<? extends Named>>
53+
class ItemAdapter extends ArrayAdapter<Versioned<? extends NamedRelative>>
5354
{
54-
private final List<Versioned<? extends Named>> itemsAll;
55-
private final int viewResourceId;
56-
private List<String> tokens;
55+
private static final int ITEM_TYPE_FOOD = 0;
56+
private static final int ITEM_TYPE_DISH = 1;
5757

58-
public ItemAdapter(Context context, int viewResourceId, List<Versioned<? extends Named>> items)
58+
private final List<Versioned<? extends NamedRelative>> itemsAll;
59+
private List<String> tokens;
60+
61+
public ItemAdapter(Context context, int viewResourceId, List<Versioned<? extends NamedRelative>> items)
5962
{
6063
super(context, viewResourceId, items);
6164

6265
this.itemsAll = new ArrayList<>(items);
63-
this.viewResourceId = viewResourceId;
66+
}
67+
68+
@Override
69+
public int getViewTypeCount()
70+
{
71+
return 2;
72+
}
73+
74+
@Override
75+
public int getItemViewType(int position)
76+
{
77+
final NamedRelative data = getItem(position).getData();
78+
79+
if (data instanceof FoodItem)
80+
{
81+
return ITEM_TYPE_FOOD;
82+
}
83+
else if (data instanceof DishItem)
84+
{
85+
return ITEM_TYPE_DISH;
86+
}
87+
else
88+
{
89+
throw new IllegalArgumentException("Invalid item type: " + getItem(position).getClass().getName());
90+
}
6491
}
6592

6693
@Override
6794
public View getView(int position, View convertView, ViewGroup parent)
6895
{
6996
View v = convertView;
7097

98+
final Versioned<? extends NamedRelative> item = getItem(position);
99+
final int type = getItemViewType(position);
100+
71101
if (v == null)
72102
{
73103
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
74-
v = vi.inflate(viewResourceId, null);
104+
switch (type)
105+
{
106+
case ITEM_TYPE_FOOD:
107+
v = vi.inflate(R.layout.view_base_food_small, null);
108+
break;
109+
case ITEM_TYPE_DISH:
110+
v = vi.inflate(R.layout.view_base_dish_small, null);
111+
break;
112+
default:
113+
throw new UnsupportedOperationException("Unknown type: " + type);
114+
}
75115
}
76116

77-
final Versioned<? extends Named> item = getItem(position);
78-
79-
TextView itemCaption = v.findViewById(R.id.itemDescription);
117+
final TextView itemCaption = v.findViewById(R.id.baseItemName);
80118
itemCaption.setText(highlightOccurrences(
81119
item.getData().getName(),
82120
tokens,
83121
getContext().getResources().getColor(R.color.search_highlight, null)
84122
));
85123

86-
// FIXME: use separated resources (not button's)
87-
if (item.getData() instanceof FoodItem)
88-
{
89-
itemCaption.setCompoundDrawablesWithIntrinsicBounds(R.drawable.button_foodbase, 0, 0, 0);
90-
}
91-
else if (item.getData() instanceof DishItem)
92-
{
93-
itemCaption.setCompoundDrawablesWithIntrinsicBounds(R.drawable.button_dishbase, 0, 0, 0);
94-
}
95-
else
96-
{
97-
throw new IllegalArgumentException("Invalid item type: " + item.getClass().getName());
98-
}
124+
v.<TextView>findViewById(R.id.baseItemInfoP).setText(Utils.formatDoubleShort(item.getData().getRelProts()));
125+
v.<TextView>findViewById(R.id.baseItemInfoF).setText(Utils.formatDoubleShort(item.getData().getRelFats()));
126+
v.<TextView>findViewById(R.id.baseItemInfoC).setText(Utils.formatDoubleShort(item.getData().getRelCarbs()));
127+
v.<TextView>findViewById(R.id.baseItemInfoV).setText(Utils.formatInteger(item.getData().getRelValue()));
99128

100129
return v;
101130
}
@@ -144,7 +173,7 @@ protected FilterResults performFiltering(CharSequence constraint)
144173
{
145174
tokens = Utils.parseTokens(constraint.toString());
146175

147-
final List<Versioned<? extends Named>> suggestions = itemsAll.stream()
176+
final List<Versioned<? extends NamedRelative>> suggestions = itemsAll.stream()
148177
.filter(e -> Utils.matchesTokens(e.getData().getName(), tokens))
149178
.collect(Collectors.toList());
150179

@@ -167,7 +196,7 @@ protected void publishResults(CharSequence constraint, FilterResults results)
167196

168197
if (results != null && results.values != null)
169198
{
170-
@SuppressWarnings("unchecked") List<Versioned<? extends Named>> filteredList = (List<Versioned<? extends Named>>) results.values;
199+
@SuppressWarnings("unchecked") List<Versioned<? extends NamedRelative>> filteredList = (List<Versioned<? extends NamedRelative>>) results.values;
171200
addAll(filteredList);
172201
}
173202

@@ -277,7 +306,7 @@ public void setOnSubmitLister(OnSubmitListener l)
277306
onSubmit = l;
278307
}
279308

280-
public void setSuggestionsData(List<Versioned<? extends Named>> data)
309+
public void setSuggestionsData(List<Versioned<? extends NamedRelative>> data)
281310
{
282311
editName.setAdapter(new ItemAdapter(getContext(), R.layout.view_iconed_line, data));
283312
}

portable/comp-android/diacomp/src/main/java/org/bosik/diacomp/android/frontend/views/fdpicker/MealEditorView.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
import org.bosik.diacomp.core.entities.business.FoodMassed;
4141
import org.bosik.diacomp.core.entities.business.dishbase.DishItem;
4242
import org.bosik.diacomp.core.entities.business.foodbase.FoodItem;
43-
import org.bosik.diacomp.core.entities.business.interfaces.Named;
43+
import org.bosik.diacomp.core.entities.business.interfaces.NamedRelative;
4444
import org.bosik.diacomp.core.services.base.dish.DishBaseService;
4545
import org.bosik.diacomp.core.services.base.food.FoodBaseService;
4646
import org.bosik.diacomp.core.utils.Utils;
@@ -187,7 +187,7 @@ public boolean onSubmit(String name, double mass)
187187
}
188188
}
189189

190-
public void setSuggestionsData(List<Versioned<? extends Named>> data)
190+
public void setSuggestionsData(List<Versioned<? extends NamedRelative>> data)
191191
{
192192
fdPicker.setSuggestionsData(data);
193193
}

portable/comp-android/diacomp/src/main/java/org/bosik/diacomp/android/frontend/views/fdpicker/SuggestionsProvider.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@
2121
import android.content.Context;
2222
import org.bosik.diacomp.android.backend.features.dishbase.DishBaseLocalService;
2323
import org.bosik.diacomp.android.backend.features.foodbase.FoodBaseLocalService;
24-
import org.bosik.diacomp.core.entities.business.interfaces.Named;
25-
import org.bosik.diacomp.core.services.base.dish.DishBaseService;
26-
import org.bosik.diacomp.core.services.base.food.FoodBaseService;
2724
import org.bosik.diacomp.android.backend.features.search.UsageIndexDiary;
2825
import org.bosik.diacomp.android.backend.features.search.UsageIndexDishbase;
26+
import org.bosik.diacomp.core.entities.business.interfaces.NamedRelative;
27+
import org.bosik.diacomp.core.services.base.dish.DishBaseService;
28+
import org.bosik.diacomp.core.services.base.food.FoodBaseService;
2929
import org.bosik.merklesync.Versioned;
3030

3131
import java.util.ArrayList;
@@ -39,14 +39,14 @@ public enum Mode
3939
DISH_EDITOR
4040
}
4141

42-
public static List<Versioned<? extends Named>> getSuggestions(Context context, Mode mode)
42+
public static List<Versioned<? extends NamedRelative>> getSuggestions(Context context, Mode mode)
4343
{
4444
// prepare sources
4545
FoodBaseService foodBase = FoodBaseLocalService.getInstance(context);
4646
DishBaseService dishBase = DishBaseLocalService.getInstance(context);
4747

4848
// build lists
49-
List<Versioned<? extends Named>> data = new ArrayList<>();
49+
List<Versioned<? extends NamedRelative>> data = new ArrayList<>();
5050
data.addAll(foodBase.findAll(false));
5151
data.addAll(dishBase.findAll(false));
5252

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
4+
android:layout_width="match_parent"
5+
android:layout_height="wrap_content"
6+
android:layout_marginLeft="@dimen/padding_tiny"
7+
android:layout_marginTop="@dimen/padding_tiny"
8+
android:layout_marginRight="@dimen/padding_tiny"
9+
android:layout_marginBottom="@dimen/padding_tiny"
10+
android:gravity="center_vertical"
11+
android:minHeight="?android:attr/listPreferredItemHeight"
12+
android:orientation="horizontal">
13+
14+
<ImageView
15+
android:layout_width="wrap_content"
16+
android:layout_height="wrap_content"
17+
android:contentDescription="@string/editor_dish_title"
18+
android:paddingStart="12dp"
19+
android:paddingLeft="12dp"
20+
android:paddingEnd="12dp"
21+
android:paddingRight="12dp"
22+
android:src="@drawable/button_dishbase" />
23+
24+
<LinearLayout
25+
android:layout_width="match_parent"
26+
android:layout_height="wrap_content"
27+
android:layout_marginRight="12dp"
28+
android:orientation="vertical">
29+
30+
<TextView
31+
android:id="@+id/baseItemName"
32+
android:layout_width="match_parent"
33+
android:layout_height="wrap_content"
34+
android:text="Demo dish"
35+
android:textSize="15sp"
36+
tools:ignore="HardcodedText" />
37+
38+
<LinearLayout
39+
android:layout_width="match_parent"
40+
android:layout_height="wrap_content"
41+
android:baselineAligned="false"
42+
android:orientation="horizontal">
43+
44+
<LinearLayout
45+
android:layout_width="0dp"
46+
android:layout_height="match_parent"
47+
android:layout_weight="1"
48+
android:orientation="horizontal">
49+
50+
<TextView
51+
android:layout_width="wrap_content"
52+
android:layout_height="wrap_content"
53+
android:text="@string/base_subinfo_prots"
54+
android:textColor="@color/font_gray"
55+
android:textSize="12sp" />
56+
57+
<TextView
58+
android:id="@+id/baseItemInfoP"
59+
android:layout_width="wrap_content"
60+
android:layout_height="wrap_content"
61+
android:layout_marginLeft="@dimen/padding_tiny"
62+
android:text="99.9"
63+
android:textColor="@color/font_gray"
64+
android:textSize="12sp"
65+
tools:ignore="HardcodedText" />
66+
</LinearLayout>
67+
68+
<LinearLayout
69+
android:layout_width="0dp"
70+
android:layout_height="wrap_content"
71+
android:layout_weight="1"
72+
android:orientation="horizontal">
73+
74+
<TextView
75+
android:layout_width="wrap_content"
76+
android:layout_height="wrap_content"
77+
android:text="@string/base_subinfo_fats"
78+
android:textColor="@color/font_gray"
79+
android:textSize="12sp" />
80+
81+
<TextView
82+
android:id="@+id/baseItemInfoF"
83+
android:layout_width="wrap_content"
84+
android:layout_height="wrap_content"
85+
android:layout_marginLeft="@dimen/padding_tiny"
86+
android:text="99.9"
87+
android:textColor="@color/font_gray"
88+
android:textSize="12sp"
89+
tools:ignore="HardcodedText" />
90+
</LinearLayout>
91+
92+
<LinearLayout
93+
android:layout_width="0dp"
94+
android:layout_height="wrap_content"
95+
android:layout_weight="1"
96+
android:orientation="horizontal">
97+
98+
<TextView
99+
android:layout_width="wrap_content"
100+
android:layout_height="wrap_content"
101+
android:text="@string/base_subinfo_carbs"
102+
android:textColor="@color/font_gray"
103+
android:textSize="12sp" />
104+
105+
<TextView
106+
android:id="@+id/baseItemInfoC"
107+
android:layout_width="wrap_content"
108+
android:layout_height="wrap_content"
109+
android:layout_marginLeft="@dimen/padding_tiny"
110+
android:text="99.9"
111+
android:textColor="@color/font_gray"
112+
android:textSize="12sp"
113+
tools:ignore="HardcodedText" />
114+
</LinearLayout>
115+
116+
<LinearLayout
117+
android:layout_width="0dp"
118+
android:layout_height="wrap_content"
119+
android:layout_weight="3"
120+
android:orientation="horizontal">
121+
122+
<TextView
123+
android:id="@+id/baseItemInfoV"
124+
android:layout_width="wrap_content"
125+
android:layout_height="wrap_content"
126+
android:text="999.9"
127+
android:textColor="@color/font_gray"
128+
android:textSize="12sp"
129+
tools:ignore="HardcodedText" />
130+
131+
<TextView
132+
android:layout_width="wrap_content"
133+
android:layout_height="wrap_content"
134+
android:layout_marginLeft="@dimen/padding_tiny"
135+
android:text="@string/common_unit_value_kcal"
136+
android:textColor="@color/font_gray"
137+
android:textSize="12sp" />
138+
</LinearLayout>
139+
</LinearLayout>
140+
</LinearLayout>
141+
142+
</LinearLayout>

0 commit comments

Comments
 (0)