diff --git a/.metadata b/.metadata index d2765fc..cbf1dc0 100644 --- a/.metadata +++ b/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "54e66469a933b60ddf175f858f82eaeb97e48c8d" + revision: "a14f74ff3a1cbd521163c5f03d68113d50af93d3" channel: "stable" project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d - base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 + base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - platform: android - create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d - base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 + base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - platform: ios - create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d - base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 + base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - platform: linux - create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d - base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 + base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - platform: macos - create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d - base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 + base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - platform: web - create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d - base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 + base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 - platform: windows - create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d - base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 + base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3 # User provided section diff --git a/android/app/build.gradle b/android/app/build.gradle index 27b7994..0344e4a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,65 +1,64 @@ plugins { id "com.android.application" - // START: FlutterFire Configuration id 'com.google.gms.google-services' - // END: FlutterFire Configuration id "kotlin-android" id "dev.flutter.flutter-gradle-plugin" } def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') +def localPropertiesFile = rootProject.file("local.properties") if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> + localPropertiesFile.withReader("UTF-8") { reader -> localProperties.load(reader) } } -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +def flutterVersionCode = localProperties.getProperty("flutter.versionCode") if (flutterVersionCode == null) { - flutterVersionCode = '1' + flutterVersionCode = "1" } -def flutterVersionName = localProperties.getProperty('flutter.versionName') +def flutterVersionName = localProperties.getProperty("flutter.versionName") if (flutterVersionName == null) { - flutterVersionName = '1.0' + flutterVersionName = "1.0" } android { - namespace "dev.solsynth.solian" - compileSdk flutter.compileSdkVersion - ndkVersion flutter.ndkVersion + namespace = "dev.solsynth.solian" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + defaultConfig { + multiDexEnabled true + } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = '1.8' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' + coreLibraryDesugaringEnabled true + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } defaultConfig { - applicationId "dev.solsynth.solian" - minSdkVersion flutter.minSdkVersion - targetSdkVersion flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName + applicationId = "dev.solsynth.solian" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutterVersionCode.toInteger() + versionName = flutterVersionName } buildTypes { release { - signingConfig signingConfigs.debug + signingConfig = signingConfigs.debug } } } -flutter { - source '../..' +dependencies { + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' } -dependencies {} +flutter { + source = "../.." +} diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index cfe8185..82924ff 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -13,21 +13,33 @@ - - - + android:icon="@mipmap/launcher_icon" + android:supportsRtl="true"> + + + + + + + + + + + + + + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" + /> - - + + - - + + - \ No newline at end of file + diff --git a/android/app/src/main/kotlin/com/example/solian/MainActivity.kt b/android/app/src/main/java/dev/solsynth/solian/MainActivity.kt similarity index 76% rename from android/app/src/main/kotlin/com/example/solian/MainActivity.kt rename to android/app/src/main/java/dev/solsynth/solian/MainActivity.kt index 745469d..ff71ab7 100644 --- a/android/app/src/main/kotlin/com/example/solian/MainActivity.kt +++ b/android/app/src/main/java/dev/solsynth/solian/MainActivity.kt @@ -1,4 +1,4 @@ -package com.example.solian +package dev.solsynth.solian import io.flutter.embedding.android.FlutterActivity diff --git a/android/build.gradle b/android/build.gradle index bc157bd..d2ffbff 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -5,12 +5,12 @@ allprojects { } } -rootProject.buildDir = '../build' +rootProject.buildDir = "../build" subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { - project.evaluationDependsOn(':app') + project.evaluationDependsOn(":app") } tasks.register("clean", Delete) { diff --git a/android/gradle.properties b/android/gradle.properties index 598d13f..5f5d39d 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,6 @@ -org.gradle.jvmargs=-Xmx4G +org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index e1ca574..5d6560a 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip diff --git a/android/settings.gradle b/android/settings.gradle index 816dbe0..cf727f4 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -5,10 +5,9 @@ pluginManagement { def flutterSdkPath = properties.getProperty("flutter.sdk") assert flutterSdkPath != null, "flutter.sdk not set in local.properties" return flutterSdkPath - } - settings.ext.flutterSdkPath = flutterSdkPath() + }() - includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") repositories { google() @@ -19,10 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "7.3.0" apply false - // START: FlutterFire Configuration + id "com.android.application" version '8.4.0' apply false id "com.google.gms.google-services" version "4.3.15" apply false - // END: FlutterFire Configuration id "org.jetbrains.kotlin.android" version "1.7.10" apply false } diff --git a/ios/Podfile.lock b/ios/Podfile.lock index b1b5f76..9fea52b 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2,8 +2,6 @@ PODS: - connectivity_plus (0.0.1): - Flutter - FlutterMacOS - - device_info (0.0.1): - - Flutter - device_info_plus (0.0.1): - Flutter - DKImagePickerController/Core (4.3.9): @@ -111,7 +109,7 @@ PODS: - GoogleUtilities/Privacy - image_picker_ios (0.0.1): - Flutter - - livekit_client (2.1.5): + - livekit_client (2.1.6): - Flutter - WebRTC-SDK (= 114.5735.10) - nanopb (2.30910.0): @@ -126,8 +124,6 @@ PODS: - FlutterMacOS - permission_handler_apple (9.3.0): - Flutter - - platform_device_id (0.0.1): - - Flutter - PromisesObjC (2.4.0) - SDWebImage (5.19.2): - SDWebImage/Core (= 5.19.2) @@ -152,7 +148,6 @@ PODS: DEPENDENCIES: - connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`) - - device_info (from `.symlinks/plugins/device_info/ios`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`) - firebase_core (from `.symlinks/plugins/firebase_core/ios`) @@ -166,7 +161,6 @@ DEPENDENCIES: - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - - platform_device_id (from `.symlinks/plugins/platform_device_id/ios`) - sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`) - sqflite (from `.symlinks/plugins/sqflite/darwin`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) @@ -194,8 +188,6 @@ SPEC REPOS: EXTERNAL SOURCES: connectivity_plus: :path: ".symlinks/plugins/connectivity_plus/darwin" - device_info: - :path: ".symlinks/plugins/device_info/ios" device_info_plus: :path: ".symlinks/plugins/device_info_plus/ios" file_picker: @@ -222,8 +214,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/path_provider_foundation/darwin" permission_handler_apple: :path: ".symlinks/plugins/permission_handler_apple/ios" - platform_device_id: - :path: ".symlinks/plugins/platform_device_id/ios" sentry_flutter: :path: ".symlinks/plugins/sentry_flutter/ios" sqflite: @@ -237,7 +227,6 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db - device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 @@ -256,12 +245,11 @@ SPEC CHECKSUMS: GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 - livekit_client: e6adadd527ee8e52fff579498467ee89921d99f6 + livekit_client: 72da4281bddb8bda3d275f49b46e9a2046d57c58 nanopb: 438bc412db1928dac798aa6fd75726007be04262 package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 - platform_device_id: 81b3e2993881f87d0c82ef151dc274df4869aef5 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a Sentry: 51b056d96914a741f63eca774d118678b1eb05a1 diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 70693e4..915bf79 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -3,11 +3,15 @@ import Flutter @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { - override func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? - ) -> Bool { - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } + + override func applicationDidBecomeActive(_ application: UIApplication) { + application.applicationIconBadgeNumber = 0; + } } diff --git a/lib/exts.dart b/lib/exts.dart index c41acec..5f15dde 100644 --- a/lib/exts.dart +++ b/lib/exts.dart @@ -9,22 +9,12 @@ extension SolianExtenions on BuildContext { } Future showErrorDialog(dynamic exception) { - String formatMessage(dynamic exception) { - final message = exception.toString(); - if (message.trim().isEmpty) return ''; - return message - .split(' ') - .map((element) => - '${element[0].toUpperCase()}${element.substring(1).toLowerCase()}') - .join(' '); - } - return showDialog( useRootNavigator: true, context: this, builder: (ctx) => AlertDialog( title: Text('errorHappened'.tr), - content: Text(formatMessage(exception)), + content: Text(exception.toString().capitalize!), actions: [ TextButton( onPressed: () => Navigator.pop(ctx), diff --git a/lib/models/notification.dart b/lib/models/notification.dart index 4fa12ac..f08e81e 100755 --- a/lib/models/notification.dart +++ b/lib/models/notification.dart @@ -6,8 +6,6 @@ class Notification { String subject; String content; List? links; - bool isImportant; - bool isRealtime; DateTime? readAt; int? senderId; int recipientId; @@ -20,8 +18,6 @@ class Notification { required this.subject, required this.content, required this.links, - required this.isImportant, - required this.isRealtime, required this.readAt, required this.senderId, required this.recipientId, @@ -41,8 +37,6 @@ class Notification { links: json['links'] != null ? List.from(json['links'].map((x) => Link.fromJson(x))) : List.empty(), - isImportant: json['is_important'], - isRealtime: json['is_realtime'], readAt: json['read_at'], senderId: json['sender_id'], recipientId: json['recipient_id'], @@ -58,8 +52,6 @@ class Notification { 'links': links != null ? List.from(links!.map((x) => x.toJson())) : List.empty(), - 'is_important': isImportant, - 'is_realtime': isRealtime, 'read_at': readAt, 'sender_id': senderId, 'recipient_id': recipientId, diff --git a/lib/providers/account.dart b/lib/providers/account.dart index 1daf41d..ea62352 100644 --- a/lib/providers/account.dart +++ b/lib/providers/account.dart @@ -1,11 +1,12 @@ +import 'dart:async'; import 'dart:convert'; +import 'dart:developer'; import 'dart:io'; import 'dart:math' as math; +import 'package:device_info_plus/device_info_plus.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:get/get.dart'; -import 'package:permission_handler/permission_handler.dart'; -import 'package:platform_device_id/platform_device_id.dart'; import 'package:solian/models/notification.dart'; import 'package:solian/models/packet.dart'; import 'package:solian/models/pagination.dart'; @@ -30,7 +31,14 @@ class AccountProvider extends GetxController { @override onInit() { - Permission.notification.request().then((status) { + FirebaseMessaging.instance + .requestPermission( + alert: true, + announcement: true, + carPlay: true, + badge: true, + sound: true) + .then((status) { notifyInitialization(); notifyPrefetch(); }); @@ -94,7 +102,7 @@ class AccountProvider extends GetxController { }, onDone: () { isConnected.value = false; - Future.delayed(const Duration(seconds: 3), () => connect()); + Future.delayed(const Duration(seconds: 1), () => connect()); }, onError: (err) { isConnected.value = false; @@ -175,7 +183,11 @@ class AccountProvider extends GetxController { late final String? token; late final String provider; - final deviceUuid = await PlatformDeviceId.getDeviceId; + final deviceUuid = await _getDeviceUuid(); + + if (deviceUuid == null) { + log("Unable to active push notifications, couldn't get device uuid"); + } if (PlatformInfo.isIOS || PlatformInfo.isMacOS) { provider = "apple"; @@ -196,4 +208,31 @@ class AccountProvider extends GetxController { throw Exception(resp.bodyString); } } + + Future _getDeviceUuid() async { + DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); + if (PlatformInfo.isWeb) { + final WebBrowserInfo webInfo = await deviceInfo.webBrowserInfo; + return webInfo.vendor! + + webInfo.userAgent! + + webInfo.hardwareConcurrency.toString(); + } + if (PlatformInfo.isAndroid) { + final AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; + return androidInfo.id; + } + if (PlatformInfo.isIOS) { + final IosDeviceInfo iosInfo = await deviceInfo.iosInfo; + return iosInfo.identifierForVendor!; + } + if (PlatformInfo.isLinux) { + final LinuxDeviceInfo linuxInfo = await deviceInfo.linuxInfo; + return linuxInfo.machineId!; + } + if (PlatformInfo.isWindows) { + final WindowsDeviceInfo windowsInfo = await deviceInfo.windowsInfo; + return windowsInfo.deviceId; + } + return null; + } } diff --git a/lib/providers/chat.dart b/lib/providers/chat.dart index a5c1e96..8239fa6 100644 --- a/lib/providers/chat.dart +++ b/lib/providers/chat.dart @@ -63,7 +63,7 @@ class ChatProvider extends GetxController { }, onDone: () { isConnected.value = false; - Future.delayed(const Duration(seconds: 3), () => connect()); + Future.delayed(const Duration(seconds: 1), () => connect()); }, onError: (err) { isConnected.value = false; diff --git a/lib/providers/content/call.dart b/lib/providers/content/call.dart index 42e4f0b..9f9b6da 100644 --- a/lib/providers/content/call.dart +++ b/lib/providers/content/call.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:flutter_background/flutter_background.dart'; import 'package:get/get.dart'; import 'package:livekit_client/livekit_client.dart'; import 'package:permission_handler/permission_handler.dart'; @@ -44,9 +43,6 @@ class ChatCallProvider extends GetxController { if (lkPlatformIs(PlatformType.macOS) || lkPlatformIs(PlatformType.linux)) { return; } - if (lkPlatformIs(PlatformType.android)) { - FlutterBackground.enableBackgroundExecution(); - } await Permission.camera.request(); await Permission.microphone.request(); diff --git a/lib/screens/account.dart b/lib/screens/account.dart index ec4d939..f2d06ad 100644 --- a/lib/screens/account.dart +++ b/lib/screens/account.dart @@ -78,9 +78,9 @@ class _AccountScreenState extends State { ); } - return Column( + return ListView( children: [ - const AccountHeading().paddingOnly(bottom: 8), + const AccountHeading().paddingOnly(bottom: 8, top: 16), ...(actionItems.map( (x) => ListTile( contentPadding: const EdgeInsets.symmetric(horizontal: 34), diff --git a/lib/screens/account/notification.dart b/lib/screens/account/notification.dart index 30b3d83..ad04e25 100644 --- a/lib/screens/account/notification.dart +++ b/lib/screens/account/notification.dart @@ -27,7 +27,7 @@ class _NotificationScreenState extends State { List markList = List.empty(growable: true); for (final element in provider.notifications) { - if (element.isRealtime) continue; + if (element.id <= 0) continue; markList.add(element.id); } @@ -48,7 +48,7 @@ class _NotificationScreenState extends State { final AccountProvider provider = Get.find(); - if (element.isRealtime) { + if (element.id <= 0) { provider.notifications.removeAt(index); return; } diff --git a/lib/screens/channel/channel_chat.dart b/lib/screens/channel/channel_chat.dart index 71a8ec1..c822ba7 100644 --- a/lib/screens/channel/channel_chat.dart +++ b/lib/screens/channel/channel_chat.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:math' as math; +import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -337,37 +337,45 @@ class _ChannelChatScreenState extends State { children: [ Expanded( child: PagedListView( + clipBehavior: Clip.none, reverse: true, pagingController: _pagingController, builderDelegate: PagedChildBuilderDelegate( itemBuilder: buildHistory, noItemsFoundIndicatorBuilder: (_) => Container(), ), - ).paddingOnly(bottom: 64), + ).paddingOnly(bottom: 56), ), ], ), Positioned( - bottom: math.max(MediaQuery.of(context).padding.bottom, 16), + bottom: 0, left: 0, right: 0, - child: ChatMessageInput( - edit: _messageToEditing, - reply: _messageToReplying, - realm: widget.realm, - placeholder: placeholder, - channel: _channel!, - onSent: (Message item) { - setState(() { - _pagingController.itemList?.insert(0, item); - }); - }, - onReset: () { - setState(() { - _messageToReplying = null; - _messageToEditing = null; - }); - }, + child: ClipRect( + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 50, sigmaY: 50), + child: SafeArea( + child: ChatMessageInput( + edit: _messageToEditing, + reply: _messageToReplying, + realm: widget.realm, + placeholder: placeholder, + channel: _channel!, + onSent: (Message item) { + setState(() { + _pagingController.itemList?.insert(0, item); + }); + }, + onReset: () { + setState(() { + _messageToReplying = null; + _messageToEditing = null; + }); + }, + ), + ), + ), ), ), if (_ongoingCall != null) diff --git a/lib/screens/channel/channel_detail.dart b/lib/screens/channel/channel_detail.dart index 67fc906..525d7ed 100644 --- a/lib/screens/channel/channel_detail.dart +++ b/lib/screens/channel/channel_detail.dart @@ -72,7 +72,7 @@ class _ChannelDetailScreenState extends State { ListTile( leading: const Icon(Icons.edit), trailing: const Icon(Icons.chevron_right), - title: Text('channelAdjust'.tr), + title: Text('channelAdjust'.tr.capitalize!), onTap: () async { AppRouter.instance .pushNamed( @@ -129,12 +129,12 @@ class _ChannelDetailScreenState extends State { ListTile( leading: const Icon(Icons.settings), trailing: const Icon(Icons.chevron_right), - title: Text('channelSettings'.tr), + title: Text('channelSettings'.tr.capitalize!), ), ListTile( leading: const Icon(Icons.supervisor_account), trailing: const Icon(Icons.chevron_right), - title: Text('channelMembers'.tr), + title: Text('channelMembers'.tr.capitalize!), onTap: () => showMemberList(), ), ...(_isOwned ? ownerActions : List.empty()), diff --git a/lib/screens/realms/realm_detail.dart b/lib/screens/realms/realm_detail.dart index 91badae..72b1cee 100644 --- a/lib/screens/realms/realm_detail.dart +++ b/lib/screens/realms/realm_detail.dart @@ -69,7 +69,7 @@ class _RealmDetailScreenState extends State { ListTile( leading: const Icon(Icons.edit), trailing: const Icon(Icons.chevron_right), - title: Text('realmAdjust'.tr), + title: Text('realmAdjust'.tr.capitalize!), onTap: () async { AppRouter.instance .pushNamed( @@ -122,12 +122,12 @@ class _RealmDetailScreenState extends State { ListTile( leading: const Icon(Icons.settings), trailing: const Icon(Icons.chevron_right), - title: Text('realmSettings'.tr), + title: Text('realmSettings'.tr.capitalize!), ), ListTile( leading: const Icon(Icons.supervisor_account), trailing: const Icon(Icons.chevron_right), - title: Text('realmMembers'.tr), + title: Text('realmMembers'.tr.capitalize!), onTap: () => showMemberList(), ), ...(_isOwned ? ownerActions : List.empty()), diff --git a/lib/services.dart b/lib/services.dart index 3579500..97b49da 100644 --- a/lib/services.dart +++ b/lib/services.dart @@ -14,7 +14,10 @@ abstract class ServiceFinder { static GetConnect configureClient(String service, {timeout = const Duration(seconds: 5)}) { - final client = GetConnect(timeout: timeout, allowAutoSignedCert: true); + final client = GetConnect( + timeout: timeout, + allowAutoSignedCert: true, + ); client.httpClient.baseUrl = ServiceFinder.services[service]; return client; diff --git a/lib/translations.dart b/lib/translations.dart index 77dd152..8f391a7 100644 --- a/lib/translations.dart +++ b/lib/translations.dart @@ -116,7 +116,7 @@ class SolianMessages extends Translations { 'realmMembers': 'Realm members', 'realmMembersAdd': 'Add realm members', 'realmMembersAddHint': 'Into @realm', - 'realmAdjust': 'Realm Adjustment', + 'realmAdjust': 'Realm adjustment', 'realmSettings': 'Realm settings', 'realmEditingNotify': 'You\'re editing realm @realm', 'realmDeletionConfirm': 'Confirm realm deletion', @@ -142,9 +142,9 @@ class SolianMessages extends Translations { 'channelType': 'Channel type', 'channelTypeCommon': 'Regular', 'channelTypeDirect': 'DM', - 'channelAdjust': 'Channel Adjustment', - 'channelDetail': 'Channel Detail', - 'channelSettings': 'Channel Settings', + 'channelAdjust': 'Channel adjustment', + 'channelDetail': 'Channel detail', + 'channelSettings': 'Channel settings', 'channelDeletionConfirm': 'Confirm channel deletion', 'channelDeletionConfirmCaption': 'Are you sure to delete channel @channel? This action cannot be undone!', diff --git a/lib/widgets/chat/call/call_controls.dart b/lib/widgets/chat/call/call_controls.dart index 14342c0..2d25734 100644 --- a/lib/widgets/chat/call/call_controls.dart +++ b/lib/widgets/chat/call/call_controls.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_background/flutter_background.dart'; import 'package:flutter_webrtc/flutter_webrtc.dart'; import 'package:get/get.dart'; import 'package:livekit_client/livekit_client.dart'; @@ -171,35 +170,6 @@ class _ControlsWidgetState extends State { } return; } - if (lkPlatformIs(PlatformType.android)) { - requestBackgroundPermission([bool isRetry = false]) async { - try { - bool hasPermissions = await FlutterBackground.hasPermissions; - if (!isRetry) { - const androidConfig = FlutterBackgroundAndroidConfig( - notificationTitle: 'Screen Sharing', - notificationText: 'Solar Messager is sharing your screen', - notificationImportance: AndroidNotificationImportance.Default, - notificationIcon: - AndroidResource(name: 'launcher_icon', defType: 'mipmap'), - ); - hasPermissions = await FlutterBackground.initialize( - androidConfig: androidConfig); - } - if (hasPermissions && - !FlutterBackground.isBackgroundExecutionEnabled) { - await FlutterBackground.enableBackgroundExecution(); - } - } catch (e) { - if (!isRetry) { - return await Future.delayed(const Duration(seconds: 1), - () => requestBackgroundPermission(true)); - } - } - } - - await requestBackgroundPermission(); - } if (lkPlatformIs(PlatformType.iOS)) { var track = await LocalVideoTrack.createScreenShareTrack( const ScreenShareCaptureOptions( @@ -223,12 +193,6 @@ class _ControlsWidgetState extends State { void disableScreenShare() async { await participant.setScreenShareEnabled(false); - if (lkPlatformIs(PlatformType.android)) { - // Android specific - try { - await FlutterBackground.disableBackgroundExecution(); - } catch (_) {} - } } @override diff --git a/lib/widgets/chat/chat_message_input.dart b/lib/widgets/chat/chat_message_input.dart index 7a99f3a..468517f 100644 --- a/lib/widgets/chat/chat_message_input.dart +++ b/lib/widgets/chat/chat_message_input.dart @@ -56,7 +56,7 @@ class _ChatMessageInputState extends State { Map encodeMessage(String content) { return { - 'value': content, + 'value': content.trim(), 'keypair_id': null, 'algorithm': 'plain', }; @@ -103,9 +103,11 @@ class _ChatMessageInputState extends State { senderId: sender.id, ); - message.isSending = true; + if (_editTo == null) { + message.isSending = true; + widget.onSent(message); + } - if (widget.edit == null) widget.onSent(message); resetInput(); Response resp; @@ -131,6 +133,7 @@ class _ChatMessageInputState extends State { _editTo = null; _replyTo = null; _textController.clear(); + _attachments.clear(); setState(() {}); } @@ -161,70 +164,66 @@ class _ChatMessageInputState extends State { ) ]; - return Material( - color: Theme.of(context).colorScheme.surface, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Divider(thickness: 0.3, height: 1), - if (_replyTo != null) - MaterialBanner( - leading: const FaIcon(FontAwesomeIcons.reply, size: 18), - dividerColor: Colors.transparent, - content: ChatMessage( - item: _replyTo!, - isContentPreviewing: true, - ), - actions: notifyBannerActions, + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + if (_replyTo != null) + MaterialBanner( + leading: const FaIcon(FontAwesomeIcons.reply, size: 18), + dividerColor: Colors.transparent, + content: ChatMessage( + item: _replyTo!, + isContentPreviewing: true, ), - if (_editTo != null) - MaterialBanner( - leading: const Icon(Icons.edit), - dividerColor: Colors.transparent, - content: ChatMessage( - item: _editTo!, - isContentPreviewing: true, - ), - actions: notifyBannerActions, - ), - SizedBox( - height: 56, - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Expanded( - child: TextField( - controller: _textController, - focusNode: _focusNode, - maxLines: null, - autocorrect: true, - keyboardType: TextInputType.text, - decoration: InputDecoration.collapsed( - hintText: widget.placeholder ?? - 'messageInputPlaceholder'.trParams( - {'channel': '#${widget.channel.alias}'}, - ), - ), - onSubmitted: (_) => sendMessage(), - onTapOutside: (_) => - FocusManager.instance.primaryFocus?.unfocus(), - ), - ), - IconButton( - icon: const Icon(Icons.attach_file), - color: Colors.teal, - onPressed: () => showAttachments(), - ), - IconButton( - icon: const Icon(Icons.send), - color: Theme.of(context).colorScheme.primary, - onPressed: () => sendMessage(), - ) - ], - ).paddingOnly(left: 20, right: 16), + actions: notifyBannerActions, ), - ], - ), + if (_editTo != null) + MaterialBanner( + leading: const Icon(Icons.edit), + dividerColor: Colors.transparent, + content: ChatMessage( + item: _editTo!, + isContentPreviewing: true, + ), + actions: notifyBannerActions, + ), + SizedBox( + height: 56, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Expanded( + child: TextField( + controller: _textController, + focusNode: _focusNode, + maxLines: null, + autocorrect: true, + keyboardType: TextInputType.text, + decoration: InputDecoration.collapsed( + hintText: widget.placeholder ?? + 'messageInputPlaceholder'.trParams( + {'channel': '#${widget.channel.alias}'}, + ), + ), + onSubmitted: (_) => sendMessage(), + onTapOutside: (_) => + FocusManager.instance.primaryFocus?.unfocus(), + ), + ), + IconButton( + icon: const Icon(Icons.attach_file), + color: Colors.teal, + onPressed: () => showAttachments(), + ), + IconButton( + icon: const Icon(Icons.send), + color: Theme.of(context).colorScheme.primary, + onPressed: () => sendMessage(), + ) + ], + ).paddingOnly(left: 20, right: 16), + ), + ], ); } } diff --git a/lib/widgets/current_state_action.dart b/lib/widgets/current_state_action.dart index 2252510..dc86cb6 100644 --- a/lib/widgets/current_state_action.dart +++ b/lib/widgets/current_state_action.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_animate/flutter_animate.dart'; import 'package:get/get.dart'; import 'package:solian/providers/account.dart'; +import 'package:solian/providers/auth.dart'; import 'package:solian/providers/chat.dart'; class BackgroundStateWidget extends StatelessWidget { @@ -9,6 +10,7 @@ class BackgroundStateWidget extends StatelessWidget { @override Widget build(BuildContext context) { + final AuthProvider auth = Get.find(); final AccountProvider account = Get.find(); final ChatProvider chat = Get.find(); @@ -20,35 +22,51 @@ class BackgroundStateWidget extends StatelessWidget { return Row(children: [ if (disconnected && !connecting) - IconButton( - tooltip: [ - if (account.isConnected.isFalse) - 'Lost Connection with Passport Server...', - if (chat.isConnected.isFalse) - 'Lost Connection with Messaging Server...', - ].join('\n'), - icon: const Icon(Icons.wifi_off) - .animate(onPlay: (c) => c.repeat()) - .fadeIn(duration: 800.ms) - .then() - .fadeOut(duration: 800.ms), - onPressed: () { - if (account.isConnected.isFalse) account.connect(); - if (chat.isConnected.isFalse) chat.connect(); + FutureBuilder( + future: auth.isAuthorized, + builder: (context, snapshot) { + if (!snapshot.hasData || snapshot.data == false) { + return const SizedBox(); + } + return IconButton( + tooltip: [ + if (account.isConnected.isFalse) + 'Lost Connection with Passport Server...', + if (chat.isConnected.isFalse) + 'Lost Connection with Messaging Server...', + ].join('\n'), + icon: const Icon(Icons.wifi_off) + .animate(onPlay: (c) => c.repeat()) + .fadeIn(duration: 800.ms) + .then() + .fadeOut(duration: 800.ms), + onPressed: () { + if (account.isConnected.isFalse) account.connect(); + if (chat.isConnected.isFalse) chat.connect(); + }, + ); }, ), if (connecting) - IconButton( - tooltip: [ - if (account.isConnecting.isTrue) - 'Waiting Passport Server Response...', - if (chat.isConnecting.isTrue) - 'Waiting Messaging Server Response...', - ].join('\n'), - icon: const Icon(Icons.sync) - .animate(onPlay: (c) => c.repeat()) - .rotate(duration: 1850.ms, begin: 1, end: 0), - onPressed: () {}, + FutureBuilder( + future: auth.isAuthorized, + builder: (context, snapshot) { + if (!snapshot.hasData || snapshot.data == false) { + return const SizedBox(); + } + return IconButton( + tooltip: [ + if (account.isConnecting.isTrue) + 'Waiting Passport Server Response...', + if (chat.isConnecting.isTrue) + 'Waiting Messaging Server Response...', + ].join('\n'), + icon: const Icon(Icons.sync) + .animate(onPlay: (c) => c.repeat()) + .rotate(duration: 1850.ms, begin: 1, end: 0), + onPressed: () {}, + ); + }, ), ]); }); diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 583ccac..c5ec9f0 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -9,7 +9,6 @@ #include #include #include -#include #include #include @@ -23,9 +22,6 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) flutter_webrtc_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterWebRTCPlugin"); flutter_web_r_t_c_plugin_register_with_registrar(flutter_webrtc_registrar); - g_autoptr(FlPluginRegistrar) platform_device_id_linux_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "PlatformDeviceIdLinuxPlugin"); - platform_device_id_linux_plugin_register_with_registrar(platform_device_id_linux_registrar); g_autoptr(FlPluginRegistrar) sentry_flutter_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "SentryFlutterPlugin"); sentry_flutter_plugin_register_with_registrar(sentry_flutter_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 534fa8e..1faa6d7 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -6,7 +6,6 @@ list(APPEND FLUTTER_PLUGIN_LIST file_selector_linux flutter_secure_storage_linux flutter_webrtc - platform_device_id_linux sentry_flutter url_launcher_linux ) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 47d1e94..5c6436f 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -16,9 +16,8 @@ import flutter_webrtc import livekit_client import package_info_plus import path_provider_foundation -import platform_device_id -import platform_device_id_macos import sentry_flutter +import shared_preferences_foundation import sqflite import url_launcher_macos import video_player_avfoundation @@ -36,9 +35,8 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { LiveKitPlugin.register(with: registry.registrar(forPlugin: "LiveKitPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) - PlatformDeviceIdMacosPlugin.register(with: registry.registrar(forPlugin: "PlatformDeviceIdMacosPlugin")) - PlatformDeviceIdMacosPlugin.register(with: registry.registrar(forPlugin: "PlatformDeviceIdMacosPlugin")) SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin")) diff --git a/macos/Podfile.lock b/macos/Podfile.lock index a085ab5..77662ee 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -6,6 +6,39 @@ PODS: - FlutterMacOS - file_selector_macos (0.0.1): - FlutterMacOS + - Firebase/CoreOnly (10.27.0): + - FirebaseCore (= 10.27.0) + - Firebase/Messaging (10.27.0): + - Firebase/CoreOnly + - FirebaseMessaging (~> 10.27.0) + - firebase_core (3.0.0): + - Firebase/CoreOnly (~> 10.27.0) + - FlutterMacOS + - firebase_messaging (15.0.0): + - Firebase/CoreOnly (~> 10.27.0) + - Firebase/Messaging (~> 10.27.0) + - firebase_core + - FlutterMacOS + - FirebaseCore (10.27.0): + - FirebaseCoreInternal (~> 10.0) + - GoogleUtilities/Environment (~> 7.12) + - GoogleUtilities/Logger (~> 7.12) + - FirebaseCoreInternal (10.27.0): + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - FirebaseInstallations (10.27.0): + - FirebaseCore (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - PromisesObjC (~> 2.1) + - FirebaseMessaging (10.27.0): + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleDataTransport (~> 9.3) + - GoogleUtilities/AppDelegateSwizzler (~> 7.8) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/Reachability (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - nanopb (< 2.30911.0, >= 2.30908.0) - flutter_local_notifications (0.0.1): - FlutterMacOS - flutter_secure_storage_macos (6.1.1): @@ -14,14 +47,49 @@ PODS: - FlutterMacOS - WebRTC-SDK (= 114.5735.10) - FlutterMacOS (1.0.0) - - livekit_client (2.1.5): + - GoogleDataTransport (9.4.1): + - GoogleUtilities/Environment (~> 7.7) + - nanopb (< 2.30911.0, >= 2.30908.0) + - PromisesObjC (< 3.0, >= 1.2) + - GoogleUtilities/AppDelegateSwizzler (7.13.3): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (7.13.3): + - GoogleUtilities/Privacy + - PromisesObjC (< 3.0, >= 1.2) + - GoogleUtilities/Logger (7.13.3): + - GoogleUtilities/Environment + - GoogleUtilities/Privacy + - GoogleUtilities/Network (7.13.3): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (7.13.3)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (7.13.3) + - GoogleUtilities/Reachability (7.13.3): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (7.13.3): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - livekit_client (2.1.6): - FlutterMacOS - WebRTC-SDK (= 114.5735.10) + - nanopb (2.30910.0): + - nanopb/decode (= 2.30910.0) + - nanopb/encode (= 2.30910.0) + - nanopb/decode (2.30910.0) + - nanopb/encode (2.30910.0) - package_info_plus (0.0.1): - FlutterMacOS - path_provider_foundation (0.0.1): - Flutter - FlutterMacOS + - PromisesObjC (2.4.0) - Sentry/HybridSDK (8.25.2) - sentry_flutter (8.2.0): - Flutter @@ -43,6 +111,8 @@ DEPENDENCIES: - connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin`) - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`) + - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`) + - firebase_messaging (from `Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos`) - flutter_local_notifications (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos`) - flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`) - flutter_webrtc (from `Flutter/ephemeral/.symlinks/plugins/flutter_webrtc/macos`) @@ -58,6 +128,15 @@ DEPENDENCIES: SPEC REPOS: trunk: + - Firebase + - FirebaseCore + - FirebaseCoreInternal + - FirebaseInstallations + - FirebaseMessaging + - GoogleDataTransport + - GoogleUtilities + - nanopb + - PromisesObjC - Sentry - WebRTC-SDK @@ -68,6 +147,10 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos file_selector_macos: :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos + firebase_core: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos + firebase_messaging: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos flutter_local_notifications: :path: Flutter/ephemeral/.symlinks/plugins/flutter_local_notifications/macos flutter_secure_storage_macos: @@ -97,13 +180,24 @@ SPEC CHECKSUMS: connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720 file_selector_macos: 54fdab7caa3ac3fc43c9fac4d7d8d231277f8cf2 + Firebase: 26b040b20866a55f55eb3611b9fcf3ae64816b86 + firebase_core: 0b3b9c6c93f774c7392f1f9a6712f0d9ce9b1771 + firebase_messaging: cea8e96b86f4fa6344d7b858d8fc8816e55f1b64 + FirebaseCore: a2b95ae4ce7c83ceecfbbbe3b6f1cddc7415a808 + FirebaseCoreInternal: 4b297a2d56063dbea2c1d0d04222d44a8d058862 + FirebaseInstallations: 766dabca09fd94aef922538aaf144cc4a6fb6869 + FirebaseMessaging: 585984d0a1df120617eb10b44cad8968b859815e flutter_local_notifications: 3805ca215b2fb7f397d78b66db91f6a747af52e4 flutter_secure_storage_macos: 59459653abe1adb92abbc8ea747d79f8d19866c9 flutter_webrtc: 823284e171ecb2487b7210c214886a949c122a59 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 - livekit_client: ca5f0447742014b6e462c27b71d49dcf03ec0446 + GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a + GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 + livekit_client: a87c5b7bac4ecd63da1183682ec10f5cafadbaf7 + nanopb: 438bc412db1928dac798aa6fd75726007be04262 package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 Sentry: 51b056d96914a741f63eca774d118678b1eb05a1 sentry_flutter: e8397d13e297a5d4b6be8a752e33140b21c5cc97 sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index fefafc4..39aaaa8 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -243,6 +243,7 @@ 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, C5DDC734703B72E778163C68 /* [CP] Embed Pods Frameworks */, + 7009C53F1F4A3CB93BB64EF3 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -386,6 +387,23 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 7009C53F1F4A3CB93BB64EF3 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; C1C3653094F6B3FFFFCFD12B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/pubspec.lock b/pubspec.lock index 587d909..d8dfe77 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -153,14 +153,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" - cryptography: - dependency: transitive - description: - name: cryptography - sha256: d146b76d33d94548cf035233fbc2f4338c1242fa119013bead807d033fc4ae05 - url: "https://pub.dev" - source: hosted - version: "2.7.0" csslib: dependency: transitive description: @@ -181,10 +173,10 @@ packages: dependency: transitive description: name: dart_webrtc - sha256: fe4db21dc389b99e04cb7bf43bc927dba2e42768d4c28211b66a4b5a16e4d516 + sha256: d663abfe6ed95afadcb64083e364aa16dbeaadead193bb03047cf6913e57b65e url: "https://pub.dev" source: hosted - version: "1.4.5" + version: "1.4.6+hotfix.1" dbus: dependency: transitive description: @@ -193,24 +185,8 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.10" - device_info: - dependency: transitive - description: - name: device_info - sha256: f4a8156cb7b7480d969cb734907d18b333c8f0bc0b1ad0b342cdcecf30d62c48 - url: "https://pub.dev" - source: hosted - version: "2.0.3" - device_info_platform_interface: - dependency: transitive - description: - name: device_info_platform_interface - sha256: b148e0bf9640145d09a4f8dea96614076f889e7f7f8b5ecab1c7e5c2dbc73c1b - url: "https://pub.dev" - source: hosted - version: "2.0.1" device_info_plus: - dependency: transitive + dependency: "direct main" description: name: device_info_plus sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91 @@ -366,14 +342,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.5.0" - flutter_background: - dependency: "direct main" - description: - name: flutter_background - sha256: "035c31a738509d67ee70bbf174e5aa7db462c371e838ec8259700c5c4e7ca17f" - url: "https://pub.dev" - source: hosted - version: "1.2.0" flutter_cache_manager: dependency: transitive description: @@ -516,10 +484,10 @@ packages: dependency: "direct main" description: name: flutter_webrtc - sha256: "1c61bc08d14be57ac28e9e540c44b8b1b9ab1b25bbdb66a8c658e61a3211cc5d" + sha256: fd5f115a08dcdc00b988bea3003c956f1b60a78a61d899cbddfb44f5d0e44d4a url: "https://pub.dev" source: hosted - version: "0.10.7" + version: "0.10.8" font_awesome_flutter: dependency: "direct main" description: @@ -708,10 +676,10 @@ packages: dependency: "direct main" description: name: livekit_client - sha256: "3792c4339db035d0320f1be8e2d99f394e5f3fe4215f95b371ce43db44a9d150" + sha256: e743aadc7dfbdcc9a1bc447cfe81e6f85346b624d972a71db3ce0f11b8a00a3b url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.1.6" logging: dependency: transitive description: @@ -936,54 +904,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.11" - platform_device_id: - dependency: "direct main" - description: - name: platform_device_id - sha256: "7a12ec84de4a823bb10eba2f0e1ad29e2365abba17790489a0d78029904f562e" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - platform_device_id_linux: - dependency: transitive - description: - name: platform_device_id_linux - sha256: "994b1608593e527a629af2d5aeb241c60d308d3434bc78b0f6fcb3c1a02dff43" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - platform_device_id_macos: - dependency: transitive - description: - name: platform_device_id_macos - sha256: "968db2a504c611294b12a031b3734432d6df10553a0d3ae3b33ed21abfdbaba0" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - platform_device_id_platform_interface: - dependency: transitive - description: - name: platform_device_id_platform_interface - sha256: c61607594252aaddacf3e4c4371ab08f2ef85ff427817fa6e48a169429610c46 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - platform_device_id_web: - dependency: transitive - description: - name: platform_device_id_web - sha256: "58e124594e1165db7f108395a780b1d1e1cd403021978e5228cf4289fbe736d5" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - platform_device_id_windows: - dependency: transitive - description: - name: platform_device_id_windows - sha256: dbf8dcf03ad8555320ebae2403a3081b79f137f37661874e161fe2de0a84eeeb - url: "https://pub.dev" - source: hosted - version: "1.0.0" plugin_platform_interface: dependency: transitive description: @@ -1048,6 +968,62 @@ packages: url: "https://pub.dev" source: hosted version: "8.2.0" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 + url: "https://pub.dev" + source: hosted + version: "2.2.3" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577" + url: "https://pub.dev" + source: hosted + version: "2.2.3" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" + url: "https://pub.dev" + source: hosted + version: "2.4.0" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" + url: "https://pub.dev" + source: hosted + version: "2.3.0" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + url: "https://pub.dev" + source: hosted + version: "2.3.2" sky_engine: dependency: transitive description: flutter @@ -1257,10 +1233,10 @@ packages: dependency: transitive description: name: video_player_android - sha256: "4f77780499ebbdb3a8387f3de7a9d07a7665cfb3a3741177c44a52353fe41d64" + sha256: "9529001630e42988f755772972d5014d30121610700e8e502278a245939f8fc8" url: "https://pub.dev" source: hosted - version: "2.4.16" + version: "2.5.0" video_player_avfoundation: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index ddb28d7..ad9c7ca 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -62,13 +62,13 @@ dependencies: livekit_client: ^2.1.5 flutter_webrtc: ^0.10.7 wakelock_plus: ^1.2.5 - flutter_background: ^1.2.0 cached_network_image: ^3.3.1 sentry_flutter: ^8.2.0 firebase_core: ^3.0.0 firebase_messaging: ^15.0.0 - platform_device_id: ^1.0.1 package_info_plus: ^8.0.0 + device_info_plus: ^10.1.0 + shared_preferences: ^2.2.3 dev_dependencies: flutter_test: diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 5d61019..1226b42 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -33,8 +32,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("LiveKitPlugin")); PermissionHandlerWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); - PlatformDeviceIdWindowsPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("PlatformDeviceIdWindowsPlugin")); SentryFlutterPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("SentryFlutterPlugin")); UrlLauncherWindowsRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 24c757d..2ad7592 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -10,7 +10,6 @@ list(APPEND FLUTTER_PLUGIN_LIST flutter_webrtc livekit_client permission_handler_windows - platform_device_id_windows sentry_flutter url_launcher_windows video_player_win