WIP #471 Handling basic notifications in native code
This commit is contained in:
parent
d3f99fb262
commit
92a1230267
@ -80,6 +80,7 @@ flutter {
|
||||
dependencies {
|
||||
implementation 'com.google.firebase:firebase-analytics:17.2.2'
|
||||
implementation 'com.google.firebase:firebase-messaging:20.2.0'
|
||||
implementation 'androidx.work:work-runtime:2.3.4'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
androidTestImplementation 'com.android.support.test:runner:1.0.2'
|
||||
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
|
||||
|
@ -48,15 +48,15 @@
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<!--
|
||||
|
||||
<service
|
||||
android:name=".java.MyFirebaseMessagingService"
|
||||
android:name=".MessagingService"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
-->
|
||||
|
||||
<service
|
||||
android:name="io.flutter.plugins.androidalarmmanager.AlarmService"
|
||||
android:permission="android.permission.BIND_JOB_SERVICE"
|
||||
|
@ -0,0 +1,95 @@
|
||||
package com.keyboardcrumbs.hassclient;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.media.RingtoneManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import android.util.Log;
|
||||
|
||||
import com.google.firebase.messaging.FirebaseMessagingService;
|
||||
import com.google.firebase.messaging.RemoteMessage;
|
||||
|
||||
import androidx.work.OneTimeWorkRequest;
|
||||
import androidx.work.WorkManager;
|
||||
|
||||
|
||||
public class MessagingService extends FirebaseMessagingService {
|
||||
|
||||
private static final String TAG = "MessagingService";
|
||||
|
||||
@Override
|
||||
public void onMessageReceived(RemoteMessage remoteMessage) {
|
||||
Log.d(TAG, "From: " + remoteMessage.getFrom());
|
||||
Map<String, String> data = remoteMessage.getData();
|
||||
if (data.size() > 0) {
|
||||
Log.d(TAG, "Message data payload: " + data);
|
||||
if (data.containsKey("body") || data.containsKey("title")) {
|
||||
sendNotification(
|
||||
data.get("body"),
|
||||
data.get("title"),
|
||||
data.get("channelId"),
|
||||
data.get("action1"),
|
||||
data.get("action2"),
|
||||
data.get("action3")
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNewToken(String token) {
|
||||
Log.d(TAG, "Refreshed token: " + token);
|
||||
//TODO update token
|
||||
}
|
||||
|
||||
private void executeAction() {
|
||||
OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(NotificationActionWorker.class)
|
||||
.build();
|
||||
WorkManager.getInstance().beginWith(work).enqueue();
|
||||
}
|
||||
|
||||
private void sendNotification(String messageBody, String messageTitle, String channelId, String action1, String action2, String action3) {
|
||||
if (channelId == null) {
|
||||
channelId = "ha_notify";
|
||||
}
|
||||
if (messageBody == null) {
|
||||
messageBody = "";
|
||||
}
|
||||
if (messageTitle == null) {
|
||||
messageTitle = "HA Client";
|
||||
}
|
||||
Intent intent = new Intent(this, MainActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
|
||||
PendingIntent.FLAG_ONE_SHOT);
|
||||
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
|
||||
NotificationCompat.Builder notificationBuilder =
|
||||
new NotificationCompat.Builder(this, channelId)
|
||||
.setSmallIcon(R.drawable.mini_icon)
|
||||
.setContentTitle(messageTitle)
|
||||
.setContentText(messageBody)
|
||||
.setAutoCancel(false)
|
||||
.setSound(defaultSoundUri)
|
||||
.setContentIntent(pendingIntent);
|
||||
|
||||
NotificationManager notificationManager =
|
||||
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
|
||||
// Since android Oreo notification channel is needed.
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
NotificationChannel channel = new NotificationChannel(channelId,
|
||||
"Home Assistant notifications",
|
||||
NotificationManager.IMPORTANCE_DEFAULT);
|
||||
notificationManager.createNotificationChannel(channel);
|
||||
}
|
||||
|
||||
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.keyboardcrumbs.hassclient;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.NonNull;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.work.Worker;
|
||||
import androidx.work.WorkerParameters;
|
||||
|
||||
public class NotificationActionWorker extends Worker {
|
||||
|
||||
private static final String TAG = "NotificationActionWorker";
|
||||
|
||||
public NotificationActionWorker(@NonNull Context appContext, @NonNull WorkerParameters workerParams) {
|
||||
super(appContext, workerParams);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Result doWork() {
|
||||
Log.d(TAG, "Performing long running task in scheduled job");
|
||||
// TODO(developer): add long running task here.
|
||||
return Result.success();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user