Search page displays item list view with hardcoded results

This commit is contained in:
Clayton Wilson 2020-09-24 20:45:09 -04:00
parent e8dad9e03b
commit dab57c1394
8 changed files with 374 additions and 4 deletions

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.listify">
<uses-permission android:name = "android.permission.INTERNET" />
<application
android:allowBackup="true"

View File

@ -4,13 +4,25 @@ import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.Toast;
import com.example.listify.adapter.SearchResultsListAdapter;
import com.example.listify.model.Product;
import java.util.ArrayList;
import java.util.List;
public class SearchResults extends AppCompatActivity {
private ListView listView;
private SearchResultsListAdapter searchResultsListAdapter;
private List<Product> 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;
}
}

View File

@ -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<Product> productList;
private LayoutInflater inflater;
public SearchResultsListAdapter(Activity activity, List<Product> 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;
}
}

View File

@ -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<String, Void, Bitmap> {
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);
}
}

View File

@ -0,0 +1,5 @@
<vector android:height="600dp" android:tint="?attr/colorControlNormal"
android:viewportHeight="24" android:viewportWidth="24"
android:width="600dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M21,5v6.59l-3,-3.01 -4,4.01 -4,-4 -4,4 -3,-3.01L3,5c0,-1.1 0.9,-2 2,-2h14c1.1,0 2,0.9 2,2zM18,11.42l3,3.01L21,19c0,1.1 -0.9,2 -2,2L5,21c-1.1,0 -2,-0.9 -2,-2v-6.58l3,2.99 4,-4 4,4 4,-3.99z"/>
</vector>

View File

@ -1,6 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<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"
app:layout_behavior="@string/appbar_scrolling_view_behavior"></androidx.constraintlayout.widget.ConstraintLayout>
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">
<ListView
android:id="@+id/search_results_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="@color/list_divider"
android:dividerHeight="1dp"/>
<!-- android:listSelector="@drawable/list_row_selector"-->
<!-- />-->
</RelativeLayout>

View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="6dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:orientation="vertical">
<ImageView
android:id="@+id/item_image"
android:layout_width="60dp"
android:layout_height="40dp"
android:src="@drawable/ic_baseline_broken_image_600"
android:layout_alignTop="@+id/linearLayout"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/item_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:layout_centerHorizontal="true"
android:text=""
android:textSize="15dp"
android:layout_centerInParent="true"
android:gravity="center"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:id="@+id/linearLayout">
<TextView
android:id="@+id/item_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:text="" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true">
<TextView
android:id="@+id/item_price_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Price: "
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:id="@+id/item_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:text="" />
</LinearLayout>
</RelativeLayout>

View File

@ -3,4 +3,11 @@
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
<color name="tabsScrollColor">#2097ff</color>
<color name="list_divider">#d9d9d9</color>
<color name="list_row_start_color">#ffffff</color>
<color name="list_row_end_color">#ffffff</color>
<color name="list_row_hover_start_color">#ebeef0</color>
<color name="list_row_hover_end_color">#1c9ef4</color>
</resources>