Merge pull request #42 from ClaytonWWilson/hamburger-menu-additions

Hamburger menu additions
This commit is contained in:
Clayton Wilson 2020-10-07 22:06:04 -04:00 committed by GitHub
commit fad60c6b90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 220 additions and 9 deletions

View File

@ -3,6 +3,7 @@ package com.example.listify;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.ImageButton; import android.widget.ImageButton;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
@ -26,7 +27,7 @@ import java.util.Arrays;
import java.util.Properties; import java.util.Properties;
import java.util.Random; import java.util.Random;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity implements CreateListDialogFragment.OnNewListListener {
private AppBarConfiguration mAppBarConfiguration; private AppBarConfiguration mAppBarConfiguration;
@Override @Override
@ -128,12 +129,13 @@ public class MainActivity extends AppCompatActivity {
NavigationView navigationView = findViewById(R.id.nav_view); 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. // Passing each menu ID as a set of Ids because each menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder( 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) .setDrawerLayout(drawer)
.build(); .build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration); NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController); NavigationUI.setupWithNavController(navigationView, navController);
// Handle search button click // Handle search button click
ImageButton searchButton = (ImageButton) findViewById(R.id.searchButton); ImageButton searchButton = (ImageButton) findViewById(R.id.searchButton);
searchButton.setOnClickListener(new View.OnClickListener() { searchButton.setOnClickListener(new View.OnClickListener() {
@ -160,4 +162,21 @@ public class MainActivity extends AppCompatActivity {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration) || super.onSupportNavigateUp(); 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) {
}
} }

View File

@ -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" + "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" + "\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"); "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(a);
resultsProductList.add(b); resultsProductList.add(b);
resultsProductList.add(c); resultsProductList.add(c);
@ -162,6 +163,7 @@ public class SearchResults extends AppCompatActivity implements SortDialogFragme
resultsProductList.add(e); resultsProductList.add(e);
resultsProductList.add(f); resultsProductList.add(f);
resultsProductList.add(g); resultsProductList.add(g);
resultsProductList.add(h);
} }
// Create a list of all stores in the results so the user can filter by store name // 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 // Sorts the search results
private void sortResults() { private void sortResults() {
// Reset the filtered list
resultsProductListSorted.clear();
resultsProductListSorted.addAll(resultsProductList);
// Sort Modes // Sort Modes
// 0 default (no sorting) // 0 default (no sorting)
// 1 itemName // 1 itemName
@ -190,10 +196,8 @@ public class SearchResults extends AppCompatActivity implements SortDialogFragme
// Sort based on mode // Sort based on mode
switch (this.sortMode) { switch (this.sortMode) {
case 0: case 0:
resultsProductListSorted.clear(); // Do nothing
resultsProductListSorted.addAll(resultsProductList); break;
searchResultsListAdapter.notifyDataSetChanged();
return;
case 1: case 1:
resultsProductListSorted.sort(new Comparator<Product>() { resultsProductListSorted.sort(new Comparator<Product>() {
@Override @Override
@ -238,7 +242,7 @@ public class SearchResults extends AppCompatActivity implements SortDialogFragme
break; break;
} }
if (this.descending) { if (this.sortMode != 0 & this.descending) {
for (int i = 0; i < resultsProductListSorted.size() / 2; i++) { for (int i = 0; i < resultsProductListSorted.size() / 2; i++) {
Product temp = resultsProductListSorted.get(i); Product temp = resultsProductListSorted.get(i);
resultsProductListSorted.set(i, resultsProductListSorted.get(resultsProductListSorted.size() - i - 1)); 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<Product> 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(); searchResultsListAdapter.notifyDataSetChanged();
} }
} }

View File

@ -52,4 +52,4 @@ public class DisplayShoppingListsAdapter extends BaseAdapter {
return convertView; return convertView;
} }
} }

View File

@ -71,4 +71,4 @@ public class ShoppingList extends ArrayList<Product> {
public boolean addAll(@NonNull Collection<? extends Product> c) { public boolean addAll(@NonNull Collection<? extends Product> c) {
return list.addAll(c); return list.addAll(c);
} }
} }

View File

@ -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<ShoppingList> 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();
}
}

View File

@ -0,0 +1,5 @@
<vector android:height="28dp" android:tint="?attr/colorControlNormal"
android:viewportHeight="24" android:viewportWidth="24"
android:width="28dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19,5v14L5,19L5,5h14m1.1,-2L3.9,3c-0.5,0 -0.9,0.4 -0.9,0.9v16.2c0,0.4 0.4,0.9 0.9,0.9h16.2c0.4,0 0.9,-0.5 0.9,-0.9L21,3.9c0,-0.5 -0.5,-0.9 -0.9,-0.9zM11,7h6v2h-6L11,7zM11,11h6v2h-6v-2zM11,15h6v2h-6zM7,7h2v2L7,9zM7,11h2v2L7,13zM7,15h2v2L7,17z"/>
</vector>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar_lists"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" >
<!-- <ImageButton-->
<!-- android:id="@+id/searchButton"-->
<!-- android:layout_width="30dp"-->
<!-- android:layout_gravity="end"-->
<!-- android:layout_marginEnd="5dp"-->
<!-- android:layout_height="wrap_content"-->
<!-- app:srcCompat="@drawable/ic_baseline_search_28"-->
<!-- android:contentDescription="@string/search_button_desc"-->
<!-- android:background="@null"/>-->
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
<include layout="@layout/content_main" />
<!-- <com.google.android.material.floatingactionbutton.FloatingActionButton-->
<!-- android:id="@+id/fab"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_gravity="bottom|end"-->
<!-- android:layout_margin="@dimen/fab_margin"-->
<!-- app:srcCompat="@android:drawable/ic_dialog_email" />-->
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".ui.lists.ListsFragment"
tools:showIn="@layout/fragment_lists">
<ListView
android:id="@+id/shopping_lists"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="@color/list_divider"
android:dividerHeight="1dp"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/new_list_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@drawable/ic_baseline_add_28"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"/>
</RelativeLayout>

View File

@ -16,5 +16,14 @@
android:id="@+id/nav_slideshow" android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow" android:icon="@drawable/ic_menu_slideshow"
android:title="@string/menu_slideshow" /> android:title="@string/menu_slideshow" />
<item
android:id="@+id/nav_lists"
android:icon="@drawable/ic_baseline_list_alt_28"
android:title="@string/menu_lists" />
<item
android:id="@+id/nav_create_list"
android:icon="@drawable/ic_baseline_add_28"
android:title="Create New List"
android:onClick="onClickCreateList"/>
</group> </group>
</menu> </menu>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_create_list"
android:orderInCategory="101"
android:title="Create List"
app:showAsAction="never" />
</menu>

View File

@ -22,4 +22,10 @@
android:name="com.example.listify.ui.slideshow.SlideshowFragment" android:name="com.example.listify.ui.slideshow.SlideshowFragment"
android:label="@string/menu_slideshow" android:label="@string/menu_slideshow"
tools:layout="@layout/fragment_slideshow" /> tools:layout="@layout/fragment_slideshow" />
<fragment
android:id="@+id/nav_lists"
android:name="com.example.listify.ui.lists.ListsFragment"
android:label="@string/menu_lists"
tools:layout="@layout/fragment_lists" />
</navigation> </navigation>

View File

@ -29,6 +29,7 @@
<string name="search_button_desc">Search Button</string> <string name="search_button_desc">Search Button</string>
<string name="title_activity_search_results">SearchResults</string> <string name="title_activity_search_results">SearchResults</string>
<string name="store_selection">Store selection</string> <string name="store_selection">Store selection</string>
<string name="menu_lists">My Lists</string>
<string name="title_activity_item_details">ItemDetails</string> <string name="title_activity_item_details">ItemDetails</string>
<string name="add_to_list">Add to list</string> <string name="add_to_list">Add to list</string>
<string name="create_new_list">Create new list</string> <string name="create_new_list">Create new list</string>