diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2018-09-23 15:08:11 +1200 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2018-09-23 15:08:11 +1200 |
commit | 7186acaed8370ca179b250a7b45e4940937ca57f (patch) | |
tree | 2ba12c24646795a9de45708ca29debe550f1f3c4 /app/src/google | |
parent | d05ce23bbae5adce5ed59468a50c8e9378517e75 (diff) | |
download | etbsa-traccar-manager-android-7186acaed8370ca179b250a7b45e4940937ca57f.tar.gz etbsa-traccar-manager-android-7186acaed8370ca179b250a7b45e4940937ca57f.tar.bz2 etbsa-traccar-manager-android-7186acaed8370ca179b250a7b45e4940937ca57f.zip |
Implement push notifications
Diffstat (limited to 'app/src/google')
4 files changed, 133 insertions, 34 deletions
diff --git a/app/src/google/AndroidManifest.xml b/app/src/google/AndroidManifest.xml index 15bb065..cd5ddd8 100644 --- a/app/src/google/AndroidManifest.xml +++ b/app/src/google/AndroidManifest.xml @@ -1,16 +1,27 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools"> + xmlns:tools="http://schemas.android.com/tools" + package="org.traccar.manager"> <application - android:name="org.traccar.client.GoogleMainApplication" + android:name=".GoogleMainApplication" tools:replace="android:name"> <meta-data android:name="google_analytics_adid_collection_enabled" android:value="false" /> + <meta-data + android:name="com.google.firebase.messaging.default_notification_channel_id" + android:value="@string/notification_channel_id" /> + + <service android:name=".ManagerMessagingService"> + <intent-filter> + <action android:name="com.google.firebase.MESSAGING_EVENT" /> + </intent-filter> + </service> + </application> </manifest> diff --git a/app/src/google/java/org/traccar/client/GoogleMainApplication.java b/app/src/google/java/org/traccar/client/GoogleMainApplication.java deleted file mode 100644 index 5b6a51b..0000000 --- a/app/src/google/java/org/traccar/client/GoogleMainApplication.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2017 Anton Tananaev (anton.tananaev@gmail.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar.client; - -import android.app.Application; - -import com.google.firebase.analytics.FirebaseAnalytics; - -public class GoogleMainApplication extends Application { - - private FirebaseAnalytics firebaseAnalytics; - - @Override - public void onCreate() { - super.onCreate(); - firebaseAnalytics = FirebaseAnalytics.getInstance(this); - } - -} diff --git a/app/src/google/java/org/traccar/manager/GoogleMainApplication.java b/app/src/google/java/org/traccar/manager/GoogleMainApplication.java new file mode 100644 index 0000000..47756aa --- /dev/null +++ b/app/src/google/java/org/traccar/manager/GoogleMainApplication.java @@ -0,0 +1,70 @@ +/* + * Copyright 2017 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.traccar.manager; + +import android.app.Application; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Build; +import android.support.v4.content.LocalBroadcastManager; + +import com.google.android.gms.tasks.OnSuccessListener; +import com.google.firebase.analytics.FirebaseAnalytics; +import com.google.firebase.iid.FirebaseInstanceId; +import com.google.firebase.iid.InstanceIdResult; + +public class GoogleMainApplication extends Application { + + private FirebaseAnalytics firebaseAnalytics; + + @Override + public void onCreate() { + super.onCreate(); + firebaseAnalytics = FirebaseAnalytics.getInstance(this); + IntentFilter intentFilter = new IntentFilter(MainFragment.EVENT_LOGIN); + LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, intentFilter); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationChannel channel = new NotificationChannel( + getString(R.string.notification_channel_id), getString(R.string.notification_channel), + NotificationManager.IMPORTANCE_DEFAULT); + ((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).createNotificationChannel(channel); + } + } + + private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() { + @Override + public void onSuccess(InstanceIdResult instanceIdResult) { + broadcastToken(instanceIdResult.getToken()); + } + }); + } + }; + + public void broadcastToken(String token) { + Intent intent = new Intent(MainFragment.EVENT_TOKEN); + intent.putExtra(MainFragment.KEY_TOKEN, token); + LocalBroadcastManager.getInstance(this).sendBroadcast(intent); + } + +} diff --git a/app/src/google/java/org/traccar/manager/ManagerMessagingService.java b/app/src/google/java/org/traccar/manager/ManagerMessagingService.java new file mode 100644 index 0000000..55e664b --- /dev/null +++ b/app/src/google/java/org/traccar/manager/ManagerMessagingService.java @@ -0,0 +1,50 @@ +/* + * Copyright 2018 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.traccar.manager; + +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Intent; +import android.support.v4.app.NotificationCompat; + +import com.google.firebase.messaging.FirebaseMessagingService; +import com.google.firebase.messaging.RemoteMessage; + +public class ManagerMessagingService extends FirebaseMessagingService { + + @Override + public void onMessageReceived(RemoteMessage remoteMessage) { + super.onMessageReceived(remoteMessage); + + PendingIntent pendingIntent = PendingIntent.getActivity( + this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_ONE_SHOT); + NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.notification_channel_id)) + .setSmallIcon(R.mipmap.ic_launcher) + .setContentTitle(getString(R.string.app_name)) + .setContentText(remoteMessage.getNotification().getBody()) + .setAutoCancel(true) + .setContentIntent(pendingIntent);; + ((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).notify(remoteMessage.hashCode(), builder.build()); + } + + @Override + public void onNewToken(String token) { + super.onNewToken(token); + + ((GoogleMainApplication) getApplication()).broadcastToken(token); + } + +} |