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