From 981fb9ebda4d831c71190a0f05130891fd873690 Mon Sep 17 00:00:00 2001 From: Clayton Wilson Date: Thu, 8 Oct 2020 20:54:12 -0400 Subject: [PATCH 1/3] Update search results and item details layout --- .../java/com/example/listify/ItemDetails.java | 5 +- .../adapter/SearchResultsListAdapter.java | 4 +- .../main/res/layout/content_item_details.xml | 47 ++++++++----------- .../src/main/res/layout/search_list_item.xml | 1 + 4 files changed, 24 insertions(+), 33 deletions(-) diff --git a/Listify/app/src/main/java/com/example/listify/ItemDetails.java b/Listify/app/src/main/java/com/example/listify/ItemDetails.java index b672924..415d1a4 100644 --- a/Listify/app/src/main/java/com/example/listify/ItemDetails.java +++ b/Listify/app/src/main/java/com/example/listify/ItemDetails.java @@ -52,7 +52,6 @@ public class ItemDetails extends AppCompatActivity implements ListPickerDialogFr // Load Product object from search results activity curProduct = (Product) getIntent().getSerializableExtra("SelectedProduct"); - // Set up floating action buttons FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); linAddItem = (LinearLayout) findViewById(R.id.lin_add_item); @@ -123,8 +122,8 @@ public class ItemDetails extends AppCompatActivity implements ListPickerDialogFr tvItemPrice = (TextView) findViewById(R.id.item_price); tvItemPrice.setText(String.format("$%.2f", curProduct.getPrice())); - tvItemDesc = (TextView) findViewById(R.id.item_desc); - tvItemDesc.setText(curProduct.getDescription()); +// tvItemDesc = (TextView) findViewById(R.id.item_desc); +// tvItemDesc.setText(curProduct.getDescription()); tvCreateNew = (TextView) findViewById(R.id.create_new_list); tvCreateNew.setVisibility(View.INVISIBLE); diff --git a/Listify/app/src/main/java/com/example/listify/adapter/SearchResultsListAdapter.java b/Listify/app/src/main/java/com/example/listify/adapter/SearchResultsListAdapter.java index cc4306c..bc02c73 100644 --- a/Listify/app/src/main/java/com/example/listify/adapter/SearchResultsListAdapter.java +++ b/Listify/app/src/main/java/com/example/listify/adapter/SearchResultsListAdapter.java @@ -57,8 +57,8 @@ public class SearchResultsListAdapter extends BaseAdapter { Product product = productList.get(position); // TODO: If image url is broken, display @drawable/ic_baseline_broken_image_600.xml Glide.with(activity).load(product.getImageUrl()).into(productImage); - if (product.getItemName().length() >= 35) { - itemName.setText(product.getItemName().substring(0, 35) + "..."); + if (product.getItemName().length() >= 60) { + itemName.setText(product.getItemName().substring(0, 60) + "..."); } else { itemName.setText(product.getItemName()); } diff --git a/Listify/app/src/main/res/layout/content_item_details.xml b/Listify/app/src/main/res/layout/content_item_details.xml index 0e98ba7..1d7fdf6 100644 --- a/Listify/app/src/main/res/layout/content_item_details.xml +++ b/Listify/app/src/main/res/layout/content_item_details.xml @@ -8,15 +8,13 @@ @@ -24,26 +22,23 @@ android:id="@+id/store_name" android:layout_width="126dp" android:layout_height="28dp" - android:layout_marginStart="52dp" - android:layout_marginTop="50dp" + android:layout_marginStart="50dp" + android:layout_marginTop="90dp" android:text="@string/default_store" - app:layout_constraintBottom_toTopOf="@+id/item_image" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="1.0" /> @@ -56,22 +51,18 @@ android:layout_marginBottom="25dp" android:text="@string/default__00_00" android:textSize="16sp" - app:layout_constraintBottom_toTopOf="@+id/item_desc" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/item_image" /> - - + + + + + + + + + + \ No newline at end of file diff --git a/Listify/app/src/main/res/layout/search_list_item.xml b/Listify/app/src/main/res/layout/search_list_item.xml index 469752d..02eb7e4 100644 --- a/Listify/app/src/main/res/layout/search_list_item.xml +++ b/Listify/app/src/main/res/layout/search_list_item.xml @@ -44,6 +44,7 @@ android:paddingTop="20dp" android:textSize="12sp" android:layout_toEndOf="@+id/item_image" + android:layout_alignParentBottom="true" android:text=""/> From 38aea790d8051fe8af9177ef1be4f929928466a1 Mon Sep 17 00:00:00 2001 From: Clayton Wilson Date: Thu, 8 Oct 2020 23:07:53 -0400 Subject: [PATCH 2/3] UserDeleter 'unit tests' --- Lambdas/Lists/User/test/TestUserDeleter.java | 30 ++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Lambdas/Lists/User/test/TestUserDeleter.java diff --git a/Lambdas/Lists/User/test/TestUserDeleter.java b/Lambdas/Lists/User/test/TestUserDeleter.java new file mode 100644 index 0000000..89b3a72 --- /dev/null +++ b/Lambdas/Lists/User/test/TestUserDeleter.java @@ -0,0 +1,30 @@ +import org.junit.Test; + +import java.sql.SQLException; + +public class TestUserDeleter { + @Test + public void TestUserDelete(){ + try { + testUserDeleter(false); + assert(false); + } catch (Exception e) {} + } + + public void testUserDeleter(boolean shouldThrow) { + StatementInjector si = null; + try { + si = new StatementInjector(null, null, shouldThrow); + } catch (SQLException e) { + e.printStackTrace(); + } + String cognitoID = "adbe8b88-9df4-4900-90e1-58dc48b82612"; + UserDeleter userDeleter = new UserDeleter(si, cognitoID); + + try { + userDeleter.conductAction(null, null, cognitoID); + } catch (SQLException e) { + e.printStackTrace(); + } + } +} From c1a8103da839942ec7bfa82efb3ab5dcd0157d64 Mon Sep 17 00:00:00 2001 From: Clayton Wilson Date: Fri, 9 Oct 2020 01:35:16 -0400 Subject: [PATCH 3/3] Various layout improvements --- Lambdas/Lists/User/src/UserDeleter.java | 32 ++++++++-------- .../listify/CreateListDialogFragment.java | 3 +- .../listify/ListPickerDialogFragment.java | 8 ++-- .../com/example/listify/MainActivity.java | 2 +- .../listify/ui/lists/ListsFragment.java | 11 ++++-- .../main/res/layout/dialog_add_to_list.xml | 4 +- .../src/main/res/layout/nav_header_main.xml | 38 +++++++++---------- .../main/res/menu/activity_main_drawer.xml | 16 ++++---- 8 files changed, 60 insertions(+), 54 deletions(-) diff --git a/Lambdas/Lists/User/src/UserDeleter.java b/Lambdas/Lists/User/src/UserDeleter.java index 347d341..b440d9e 100644 --- a/Lambdas/Lists/User/src/UserDeleter.java +++ b/Lambdas/Lists/User/src/UserDeleter.java @@ -46,28 +46,26 @@ public class UserDeleter implements CallHandler { awsCognitoIdentityProvider.adminDeleteUser(adminDeleteUserRequest); - try { - PreparedStatement statement = connection.prepareStatement(GET_LISTS); - statement.setString(1, cognitoID); - System.out.println(statement); - ResultSet userLists = statement.executeQuery(); - while (userLists.next()) { - int listID = userLists.getInt("listID"); - statement = connection.prepareStatement(DELETE_LIST_PRODUCT); - statement.setInt(1, listID); - System.out.println(statement); - statement.executeQuery(); - } + PreparedStatement statement = connection.prepareStatement(GET_LISTS); + statement.setString(1, cognitoID); + System.out.println(statement); + ResultSet userLists = statement.executeQuery(); + while (userLists.next()) { + int listID = userLists.getInt("listID"); - statement = connection.prepareStatement(DELETE_LISTS); - statement.setString(1, cognitoID); + statement = connection.prepareStatement(DELETE_LIST_PRODUCT); + statement.setInt(1, listID); System.out.println(statement); statement.executeQuery(); - connection.commit(); - } finally { - connection.close(); } + + statement = connection.prepareStatement(DELETE_LISTS); + statement.setString(1, cognitoID); + System.out.println(statement); + statement.executeQuery(); + connection.commit(); + return null; } } diff --git a/Listify/app/src/main/java/com/example/listify/CreateListDialogFragment.java b/Listify/app/src/main/java/com/example/listify/CreateListDialogFragment.java index 36e1402..56e0473 100644 --- a/Listify/app/src/main/java/com/example/listify/CreateListDialogFragment.java +++ b/Listify/app/src/main/java/com/example/listify/CreateListDialogFragment.java @@ -29,6 +29,7 @@ public class CreateListDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + // Get the layout inflater LayoutInflater inflater = requireActivity().getLayoutInflater(); @@ -59,7 +60,7 @@ public class CreateListDialogFragment extends DialogFragment { public void onAttach(@NonNull Context context) { super.onAttach(context); try { - onNewListListener = (OnNewListListener) getActivity(); + onNewListListener = (OnNewListListener) getTargetFragment(); } catch (ClassCastException e) { Log.e("CreateListDialogFragment", "onAttach: ClassCastException: " + e.getMessage()); } diff --git a/Listify/app/src/main/java/com/example/listify/ListPickerDialogFragment.java b/Listify/app/src/main/java/com/example/listify/ListPickerDialogFragment.java index 0351bd0..33a5504 100644 --- a/Listify/app/src/main/java/com/example/listify/ListPickerDialogFragment.java +++ b/Listify/app/src/main/java/com/example/listify/ListPickerDialogFragment.java @@ -74,11 +74,11 @@ public class ListPickerDialogFragment extends DialogFragment { userListsView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - for (int i = 0; i < parent.getChildCount(); i++) { - parent.getChildAt(i).setBackgroundColor(Color.TRANSPARENT); - } +// for (int i = 0; i < parent.getChildCount(); i++) { +// parent.getChildAt(i).setBackgroundColor(Color.TRANSPARENT); +// } - parent.getChildAt(position).setBackgroundColor(Color.GREEN); +// parent.getChildAt(position).setBackgroundColor(Color.GREEN); // view.setBackgroundColor(Color.GREEN); selectedListIndex = position; } 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 6c5b237..e6f3708 100644 --- a/Listify/app/src/main/java/com/example/listify/MainActivity.java +++ b/Listify/app/src/main/java/com/example/listify/MainActivity.java @@ -132,7 +132,7 @@ public class MainActivity extends AppCompatActivity implements CreateListDialogF 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_lists) + R.id.nav_home, R.id.nav_lists) .setDrawerLayout(drawer) .build(); NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment); 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 index 0d70572..c7029ba 100644 --- 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 @@ -36,6 +36,7 @@ import static com.example.listify.MainActivity.am; public class ListsFragment extends Fragment implements CreateListDialogFragment.OnNewListListener { ArrayList shoppingLists = new ArrayList<>(); + DisplayShoppingListsAdapter displayShoppingListsAdapter; ListView shoppingListsView; public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -67,7 +68,7 @@ public class ListsFragment extends Fragment implements CreateListDialogFragment. // Set adapter and display this users lists - DisplayShoppingListsAdapter displayShoppingListsAdapter = new DisplayShoppingListsAdapter(getActivity(), shoppingLists); + displayShoppingListsAdapter = new DisplayShoppingListsAdapter(getActivity(), shoppingLists); shoppingListsView.setAdapter(displayShoppingListsAdapter); shoppingListsView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override @@ -81,11 +82,13 @@ public class ListsFragment extends Fragment implements CreateListDialogFragment. }); FloatingActionButton fab = (FloatingActionButton) root.findViewById(R.id.new_list_fab); + Fragment thisFragment = this; fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CreateListDialogFragment createListDialogFragment = new CreateListDialogFragment(); - createListDialogFragment.show(getActivity().getSupportFragmentManager(), "Create New List"); + createListDialogFragment.show(getFragmentManager(), "Create New List"); + createListDialogFragment.setTargetFragment(thisFragment, 0); } }); @@ -108,7 +111,9 @@ public class ListsFragment extends Fragment implements CreateListDialogFragment. try { requestor.postObject(newList, idReceiver, idReceiver); - System.out.println(idReceiver.await()); + newList.setItemID(idReceiver.await()); + shoppingLists.add(newList); + displayShoppingListsAdapter.notifyDataSetChanged(); Toast.makeText(getContext(), String.format("%s created", name), Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(getContext(), "An error occurred", Toast.LENGTH_LONG).show(); diff --git a/Listify/app/src/main/res/layout/dialog_add_to_list.xml b/Listify/app/src/main/res/layout/dialog_add_to_list.xml index 8325780..5e255f9 100644 --- a/Listify/app/src/main/res/layout/dialog_add_to_list.xml +++ b/Listify/app/src/main/res/layout/dialog_add_to_list.xml @@ -18,7 +18,9 @@ android:layout_height="300dp" android:divider="@color/list_divider" android:dividerHeight="1dp" - android:choiceMode="multipleChoiceModal"/> + android:layout_marginHorizontal="50dp" + android:choiceMode="singleChoice" + android:listSelector="@color/colorAccent"/> - + + + + + + + - + + + + + + - + + + + + \ 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 b9f5501..93efe47 100644 --- a/Listify/app/src/main/res/menu/activity_main_drawer.xml +++ b/Listify/app/src/main/res/menu/activity_main_drawer.xml @@ -8,14 +8,14 @@ android:id="@+id/nav_home" android:icon="@drawable/ic_menu_camera" android:title="@string/menu_home" /> - - + + + + + + + +