mirror of
https://github.com/ClaytonWWilson/Listify.git
synced 2025-12-16 18:48:48 +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"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.example.listify">
|
package="com.example.listify">
|
||||||
|
<uses-permission android:name = "android.permission.INTERNET" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
|||||||
@ -4,13 +4,25 @@ import android.os.Bundle;
|
|||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.AdapterView;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.SearchView;
|
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 {
|
public class SearchResults extends AppCompatActivity {
|
||||||
|
private ListView listView;
|
||||||
|
private SearchResultsListAdapter searchResultsListAdapter;
|
||||||
|
private List<Product> productList = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
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
|
// Handle searches
|
||||||
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
|
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onQueryTextSubmit(String query) {
|
public boolean onQueryTextSubmit(String query) {
|
||||||
|
|
||||||
doSearch(query);
|
doSearch(query);
|
||||||
// TODO: Display the search results listview
|
// TODO: Display the search results listview
|
||||||
return false;
|
return false;
|
||||||
@ -76,7 +99,20 @@ public class SearchResults extends AppCompatActivity {
|
|||||||
// TODO: This function will handle the search operation with the database and return
|
// TODO: This function will handle the search operation with the database and return
|
||||||
// a listview to caller to be displayed
|
// a listview to caller to be displayed
|
||||||
private ListView doSearch(String query) {
|
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;
|
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"?>
|
<?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:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="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="colorPrimary">#6200EE</color>
|
||||||
<color name="colorPrimaryDark">#3700B3</color>
|
<color name="colorPrimaryDark">#3700B3</color>
|
||||||
<color name="colorAccent">#03DAC5</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>
|
</resources>
|
||||||
Loading…
Reference in New Issue
Block a user