From dab57c13949e0b1aad1abc4a767c999cabd94e13 Mon Sep 17 00:00:00 2001 From: Clayton Wilson Date: Thu, 24 Sep 2020 20:45:09 -0400 Subject: [PATCH] Search page displays item list view with hardcoded results --- Listify/app/src/main/AndroidManifest.xml | 1 + .../com/example/listify/SearchResults.java | 40 ++++- .../adapter/SearchResultsListAdapter.java | 63 +++++++ .../com/example/listify/model/Product.java | 168 ++++++++++++++++++ .../drawable/ic_baseline_broken_image_600.xml | 5 + .../res/layout/content_search_results.xml | 22 ++- .../src/main/res/layout/search_list_item.xml | 72 ++++++++ Listify/app/src/main/res/values/colors.xml | 7 + 8 files changed, 374 insertions(+), 4 deletions(-) create mode 100644 Listify/app/src/main/java/com/example/listify/adapter/SearchResultsListAdapter.java create mode 100644 Listify/app/src/main/java/com/example/listify/model/Product.java create mode 100644 Listify/app/src/main/res/drawable/ic_baseline_broken_image_600.xml create mode 100644 Listify/app/src/main/res/layout/search_list_item.xml diff --git a/Listify/app/src/main/AndroidManifest.xml b/Listify/app/src/main/AndroidManifest.xml index b7d7ef8..2c1e909 100644 --- a/Listify/app/src/main/AndroidManifest.xml +++ b/Listify/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + productList = new ArrayList<>(); + @Override protected void onCreate(Bundle savedInstanceState) { @@ -48,11 +60,22 @@ public class SearchResults extends AppCompatActivity { searchView.setQuery("", false); } }); - + + listView = (ListView) findViewById(R.id.search_results_list); + searchResultsListAdapter = new SearchResultsListAdapter(this, productList); + listView.setAdapter(searchResultsListAdapter); + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Toast.makeText(SearchResults.this, productList.get(position).getItemName(), Toast.LENGTH_SHORT).show(); + } + }); + // Handle searches searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { + doSearch(query); // TODO: Display the search results listview return false; @@ -76,7 +99,20 @@ public class SearchResults extends AppCompatActivity { // TODO: This function will handle the search operation with the database and return // a listview to caller to be displayed private ListView doSearch(String query) { - System.out.println(query); + // Hardcode some search results... + Product a = new Product("Bottled Water", "0000", "Walmart", "0001", "0123456780", "Bro, it's water...", "Grocery", "$13.37", "9/24/2020", "1", "http://3.bp.blogspot.com/-MfroPPQVDKo/UyhUZWqGvkI/AAAAAAAAB-I/DGk622onsvc/s1600/lettuce-b-kool-cat-meme.jpg"); + Product b = new Product("Tin Foil", "0001", "Walmart", "0001", "0123456781", "Not aluminum foil", "Grocery", "$1.00", "9/24/2020", "1", "https://i.ytimg.com/vi/q9N1doYMxR0/maxresdefault.jpg"); + Product c = new Product("Lettuce", "0002", "Walmart", "0001", "0123456782", "It's still wet", "Grocery", "$0.60", "9/24/2020", "1", "https://www.cattitudedaily.com/wp-content/uploads/2019/12/white-cat-meme-feature.jpg"); + Product d = new Product("Video Game", "0003", "Walmart", "0001", "0123456783", "Fun Vidya Gaemz", "Electronics", "$60.00", "9/24/2020", "1", "https://i1.wp.com/bestlifeonline.com/wp-content/uploads/2018/06/cat-meme-67.jpg?resize=1024%2C1024&ssl=1"); + Product e = new Product("Mountain Dew", "0004", "Walmart", "0001", "0123456784", "Gamer fuel", "Grocery", "$5.87", "9/24/2020", "1", "https://memeguy.com/photos/images/gaming-cat-7680.png"); + Product f = new Product("Tire", "0005", "Walmart", "0001", "0123456785", "30 inch rims", "Automotive", "$146.97", "9/24/2020", "1", "http://cdn.sheknows.com/articles/2013/05/pet5.jpg"); + productList.add(a); + productList.add(b); + productList.add(c); + productList.add(d); + productList.add(e); + productList.add(f); + return null; } } \ No newline at end of file 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 new file mode 100644 index 0000000..b2f4f85 --- /dev/null +++ b/Listify/app/src/main/java/com/example/listify/adapter/SearchResultsListAdapter.java @@ -0,0 +1,63 @@ +package com.example.listify.adapter; + +import android.app.Activity; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.example.listify.model.Product; +import com.example.listify.R; + +import java.util.List; + +public class SearchResultsListAdapter extends BaseAdapter { + private Activity activity; + private List productList; + private LayoutInflater inflater; + + public SearchResultsListAdapter(Activity activity, List productList){ + this.activity = activity; + this.productList = productList; + } + + @Override + public int getCount() { + return productList.size(); + } + + @Override + public Object getItem(int position) { + return productList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if(inflater == null){ + inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + }if(convertView == null){ + convertView = inflater.inflate(R.layout.search_list_item, null); + } + + ImageView productImage = (ImageView) convertView.findViewById(R.id.item_image); + TextView itemName = (TextView) convertView.findViewById(R.id.item_name); + TextView description = (TextView) convertView.findViewById(R.id.item_desc); + TextView price = (TextView) convertView.findViewById(R.id.item_price); + + Product product = productList.get(position); + product.loadImageView(0, 0, productImage); + itemName.setText(product.getItemName()); + description.setText(product.getDescription()); + price.setText(product.getPrice()); + + return convertView; + } +} diff --git a/Listify/app/src/main/java/com/example/listify/model/Product.java b/Listify/app/src/main/java/com/example/listify/model/Product.java new file mode 100644 index 0000000..8772909 --- /dev/null +++ b/Listify/app/src/main/java/com/example/listify/model/Product.java @@ -0,0 +1,168 @@ +package com.example.listify.model; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.AsyncTask; +import android.util.Log; +import android.widget.ImageView; + +import com.example.listify.R; + +import java.io.InputStream; + +public class Product { + private String itemName; + private String itemId; + private String chainName; + private String chainId; + private String upc; + private String description; + private String department; + private String price; + private String retrievedDate; + private String fetchCounts; + private String imageUrl; + + public Product() {} + + public Product(String itemName, String itemId, String chainName, String chainId, String upc, + String description, String department, String price, String retrievedDate, + String fetchCounts, String imageUrl) { + this.itemName = itemName; + this.itemId = itemId; + this.chainName = chainName; + this.chainId = chainId; + this.upc = upc; + this.description = description; + this.department = department; + this.price = price; + this.retrievedDate = retrievedDate; + this.fetchCounts = fetchCounts; + this.imageUrl = imageUrl; + } + + private class DownloadImageTask extends AsyncTask { + ImageView imageView; + + public DownloadImageTask(ImageView imageView) { + this.imageView = imageView; + } + + protected Bitmap doInBackground(String... args) { + String url = args[0]; + Bitmap image = null; + try { + InputStream in = new java.net.URL(url).openStream(); + image = BitmapFactory.decodeStream(in); + } catch (Exception e) { + Log.e("Error", e.getMessage()); + e.printStackTrace(); + } + return image; + } + + protected void onPostExecute(Bitmap result) { + // Return the broken image icon as a bitmap if the url is invalid + if (result == null) { + imageView.setImageResource(R.drawable.ic_baseline_broken_image_600); + } else { + imageView.setImageBitmap(result); + } + } + } + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + public String getItemId() { + return itemId; + } + + public void setItemId(String itemId) { + this.itemId = itemId; + } + + public String getChainName() { + return chainName; + } + + public void setChainName(String chainName) { + this.chainName = chainName; + } + + public String getChainId() { + return chainId; + } + + public void setChainId(String chainId) { + this.chainId = chainId; + } + + public String getUpc() { + return upc; + } + + public void setUpc(String upc) { + this.upc = upc; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public String getPrice() { + return price; + } + + public void setPrice(String price) { + this.price = price; + } + + public String getRetrievedDate() { + return retrievedDate; + } + + public void setRetrievedDate(String retrievedDate) { + this.retrievedDate = retrievedDate; + } + + public String getFetchCounts() { + return fetchCounts; + } + + public void setFetchCounts(String fetchCounts) { + this.fetchCounts = fetchCounts; + } + + public String getImageUrl() { + return imageUrl; + } + + public void setImageUrl(String imageUrl) { + this.imageUrl = imageUrl; + } + + // TODO: Need to implement image resizing + public void loadImageView(int height, int width, ImageView imageView) { + new DownloadImageTask(imageView).execute(this.imageUrl); + } +} diff --git a/Listify/app/src/main/res/drawable/ic_baseline_broken_image_600.xml b/Listify/app/src/main/res/drawable/ic_baseline_broken_image_600.xml new file mode 100644 index 0000000..2331686 --- /dev/null +++ b/Listify/app/src/main/res/drawable/ic_baseline_broken_image_600.xml @@ -0,0 +1,5 @@ + + + diff --git a/Listify/app/src/main/res/layout/content_search_results.xml b/Listify/app/src/main/res/layout/content_search_results.xml index 3691469..5041fd3 100644 --- a/Listify/app/src/main/res/layout/content_search_results.xml +++ b/Listify/app/src/main/res/layout/content_search_results.xml @@ -1,6 +1,24 @@ - \ No newline at end of file + 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=".SearchResults" + tools:showIn="@layout/activity_search_results"> + + + + + + \ 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 new file mode 100644 index 0000000..4bd41b7 --- /dev/null +++ b/Listify/app/src/main/res/layout/search_list_item.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Listify/app/src/main/res/values/colors.xml b/Listify/app/src/main/res/values/colors.xml index 4faecfa..c6d89eb 100644 --- a/Listify/app/src/main/res/values/colors.xml +++ b/Listify/app/src/main/res/values/colors.xml @@ -3,4 +3,11 @@ #6200EE #3700B3 #03DAC5 + + #2097ff + #d9d9d9 + #ffffff + #ffffff + #ebeef0 + #1c9ef4 \ No newline at end of file