Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added app/release/app-release.aab
Binary file not shown.
132 changes: 73 additions & 59 deletions app/src/main/java/com/cornellappdev/android/eatery/MenuFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,37 @@

import com.cornellappdev.android.eatery.model.MealMenuModel;
import com.cornellappdev.android.eatery.model.MealModel;
import com.cornellappdev.android.eatery.util.Divider;

import java.util.ArrayList;

import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class MenuFragment extends Fragment {
int position;
private MealMenuModel mMenu;
private LinearLayout mLinear;
private MenuItemsAdapter adapter;
private RecyclerView menuRecyclerView;
private RecyclerView.LayoutManager linearLayoutManager;


@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mMenu = ((MealModel) getArguments().getSerializable("cafeData")).getMenu();
View view = inflater.inflate(R.layout.fragment_menu, container, false);
mLinear = view.findViewById(R.id.linearFragment);
menuRecyclerView = view.findViewById(R.id.menu_recycler_view);
linearLayoutManager = new LinearLayoutManager(getContext());
adapter = new MenuItemsAdapter(mMenu, getContext());
menuRecyclerView.setAdapter(adapter);
menuRecyclerView.setLayoutManager(linearLayoutManager);
menuRecyclerView.addItemDecoration(new Divider(getContext()));

try {
position = getArguments().getInt("position");
Expand All @@ -48,65 +62,65 @@ public View onCreateView(
}

ArrayList<String> categories = (ArrayList<String>) mMenu.getCategories();
for (int i = 0; i < categories.size(); i++) {
// Add subheading for category of food
TextView categoryText = new TextView(getContext());
categoryText.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
categoryText.setText(categories.get(i));
categoryText.setTextSize(16);
categoryText.setTextColor(ContextCompat.getColor(getContext(), R.color.primary));
categoryText.setPadding(
(int) (16 * scale + 0.5f), (int) (12 * scale + 0.5f), 0,
(int) (12 * scale + 0.5f));
mLinear.addView(categoryText);

View blank = new View(getContext());
blank.setLayoutParams(
new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 1));
blank.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.inactive));
blank.setElevation(-1);
mLinear.addView(blank);

ArrayList<String> items = (ArrayList<String>) mMenu.getItems(categories.get(i));
for (int j = 0; j < items.size(); j++) {
TextView mealItemText = new TextView(getContext());
mealItemText.setText(items.get(j));
mealItemText.setTextSize(14);
mealItemText.setTextColor(ContextCompat.getColor(getContext(), R.color.primary));
mealItemText.setPadding(
(int) (16 * scale + 0.5f), (int) (8 * scale + 0.5f), 0,
(int) (8 * scale + 0.5f));
mLinear.addView(mealItemText);
if (j != items.size() - 1) {
View divider = new View(getContext());
divider.setBackgroundColor(
ContextCompat.getColor(getContext(), R.color.inactive));
LinearLayout.LayoutParams dividerParams =
new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
1);
dividerParams.setMargins((int) (15.8 * scale + 0.5f), 0, 0, 0);
divider.setElevation(-1);
divider.setLayoutParams(dividerParams);
mLinear.addView(divider);
}
}

// Add horizontal line that separates each category
if (i < categories.size() - 1) {
View divider = new View(getContext());
divider.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.inactive));
divider.setLayoutParams(
new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 1));
divider.setElevation(-1);
mLinear.addView(divider);
}

View grey = new View(getContext());
grey.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.wash));
grey.setLayoutParams(
new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 16));
mLinear.addView(grey);
}
// for (int i = 0; i < categories.size(); i++) {
// // Add subheading for category of food
// TextView categoryText = new TextView(getContext());
// categoryText.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
// categoryText.setText(categories.get(i));
// categoryText.setTextSize(16);
// categoryText.setTextColor(ContextCompat.getColor(getContext(), R.color.primary));
// categoryText.setPadding(
// (int) (16 * scale + 0.5f), (int) (12 * scale + 0.5f), 0,
// (int) (12 * scale + 0.5f));
// mLinear.addView(categoryText);
//
// View blank = new View(getContext());
// blank.setLayoutParams(
// new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 1));
// blank.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.inactive));
// blank.setElevation(-1);
// mLinear.addView(blank);
//
// ArrayList<String> items = (ArrayList<String>) mMenu.getItems(categories.get(i));
// for (int j = 0; j < items.size(); j++) {
// TextView mealItemText = new TextView(getContext());
// mealItemText.setText(items.get(j));
// mealItemText.setTextSize(14);
// mealItemText.setTextColor(ContextCompat.getColor(getContext(), R.color.primary));
// mealItemText.setPadding(
// (int) (16 * scale + 0.5f), (int) (8 * scale + 0.5f), 0,
// (int) (8 * scale + 0.5f));
// mLinear.addView(mealItemText);
// if (j != items.size() - 1) {
// View divider = new View(getContext());
// divider.setBackgroundColor(
// ContextCompat.getColor(getContext(), R.color.inactive));
// LinearLayout.LayoutParams dividerParams =
// new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
// 1);
// dividerParams.setMargins((int) (15.8 * scale + 0.5f), 0, 0, 0);
// divider.setElevation(-1);
// divider.setLayoutParams(dividerParams);
// mLinear.addView(divider);
// }
// }
//
// // Add horizontal line that separates each category
// if (i < categories.size() - 1) {
// View divider = new View(getContext());
// divider.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.inactive));
// divider.setLayoutParams(
// new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 1));
// divider.setElevation(-1);
// mLinear.addView(divider);
// }
//
// View grey = new View(getContext());
// grey.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.wash));
// grey.setLayoutParams(
// new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 16));
// mLinear.addView(grey);
// }
return view;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
package com.cornellappdev.android.eatery;

import android.content.Context;
import android.graphics.Typeface;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;

import com.cornellappdev.android.eatery.model.MealMenuModel;

import java.util.List;

public class MenuItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

MealMenuModel menu;
List<String> flatMenu;
Context context;

final int CATEGORY = 0, ITEM = 1;

public MenuItemsAdapter(MealMenuModel menu, Context context){
this.menu = menu;
flatMenu = menu.getMenuAsList();
this.context = context;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder;
View view;

if(viewType == CATEGORY){
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.menu_category_title_item, parent, false);
viewHolder = new CategoryViewHolder(view);
} else {
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.menu_item, parent, false);
viewHolder = new ItemViewHolder(view);
}
return viewHolder;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
String item = flatMenu.get(position);
float scale = context.getResources().getDisplayMetrics().density;
switch (holder.getItemViewType()){
case CATEGORY:
CategoryViewHolder viewHolder1 = (CategoryViewHolder) holder;
viewHolder1.categoryTv.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
viewHolder1.categoryTv.setTextSize(16);
viewHolder1.categoryTv.setTextColor(ContextCompat.getColor(context, R.color.primary));
viewHolder1.categoryTv.setPadding(
(int) (16 * scale + 0.5f), (int) (12 * scale + 0.5f), 0,
(int) (12 * scale + 0.5f));
viewHolder1.categoryTv.setText(item);
break;
case ITEM:
ItemViewHolder viewHolder2 = (ItemViewHolder) holder;
viewHolder2.menuItemTv.setText(item);
viewHolder2.menuItemTv.setTextSize(14);
viewHolder2.menuItemTv.setTextColor(ContextCompat.getColor(context, R.color.primary));
viewHolder2.menuItemTv.setPadding(
(int) (8 * scale + 0.5f), (int) (8 * scale + 0.5f), 0,
(int) (8 * scale + 0.5f));
viewHolder2.starButton.setPadding((int) (16 * scale + 0.5f), (int) (8 * scale + 0.5f), 0,
(int) (8 * scale + 0.5f));
viewHolder2.starButton.setOnClickListener(view -> {
if (viewHolder2.starButton.getDrawable().getConstantState() == context.getResources().getDrawable(R.drawable.ic_star_small).getConstantState()){
viewHolder2.starButton.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.ic_star_filled));
} else {
viewHolder2.starButton.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.ic_star_small));
}
});
break;
}
}

@Override
public int getItemCount() {
return flatMenu.size();
}

@Override
public int getItemViewType(int position){
String item = flatMenu.get(position);
if(menu.containsCategory(item)){
return CATEGORY;
}
return ITEM;
}
}

class CategoryViewHolder extends RecyclerView.ViewHolder{

TextView categoryTv;

public CategoryViewHolder(@NonNull View itemView) {
super(itemView);
categoryTv = itemView.findViewById(R.id.category_title_tv);
}
}

class ItemViewHolder extends RecyclerView.ViewHolder{

ImageButton starButton;
TextView menuItemTv;

public ItemViewHolder(@NonNull View itemView){
super(itemView);
starButton = itemView.findViewById(R.id.star_button);
menuItemTv = itemView.findViewById(R.id.menu_item_tv);

}

}

Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,8 @@ List<String> getAllItems() {
}
return items;
}

public Map<String, List<String>> getMenuLinkedHashMap(){
return menu;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.cornellappdev.android.eatery.util;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.view.View;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.cornellappdev.android.eatery.R;

public class Divider extends RecyclerView.ItemDecoration {
private Drawable mDivider;

public Divider(Context context) {
mDivider = ContextCompat.getDrawable(context, R.drawable.divider_line);
}

@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
int left = parent.getPaddingLeft();
int right = parent.getWidth() - parent.getPaddingRight();

int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
View child = parent.getChildAt(i);

RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

int top = child.getBottom() + params.bottomMargin;
int bottom = top + mDivider.getIntrinsicHeight();

mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
}
}
11 changes: 11 additions & 0 deletions app/src/main/res/drawable/divider_line.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<size
android:width="1dp"
android:height="1dp" />

<solid android:color="#000" />

</shape>
11 changes: 11 additions & 0 deletions app/src/main/res/drawable/ic_star.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="25dp"
android:viewportWidth="26"
android:viewportHeight="25">
<path
android:strokeWidth="1"
android:pathData="M13.8273,20.1759C13.131,19.677 12.1942,19.677 11.4978,20.1759L6.284,23.911C5.4971,24.4748 4.4482,23.703 4.7523,22.784L6.718,16.8426C6.9954,16.0042 6.69,15.083 5.9667,14.5763L0.9442,11.0582C0.1435,10.4973 0.5403,9.2391 1.5179,9.2391H7.7326C8.5975,9.2391 9.3643,8.6833 9.6334,7.8613L11.7122,1.5106C12.0129,0.5921 13.3123,0.5921 13.613,1.5106L15.6918,7.8613C15.9608,8.6833 16.7277,9.2391 17.5925,9.2391H23.8073C24.7848,9.2391 25.1817,10.4973 24.381,11.0582L19.3585,14.5763C18.6351,15.083 18.3298,16.0042 18.6072,16.8426L20.5729,22.784C20.877,23.703 19.8281,24.4748 19.0411,23.911L13.8273,20.1759Z"
android:fillColor="#00000000"
android:strokeColor="#7D8288"/>
</vector>
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_star_filled.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="19dp"
android:height="18dp"
android:viewportWidth="19"
android:viewportHeight="18">
<path
android:pathData="M8.7269,14.9302C9.2491,14.556 9.9517,14.556 10.474,14.9302L13.9083,17.3905C14.6166,17.8979 15.5606,17.2033 15.2869,16.3762L13.9968,12.4769C13.7887,11.848 14.0178,11.1572 14.5603,10.7771L17.8636,8.4632C18.5842,7.9585 18.2271,6.8261 17.3473,6.8261H13.2495C12.6009,6.8261 12.0257,6.4092 11.8239,5.7927L10.4558,1.613C10.1852,0.7863 9.0157,0.7863 8.7451,1.613L7.3769,5.7927C7.1751,6.4092 6.6,6.8261 5.9513,6.8261H1.8535C0.9738,6.8261 0.6166,7.9585 1.3372,8.4632L4.6406,10.7771C5.1831,11.1572 5.4121,11.848 5.2041,12.4769L3.9139,16.3762C3.6403,17.2033 4.5843,17.8979 5.2925,17.3905L8.7269,14.9302Z"
android:fillColor="#FEC50E"/>
</vector>
11 changes: 11 additions & 0 deletions app/src/main/res/drawable/ic_star_small.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="19dp"
android:height="18dp"
android:viewportWidth="19"
android:viewportHeight="18">
<path
android:pathData="M10.7069,14.605C10.0454,14.1311 9.1555,14.1311 8.4939,14.605L5.0596,17.0653C4.6661,17.3472 4.1417,16.9613 4.2937,16.5018L5.5838,12.6025C5.8474,11.806 5.5572,10.9309 4.87,10.4495L1.5667,8.1356C1.1664,7.8552 1.3648,7.2261 1.8535,7.2261H5.9513C6.7729,7.2261 7.5015,6.698 7.7571,5.9172L9.1252,1.7375C9.2756,1.2782 9.9253,1.2782 10.0756,1.7375L11.4438,5.9172C11.6994,6.698 12.4279,7.2261 13.2495,7.2261H17.3473C17.8361,7.2261 18.0345,7.8552 17.6341,8.1356L14.3308,10.4495C13.6436,10.9309 13.3535,11.806 13.617,12.6025L14.9071,16.5018C15.0592,16.9613 14.5347,17.3472 14.1412,17.0653L10.7069,14.605Z"
android:strokeWidth="0.8"
android:fillColor="#00000000"
android:strokeColor="#7D8288"/>
</vector>
5 changes: 5 additions & 0 deletions app/src/main/res/layout/fragment_menu.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,9 @@
android:paddingTop="16dp"
tools:context="com.cornellappdev.android.eatery.MenuFragment">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/menu_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerHeight="4px"/>
</LinearLayout>
Loading