From 65c60d2e7029c2d0bed317ba6add3c5d8cd00cf2 Mon Sep 17 00:00:00 2001 From: Clayton Wilson Date: Sat, 31 Oct 2020 23:57:07 -0400 Subject: [PATCH] List swiping displays share and delete buttons --- Listify/app/build.gradle | 1 + .../adapter/DisplayShoppingListsAdapter.java | 74 ++++++++++++++++++- .../listify/ui/lists/ListsFragment.java | 20 ++--- .../ic_baseline_delete_forever_24.xml | 5 ++ .../res/drawable/ic_baseline_share_24.xml | 5 ++ .../layout/display_shopping_lists_item.xml | 64 +++++++++++----- 6 files changed, 139 insertions(+), 30 deletions(-) create mode 100644 Listify/app/src/main/res/drawable/ic_baseline_delete_forever_24.xml create mode 100644 Listify/app/src/main/res/drawable/ic_baseline_share_24.xml diff --git a/Listify/app/build.gradle b/Listify/app/build.gradle index d90a79b..a14ee50 100644 --- a/Listify/app/build.gradle +++ b/Listify/app/build.gradle @@ -52,4 +52,5 @@ dependencies { annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' implementation 'com.squareup.okhttp3:okhttp:4.8.1' implementation 'com.crystal:crystalrangeseekbar:1.1.3' + implementation 'com.chauthai.swipereveallayout:swipe-reveal-layout:1.4.1' } \ 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 d1ac59b..f2f5398 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 @@ -2,21 +2,30 @@ package com.example.listify.adapter; import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; +import android.widget.Toast; + +import com.chauthai.swipereveallayout.SwipeRevealLayout; +import com.chauthai.swipereveallayout.ViewBinderHelper; +import com.example.listify.ListPage; import com.example.listify.R; import com.example.listify.data.List; + import java.util.ArrayList; public class DisplayShoppingListsAdapter extends BaseAdapter { private Activity activity; private ArrayList lists; private LayoutInflater inflater; + private final ViewBinderHelper binderHelper; public DisplayShoppingListsAdapter(Activity activity, ArrayList lists){ + binderHelper = new ViewBinderHelper(); this.activity = activity; this.lists = lists; } @@ -38,18 +47,77 @@ public class DisplayShoppingListsAdapter extends BaseAdapter { @Override public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (inflater == null) { inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } if (convertView == null) { convertView = inflater.inflate(R.layout.display_shopping_lists_item, null); + + holder = new ViewHolder(); + holder.swipeLayout = (SwipeRevealLayout)convertView.findViewById(R.id.swipe_layout); + holder.frontView = convertView.findViewById(R.id.front_layout); + holder.deleteList = convertView.findViewById(R.id.delete_list); + holder.shareList = convertView.findViewById(R.id.share_list); + holder.textView = (TextView) convertView.findViewById(R.id.shopping_list_name); + + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); } - List curList = lists.get(position); + final List curList = lists.get(position); - TextView tvListName = (TextView) convertView.findViewById(R.id.shopping_list_name); - tvListName.setText(curList.getName()); + // Bind the view to the unique list ID + binderHelper.bind(holder.swipeLayout, Integer.toString(curList.getItemID())); + + holder.textView.setText(curList.getName()); + holder.deleteList.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO: Add database call to delete the list on the server + + + Toast.makeText(activity, String.format("%s deleted", curList.getName()), Toast.LENGTH_SHORT).show(); + lists.remove(position); + + // Update listView + notifyDataSetChanged(); + } + }); + + holder.shareList.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO: Add database call to share list + + Toast.makeText(activity, String.format("Share %s", curList.getName()), Toast.LENGTH_SHORT).show(); + + // Close the layout + binderHelper.closeLayout(Integer.toString(curList.getItemID())); + } + }); + + holder.frontView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent listPage = new Intent(activity, ListPage.class); + + // Send the list ID + listPage.putExtra("listID", curList.getItemID()); + activity.startActivity(listPage); + } + }); return convertView; } + + private class ViewHolder { + SwipeRevealLayout swipeLayout; + View frontView; + View deleteList; + View shareList; + TextView textView; + } } 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 fdcc4d4..45ded70 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 @@ -178,16 +178,16 @@ public class ListsFragment extends Fragment implements CreateListDialogFragment. @Override public void run() { shoppingListsView.setAdapter(displayShoppingListsAdapter); - shoppingListsView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Intent listPage = new Intent(getContext(), ListPage.class); - - // Send the list ID - listPage.putExtra("listID", shoppingLists.get(position).getItemID()); - startActivity(listPage); - } - }); +// shoppingListsView.setOnItemClickListener(new AdapterView.OnItemClickListener() { +// @Override +// public void onItemClick(AdapterView parent, View view, int position, long id) { +// Intent listPage = new Intent(getContext(), ListPage.class); +// +// // Send the list ID +// listPage.putExtra("listID", shoppingLists.get(position).getItemID()); +// startActivity(listPage); +// } +// }); loadingLists.setVisibility(View.GONE); } }); diff --git a/Listify/app/src/main/res/drawable/ic_baseline_delete_forever_24.xml b/Listify/app/src/main/res/drawable/ic_baseline_delete_forever_24.xml new file mode 100644 index 0000000..f54f7d4 --- /dev/null +++ b/Listify/app/src/main/res/drawable/ic_baseline_delete_forever_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Listify/app/src/main/res/drawable/ic_baseline_share_24.xml b/Listify/app/src/main/res/drawable/ic_baseline_share_24.xml new file mode 100644 index 0000000..9300daf --- /dev/null +++ b/Listify/app/src/main/res/drawable/ic_baseline_share_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Listify/app/src/main/res/layout/display_shopping_lists_item.xml b/Listify/app/src/main/res/layout/display_shopping_lists_item.xml index 5419294..2bba1d9 100644 --- a/Listify/app/src/main/res/layout/display_shopping_lists_item.xml +++ b/Listify/app/src/main/res/layout/display_shopping_lists_item.xml @@ -1,20 +1,50 @@ - - + + + + + + + + + + + + + - \ No newline at end of file + android:layout_height="50dp"> + + + + \ No newline at end of file