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 10190ef..23ee1c7 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 @@ -3,15 +3,21 @@ package com.waterbase.foodify.Common; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import android.text.format.DateFormat; import com.waterbase.foodify.Model.User; import com.waterbase.foodify.Remote.APIService; import com.waterbase.foodify.Remote.IGoogleService; import com.waterbase.foodify.Remote.RetrofitClient; +import java.util.Calendar; +import java.util.Locale; + public class Common { public static User currentUser; + public static String PHONE_TEXT = "userPhone"; + public static String topicName = "News"; private static final String BASE_URL = "https://fcm.googleapis.com/"; @@ -55,4 +61,12 @@ public class Common { return false; } + + public static String getDate(long time){ + Calendar calendar = Calendar.getInstance(Locale.ENGLISH); + calendar.setTimeInMillis(time); + StringBuilder date = new StringBuilder( + DateFormat.format("dd-MM-yyyy HH:mm", calendar).toString()); + return date.toString(); + } } diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Helper/NotificationHelper.java b/Foodify/app/src/main/java/com/waterbase/foodify/Helper/NotificationHelper.java new file mode 100644 index 0000000..1876ec6 --- /dev/null +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Helper/NotificationHelper.java @@ -0,0 +1,68 @@ +package com.waterbase.foodify.Helper; + + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.ContextWrapper; +import android.net.Uri; +import android.os.Build; + +import androidx.annotation.RequiresApi; + +import com.waterbase.foodify.R; + +public class NotificationHelper extends ContextWrapper { + + private static final String CHANNEL_ID = "Foodify"; + private static final String CHANNEL_NAME = "Notification"; + + private NotificationManager manager; + + public NotificationHelper(Context base) { + super(base); + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + createChannel(); + } + + @RequiresApi(api = Build.VERSION_CODES.O) + private void createChannel() { + NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); + channel.enableLights(false); + channel.enableVibration(true); + channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE); + + getManager().createNotificationChannel(channel); + } + + public NotificationManager getManager() { + if(manager == null) + manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + return manager; + } + + @RequiresApi(api = Build.VERSION_CODES.O) + public Notification.Builder getFoodifyChannelNotification(String title, String body, PendingIntent contentIntent, Uri soundUri) + { + return new Notification.Builder(getApplicationContext(), CHANNEL_ID) + .setContentIntent(contentIntent) + .setContentTitle(title) + .setContentText(body) + .setSmallIcon(R.mipmap.ic_launcher) + .setSound(soundUri) + .setAutoCancel(false); + } + + @RequiresApi(api = Build.VERSION_CODES.O) + public Notification.Builder getFoodifyChannelNotification(String title, String body, Uri soundUri) + { + return new Notification.Builder(getApplicationContext(), CHANNEL_ID) + .setContentTitle(title) + .setContentText(body) + .setSmallIcon(R.mipmap.ic_launcher) + .setSound(soundUri) + .setAutoCancel(false); + } +} diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Model/DataMessage.java b/Foodify/app/src/main/java/com/waterbase/foodify/Model/DataMessage.java new file mode 100644 index 0000000..317cd7d --- /dev/null +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Model/DataMessage.java @@ -0,0 +1,33 @@ +package com.waterbase.foodify.Model; + +import java.util.Map; + +public class DataMessage { + + public String to; + public Map data; + + public DataMessage() { + } + + public DataMessage(String to, Map data) { + this.to = to; + this.data = data; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public Map getData() { + return data; + } + + public void setData(Map data) { + this.data = data; + } +} diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Model/Notification.java b/Foodify/app/src/main/java/com/waterbase/foodify/Model/Notification.java deleted file mode 100644 index 1708ae9..0000000 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Model/Notification.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.waterbase.foodify.Model; - -public class Notification { - public String body; - public String title; - - public Notification(String body, String title) { - this.body = body; - this.title = title; - } - - public String getBody() { - return body; - } - - public void setBody(String body) { - this.body = body; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } -} diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Model/Sender.java b/Foodify/app/src/main/java/com/waterbase/foodify/Model/Sender.java deleted file mode 100644 index faa7a1d..0000000 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Model/Sender.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.waterbase.foodify.Model; - -public class Sender { - public String to; - public Notification notification; - - public Sender(String to, Notification notification) { - this.to = to; - this.notification = notification; - } -} \ No newline at end of file diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/OrderDetail.java b/Foodify/app/src/main/java/com/waterbase/foodify/OrderDetail.java index 5687685..e8b978c 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/OrderDetail.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/OrderDetail.java @@ -28,10 +28,9 @@ import com.google.firebase.database.Query; import com.google.firebase.database.ValueEventListener; import com.waterbase.foodify.Common.Common; import com.waterbase.foodify.Database.Database; +import com.waterbase.foodify.Model.DataMessage; import com.waterbase.foodify.Model.MyResponse; -import com.waterbase.foodify.Model.Notification; import com.waterbase.foodify.Model.Request; -import com.waterbase.foodify.Model.Sender; import com.waterbase.foodify.Model.Token; import com.waterbase.foodify.Remote.APIService; import com.waterbase.foodify.ViewHolder.OrderDetailAdapter; @@ -39,6 +38,9 @@ import com.waterbase.foodify.Zalopay.Api.CreateOrder; import org.json.JSONObject; +import java.util.HashMap; +import java.util.Map; + import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -205,10 +207,14 @@ public class OrderDetail extends AppCompatActivity { Token serverToken = postSnapShot.getValue(Token.class); //Create raw payload to send - Notification notification = new Notification("Foodify", "Bạn có 1 đơn hàng mới " + order_number); - Sender content = new Sender(serverToken.getToken(), notification); +// Notification notification = new Notification("Foodify", "Bạn có 1 đơn hàng mới " + order_number); +// Sender content = new Sender(serverToken.getToken(), notification); + Map dataSend = new HashMap<>(); + dataSend.put("title", "Foodify"); + dataSend.put("message", "Bạn có 1 đơn hàng mới +" + order_number); + DataMessage dataMessage = new DataMessage(serverToken.getToken(), dataSend); - mService.sendNotification(content) + mService.sendNotification(dataMessage) .enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { 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 f02b349..a598df4 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java @@ -97,6 +97,7 @@ public class OrderStatus extends AppCompatActivity { orderViewHolder.txtOrderStatus.setText(Common.convertCodeToStatus(model.getStatus())); orderViewHolder.txtOrderAddress.setText(model.getAddress()); orderViewHolder.txtOrderPhone.setText(model.getPhone()); + orderViewHolder.txtOrderDate.setText(Common.getDate(Long.parseLong(adapter.getRef(i).getKey()))); } @NonNull diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Remote/APIService.java b/Foodify/app/src/main/java/com/waterbase/foodify/Remote/APIService.java index 1e8ebc4..305cfa3 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Remote/APIService.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Remote/APIService.java @@ -1,7 +1,7 @@ package com.waterbase.foodify.Remote; +import com.waterbase.foodify.Model.DataMessage; import com.waterbase.foodify.Model.MyResponse; -import com.waterbase.foodify.Model.Sender; import retrofit2.Call; import retrofit2.http.Body; @@ -20,5 +20,5 @@ public interface APIService { @POST("fcm/send") - Call sendNotification(@Body Sender body); + Call sendNotification(@Body DataMessage body); } diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Service/MyFirebaseMessaging.java b/Foodify/app/src/main/java/com/waterbase/foodify/Service/MyFirebaseMessaging.java index 6bc7e4c..35811bf 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Service/MyFirebaseMessaging.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Service/MyFirebaseMessaging.java @@ -11,48 +11,87 @@ import android.net.Uri; import android.os.Build; import android.util.Log; +import androidx.annotation.RequiresApi; import androidx.core.app.NotificationCompat; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; +import com.waterbase.foodify.Common.Common; +import com.waterbase.foodify.Helper.NotificationHelper; import com.waterbase.foodify.Home; import com.waterbase.foodify.OrderStatus; import com.waterbase.foodify.R; +import java.util.Map; +import java.util.Random; + public class MyFirebaseMessaging extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { super.onMessageReceived(remoteMessage); - showNotification(remoteMessage); - Log.e("INFO", remoteMessage.getNotification().getBody()); + if (remoteMessage.getData() != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + showNotificationAPI26(remoteMessage); + else + showNotification(remoteMessage); + } + } + + @RequiresApi(api = Build.VERSION_CODES.O) + private void showNotificationAPI26(RemoteMessage remoteMessage) { + Map data = remoteMessage.getData(); + String title = data.get("title"); + String message = data.get("message"); + + //Fix click to notification go to Order list + PendingIntent pendingIntent; + NotificationHelper helper; + Notification.Builder builder; + + if(Common.currentUser != null) + { + Intent intent = new Intent(this, OrderStatus.class); + intent.putExtra(Common.PHONE_TEXT, Common.currentUser.getPhone()); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); + Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + helper = new NotificationHelper(this); + builder = helper.getFoodifyChannelNotification(title, message, pendingIntent, defaultSoundUri); + + helper.getManager().notify(new Random().nextInt(), builder.build()); + } else { + Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + helper = new NotificationHelper(this); + builder = helper.getFoodifyChannelNotification(title, message, defaultSoundUri); + + helper.getManager().notify(new Random().nextInt(), builder.build()); + } } private void showNotification(RemoteMessage remoteMessage) { - RemoteMessage.Notification notification = remoteMessage.getNotification(); + + Map data = remoteMessage.getData(); + String title = data.get("title"); + String message = data.get("message"); + Intent intent = new Intent(this, Home.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); - 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); - } - Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - NotificationCompat.Builder builder=new NotificationCompat.Builder(getBaseContext(),"foodStatus"); + NotificationCompat.Builder builder = new NotificationCompat.Builder(getBaseContext(), "foodStatus"); builder.setAutoCancel(true) .setDefaults(Notification.DEFAULT_ALL) - .setContentText(notification.getBody()) + .setContentText(message) .setContentIntent(pendingIntent) - .setContentTitle(notification.getTitle()) + .setContentTitle(title) .setSound(defaultSoundUri) .setSmallIcon(R.mipmap.ic_launcher_round); - NotificationManager notificationManager=(NotificationManager)getBaseContext().getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(1,builder.build()); + NotificationManager notificationManager = (NotificationManager) getBaseContext().getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(1, builder.build()); } } diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderViewHolder.java b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderViewHolder.java index 360b65e..2e72831 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderViewHolder.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/OrderViewHolder.java @@ -11,7 +11,7 @@ import com.waterbase.foodify.R; public class OrderViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - public TextView txtOrderId, txtOrderStatus, txtOrderPhone, txtOrderAddress; + public TextView txtOrderId, txtOrderStatus, txtOrderPhone, txtOrderAddress, txtOrderDate; private ItemClickListener itemClickListener; @@ -22,6 +22,7 @@ public class OrderViewHolder extends RecyclerView.ViewHolder implements View.OnC txtOrderId = (TextView) itemView.findViewById(R.id.order_id); txtOrderStatus = (TextView) itemView.findViewById(R.id.order_status); txtOrderPhone = (TextView) itemView.findViewById(R.id.order_phone); + txtOrderDate = (TextView) itemView.findViewById(R.id.order_date); itemView.setOnClickListener(this); } diff --git a/Foodify/app/src/main/res/layout/order_layout.xml b/Foodify/app/src/main/res/layout/order_layout.xml index 5b70e52..a196988 100644 --- a/Foodify/app/src/main/res/layout/order_layout.xml +++ b/Foodify/app/src/main/res/layout/order_layout.xml @@ -33,6 +33,16 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" /> + + = Build.VERSION_CODES.O) + createChannel(); + } + + @RequiresApi(api = Build.VERSION_CODES.O) + private void createChannel() { + NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); + channel.enableLights(false); + channel.enableVibration(true); + channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE); + + getManager().createNotificationChannel(channel); + } + + public NotificationManager getManager() { + if(manager == null) + manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + return manager; + } + + @RequiresApi(api = Build.VERSION_CODES.O) + public Notification.Builder getFoodifyChannelNotification(String title, String body, PendingIntent contentIntent, Uri soundUri) + { + return new Notification.Builder(getApplicationContext(), CHANNEL_ID) + .setContentIntent(contentIntent) + .setContentTitle(title) + .setContentText(body) + .setSmallIcon(R.mipmap.ic_launcher) + .setSound(soundUri) + .setAutoCancel(false); + } + + @RequiresApi(api = Build.VERSION_CODES.O) + public Notification.Builder getFoodifyChannelNotification(String title, String body, Uri soundUri) + { + return new Notification.Builder(getApplicationContext(), CHANNEL_ID) + .setContentTitle(title) + .setContentText(body) + .setSmallIcon(R.mipmap.ic_launcher) + .setSound(soundUri) + .setAutoCancel(false); + } +} \ No newline at end of file diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/DataMessage.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/DataMessage.java new file mode 100644 index 0000000..427e1d0 --- /dev/null +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/DataMessage.java @@ -0,0 +1,33 @@ +package com.waterbase.foodifyServer.Model; + +import java.util.Map; + +public class DataMessage { + + public String to; + public Map data; + + public DataMessage() { + } + + public DataMessage(String to, Map data) { + this.to = to; + this.data = data; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public Map getData() { + return data; + } + + public void setData(Map data) { + this.data = data; + } +} diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Notification.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Notification.java deleted file mode 100644 index 2992acd..0000000 --- a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Notification.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.waterbase.foodifyServer.Model; - -public class Notification { - public String body; - public String title; - - public Notification(String body, String title) { - this.body = body; - this.title = title; - } - - public String getBody() { - return body; - } - - public void setBody(String body) { - this.body = body; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } -} diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Sender.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Sender.java deleted file mode 100644 index 3830048..0000000 --- a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Model/Sender.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.waterbase.foodifyServer.Model; - -public class Sender { - public String to; - public Notification notification; - - public Sender() { - } - - public Sender(String to, Notification notification) { - this.to = to; - this.notification = notification; - } - - public String getTo() { - return to; - } - - public void setTo(String to) { - this.to = to; - } - - public Notification getNotification() { - return notification; - } - - public void setNotification(Notification notification) { - this.notification = notification; - } -} diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/OrderStatus.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/OrderStatus.java index 54a8281..e58e35b 100644 --- a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/OrderStatus.java +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/OrderStatus.java @@ -11,7 +11,6 @@ import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; @@ -25,15 +24,16 @@ import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; import com.jaredrummler.materialspinner.MaterialSpinner; import com.waterbase.foodifyServer.Common.Common; -import com.waterbase.foodifyServer.Interface.ItemClickListener; +import com.waterbase.foodifyServer.Model.DataMessage; import com.waterbase.foodifyServer.Model.MyResponse; -import com.waterbase.foodifyServer.Model.Notification; import com.waterbase.foodifyServer.Model.Request; -import com.waterbase.foodifyServer.Model.Sender; import com.waterbase.foodifyServer.Model.Token; import com.waterbase.foodifyServer.Remote.APIService; import com.waterbase.foodifyServer.ViewHolder.OrderViewHolder; +import java.util.HashMap; +import java.util.Map; + import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -83,10 +83,15 @@ public class OrderStatus extends AppCompatActivity { @Override protected void onBindViewHolder(@NonNull OrderViewHolder viewHolder, int i, @NonNull Request model) { viewHolder.txtOrderId.setText(adapter.getRef(i).getKey()); + + viewHolder.txtOrderDate.setText(Common.getDate(Long.parseLong(adapter.getRef(i).getKey()))); + viewHolder.txtOrderStatus.setText(Common.coverCodeToStatus(model.getStatus())); viewHolder.txtOrderAddress.setText(model.getAddress()); viewHolder.txtOrderPhone.setText(model.getPhone()); + + //Event Button viewHolder.btnEdit.setOnClickListener(new View.OnClickListener() { @Override @@ -216,10 +221,14 @@ public class OrderStatus extends AppCompatActivity { Token token = postSnapShot.getValue(Token.class); //Make raw payload - Notification notification = new Notification("Foodify", "Đơn của bạn " + localKey + " đã được cập nhật!"); - Sender content = new Sender(token.getToken(), notification); +// Notification notification = new Notification("Foodify", "Đơn của bạn " + localKey + " đã được cập nhật!"); +// Sender content = new Sender(token.getToken(), notification); + Map dataSend = new HashMap<>(); + dataSend.put("title", "EDMT Dev"); + dataSend.put("message", "Đơn của bạn " + localKey + " đã được cập nhật!"); + DataMessage dataMessage = new DataMessage(token.getToken(), dataSend); - mService.sendNotification(content) + mService.sendNotification(dataMessage) .enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Remote/APIService.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Remote/APIService.java index abc39a5..b40499d 100644 --- a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Remote/APIService.java +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Remote/APIService.java @@ -1,7 +1,7 @@ package com.waterbase.foodifyServer.Remote; +import com.waterbase.foodifyServer.Model.DataMessage; import com.waterbase.foodifyServer.Model.MyResponse; -import com.waterbase.foodifyServer.Model.Sender; import retrofit2.Call; import retrofit2.http.Body; @@ -20,5 +20,5 @@ public interface APIService { @POST("fcm/send") - Call sendNotification(@Body Sender body); + Call sendNotification(@Body DataMessage body); } diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/SendMessage.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/SendMessage.java index 5c44865..d0d10b2 100644 --- a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/SendMessage.java +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/SendMessage.java @@ -8,11 +8,13 @@ import android.widget.Toast; import com.rengwuxian.materialedittext.MaterialEditText; import com.waterbase.foodifyServer.Common.Common; +import com.waterbase.foodifyServer.Model.DataMessage; import com.waterbase.foodifyServer.Model.MyResponse; -import com.waterbase.foodifyServer.Model.Notification; -import com.waterbase.foodifyServer.Model.Sender; import com.waterbase.foodifyServer.Remote.APIService; +import java.util.HashMap; +import java.util.Map; + import info.hoang8f.widget.FButton; import retrofit2.Call; import retrofit2.Callback; @@ -40,13 +42,18 @@ public class SendMessage extends AppCompatActivity { @Override public void onClick(View v) { //Create message - Notification notification = new Notification(edtTitle.getText().toString(), edtMessage.getText().toString()); +// Notification notification = new Notification(edtTitle.getText().toString(), edtMessage.getText().toString()); +// +// Sender toTopic = new Sender(); +// toTopic.to = new StringBuilder("/topics/").append(Common.topicName).toString(); +// toTopic.notification = notification; - Sender toTopic = new Sender(); - toTopic.to = new StringBuilder("/topics/").append(Common.topicName).toString(); - toTopic.notification = notification; - - mService.sendNotification(toTopic) + Map dataSend = new HashMap<>(); + dataSend.put("title",edtTitle.getText().toString()); + dataSend.put("message",edtMessage.getText().toString()); + DataMessage dataMessage = new DataMessage(new StringBuilder("/topics/").append(Common.topicName).toString(),dataSend); + + mService.sendNotification(dataMessage) .enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Service/MyFirebaseMessaging.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Service/MyFirebaseMessaging.java index c6bce1f..897d312 100644 --- a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Service/MyFirebaseMessaging.java +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/Service/MyFirebaseMessaging.java @@ -11,46 +11,86 @@ import android.net.Uri; import android.os.Build; import android.util.Log; +import androidx.annotation.RequiresApi; import androidx.core.app.NotificationCompat; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; +import com.waterbase.foodifyServer.Common.Common; +import com.waterbase.foodifyServer.Helper.NotificationHelper; import com.waterbase.foodifyServer.Home; +import com.waterbase.foodifyServer.OrderStatus; import com.waterbase.foodifyServer.R; +import java.util.Map; +import java.util.Random; + public class MyFirebaseMessaging extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { super.onMessageReceived(remoteMessage); - showNotification(remoteMessage); - Log.e("INFO", remoteMessage.getNotification().getBody()); + if (remoteMessage.getData() != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + showNotificationAPI26(remoteMessage); + else + showNotification(remoteMessage); + } + } + + @RequiresApi(api = Build.VERSION_CODES.O) + private void showNotificationAPI26(RemoteMessage remoteMessage) { + Map data = remoteMessage.getData(); + String title = data.get("title"); + String message = data.get("message"); + + //Fix click to notification go to Order list + PendingIntent pendingIntent; + NotificationHelper helper; + Notification.Builder builder; + + if(Common.currentUser != null) + { + Intent intent = new Intent(this, OrderStatus.class); + intent.putExtra(Common.PHONE_TEXT, Common.currentUser.getPhone()); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); + Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + + helper = new NotificationHelper(this); + builder = helper.getFoodifyChannelNotification(title, message, pendingIntent, defaultSoundUri); + + helper.getManager().notify(new Random().nextInt(), builder.build()); + } else { + Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + helper = new NotificationHelper(this); + builder = helper.getFoodifyChannelNotification(title, message, defaultSoundUri); + + helper.getManager().notify(new Random().nextInt(), builder.build()); + } } private void showNotification(RemoteMessage remoteMessage) { - RemoteMessage.Notification notification = remoteMessage.getNotification(); + + Map data = remoteMessage.getData(); + String title = data.get("title"); + String message = data.get("message"); + Intent intent = new Intent(this, Home.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); - 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); - } - Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - NotificationCompat.Builder builder=new NotificationCompat.Builder(getBaseContext(),"foodStatus"); + NotificationCompat.Builder builder = new NotificationCompat.Builder(getBaseContext(), "foodStatus"); builder.setAutoCancel(true) .setDefaults(Notification.DEFAULT_ALL) - .setContentText(notification.getBody()) + .setContentText(message) .setContentIntent(pendingIntent) - .setContentTitle(notification.getTitle()) + .setContentTitle(title) .setSound(defaultSoundUri) .setSmallIcon(R.mipmap.ic_launcher_round); - NotificationManager notificationManager=(NotificationManager)getBaseContext().getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(1,builder.build()); + NotificationManager notificationManager = (NotificationManager) getBaseContext().getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(1, builder.build()); } } diff --git a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/ViewHolder/OrderViewHolder.java b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/ViewHolder/OrderViewHolder.java index 531c846..6ac414d 100644 --- a/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/ViewHolder/OrderViewHolder.java +++ b/FoodifyServer/app/src/main/java/com/waterbase/foodifyServer/ViewHolder/OrderViewHolder.java @@ -13,7 +13,7 @@ import com.waterbase.foodifyServer.R; public class OrderViewHolder extends RecyclerView.ViewHolder{ - public TextView txtOrderId, txtOrderStatus, txtOrderPhone, txtOrderAddress; + public TextView txtOrderId, txtOrderStatus, txtOrderPhone, txtOrderAddress, txtOrderDate; public Button btnEdit, btnRemove, btnDetail, btnDirection; @@ -24,6 +24,7 @@ public class OrderViewHolder extends RecyclerView.ViewHolder{ txtOrderId = (TextView) itemView.findViewById(R.id.order_id); txtOrderStatus = (TextView) itemView.findViewById(R.id.order_status); txtOrderPhone = (TextView) itemView.findViewById(R.id.order_phone); + txtOrderDate = (TextView) itemView.findViewById(R.id.order_date); btnEdit = (Button) itemView.findViewById(R.id.btnEdit); btnDetail = (Button)itemView.findViewById(R.id.btnDetail); diff --git a/FoodifyServer/app/src/main/res/layout/order_layout.xml b/FoodifyServer/app/src/main/res/layout/order_layout.xml index 01b3070..13eb885 100644 --- a/FoodifyServer/app/src/main/res/layout/order_layout.xml +++ b/FoodifyServer/app/src/main/res/layout/order_layout.xml @@ -37,6 +37,16 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" /> + +