package com.example.garella.kftta;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.example.garella.kftta.Interface.ItemClickListener;
import com.example.garella.kftta.Model.Food;
import com.example.garella.kftta.ViewHolder.FoodViewHolder;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.mancj.materialsearchbar.MaterialSearchBar;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
public class FoodList extends AppCompatActivity {
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
FirebaseDatabase database;
DatabaseReference foodList;
String foodtruckId="";
FirebaseRecyclerAdapter<Food,FoodViewHolder> adapter;
//Search Functuanality
FirebaseRecyclerAdapter<Food,FoodViewHolder> searchAdapter;
List<String> suggestList = new ArrayList<> ();
MaterialSearchBar materialSearchBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_food_list);
//Firebase
database = FirebaseDatabase.getInstance ();
foodList = database.getReference ("Food");
recyclerView = (RecyclerView)findViewById (R.id.recycler_food);
recyclerView.setHasFixedSize (true);
layoutManager = new LinearLayoutManager (this);
recyclerView.setLayoutManager (layoutManager);
//get intent here
if(getIntent () != null)
foodtruckId = getIntent ().getStringExtra ("FoodTruckId");
if (foodtruckId != null && !foodtruckId.isEmpty())
{
loadListFood(foodtruckId);
}
//Search
materialSearchBar = (MaterialSearchBar)findViewById (R.id.searchBar);
materialSearchBar.setHint ("Enter your food");
loadSuggest();
materialSearchBar.setLastSuggestions (suggestList);
materialSearchBar.setCardViewElevation (10);
materialSearchBar.addTextChangeListener (new TextWatcher () {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//When user type their text, we will change suggest list
List<String> suggest = new ArrayList<String> ();
for(String search:suggestList)
{
if(search.toLowerCase ().contains (materialSearchBar.getText ().toLowerCase ()))
suggest.add (search);
}
materialSearchBar.setLastSuggestions (suggest);
}
@Override
public void afterTextChanged(Editable editable) {
}
});
materialSearchBar.setOnSearchActionListener (new MaterialSearchBar.OnSearchActionListener () {
@Override
public void onSearchStateChanged(boolean enabled) {
//When SEARCH BAR is close
//Restore original adapter
if(!enabled)
recyclerView.setAdapter (adapter);
}
@Override
public void onSearchConfirmed(CharSequence text) {
//When search finish
//show result of search adapter
startSearch (text);
}
@Override
public void onButtonClicked(int buttonCode) {
}
});
}
private void startSearch(CharSequence text) {
searchAdapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder> (
Food.class,
R.layout.food_item,
FoodViewHolder.class,
foodList.orderByChild ("Name").equalTo (text.toString ())
) {
@Override
protected void populateViewHolder(FoodViewHolder viewHolder, Food model, int position) {
viewHolder.food_name.setText (model.getName ());
Picasso.with (getBaseContext ()).load (model.getImage ())
.into (viewHolder.food_image);
final Food local = model;
viewHolder.setItemClickListener (new ItemClickListener () {
@Override
public void onClick(View view, int position, boolean isLongClick) {
//start new activity
Intent foodDetail = new Intent (FoodList.this,FoodDetail.class);
foodDetail.putExtra ("FoodId",searchAdapter.getRef (position).getKey ()); //send Food Id to new activity
startActivity (foodDetail);
}
});
}
};
recyclerView.setAdapter (searchAdapter);
}
private void loadSuggest() {
foodList.orderByChild ("MenuId").equalTo (foodtruckId)
.addValueEventListener (new ValueEventListener () {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot:dataSnapshot.getChildren ())
{
Food item = postSnapshot.getValue (Food.class);
suggestList.add (item.getName ());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void loadListFood(String foodtruckId) {
adapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder> (Food.class,
R.layout.food_item,
FoodViewHolder.class, foodList.orderByChild ("MenuId").equalTo (foodtruckId)
) {
@Override
protected void populateViewHolder(FoodViewHolder viewHolder, Food model, int position) {
viewHolder.food_name.setText (model.getName ());
Picasso.with (getBaseContext ()).load (model.getImage ())
.into (viewHolder.food_image);
final Food local = model;
viewHolder.setItemClickListener (new ItemClickListener () {
@Override
public void onClick(View view, int position, boolean isLongClick) {
//start new activity
Intent foodDetail = new Intent (FoodList.this,FoodDetail.class);
foodDetail.putExtra ("FoodId",adapter.getRef (position).getKey ()); //send Food Id to new activity
startActivity (foodDetail);
}
});
}
};
//set Adapter
recyclerView.setAdapter (adapter);
}
}