diff --git a/Listify/app/src/main/java/com/example/listify/MainActivity.java b/Listify/app/src/main/java/com/example/listify/MainActivity.java index c7b072d..6c34431 100644 --- a/Listify/app/src/main/java/com/example/listify/MainActivity.java +++ b/Listify/app/src/main/java/com/example/listify/MainActivity.java @@ -3,6 +3,7 @@ package com.example.listify; import android.content.Intent; import android.os.Bundle; import android.util.Log; +import android.view.MenuItem; import android.view.View; import android.widget.ImageButton; import androidx.appcompat.app.AppCompatActivity; @@ -26,7 +27,7 @@ import java.util.Arrays; import java.util.Properties; import java.util.Random; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity implements CreateListDialogFragment.OnNewListListener { private AppBarConfiguration mAppBarConfiguration; @Override @@ -128,12 +129,13 @@ public class MainActivity extends AppCompatActivity { NavigationView navigationView = findViewById(R.id.nav_view); // Passing each menu ID as a set of Ids because each menu should be considered as top level destinations. mAppBarConfiguration = new AppBarConfiguration.Builder( - R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow) + R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow, R.id.nav_lists) .setDrawerLayout(drawer) .build(); NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration); NavigationUI.setupWithNavController(navigationView, navController); + // Handle search button click ImageButton searchButton = (ImageButton) findViewById(R.id.searchButton); searchButton.setOnClickListener(new View.OnClickListener() { @@ -160,4 +162,21 @@ public class MainActivity extends AppCompatActivity { NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); return NavigationUI.navigateUp(navController, mAppBarConfiguration) || super.onSupportNavigateUp(); } + + // This function only exists for the create new list option in hamburger menu + public void onClickCreateList(MenuItem m) { + m.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + CreateListDialogFragment createListDialogFragment = new CreateListDialogFragment(); + createListDialogFragment.show(getSupportFragmentManager(), "Create New List"); + return false; + } + }); + } + + @Override + public void sendNewListName(String name) { + + } } \ No newline at end of file diff --git a/Listify/app/src/main/java/com/example/listify/SearchResults.java b/Listify/app/src/main/java/com/example/listify/SearchResults.java index 74c80ed..42908f4 100644 --- a/Listify/app/src/main/java/com/example/listify/SearchResults.java +++ b/Listify/app/src/main/java/com/example/listify/SearchResults.java @@ -155,6 +155,7 @@ public class SearchResults extends AppCompatActivity implements SortDialogFragme "Sapien eget mi proin sed libero enim sed faucibus turpis. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Integer enim neque volutpat ac tincidunt vitae semper. Euismod lacinia at quis risus sed vulputate. Ut venenatis tellus in metus vulputate eu scelerisque. Etiam erat velit scelerisque in dictum non consectetur. Viverra nam libero justo laoreet sit amet cursus sit. Arcu non sodales neque sodales. Vivamus arcu felis bibendum ut tristique et egestas quis. Sed adipiscing diam donec adipiscing tristique risus. Sollicitudin tempor id eu nisl nunc mi ipsum faucibus vitae. Velit ut tortor pretium viverra suspendisse potenti nullam ac tortor. Non nisi est sit amet facilisis magna etiam. Tortor at risus viverra adipiscing. Donec ultrices tincidunt arcu non sodales neque sodales. Eget egestas purus viverra accumsan. Enim lobortis scelerisque fermentum dui faucibus in ornare. Porttitor massa id neque aliquam. Ut consequat semper viverra nam. Orci ac auctor augue mauris augue neque gravida.\n" + "\n" + "Lacus sed viverra tellus in hac habitasse platea dictumst. Nec ullamcorper sit amet risus nullam eget felis eget nunc. Semper feugiat nibh sed pulvinar. Consequat nisl vel pretium lectus quam id leo in. Volutpat maecenas volutpat blandit aliquam etiam erat velit scelerisque. Faucibus a pellentesque sit amet porttitor eget. Sed viverra tellus in hac habitasse platea dictumst vestibulum. Placerat vestibulum lectus mauris ultrices eros in cursus turpis. Sed tempus urna et pharetra pharetra massa massa ultricies mi. Ornare arcu odio ut sem. Ornare arcu dui vivamus arcu felis bibendum ut. Feugiat pretium nibh ipsum consequat. Consectetur adipiscing elit ut aliquam purus sit amet luctus venenatis. Felis eget velit aliquet sagittis id consectetur purus ut.", "Automotive", 45.22, "9/24/2020", "1", "http://cdn.sheknows.com/articles/2013/05/pet5.jpg"); + Product h = new Product("Tin Foil", "0001", "Kroger", "0001", "0123456781", "Not aluminum foil", "Grocery", 1.00, "9/24/2020", "1", "https://i.ytimg.com/vi/q9N1doYMxR0/maxresdefault.jpg"); resultsProductList.add(a); resultsProductList.add(b); resultsProductList.add(c); @@ -162,6 +163,7 @@ public class SearchResults extends AppCompatActivity implements SortDialogFragme resultsProductList.add(e); resultsProductList.add(f); resultsProductList.add(g); + resultsProductList.add(h); } // Create a list of all stores in the results so the user can filter by store name @@ -180,6 +182,10 @@ public class SearchResults extends AppCompatActivity implements SortDialogFragme // Sorts the search results private void sortResults() { + // Reset the filtered list + resultsProductListSorted.clear(); + resultsProductListSorted.addAll(resultsProductList); + // Sort Modes // 0 default (no sorting) // 1 itemName @@ -190,10 +196,8 @@ public class SearchResults extends AppCompatActivity implements SortDialogFragme // Sort based on mode switch (this.sortMode) { case 0: - resultsProductListSorted.clear(); - resultsProductListSorted.addAll(resultsProductList); - searchResultsListAdapter.notifyDataSetChanged(); - return; + // Do nothing + break; case 1: resultsProductListSorted.sort(new Comparator() { @Override @@ -238,7 +242,7 @@ public class SearchResults extends AppCompatActivity implements SortDialogFragme break; } - if (this.descending) { + if (this.sortMode != 0 & this.descending) { for (int i = 0; i < resultsProductListSorted.size() / 2; i++) { Product temp = resultsProductListSorted.get(i); resultsProductListSorted.set(i, resultsProductListSorted.get(resultsProductListSorted.size() - i - 1)); @@ -246,6 +250,18 @@ public class SearchResults extends AppCompatActivity implements SortDialogFragme } } + // Only keep results that match the current store selection + if (this.storeSelection != 0) { + ArrayList temp = new ArrayList<>(); + resultsProductListSorted.forEach(product -> { + if (product.getChainName().equals(this.stores.get(this.storeSelection - 1))) { + temp.add(product); + } + }); + resultsProductListSorted.clear(); + resultsProductListSorted.addAll(temp); + } + searchResultsListAdapter.notifyDataSetChanged(); } } \ No newline at end of file diff --git a/Listify/app/src/main/java/com/example/listify/adapter/DisplayShoppingListsAdapter.java b/Listify/app/src/main/java/com/example/listify/adapter/DisplayShoppingListsAdapter.java index 056fec5..aed6342 100644 --- a/Listify/app/src/main/java/com/example/listify/adapter/DisplayShoppingListsAdapter.java +++ b/Listify/app/src/main/java/com/example/listify/adapter/DisplayShoppingListsAdapter.java @@ -52,4 +52,4 @@ public class DisplayShoppingListsAdapter extends BaseAdapter { return convertView; } -} \ No newline at end of file +} diff --git a/Listify/app/src/main/java/com/example/listify/model/ShoppingList.java b/Listify/app/src/main/java/com/example/listify/model/ShoppingList.java index 0775c30..d833eed 100644 --- a/Listify/app/src/main/java/com/example/listify/model/ShoppingList.java +++ b/Listify/app/src/main/java/com/example/listify/model/ShoppingList.java @@ -71,4 +71,4 @@ public class ShoppingList extends ArrayList { public boolean addAll(@NonNull Collection c) { return list.addAll(c); } -} \ No newline at end of file +} diff --git a/Listify/app/src/main/java/com/example/listify/ui/lists/ListsFragment.java b/Listify/app/src/main/java/com/example/listify/ui/lists/ListsFragment.java new file mode 100644 index 0000000..d13fe36 --- /dev/null +++ b/Listify/app/src/main/java/com/example/listify/ui/lists/ListsFragment.java @@ -0,0 +1,69 @@ +package com.example.listify.ui.lists; + +import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.view.LayoutInflater; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.fragment.app.Fragment; + +import com.example.listify.CreateListDialogFragment; +import com.example.listify.MainActivity; +import com.example.listify.R; +import com.example.listify.adapter.DisplayShoppingListsAdapter; +import com.example.listify.model.ShoppingList; +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import java.util.ArrayList; + +public class ListsFragment extends Fragment implements CreateListDialogFragment.OnNewListListener { + ListView shoppingListsView; + + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View root = inflater.inflate(R.layout.fragment_lists, container, false); + +// Toolbar toolbar = (Toolbar) root.findViewById(R.id.toolbar_lists); +// ((AppCompatActivity)getActivity()).setActionBar(toolbar); + + // Hardcode shopping lists to demonstrate displaying lists + shoppingListsView = root.findViewById(R.id.shopping_lists); + ShoppingList a = new ShoppingList("first list"); + ShoppingList b = new ShoppingList("Groceries"); + ShoppingList c = new ShoppingList("Expensive Stuff"); + ArrayList shoppingLists = new ArrayList<>(); + shoppingLists.add(a); + shoppingLists.add(b); + shoppingLists.add(c); + + // Set adapter and display this users lists + DisplayShoppingListsAdapter displayShoppingListsAdapter = new DisplayShoppingListsAdapter(getActivity(), shoppingLists); + shoppingListsView.setAdapter(displayShoppingListsAdapter); + shoppingListsView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Toast.makeText(getContext(), "open and display " + shoppingLists.get(position).getName(), Toast.LENGTH_SHORT).show(); + } + }); + + FloatingActionButton fab = (FloatingActionButton) root.findViewById(R.id.new_list_fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + CreateListDialogFragment createListDialogFragment = new CreateListDialogFragment(); + createListDialogFragment.show(getActivity().getSupportFragmentManager(), "Create New List"); + } + }); + + return root; + } + + @Override + public void sendNewListName(String name) { + Toast.makeText(getActivity(), String.format("%s created", name), Toast.LENGTH_LONG).show(); + } +} \ No newline at end of file diff --git a/Listify/app/src/main/res/drawable/ic_baseline_list_alt_28.xml b/Listify/app/src/main/res/drawable/ic_baseline_list_alt_28.xml new file mode 100644 index 0000000..e8b9972 --- /dev/null +++ b/Listify/app/src/main/res/drawable/ic_baseline_list_alt_28.xml @@ -0,0 +1,5 @@ + + + diff --git a/Listify/app/src/main/res/layout/app_bar_lists.xml b/Listify/app/src/main/res/layout/app_bar_lists.xml new file mode 100644 index 0000000..6f0d3ab --- /dev/null +++ b/Listify/app/src/main/res/layout/app_bar_lists.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Listify/app/src/main/res/layout/fragment_lists.xml b/Listify/app/src/main/res/layout/fragment_lists.xml new file mode 100644 index 0000000..0793341 --- /dev/null +++ b/Listify/app/src/main/res/layout/fragment_lists.xml @@ -0,0 +1,31 @@ + + + + + + + + \ No newline at end of file diff --git a/Listify/app/src/main/res/menu/activity_main_drawer.xml b/Listify/app/src/main/res/menu/activity_main_drawer.xml index d7f2df2..b9f5501 100644 --- a/Listify/app/src/main/res/menu/activity_main_drawer.xml +++ b/Listify/app/src/main/res/menu/activity_main_drawer.xml @@ -16,5 +16,14 @@ android:id="@+id/nav_slideshow" android:icon="@drawable/ic_menu_slideshow" android:title="@string/menu_slideshow" /> + + \ No newline at end of file diff --git a/Listify/app/src/main/res/menu/lists_menu.xml b/Listify/app/src/main/res/menu/lists_menu.xml new file mode 100644 index 0000000..493c783 --- /dev/null +++ b/Listify/app/src/main/res/menu/lists_menu.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/Listify/app/src/main/res/navigation/mobile_navigation.xml b/Listify/app/src/main/res/navigation/mobile_navigation.xml index a8103d9..274deba 100644 --- a/Listify/app/src/main/res/navigation/mobile_navigation.xml +++ b/Listify/app/src/main/res/navigation/mobile_navigation.xml @@ -22,4 +22,10 @@ android:name="com.example.listify.ui.slideshow.SlideshowFragment" android:label="@string/menu_slideshow" tools:layout="@layout/fragment_slideshow" /> + + \ No newline at end of file diff --git a/Listify/app/src/main/res/values/strings.xml b/Listify/app/src/main/res/values/strings.xml index 493310a..56597c4 100644 --- a/Listify/app/src/main/res/values/strings.xml +++ b/Listify/app/src/main/res/values/strings.xml @@ -29,6 +29,7 @@ Search Button SearchResults Store selection + My Lists ItemDetails Add to list Create new list