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 adapter; //Search Functuanality FirebaseRecyclerAdapter searchAdapter; List 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 suggest = new ArrayList (); 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.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.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); } }