Facebook
From Hamimah Ismail, 6 Years ago, written in JavaScript.
Embed
Download Paste or View Raw
Hits: 259
  1. package com.example.garella.kftta;
  2.  
  3. import android.content.Intent;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.support.v7.widget.LinearLayoutManager;
  7. import android.support.v7.widget.RecyclerView;
  8. import android.text.Editable;
  9. import android.text.TextWatcher;
  10. import android.util.Log;
  11. import android.view.View;
  12. import android.widget.Toast;
  13.  
  14. import com.example.garella.kftta.Interface.ItemClickListener;
  15. import com.example.garella.kftta.Model.Food;
  16. import com.example.garella.kftta.ViewHolder.FoodViewHolder;
  17. import com.firebase.ui.database.FirebaseRecyclerAdapter;
  18. import com.google.firebase.database.DataSnapshot;
  19. import com.google.firebase.database.DatabaseError;
  20. import com.google.firebase.database.DatabaseReference;
  21. import com.google.firebase.database.FirebaseDatabase;
  22. import com.google.firebase.database.ValueEventListener;
  23. import com.mancj.materialsearchbar.MaterialSearchBar;
  24. import com.squareup.picasso.Picasso;
  25.  
  26. import java.util.ArrayList;
  27. import java.util.List;
  28.  
  29. public class FoodList extends AppCompatActivity {
  30.  
  31.     RecyclerView recyclerView;
  32.     RecyclerView.LayoutManager layoutManager;
  33.  
  34.     FirebaseDatabase database;
  35.     DatabaseReference foodList;
  36.  
  37.     String foodtruckId="";
  38.  
  39.     FirebaseRecyclerAdapter<Food,FoodViewHolder> adapter;
  40.  
  41.     //Search Functuanality
  42.     FirebaseRecyclerAdapter<Food,FoodViewHolder> searchAdapter;
  43.     List<String> suggestList = new ArrayList<> ();
  44.     MaterialSearchBar materialSearchBar;
  45.  
  46.  
  47.  
  48.  
  49.     @Override
  50.     protected void onCreate(Bundle savedInstanceState) {
  51.         super.onCreate (savedInstanceState);
  52.  
  53.         setContentView (R.layout.activity_food_list);
  54.  
  55.         //Firebase
  56.         database = FirebaseDatabase.getInstance ();
  57.         foodList = database.getReference ("Food");
  58.  
  59.          recyclerView = (RecyclerView)findViewById (R.id.recycler_food);
  60.          recyclerView.setHasFixedSize (true);
  61.          layoutManager = new LinearLayoutManager (this);
  62.          recyclerView.setLayoutManager (layoutManager);
  63.  
  64.  
  65.  
  66.         //get intent here
  67.         if(getIntent () != null)
  68.             foodtruckId = getIntent ().getStringExtra ("FoodTruckId");
  69.         if (foodtruckId != null && !foodtruckId.isEmpty())
  70.  
  71.         {
  72.             loadListFood(foodtruckId);
  73.         }
  74.  
  75.         //Search
  76.         materialSearchBar = (MaterialSearchBar)findViewById (R.id.searchBar);
  77.         materialSearchBar.setHint ("Enter your food");
  78.  
  79.         loadSuggest();
  80.         materialSearchBar.setLastSuggestions (suggestList);
  81.         materialSearchBar.setCardViewElevation (10);
  82.         materialSearchBar.addTextChangeListener (new TextWatcher () {
  83.             @Override
  84.             public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
  85.  
  86.             }
  87.  
  88.             @Override
  89.             public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
  90.                 //When user type their text, we will change suggest list
  91.  
  92.                 List<String> suggest = new ArrayList<String> ();
  93.                 for(String search:suggestList)
  94.                 {
  95.                     if(search.toLowerCase ().contains (materialSearchBar.getText ().toLowerCase ()))
  96.                         suggest.add (search);
  97.                 }
  98.                 materialSearchBar.setLastSuggestions (suggest);
  99.             }
  100.  
  101.             @Override
  102.             public void afterTextChanged(Editable editable) {
  103.  
  104.             }
  105.         });
  106.         materialSearchBar.setOnSearchActionListener (new MaterialSearchBar.OnSearchActionListener () {
  107.             @Override
  108.             public void onSearchStateChanged(boolean enabled) {
  109.                 //When SEARCH BAR is close
  110.                 //Restore original adapter
  111.                 if(!enabled)
  112.                     recyclerView.setAdapter (adapter);
  113.             }
  114.  
  115.             @Override
  116.             public void onSearchConfirmed(CharSequence text) {
  117.                 //When search finish
  118.                 //show result of search adapter
  119.  
  120.                 startSearch (text);
  121.  
  122.             }
  123.  
  124.             @Override
  125.             public void onButtonClicked(int buttonCode) {
  126.  
  127.             }
  128.         });
  129.  
  130.     }
  131.  
  132.     private void startSearch(CharSequence text) {
  133.         searchAdapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder> (
  134.                 Food.class,
  135.                 R.layout.food_item,
  136.                 FoodViewHolder.class,
  137.                 foodList.orderByChild ("Name").equalTo (text.toString ())
  138.         ) {
  139.             @Override
  140.             protected void populateViewHolder(FoodViewHolder viewHolder, Food model, int position) {
  141.  
  142.                 viewHolder.food_name.setText (model.getName ());
  143.                 Picasso.with (getBaseContext ()).load (model.getImage ())
  144.                         .into (viewHolder.food_image);
  145.  
  146.                 final Food local = model;
  147.                 viewHolder.setItemClickListener (new ItemClickListener () {
  148.                     @Override
  149.                     public void onClick(View view, int position, boolean isLongClick) {
  150.                         //start new activity
  151.                         Intent foodDetail = new Intent (FoodList.this,FoodDetail.class);
  152.                         foodDetail.putExtra ("FoodId",searchAdapter.getRef (position).getKey ()); //send Food Id to new activity
  153.                         startActivity (foodDetail);
  154.                     }
  155.                 });
  156.  
  157.  
  158.             }
  159.         };
  160.         recyclerView.setAdapter (searchAdapter);
  161.     }
  162.  
  163.     private void loadSuggest() {
  164.         foodList.orderByChild ("MenuId").equalTo (foodtruckId)
  165.                 .addValueEventListener (new ValueEventListener () {
  166.                     @Override
  167.                     public void onDataChange(DataSnapshot dataSnapshot) {
  168.                         for(DataSnapshot postSnapshot:dataSnapshot.getChildren ())
  169.                         {
  170.                             Food item = postSnapshot.getValue (Food.class);
  171.                             suggestList.add (item.getName ());
  172.                         }
  173.                     }
  174.  
  175.                     @Override
  176.                     public void onCancelled(DatabaseError databaseError) {
  177.  
  178.                     }
  179.                 });
  180.     }
  181.  
  182.     private void loadListFood(String foodtruckId) {
  183.  
  184.         adapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder> (Food.class,
  185.                 R.layout.food_item,
  186.                 FoodViewHolder.class, foodList.orderByChild ("MenuId").equalTo (foodtruckId)
  187.         ) {
  188.             @Override
  189.             protected void populateViewHolder(FoodViewHolder viewHolder, Food model, int position) {
  190.  
  191.                 viewHolder.food_name.setText (model.getName ());
  192.                 Picasso.with (getBaseContext ()).load (model.getImage ())
  193.                         .into (viewHolder.food_image);
  194.  
  195.                 final Food local = model;
  196.                 viewHolder.setItemClickListener (new ItemClickListener () {
  197.                     @Override
  198.                     public void onClick(View view, int position, boolean isLongClick) {
  199.                         //start new activity
  200.                         Intent foodDetail = new Intent (FoodList.this,FoodDetail.class);
  201.                         foodDetail.putExtra ("FoodId",adapter.getRef (position).getKey ()); //send Food Id to new activity
  202.                         startActivity (foodDetail);
  203.                     }
  204.                 });
  205.  
  206.             }
  207.         };
  208.  
  209.         //set Adapter
  210.         recyclerView.setAdapter (adapter);
  211.     }
  212. }