From 9b09517c5e772ec09f28f04d6e69509fd687de97 Mon Sep 17 00:00:00 2001 From: phanhuuloi27 <73208452+Nezumi2711@users.noreply.github.com> Date: Mon, 6 Jun 2022 12:27:54 +0700 Subject: [PATCH] Show notification when order status change --- Foodify/app/src/main/AndroidManifest.xml | 6 + .../com/waterbase/foodify/Common/Common.java | 9 ++ .../main/java/com/waterbase/foodify/Home.java | 5 + .../com/waterbase/foodify/OrderStatus.java | 16 +-- .../foodify/Service/ListenOrder.java | 105 ++++++++++++++++++ FoodifyServer/app/build.gradle | 1 + .../main/res/layout/update_order_layout.xml | 15 +++ 7 files changed, 147 insertions(+), 10 deletions(-) create mode 100644 Foodify/app/src/main/java/com/waterbase/foodify/Service/ListenOrder.java create mode 100644 FoodifyServer/app/src/main/res/layout/update_order_layout.xml diff --git a/Foodify/app/src/main/AndroidManifest.xml b/Foodify/app/src/main/AndroidManifest.xml index f09237c..f92dafa 100644 --- a/Foodify/app/src/main/AndroidManifest.xml +++ b/Foodify/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ package="com.waterbase.foodify"> + + + diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Common/Common.java b/Foodify/app/src/main/java/com/waterbase/foodify/Common/Common.java index 6f59ab3..3ee38c3 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Common/Common.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Common/Common.java @@ -4,4 +4,13 @@ import com.waterbase.foodify.Model.User; public class Common { public static User currentUser; + + public static String convertCodeToStatus(String status) { + if(status.equals("0")) + return "Placed"; + else if(status.equals("1")) + return "On my way"; + else + return "Shipped"; + } } diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Home.java b/Foodify/app/src/main/java/com/waterbase/foodify/Home.java index d7c0a39..e792696 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Home.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Home.java @@ -25,6 +25,7 @@ import com.squareup.picasso.Picasso; import com.waterbase.foodify.Common.Common; import com.waterbase.foodify.Interface.ItemClickListener; import com.waterbase.foodify.Model.Category; +import com.waterbase.foodify.Service.ListenOrder; import com.waterbase.foodify.ViewHolder.MenuViewHolder; @@ -73,6 +74,10 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati View headerView = navigationView.getHeaderView(0); TextView navUserName = (TextView) headerView.findViewById(R.id.txtFullName); navUserName.setText(Common.currentUser.getName()); + + //Register Service + Intent service = new Intent(Home.this, ListenOrder.class); + startService(service); } private void loadMenu() { diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java b/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java index c6661ee..ae349d6 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java @@ -39,6 +39,11 @@ public class OrderStatus extends AppCompatActivity { recyclerView.setHasFixedSize(true); layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); + + if(getIntent() == null) + loadOrders(Common.currentUser.getPhone()); + else + loadOrders(getIntent().getStringExtra("userPhone")); loadOrders(Common.currentUser.getPhone()); @@ -61,7 +66,7 @@ public class OrderStatus extends AppCompatActivity { @Override protected void populateViewHolder(OrderViewHolder orderViewHolder, Request model, int i) { orderViewHolder.txtOrderId.setText(adapter.getRef(i).getKey()); - orderViewHolder.txtOrderStatus.setText(converCodeToStatus(model.getStatus())); + orderViewHolder.txtOrderStatus.setText(Common.convertCodeToStatus(model.getStatus())); orderViewHolder.txtOrderAddress.setText(model.getAddress()); orderViewHolder.txtOrderPhone.setText(model.getPhone()); } @@ -69,15 +74,6 @@ public class OrderStatus extends AppCompatActivity { recyclerView.setAdapter(adapter); } - private String converCodeToStatus(String status) { - if(status.equals("0")) - return "Placed"; - else if(status.equals("1")) - return "On my way"; - else - return "Shipped"; - } - @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Service/ListenOrder.java b/Foodify/app/src/main/java/com/waterbase/foodify/Service/ListenOrder.java new file mode 100644 index 0000000..029d211 --- /dev/null +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Service/ListenOrder.java @@ -0,0 +1,105 @@ +package com.waterbase.foodify.Service; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.os.IBinder; + +import androidx.core.app.NotificationCompat; + +import com.google.firebase.database.ChildEventListener; +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.waterbase.foodify.Common.Common; +import com.waterbase.foodify.Model.Request; +import com.waterbase.foodify.OrderStatus; +import com.waterbase.foodify.R; + +public class ListenOrder extends Service implements ChildEventListener { + + FirebaseDatabase db; + DatabaseReference requests; + + public ListenOrder() { + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onCreate() { + super.onCreate(); + db = FirebaseDatabase.getInstance(); + requests = db.getReference("Requests"); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + requests.addChildEventListener(this); + return super.onStartCommand(intent, flags, startId); + } + + @Override + public void onChildAdded(DataSnapshot dataSnapshot, String s) { + + } + + @Override + public void onChildChanged(DataSnapshot dataSnapshot, String s) { + Request request = dataSnapshot.getValue(Request.class); + showNotification(dataSnapshot.getKey(), request); + } + + private void showNotification(String key, Request request) { + Intent intent=new Intent(getBaseContext(), OrderStatus.class); + intent.putExtra("userPhone",request.getPhone()); //we need put user phone + PendingIntent contentIntent=PendingIntent + .getActivity(getBaseContext(),0,intent,PendingIntent.FLAG_UPDATE_CURRENT); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ + NotificationChannel channel= + new NotificationChannel("foodStatus","foodStatus",NotificationManager.IMPORTANCE_DEFAULT); + NotificationManager notificationManager=getSystemService(NotificationManager.class); + notificationManager.createNotificationChannel(channel); + + } + + NotificationCompat.Builder builder=new NotificationCompat.Builder(getBaseContext(),"foodStatus"); + builder.setAutoCancel(true) + .setDefaults(Notification.DEFAULT_ALL) + .setWhen(System.currentTimeMillis()) + .setTicker("food") + .setContentInfo("your order was updated") + .setContentText("Order #"+key+" was updated to "+ Common.convertCodeToStatus(request.getStatus())) + .setContentIntent(contentIntent) + .setContentInfo("Info") + .setSmallIcon(R.mipmap.ic_launcher); + + NotificationManager notificationManager=(NotificationManager)getBaseContext().getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(1,builder.build()); + } + + @Override + public void onChildRemoved(DataSnapshot dataSnapshot) { + + } + + @Override + public void onChildMoved(DataSnapshot dataSnapshot, String s) { + + } + + @Override + public void onCancelled(DatabaseError databaseError) { + + } +} \ No newline at end of file diff --git a/FoodifyServer/app/build.gradle b/FoodifyServer/app/build.gradle index 238cb9c..f62faf0 100644 --- a/FoodifyServer/app/build.gradle +++ b/FoodifyServer/app/build.gradle @@ -53,6 +53,7 @@ dependencies { implementation 'com.google.firebase:firebase-storage:10.2.0' implementation 'com.github.jd-alexander:android-flat-button:v1.1' implementation 'com.rengwuxian.materialedittext:library:2.1.4' + implementation 'com.jaredrummler:material-spinner:1.1.0' } apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/FoodifyServer/app/src/main/res/layout/update_order_layout.xml b/FoodifyServer/app/src/main/res/layout/update_order_layout.xml new file mode 100644 index 0000000..37dbd32 --- /dev/null +++ b/FoodifyServer/app/src/main/res/layout/update_order_layout.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file