maybe fixes for android build + macos notifications?

pull/2269/head
Steven Lageveen 3 weeks ago
parent 34fd8703bf
commit a6d962f9ba

@ -113,10 +113,11 @@
</intent-filter>
</activity>
<service android:name=".FcmPushService"
<service
android:name=".FcmPushService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>

@ -25,3 +25,4 @@ class FcmPushService : FcmSharedIsolateService() {
}
}
}

@ -1,23 +0,0 @@
package chat.pantheon.hermes
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.embedding.engine.dart.DartExecutor
import org.unifiedpush.flutter.connector.UnifiedPushReceiver
import android.content.Context
class UnifiedPushReceiver : UnifiedPushReceiver() {
override fun getEngine(context: Context): FlutterEngine {
var engine = MainActivity.engine
if (engine == null) {
engine = MainActivity.provideEngine(context)
engine.localizationPlugin.sendLocalesToFlutter(
context.resources.configuration
)
engine.dartExecutor.executeDartEntrypoint(
DartExecutor.DartEntrypoint.createDefault()
)
}
return engine
}
}

@ -41,7 +41,7 @@ import '../config/setting_keys.dart';
import '../widgets/matrix.dart';
import 'platform_infos.dart';
//<GOOGLE_SERVICES>import 'package:fcm_shared_isolate/fcm_shared_isolate.dart';
import 'package:fcm_shared_isolate/fcm_shared_isolate.dart';
class NoTokenException implements Exception {
String get cause => 'Cannot get firebase token';
@ -57,6 +57,9 @@ class BackgroundPush {
void Function(String errorMsg, {Uri? link})? onFcmError;
L10n? l10n;
FlutterLocalNotificationsPlugin get notificationsPlugin =>
_flutterLocalNotificationsPlugin;
Future<void> loadLocale() async {
final context = matrix?.context;
// inspired by _lookupL10n in .dart_tool/flutter_gen/gen_l10n/l10n.dart
@ -67,7 +70,7 @@ class BackgroundPush {
final pendingTests = <String, Completer<void>>{};
bool firebaseEnabled = false;
//<GOOGLE_SERVICES>final firebase = FcmSharedIsolate();
final firebase = FcmSharedIsolate();
DateTime? lastReceivedPush;
@ -119,17 +122,17 @@ class BackgroundPush {
MacOSFlutterLocalNotificationsPlugin>()
?.requestPermissions(alert: true, badge: true, sound: true);
}
//<GOOGLE_SERVICES>firebase.setListeners(
//<GOOGLE_SERVICES> onMessage: (message) => pushHelper(
//<GOOGLE_SERVICES> PushNotification.fromJson(
//<GOOGLE_SERVICES> Map<String, dynamic>.from(message['data'] ?? message),
//<GOOGLE_SERVICES> ),
//<GOOGLE_SERVICES> client: client,
//<GOOGLE_SERVICES> l10n: l10n,
//<GOOGLE_SERVICES> activeRoomId: matrix?.activeRoomId,
//<GOOGLE_SERVICES> flutterLocalNotificationsPlugin: _flutterLocalNotificationsPlugin,
//<GOOGLE_SERVICES> ),
//<GOOGLE_SERVICES>);
firebase.setListeners(
onMessage: (message) => pushHelper(
PushNotification.fromJson(
Map<String, dynamic>.from(message['data'] ?? message),
),
client: client,
l10n: l10n,
activeRoomId: matrix?.activeRoomId,
flutterLocalNotificationsPlugin: _flutterLocalNotificationsPlugin,
),
);
if (Platform.isAndroid) {
await UnifiedPush.initialize(
onNewEndpoint: _newUpEndpoint,
@ -187,7 +190,7 @@ class BackgroundPush {
bool useDeviceSpecificAppId = false,
}) async {
if (PlatformInfos.isIOS) {
//<GOOGLE_SERVICES>await firebase.requestPermission();
await firebase.requestPermission();
}
if (PlatformInfos.isAndroid) {
_flutterLocalNotificationsPlugin
@ -359,7 +362,7 @@ class BackgroundPush {
Logs().v('Setup firebase');
if (_fcmToken?.isEmpty ?? true) {
try {
//<GOOGLE_SERVICES>_fcmToken = await firebase.getToken();
_fcmToken = await firebase.getToken();
if (_fcmToken == null) throw ('PushToken is null');
} catch (e, s) {
Logs().w('[Push] cannot get token', e, e is String ? null : s);
@ -416,8 +419,8 @@ class BackgroundPush {
Logs().i('[Push] UnifiedPush using endpoint $endpoint');
final oldTokens = <String?>{};
try {
//<GOOGLE_SERVICES>final fcmToken = await firebase.getToken();
//<GOOGLE_SERVICES>oldTokens.add(fcmToken);
final fcmToken = await firebase.getToken();
oldTokens.add(fcmToken);
} catch (_) {}
await setupPusher(
gatewayUrl: endpoint,

@ -160,6 +160,7 @@ abstract class ClientManager {
const InitializationSettings(
android: AndroidInitializationSettings('notifications_icon'),
iOS: DarwinInitializationSettings(),
macOS: DarwinInitializationSettings(),
),
);
@ -175,6 +176,7 @@ abstract class ClientManager {
priority: Priority.max,
),
iOS: DarwinNotificationDetails(sound: 'notification.caf'),
macOS: DarwinNotificationDetails(),
),
);
}

@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'package:collection/collection.dart';
import 'package:desktop_notifications/desktop_notifications.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:image/image.dart';
import 'package:matrix/matrix.dart';
import 'package:universal_html/html.dart' as html;
@ -80,6 +81,21 @@ extension LocalNotificationsExtension on MatrixState {
icon: thumbnailUri?.toString(),
tag: event.room.id,
);
} else if (Platform.isMacOS) {
final plugin = backgroundPush?.notificationsPlugin;
if (plugin == null) {
Logs().w('Local notification requested on macOS but plugin missing');
return;
}
await plugin.show(
roomId.hashCode,
title,
body,
const NotificationDetails(
macOS: DarwinNotificationDetails(),
),
payload: roomId,
);
} else if (Platform.isLinux) {
final avatarUrl = event.room.avatar;
final hints = [NotificationHint.soundName('message-new-instant')];

@ -13,6 +13,7 @@ import dynamic_color
import emoji_picker_flutter
import file_picker
import file_selector_macos
import firebase_core
import flutter_local_notifications
import flutter_new_badger
import flutter_secure_storage_macos
@ -44,6 +45,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin"))
FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin"))
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
FlutterNewBadgerPlugin.register(with: registry.registrar(forPlugin: "FlutterNewBadgerPlugin"))
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))

@ -377,6 +377,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.3"
fcm_shared_isolate:
dependency: "direct main"
description:
name: fcm_shared_isolate
sha256: "18dc57d9ce7fa6b250f857ef8c823b3f7f1d1b428584557c1e9f2064e9227f6b"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
ffi:
dependency: transitive
description:
@ -465,6 +473,30 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.9.3+4"
firebase_core:
dependency: transitive
description:
name: firebase_core
sha256: "26de145bb9688a90962faec6f838247377b0b0d32cc0abecd9a4e43525fc856c"
url: "https://pub.dev"
source: hosted
version: "2.32.0"
firebase_core_platform_interface:
dependency: transitive
description:
name: firebase_core_platform_interface
sha256: "8bcfad6d7033f5ea951d15b867622a824b13812178bfec0c779b9d81de011bbb"
url: "https://pub.dev"
source: hosted
version: "5.4.2"
firebase_core_web:
dependency: transitive
description:
name: firebase_core_web
sha256: eb3afccfc452b2b2075acbe0c4b27de62dd596802b4e5e19869c1e926cbb20b3
url: "https://pub.dev"
source: hosted
version: "2.24.0"
fixnum:
dependency: transitive
description:

@ -23,6 +23,7 @@ dependencies:
dynamic_color: ^1.8.1
emoji_picker_flutter: ^4.3.0
emojis: ^0.9.9
fcm_shared_isolate: ^0.2.0
file_picker: ^10.3.3
file_selector: ^1.0.4
flutter:

@ -11,6 +11,7 @@
#include <dynamic_color/dynamic_color_plugin_c_api.h>
#include <emoji_picker_flutter/emoji_picker_flutter_plugin_c_api.h>
#include <file_selector_windows/file_selector_windows.h>
#include <firebase_core/firebase_core_plugin_c_api.h>
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
#include <flutter_webrtc/flutter_web_r_t_c_plugin.h>
#include <geolocator_windows/geolocator_windows.h>
@ -35,6 +36,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("EmojiPickerFlutterPluginCApi"));
FileSelectorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FileSelectorWindows"));
FirebaseCorePluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FirebaseCorePluginCApi"));
FlutterSecureStorageWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FlutterSecureStorageWindowsPlugin"));
FlutterWebRTCPluginRegisterWithRegistrar(

@ -8,6 +8,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
dynamic_color
emoji_picker_flutter
file_selector_windows
firebase_core
flutter_secure_storage_windows
flutter_webrtc
geolocator_windows

Loading…
Cancel
Save