mirror of
https://github.com/ClaytonWWilson/Listify.git
synced 2025-12-16 10:48:46 +00:00
Search page displays item list view with hardcoded results
This commit is contained in:
parent
e8dad9e03b
commit
dab57c1394
@ -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"
|
||||
|
||||
@ -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) {
|
||||
@ -49,10 +61,21 @@ public class SearchResults extends AppCompatActivity {
|
||||
}
|
||||
});
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
168
Listify/app/src/main/java/com/example/listify/model/Product.java
Normal file
168
Listify/app/src/main/java/com/example/listify/model/Product.java
Normal 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);
|
||||
}
|
||||
}
|
||||
@ -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>
|
||||
@ -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>
|
||||
72
Listify/app/src/main/res/layout/search_list_item.xml
Normal file
72
Listify/app/src/main/res/layout/search_list_item.xml
Normal 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>
|
||||
@ -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>
|
||||
Loading…
Reference in New Issue
Block a user