Show notification when order status change

This commit is contained in:
phanhuuloi27
2022-06-06 12:27:54 +07:00
parent 82c67f4b93
commit 9b09517c5e
7 changed files with 147 additions and 10 deletions
@@ -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";
}
}
@@ -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() {
@@ -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()) {
@@ -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) {
}
}