diff --git a/.gitignore b/.gitignore index 0c4dd3865..bd60d1b62 100644 --- a/.gitignore +++ b/.gitignore @@ -54,3 +54,4 @@ sample apps/hms-callkit-app/.dart_tool/flutter_build/ .DS_Store packages/.DS_Store Runner.ipa +sample apps/flutterflow-prebuilt-quickstart/.dart_tool/ diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index e8be4fec8..3d660863f 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -1,6 +1,6 @@ version: 0.1 cli: - version: 1.17.2 + version: 1.18.0 plugins: sources: - id: trunk @@ -10,9 +10,9 @@ lint: enabled: - actionlint@1.6.26 - checkov@3.1.9 - - osv-scanner@1.4.3 - - trivy@0.47.0 - - trufflehog@3.63.2-rc0 + - osv-scanner@1.5.0 + - trivy@0.48.0 + - trufflehog@3.63.2 - oxipng@9.0.0 - yamllint@1.33.0 - markdownlint@0.37.0 diff --git a/packages/hms_room_kit/CHANGELOG.md b/packages/hms_room_kit/CHANGELOG.md index ee07a4e65..5ded47fe0 100644 --- a/packages/hms_room_kit/CHANGELOG.md +++ b/packages/hms_room_kit/CHANGELOG.md @@ -5,6 +5,17 @@ | hms_room_kit | [![Pub Version](https://img.shields.io/pub/v/hms_room_kit)](https://pub.dev/packages/hms_room_kit) | | hmssdk_flutter | [![Pub Version](https://img.shields.io/pub/v/hmssdk_flutter)](https://pub.dev/packages/hmssdk_flutter) | +## 1.0.8 - 2023-12-15 + +| Package | Version | +| -------------- | ------------------------------------------------------------------------------------------------------ | +| hms_room_kit | 1.0.8 | +| hmssdk_flutter | 1.9.5 | + +### 🔄 Changed + +- Updated Streaming and Recording UI + ## 1.0.7 - 2023-12-08 | Package | Version | diff --git a/packages/hms_room_kit/README.md b/packages/hms_room_kit/README.md index e3d302683..216e2c978 100644 --- a/packages/hms_room_kit/README.md +++ b/packages/hms_room_kit/README.md @@ -14,12 +14,12 @@ A powerful prebuilt UI library for audio/video conferencing, live streaming, and one-to-one calls. This package provides developers with a comprehensive set of tools and components to quickly integrate high-quality audio and video communication features into their Flutter applications. - | Package | Version | | -------------- | ------------------------------------------------------------------------------------------------------ | | hms_room_kit | [![Pub Version](https://img.shields.io/pub/v/hms_room_kit)](https://pub.dev/packages/hms_room_kit) | | hmssdk_flutter | [![Pub Version](https://img.shields.io/pub/v/hmssdk_flutter)](https://pub.dev/packages/hmssdk_flutter) | + 🧱 The Prebuilt QuickStart Guide is [available here](https://www.100ms.live/docs/flutter/v2/quickstart/prebuilt). 📖 Read the Complete Documentation here: https://www.100ms.live/docs/flutter/v2/guides/quickstart diff --git a/packages/hms_room_kit/example/ios/Podfile.lock b/packages/hms_room_kit/example/ios/Podfile.lock index 5c31dbc5f..5481e0490 100644 --- a/packages/hms_room_kit/example/ios/Podfile.lock +++ b/packages/hms_room_kit/example/ios/Podfile.lock @@ -6,14 +6,14 @@ PODS: - HMSBroadcastExtensionSDK (0.0.9) - HMSHLSPlayerSDK (0.0.2): - HMSAnalyticsSDK (= 0.0.2) - - HMSSDK (1.3.0): + - HMSSDK (1.3.1): - HMSAnalyticsSDK (= 0.0.2) - HMSWebRTC (= 1.0.5116) - - hmssdk_flutter (1.9.3): + - hmssdk_flutter (1.9.4): - Flutter - HMSBroadcastExtensionSDK (= 0.0.9) - HMSHLSPlayerSDK (= 0.0.2) - - HMSSDK (= 1.3.0) + - HMSSDK (= 1.3.1) - HMSWebRTC (1.0.5116) - path_provider_foundation (0.0.1): - Flutter @@ -70,8 +70,8 @@ SPEC CHECKSUMS: HMSAnalyticsSDK: 4d2a88a729b1eb42f3d25f217c28937ec318a5b7 HMSBroadcastExtensionSDK: d80fe325f6c928bd8e5176290b5a4b7ae15d6fbb HMSHLSPlayerSDK: 6a54ad4d12f3dc2270d1ecd24019d71282a4f6a3 - HMSSDK: 631908d772646b66b3c4f7f4e1fb2681f7abb990 - hmssdk_flutter: 0b17359aefb7ec222e1b0cc44a595759a317ff98 + HMSSDK: 04aac0fefd95419cd1b4135156d4295cbcd51216 + hmssdk_flutter: 3876d06f4ad68bf48a2ceb4c797551fedb860bd1 HMSWebRTC: ae54e9dd91b869051b283b43b14f57d43b7bf8e1 path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6 diff --git a/packages/hms_room_kit/example/pubspec.lock b/packages/hms_room_kit/example/pubspec.lock index 49e421dac..872696dd2 100644 --- a/packages/hms_room_kit/example/pubspec.lock +++ b/packages/hms_room_kit/example/pubspec.lock @@ -214,15 +214,15 @@ packages: path: ".." relative: true source: path - version: "1.0.7" + version: "1.0.8" hmssdk_flutter: dependency: transitive description: name: hmssdk_flutter - sha256: "27dfc516ee4673ff092fc4e18487c315780b8470a2fbcf0f486bdfa529fc53cb" + sha256: f61fb1ffcaf7296e0e2eeff9bc34d699baf9190136b8570a15cde61819cf3276 url: "https://pub.dev" source: hosted - version: "1.9.4" + version: "1.9.5" http: dependency: transitive description: @@ -243,10 +243,10 @@ packages: dependency: transitive description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" js: dependency: transitive description: @@ -616,10 +616,10 @@ packages: dependency: transitive description: name: url_launcher - sha256: b1c9e98774adf8820c96fbc7ae3601231d324a7d5ebd8babe27b6dfac91357ba + sha256: e9aa5ea75c84cf46b3db4eea212523591211c3cf2e13099ee4ec147f54201c86 url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "6.2.2" url_launcher_android: dependency: transitive description: diff --git a/packages/hms_room_kit/example/pubspec.yaml b/packages/hms_room_kit/example/pubspec.yaml index 60a14146d..f22f2b898 100644 --- a/packages/hms_room_kit/example/pubspec.yaml +++ b/packages/hms_room_kit/example/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.7 +version: 1.0.8 environment: sdk: ">=2.19.6 <3.0.0" diff --git a/packages/hms_room_kit/lib/src/assets/icons/recording_paused.svg b/packages/hms_room_kit/lib/src/assets/icons/recording_paused.svg new file mode 100644 index 000000000..9fbd1e990 --- /dev/null +++ b/packages/hms_room_kit/lib/src/assets/icons/recording_paused.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/hms_room_kit/lib/src/hls_viewer/hls_viewer_bottom_navigation_bar.dart b/packages/hms_room_kit/lib/src/hls_viewer/hls_viewer_bottom_navigation_bar.dart index d48687772..2b5960b60 100644 --- a/packages/hms_room_kit/lib/src/hls_viewer/hls_viewer_bottom_navigation_bar.dart +++ b/packages/hms_room_kit/lib/src/hls_viewer/hls_viewer_bottom_navigation_bar.dart @@ -4,6 +4,7 @@ import 'dart:io'; ///Package imports import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:hms_room_kit/hms_room_kit.dart'; import 'package:provider/provider.dart'; ///Project imports @@ -14,7 +15,6 @@ import 'package:hms_room_kit/src/common/utility_components.dart'; import 'package:hms_room_kit/src/hls_viewer/hls_chat_component.dart'; import 'package:hms_room_kit/src/widgets/bottom_sheets/hls_more_options.dart'; import 'package:hms_room_kit/src/hls_viewer/hls_player_store.dart'; -import 'package:hms_room_kit/src/layout_api/hms_theme_colors.dart'; import 'package:hms_room_kit/src/meeting/meeting_store.dart'; import 'package:hms_room_kit/src/widgets/common_widgets/hms_embedded_button.dart'; @@ -223,38 +223,45 @@ class HLSViewerBottomNavigationBar extends StatelessWidget { ), ///Menu Button - HMSEmbeddedButton( - onTap: () async => { - showModalBottomSheet( - isScrollControlled: true, - backgroundColor: HMSThemeColors.surfaceDim, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(16), - topRight: Radius.circular(16)), - ), - context: context, - builder: (ctx) => ChangeNotifierProvider.value( - value: context.read(), - child: - const HLSMoreOptionsBottomSheet()), - ) - }, - enabledBorderColor: - HMSThemeColors.backgroundDim.withAlpha(64), - onColor: - HMSThemeColors.backgroundDim.withAlpha(64), - isActive: true, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: SvgPicture.asset( - "packages/hms_room_kit/lib/src/assets/icons/menu.svg", - colorFilter: ColorFilter.mode( - HMSThemeColors.onSurfaceHighEmphasis, - BlendMode.srcIn), - semanticsLabel: "more_button"), + if (HMSRoomLayout.isParticipantsListEnabled || + Constant.prebuiltOptions?.userName == null) + HMSEmbeddedButton( + onTap: () async => { + showModalBottomSheet( + isScrollControlled: true, + backgroundColor: + HMSThemeColors.surfaceDim, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(16), + topRight: Radius.circular(16)), + ), + context: context, + builder: (ctx) => + ChangeNotifierProvider.value( + value: + context.read(), + child: + const HLSMoreOptionsBottomSheet()), + ) + }, + enabledBorderColor: HMSThemeColors + .backgroundDim + .withAlpha(64), + onColor: HMSThemeColors.backgroundDim + .withAlpha(64), + isActive: true, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: SvgPicture.asset( + "packages/hms_room_kit/lib/src/assets/icons/menu.svg", + colorFilter: ColorFilter.mode( + HMSThemeColors + .onSurfaceHighEmphasis, + BlendMode.srcIn), + semanticsLabel: "more_button"), + ), ), - ), ], ) : Container(), diff --git a/packages/hms_room_kit/lib/src/hls_viewer/hls_viewer_header.dart b/packages/hms_room_kit/lib/src/hls_viewer/hls_viewer_header.dart index 9e9c139b0..0dcd96025 100644 --- a/packages/hms_room_kit/lib/src/hls_viewer/hls_viewer_header.dart +++ b/packages/hms_room_kit/lib/src/hls_viewer/hls_viewer_header.dart @@ -2,9 +2,10 @@ import 'dart:developer'; import 'dart:io'; +///Package imports import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:hms_room_kit/src/common/utility_functions.dart'; +import 'package:hmssdk_flutter/hmssdk_flutter.dart'; import 'package:provider/provider.dart'; import 'package:tuple/tuple.dart'; @@ -13,6 +14,7 @@ import 'package:hms_room_kit/src/layout_api/hms_room_layout.dart'; import 'package:hms_room_kit/src/layout_api/hms_theme_colors.dart'; import 'package:hms_room_kit/src/meeting/meeting_store.dart'; import 'package:hms_room_kit/src/widgets/common_widgets/hms_title_text.dart'; +import 'package:hms_room_kit/src/common/utility_functions.dart'; ///[HLSViewerHeader] is the header of the HLS Viewer screen class HLSViewerHeader extends StatelessWidget { @@ -67,7 +69,10 @@ class HLSViewerHeader extends StatelessWidget { ///If the HLS streaming is not started we show nothing Selector( selector: (_, meetingStore) => - meetingStore.streamingType['hls'] ?? false, + (meetingStore.streamingType['hls'] == + HMSStreamingState.started || + meetingStore.streamingType['rtmp'] == + HMSStreamingState.started), builder: (_, isHLSStarted, __) { return isHLSStarted ? Container( @@ -97,14 +102,24 @@ class HLSViewerHeader extends StatelessWidget { ///If the recording is not started we show nothing /// ///If recording initialising state is true we show the loader - Selector>( - selector: (_, meetingStore) => Tuple4( - meetingStore.recordingType["browser"] ?? false, - meetingStore.recordingType["server"] ?? false, - meetingStore.recordingType["hls"] ?? false, - meetingStore.isRecordingInInitialisingState), + Selector< + MeetingStore, + Tuple3>( + selector: (_, meetingStore) => Tuple3( + meetingStore.recordingType["browser"] ?? + HMSRecordingState.none, + meetingStore.recordingType["server"] ?? + HMSRecordingState.none, + meetingStore.recordingType["hls"] ?? + HMSRecordingState.none), builder: (_, data, __) { - return (data.item1 || data.item2 || data.item3) + return (data.item1 == HMSRecordingState.started || + data.item1 == HMSRecordingState.resumed || + data.item2 == HMSRecordingState.started || + data.item2 == HMSRecordingState.resumed || + data.item3 == HMSRecordingState.started || + data.item3 == HMSRecordingState.resumed) ? SvgPicture.asset( "packages/hms_room_kit/lib/src/assets/icons/record.svg", height: 24, @@ -113,7 +128,9 @@ class HLSViewerHeader extends StatelessWidget { HMSThemeColors.alertErrorDefault, BlendMode.srcIn), ) - : data.item4 + : (data.item1 == HMSRecordingState.starting || + data.item2 == HMSRecordingState.starting || + data.item3 == HMSRecordingState.starting) ? SizedBox( height: 24, width: 24, @@ -121,18 +138,32 @@ class HLSViewerHeader extends StatelessWidget { strokeWidth: 1, color: HMSThemeColors.onSurfaceHighEmphasis, )) - : Container(); + : (data.item1 == HMSRecordingState.paused || + data.item2 == HMSRecordingState.paused || + data.item3 == HMSRecordingState.paused) + ? SvgPicture.asset( + "packages/hms_room_kit/lib/src/assets/icons/recording_paused.svg", + height: 24, + width: 24, + colorFilter: ColorFilter.mode( + HMSThemeColors.onSurfaceHighEmphasis, + BlendMode.srcIn), + ) + : Container(); }), const SizedBox( width: 8, ), ///This renders the number of peers - ///If the HLS streaming is started, we render the number of peers + ///If the HLS or RTMP streaming is started, we render the number of peers ///else we render an empty Container Selector>( selector: (_, meetingStore) => Tuple2( - meetingStore.streamingType['hls'] ?? false, + meetingStore.streamingType['hls'] == + HMSStreamingState.started || + meetingStore.streamingType['rtmp'] == + HMSStreamingState.started, meetingStore.peersInRoom), builder: (_, data, __) { return data.item1 diff --git a/packages/hms_room_kit/lib/src/meeting/meeting_header.dart b/packages/hms_room_kit/lib/src/meeting/meeting_header.dart index b544c57e1..e251bcf62 100644 --- a/packages/hms_room_kit/lib/src/meeting/meeting_header.dart +++ b/packages/hms_room_kit/lib/src/meeting/meeting_header.dart @@ -83,7 +83,10 @@ class _MeetingHeaderState extends State { ///If recording initialising state is true we show the loader Selector( selector: (_, meetingStore) => - meetingStore.streamingType['hls'] ?? false, + (meetingStore.streamingType['hls'] == + HMSStreamingState.started || + meetingStore.streamingType['rtmp'] == + HMSStreamingState.started), builder: (_, isHLSStarted, __) { return isHLSStarted ? Container( @@ -115,16 +118,29 @@ class _MeetingHeaderState extends State { ///else we render an empty Container /// ///For recording status we use the recordingType map from the [MeetingStore] - Selector>( - selector: (_, meetingStore) => Tuple4( + Selector< + MeetingStore, + Tuple3>( + selector: (_, meetingStore) => Tuple3( meetingStore.recordingType["browser"] ?? - false, - meetingStore.recordingType["server"] ?? false, - meetingStore.recordingType["hls"] ?? false, - meetingStore.isRecordingInInitialisingState), + HMSRecordingState.none, + meetingStore.recordingType["server"] ?? + HMSRecordingState.none, + meetingStore.recordingType["hls"] ?? + HMSRecordingState.none), builder: (_, data, __) { - return (data.item1 || data.item2 || data.item3) + return (data.item1 == + HMSRecordingState.started || + data.item1 == + HMSRecordingState.resumed || + data.item2 == + HMSRecordingState.started || + data.item2 == + HMSRecordingState.resumed || + data.item3 == + HMSRecordingState.started || + data.item3 == HMSRecordingState.resumed) ? SvgPicture.asset( "packages/hms_room_kit/lib/src/assets/icons/record.svg", height: 24, @@ -133,16 +149,36 @@ class _MeetingHeaderState extends State { HMSThemeColors.alertErrorDefault, BlendMode.srcIn), ) - : data.item4 + : (data.item1 == + HMSRecordingState.starting || + data.item2 == + HMSRecordingState.starting || + data.item3 == + HMSRecordingState.starting) ? SizedBox( - height: 24, - width: 24, + height: 20, + width: 20, child: CircularProgressIndicator( strokeWidth: 2, color: HMSThemeColors .onSurfaceHighEmphasis, )) - : Container(); + : (data.item1 == + HMSRecordingState.paused || + data.item2 == + HMSRecordingState.paused || + data.item3 == + HMSRecordingState.paused) + ? SvgPicture.asset( + "packages/hms_room_kit/lib/src/assets/icons/recording_paused.svg", + height: 24, + width: 24, + colorFilter: ColorFilter.mode( + HMSThemeColors + .onSurfaceHighEmphasis, + BlendMode.srcIn), + ) + : Container(); }), const SizedBox( width: 8, @@ -153,7 +189,10 @@ class _MeetingHeaderState extends State { ///else we render an empty Container Selector>( selector: (_, meetingStore) => Tuple2( - meetingStore.streamingType['hls'] ?? false, + ((meetingStore.streamingType['hls'] == + HMSStreamingState.started) || + (meetingStore.streamingType['rtmp'] == + HMSStreamingState.started)), meetingStore.peersInRoom), builder: (_, data, __) { return data.item1 diff --git a/packages/hms_room_kit/lib/src/meeting/meeting_store.dart b/packages/hms_room_kit/lib/src/meeting/meeting_store.dart index 0c5e6509c..67964737d 100644 --- a/packages/hms_room_kit/lib/src/meeting/meeting_store.dart +++ b/packages/hms_room_kit/lib/src/meeting/meeting_store.dart @@ -87,13 +87,16 @@ class MeetingStore extends ChangeNotifier List toasts = []; - Map recordingType = { - "browser": false, - "server": false, - "hls": false + Map recordingType = { + "browser": HMSRecordingState.none, + "server": HMSRecordingState.none, + "hls": HMSRecordingState.none }; - Map streamingType = {"rtmp": false, "hls": false}; + Map streamingType = { + "rtmp": HMSStreamingState.none, + "hls": HMSStreamingState.none + }; String description = "Meeting Ended"; @@ -228,9 +231,6 @@ class MeetingStore extends ChangeNotifier ///This stores the number of peers in the room int peersInRoom = 0; - ///Check whether recording is in intialising state - bool isRecordingInInitialisingState = false; - ///Pool of video views List viewControllers = []; @@ -529,7 +529,8 @@ class MeetingStore extends ChangeNotifier meetingUrl: meetingUrl, toRecord: toRecord, rtmpUrls: rtmpUrls); _hmsSDKInteractor.startRtmpOrRecording(hmsRecordingConfig, this); - isRecordingInInitialisingState = true; + recordingType["browser"] = HMSRecordingState.starting; + notifyListeners(); } @@ -768,27 +769,25 @@ class MeetingStore extends ChangeNotifier log("onJoin-> room: ${room.toString()}"); isMeetingStarted = true; hmsRoom = room; - if (room.hmshlsStreamingState?.running ?? false) { + if (room.hmshlsStreamingState?.state == HMSStreamingState.started) { hasHlsStarted = true; streamUrl = room.hmshlsStreamingState?.variants[0]?.hlsStreamUrl; } else { hasHlsStarted = false; } - if (room.hmsBrowserRecordingState?.running == true) { - recordingType["browser"] = true; - } - if (room.hmsServerRecordingState?.running == true) { - recordingType["server"] = true; - } - if (room.hmshlsRecordingState?.running == true) { - recordingType["hls"] = true; - } - if (room.hmsRtmpStreamingState?.running == true) { - streamingType["rtmp"] = true; - } - if (room.hmshlsStreamingState?.running == true) { - streamingType["hls"] = true; - } + + recordingType["browser"] = + room.hmsBrowserRecordingState?.state ?? HMSRecordingState.none; + recordingType["server"] = + room.hmsServerRecordingState?.state ?? HMSRecordingState.none; + recordingType["hls"] = + room.hmshlsRecordingState?.state ?? HMSRecordingState.none; + + streamingType["rtmp"] = + room.hmsRtmpStreamingState?.state ?? HMSStreamingState.none; + streamingType["hls"] = + room.hmshlsStreamingState?.state ?? HMSStreamingState.none; + setParticipantsList(roles); for (HMSPeer each in room.peers!) { if (each.isLocal) { @@ -897,30 +896,29 @@ class MeetingStore extends ChangeNotifier switch (update) { case HMSRoomUpdate.browserRecordingStateUpdated: recordingType["browser"] = - room.hmsBrowserRecordingState?.running ?? false; - isRecordingInInitialisingState = - room.hmsBrowserRecordingState?.initialising ?? false; + room.hmsBrowserRecordingState?.state ?? HMSRecordingState.none; break; case HMSRoomUpdate.serverRecordingStateUpdated: recordingType["server"] = - room.hmsServerRecordingState?.running ?? false; + room.hmsServerRecordingState?.state ?? HMSRecordingState.none; break; case HMSRoomUpdate.hlsRecordingStateUpdated: - recordingType["hls"] = room.hmshlsRecordingState?.running ?? false; + recordingType["hls"] = + room.hmshlsRecordingState?.state ?? HMSRecordingState.none; break; case HMSRoomUpdate.rtmpStreamingStateUpdated: - streamingType["rtmp"] = room.hmsRtmpStreamingState?.running ?? false; + streamingType["rtmp"] = + room.hmsRtmpStreamingState?.state ?? HMSStreamingState.none; break; case HMSRoomUpdate.hlsStreamingStateUpdated: isHLSLoading = false; - streamingType["hls"] = room.hmshlsStreamingState?.running ?? false; - hasHlsStarted = room.hmshlsStreamingState?.running ?? false; + streamingType["hls"] = + room.hmshlsStreamingState?.state ?? HMSStreamingState.none; + hasHlsStarted = + room.hmshlsStreamingState?.state == HMSStreamingState.started; streamUrl = hasHlsStarted ? room.hmshlsStreamingState?.variants[0]?.hlsStreamUrl : null; - Utilities.showToast(room.hmshlsStreamingState?.running ?? false - ? "HLS Streaming Started" - : "HLS Streaming Stopped"); break; default: break; @@ -1075,7 +1073,7 @@ class MeetingStore extends ChangeNotifier for (var speaker in updateSpeakers) { int index = peerTracks.indexWhere((previousSpeaker) => previousSpeaker.uid == "${speaker.peer.peerId}mainVideo"); - if (index > (peersInActiveSpeakerLayout - 1)) { + if (index > ((peersInActiveSpeakerLayout + screenShareCount) - 1)) { PeerTrackNode activeSpeaker = peerTracks[index]; peerTracks.removeAt(index); peerTracks.insert(screenShareCount, activeSpeaker); @@ -2192,7 +2190,7 @@ class MeetingStore extends ChangeNotifier case HMSActionResultListenerMethod.startRtmpOrRecording: toasts.add(HMSToastModel(hmsException, hmsToastType: HMSToastsType.errorToast)); - isRecordingInInitialisingState = false; + recordingType["browser"] = HMSRecordingState.failed; notifyListeners(); break; case HMSActionResultListenerMethod.stopRtmpAndRecording: diff --git a/packages/hms_room_kit/lib/src/preview/preview_store.dart b/packages/hms_room_kit/lib/src/preview/preview_store.dart index 486a56a99..971273c6e 100644 --- a/packages/hms_room_kit/lib/src/preview/preview_store.dart +++ b/packages/hms_room_kit/lib/src/preview/preview_store.dart @@ -171,28 +171,31 @@ class PreviewStore extends ChangeNotifier @override void onRoomUpdate({required HMSRoom room, required HMSRoomUpdate update}) { this.room = room; - log("onRoomUpdate-> room: ${room.toString()} update: ${update.name}"); + log("onRoomUpdate-> room: ${room.toString()} update: ${update.name} streamingState: ${room.hmshlsStreamingState?.state.name}"); switch (update) { case HMSRoomUpdate.browserRecordingStateUpdated: - isRecordingStarted = room.hmsBrowserRecordingState?.running ?? false; + isRecordingStarted = + room.hmsBrowserRecordingState?.state == HMSRecordingState.started; break; case HMSRoomUpdate.serverRecordingStateUpdated: - isRecordingStarted = room.hmsServerRecordingState?.running ?? false; - break; + isRecordingStarted = + room.hmsServerRecordingState?.state == HMSRecordingState.started; case HMSRoomUpdate.hlsRecordingStateUpdated: - isRecordingStarted = room.hmshlsRecordingState?.running ?? false; + isRecordingStarted = + room.hmshlsRecordingState?.state == HMSRecordingState.started; break; case HMSRoomUpdate.rtmpStreamingStateUpdated: - isRTMPStreamingStarted = room.hmsRtmpStreamingState?.running ?? false; + isRTMPStreamingStarted = + room.hmsRtmpStreamingState?.state == HMSStreamingState.started; break; case HMSRoomUpdate.hlsStreamingStateUpdated: - isHLSStreamingStarted = room.hmshlsStreamingState?.running ?? false; - if (!isMeetingJoined && isRoomJoined) { - isRoomJoinedAndHLSStarted = - (room.hmshlsStreamingState?.running ?? false) && isRoomJoined; + isHLSStreamingStarted = + room.hmshlsStreamingState?.state == HMSStreamingState.started; + if (!isMeetingJoined && isRoomJoined && isHLSStreamingStarted) { + isRoomJoinedAndHLSStarted = true; isMeetingJoined = true; } break; diff --git a/packages/hms_room_kit/lib/src/preview_for_role/preview_for_role_header.dart b/packages/hms_room_kit/lib/src/preview_for_role/preview_for_role_header.dart index c25deda2e..82c65b90c 100644 --- a/packages/hms_room_kit/lib/src/preview_for_role/preview_for_role_header.dart +++ b/packages/hms_room_kit/lib/src/preview_for_role/preview_for_role_header.dart @@ -5,6 +5,7 @@ import 'dart:developer'; import 'package:flutter/cupertino.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:hms_room_kit/hms_room_kit.dart'; +import 'package:hmssdk_flutter/hmssdk_flutter.dart'; import 'package:provider/provider.dart'; import 'package:tuple/tuple.dart'; @@ -59,7 +60,8 @@ class _PreviewForRoleHeaderState extends State { ///If the HLS streaming is not started we show nothing Selector( selector: (_, meetingStore) => - meetingStore.streamingType['hls'] ?? false, + meetingStore.streamingType['hls'] == + HMSStreamingState.started, builder: (_, isHLSStrted, __) { return isHLSStrted ? Container( @@ -86,14 +88,25 @@ class _PreviewForRoleHeaderState extends State { ///We render the recording icon based on the recording status ///If the recording is started we show the recording icon ///If the recording is not started we show nothing - Selector>( + Selector< + MeetingStore, + Tuple3>( selector: (_, meetingStore) => Tuple3( - meetingStore.recordingType["browser"] ?? false, - meetingStore.recordingType["server"] ?? false, - meetingStore.recordingType["hls"] ?? false, + meetingStore.recordingType["browser"] ?? + HMSRecordingState.none, + meetingStore.recordingType["server"] ?? + HMSRecordingState.none, + meetingStore.recordingType["hls"] ?? + HMSRecordingState.none, ), builder: (_, data, __) { - return (data.item1 || data.item2 || data.item3) + return (data.item1 == HMSRecordingState.started || + data.item1 == HMSRecordingState.resumed || + data.item2 == HMSRecordingState.started || + data.item2 == HMSRecordingState.resumed || + data.item3 == HMSRecordingState.started || + data.item3 == HMSRecordingState.resumed) ? SvgPicture.asset( "packages/hms_room_kit/lib/src/assets/icons/record.svg", height: 24, @@ -109,11 +122,14 @@ class _PreviewForRoleHeaderState extends State { ), ///This renders the number of peers - ///If the HLS streaming is started, we render the number of peers + ///If the HLS or RTMP streaming is started, we render the number of peers ///else we render an empty Container Selector>( selector: (_, meetingStore) => Tuple2( - meetingStore.streamingType['hls'] ?? false, + meetingStore.streamingType['hls'] == + HMSStreamingState.started || + meetingStore.streamingType['rtmp'] == + HMSStreamingState.started, meetingStore.peersInRoom), builder: (_, data, __) { return data.item1 diff --git a/packages/hms_room_kit/lib/src/service/app_debug_config.dart b/packages/hms_room_kit/lib/src/service/app_debug_config.dart index f92c2ec00..0c6a78d27 100644 --- a/packages/hms_room_kit/lib/src/service/app_debug_config.dart +++ b/packages/hms_room_kit/lib/src/service/app_debug_config.dart @@ -14,6 +14,7 @@ class AppDebugConfig { static bool isSoftwareDecoderDisabled = true; static bool isAudioMixerDisabled = true; static bool isAutoSimulcast = true; + static bool nameChangeOnPreview = true; static bool isDebugMode = false; static bool isProdRoom = true; @@ -32,5 +33,6 @@ class AppDebugConfig { isAudioMixerDisabled = true; isAutoSimulcast = true; isProdRoom = true; + nameChangeOnPreview = true; } } diff --git a/packages/hms_room_kit/lib/src/widgets/bottom_sheets/app_utilities_bottom_sheet.dart b/packages/hms_room_kit/lib/src/widgets/bottom_sheets/app_utilities_bottom_sheet.dart index c43e57643..d46fd1935 100644 --- a/packages/hms_room_kit/lib/src/widgets/bottom_sheets/app_utilities_bottom_sheet.dart +++ b/packages/hms_room_kit/lib/src/widgets/bottom_sheets/app_utilities_bottom_sheet.dart @@ -2,6 +2,7 @@ import 'package:badges/badges.dart' as badge; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:hmssdk_flutter/hmssdk_flutter.dart'; import 'package:provider/provider.dart'; ///Project imports @@ -205,9 +206,12 @@ class _AppUtilitiesBottomSheetState extends State { false) ///If streaming is on or in initialising state disable the button - ((meetingStore.streamingType["hls"] ?? false) || - (meetingStore.streamingType["rtmp"] ?? false) || - meetingStore.isRecordingInInitialisingState) + ((meetingStore.streamingType["hls"] == + HMSStreamingState.started) || + (meetingStore.streamingType["rtmp"] == + HMSStreamingState.started) || + meetingStore.recordingType["browser"] == + HMSRecordingState.starting) ? MoreOptionItem( onTap: () {}, isActive: false, @@ -219,17 +223,20 @@ class _AppUtilitiesBottomSheetState extends State { HMSThemeColors.onSurfaceLowEmphasis, BlendMode.srcIn), ), - optionText: "Start Recording", + optionText: "Record", optionTextColor: HMSThemeColors.onSurfaceLowEmphasis, ) : MoreOptionItem( onTap: () async { bool isRecordingRunning = - ((meetingStore.recordingType["hls"] ?? false) || - (meetingStore.recordingType["browser"] ?? - false) || - (meetingStore.recordingType["server"] ?? - false)); + ((meetingStore.recordingType["hls"] == + HMSRecordingState.started) || + meetingStore.recordingType["hls"] == + HMSRecordingState.resumed) || + (meetingStore.recordingType["browser"] == + HMSRecordingState.started || + meetingStore.recordingType["browser"] == + HMSRecordingState.resumed); if (isRecordingRunning) { Navigator.pop(context); showModalBottomSheet( @@ -276,27 +283,27 @@ class _AppUtilitiesBottomSheetState extends State { rtmpUrls: null); } }, - isActive: ((meetingStore.recordingType["hls"] ?? - false) || - (meetingStore.recordingType["browser"] ?? - false) || - (meetingStore.recordingType["server"] ?? false)), + isActive: false, optionIcon: SvgPicture.asset( - "packages/hms_room_kit/lib/src/assets/icons/record.svg", + "packages/hms_room_kit/lib/src/assets/icons/${meetingStore.recordingType["browser"] == HMSRecordingState.paused ? "recording_paused" : "record"}.svg", height: 20, width: 20, colorFilter: ColorFilter.mode( - HMSThemeColors.onSurfaceHighEmphasis, + meetingStore.recordingType["browser"] == + HMSRecordingState.started + ? HMSThemeColors.alertErrorDefault + : HMSThemeColors.onSurfaceHighEmphasis, BlendMode.srcIn), ), - optionText: - ((meetingStore.recordingType["hls"] ?? false) || - (meetingStore.recordingType["browser"] ?? - false) || - (meetingStore.recordingType["server"] ?? - false)) - ? "Stop Recording" - : "Start Recording", + optionText: meetingStore.recordingType["browser"] == + HMSRecordingState.paused + ? "Recording Paused" + : ((meetingStore.recordingType["hls"] == + HMSRecordingState.started) || + (meetingStore.recordingType["browser"] == + HMSRecordingState.started)) + ? "Recording" + : "Record", ) ], ), diff --git a/packages/hms_room_kit/lib/src/widgets/bottom_sheets/hls_more_options.dart b/packages/hms_room_kit/lib/src/widgets/bottom_sheets/hls_more_options.dart index 71cfa12b9..8660f2113 100644 --- a/packages/hms_room_kit/lib/src/widgets/bottom_sheets/hls_more_options.dart +++ b/packages/hms_room_kit/lib/src/widgets/bottom_sheets/hls_more_options.dart @@ -128,37 +128,38 @@ class _HLSMoreOptionsBottomSheetBottomSheetState ), ), optionText: "Participants"), - MoreOptionItem( - onTap: () async { - var meetingStore = context.read(); - Navigator.pop(context); - showModalBottomSheet( - isScrollControlled: true, - backgroundColor: HMSThemeColors.surfaceDim, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(16), - topRight: Radius.circular(16)), - ), - context: context, - builder: (ctx) => ChangeNotifierProvider.value( - value: meetingStore, - child: Padding( - padding: EdgeInsets.only( - bottom: - MediaQuery.of(ctx).viewInsets.bottom), - child: const ChangeNameBottomSheet())), - ); - }, - optionIcon: SvgPicture.asset( - "packages/hms_room_kit/lib/src/assets/icons/pencil.svg", - height: 20, - width: 20, - colorFilter: ColorFilter.mode( - HMSThemeColors.onSurfaceHighEmphasis, - BlendMode.srcIn), - ), - optionText: "Change Name") + if (Constant.prebuiltOptions?.userName == null) + MoreOptionItem( + onTap: () async { + var meetingStore = context.read(); + Navigator.pop(context); + showModalBottomSheet( + isScrollControlled: true, + backgroundColor: HMSThemeColors.surfaceDim, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(16), + topRight: Radius.circular(16)), + ), + context: context, + builder: (ctx) => ChangeNotifierProvider.value( + value: meetingStore, + child: Padding( + padding: EdgeInsets.only( + bottom: + MediaQuery.of(ctx).viewInsets.bottom), + child: const ChangeNameBottomSheet())), + ); + }, + optionIcon: SvgPicture.asset( + "packages/hms_room_kit/lib/src/assets/icons/pencil.svg", + height: 20, + width: 20, + colorFilter: ColorFilter.mode( + HMSThemeColors.onSurfaceHighEmphasis, + BlendMode.srcIn), + ), + optionText: "Change Name") ], ), ], diff --git a/packages/hms_room_kit/lib/src/widgets/bottom_sheets/local_peer_bottom_sheet.dart b/packages/hms_room_kit/lib/src/widgets/bottom_sheets/local_peer_bottom_sheet.dart index 89c55d24d..991e67ac7 100644 --- a/packages/hms_room_kit/lib/src/widgets/bottom_sheets/local_peer_bottom_sheet.dart +++ b/packages/hms_room_kit/lib/src/widgets/bottom_sheets/local_peer_bottom_sheet.dart @@ -148,44 +148,45 @@ class _LocalPeerBottomSheetState extends State { // title: HMSSubheadingText( // text: "Spotlight Tile for Everyone", // textColor: HMSThemeColors.onSurfaceHighEmphasis)), - ListTile( - horizontalTitleGap: 2, - onTap: () async { - Navigator.pop(context); - showModalBottomSheet( - isScrollControlled: true, - backgroundColor: HMSThemeColors.surfaceDim, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(16), - topRight: Radius.circular(16)), - ), - context: context, - builder: (ctx) => ChangeNotifierProvider.value( - value: widget.meetingStore, - child: Padding( - padding: EdgeInsets.only( - bottom: MediaQuery.of(ctx) - .viewInsets - .bottom), - child: const ChangeNameBottomSheet( - showPrivacyInfo: false, - ))), - ); - }, - contentPadding: EdgeInsets.zero, - leading: SvgPicture.asset( - "packages/hms_room_kit/lib/src/assets/icons/pencil.svg", - semanticsLabel: "fl_local_pin_tile", - height: 20, - width: 20, - colorFilter: ColorFilter.mode( - HMSThemeColors.onSurfaceHighEmphasis, - BlendMode.srcIn), - ), - title: HMSSubheadingText( - text: "Change Name", - textColor: HMSThemeColors.onSurfaceHighEmphasis)), + if (Constant.prebuiltOptions?.userName == null) + ListTile( + horizontalTitleGap: 2, + onTap: () async { + Navigator.pop(context); + showModalBottomSheet( + isScrollControlled: true, + backgroundColor: HMSThemeColors.surfaceDim, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(16), + topRight: Radius.circular(16)), + ), + context: context, + builder: (ctx) => ChangeNotifierProvider.value( + value: widget.meetingStore, + child: Padding( + padding: EdgeInsets.only( + bottom: MediaQuery.of(ctx) + .viewInsets + .bottom), + child: const ChangeNameBottomSheet( + showPrivacyInfo: false, + ))), + ); + }, + contentPadding: EdgeInsets.zero, + leading: SvgPicture.asset( + "packages/hms_room_kit/lib/src/assets/icons/pencil.svg", + semanticsLabel: "fl_local_pin_tile", + height: 20, + width: 20, + colorFilter: ColorFilter.mode( + HMSThemeColors.onSurfaceHighEmphasis, + BlendMode.srcIn), + ), + title: HMSSubheadingText( + text: "Change Name", + textColor: HMSThemeColors.onSurfaceHighEmphasis)), if (widget.isInsetTile) ListTile( horizontalTitleGap: 2, diff --git a/packages/hms_room_kit/lib/src/widgets/bottom_sheets/more_settings_bottom_sheet.dart b/packages/hms_room_kit/lib/src/widgets/bottom_sheets/more_settings_bottom_sheet.dart index 4359f54bb..a408ab9ce 100644 --- a/packages/hms_room_kit/lib/src/widgets/bottom_sheets/more_settings_bottom_sheet.dart +++ b/packages/hms_room_kit/lib/src/widgets/bottom_sheets/more_settings_bottom_sheet.dart @@ -436,7 +436,8 @@ class _MoreSettingsBottomSheetState extends State { false) Selector( selector: (_, meetingStore) => - meetingStore.streamingType["rtmp"] ?? false, + meetingStore.streamingType["rtmp"] == + HMSStreamingState.started, builder: (_, isRTMPRunning, __) { return ListTile( horizontalTitleGap: 2, @@ -453,7 +454,7 @@ class _MoreSettingsBottomSheetState extends State { "Enter Comma separated RTMP Urls", isRecordingEnabled: meetingStore .recordingType["browser"] == - true); + HMSRecordingState.started); List? urls; if (data["url"]!.isNotEmpty) { urls = data["url"]!.split(","); @@ -499,7 +500,8 @@ class _MoreSettingsBottomSheetState extends State { false) Selector( selector: (_, meetingStore) => - meetingStore.recordingType["browser"] ?? false, + meetingStore.recordingType["browser"] == + HMSRecordingState.started, builder: (_, isBrowserRecording, __) { return ListTile( horizontalTitleGap: 2, diff --git a/packages/hms_room_kit/lib/src/widgets/common_widgets/hms_subtitle_text.dart b/packages/hms_room_kit/lib/src/widgets/common_widgets/hms_subtitle_text.dart index 8b550777f..2f3e306a7 100644 --- a/packages/hms_room_kit/lib/src/widgets/common_widgets/hms_subtitle_text.dart +++ b/packages/hms_room_kit/lib/src/widgets/common_widgets/hms_subtitle_text.dart @@ -23,6 +23,7 @@ class HMSSubtitleText extends StatelessWidget { final FontWeight? fontWeight; final TextOverflow? textOverflow; final TextAlign? textAlign; + final int? maxLines; const HMSSubtitleText( {Key? key, @@ -33,7 +34,8 @@ class HMSSubtitleText extends StatelessWidget { this.fontSize = 12, this.fontWeight = FontWeight.w400, this.textOverflow = TextOverflow.ellipsis, - this.textAlign}) + this.textAlign, + this.maxLines = 1}) : super(key: key); @override @@ -41,12 +43,14 @@ class HMSSubtitleText extends StatelessWidget { return Text(text, overflow: textOverflow, softWrap: true, + maxLines: maxLines, textAlign: textAlign, style: HMSTextStyle.setTextStyle( - height: lineHeight! / fontSize!, - fontSize: fontSize, - letterSpacing: letterSpacing, - color: textColor, - fontWeight: fontWeight)); + height: lineHeight! / fontSize!, + fontSize: fontSize, + letterSpacing: letterSpacing, + color: textColor, + fontWeight: fontWeight, + )); } } diff --git a/packages/hms_room_kit/lib/src/widgets/common_widgets/inset_tile.dart b/packages/hms_room_kit/lib/src/widgets/common_widgets/inset_tile.dart index d73311b67..53685bd57 100644 --- a/packages/hms_room_kit/lib/src/widgets/common_widgets/inset_tile.dart +++ b/packages/hms_room_kit/lib/src/widgets/common_widgets/inset_tile.dart @@ -9,7 +9,7 @@ import 'package:provider/provider.dart'; ///Project imports import 'package:hms_room_kit/src/layout_api/hms_theme_colors.dart'; -import 'package:hms_room_kit/src/widgets/peer_widgets/inset_tile_more_option.dart'; +import 'package:hms_room_kit/src/widgets/peer_widgets/local_peer_more_option.dart'; import 'package:hms_room_kit/src/model/peer_track_node.dart'; import 'package:hms_room_kit/src/widgets/common_widgets/video_view.dart'; import 'package:hms_room_kit/src/widgets/peer_widgets/audio_mute_status.dart'; diff --git a/packages/hms_room_kit/lib/src/widgets/common_widgets/more_option_item.dart b/packages/hms_room_kit/lib/src/widgets/common_widgets/more_option_item.dart index 7a5dfd018..389615e09 100644 --- a/packages/hms_room_kit/lib/src/widgets/common_widgets/more_option_item.dart +++ b/packages/hms_room_kit/lib/src/widgets/common_widgets/more_option_item.dart @@ -40,7 +40,9 @@ class MoreOptionItem extends StatelessWidget { optionIcon, const SizedBox(height: 8), HMSSubtitleText( + maxLines: 2, text: optionText, + textAlign: TextAlign.center, textColor: optionTextColor ?? HMSThemeColors.onSurfaceHighEmphasis, fontWeight: FontWeight.w600, diff --git a/packages/hms_room_kit/lib/src/widgets/common_widgets/peer_tile.dart b/packages/hms_room_kit/lib/src/widgets/common_widgets/peer_tile.dart index f131045ac..03f783240 100644 --- a/packages/hms_room_kit/lib/src/widgets/common_widgets/peer_tile.dart +++ b/packages/hms_room_kit/lib/src/widgets/common_widgets/peer_tile.dart @@ -10,7 +10,7 @@ import 'package:provider/provider.dart'; // Project imports import 'package:hms_room_kit/src/layout_api/hms_theme_colors.dart'; import 'package:hms_room_kit/src/meeting/meeting_store.dart'; -import 'package:hms_room_kit/src/widgets/peer_widgets/inset_tile_more_option.dart'; +import 'package:hms_room_kit/src/widgets/peer_widgets/local_peer_more_option.dart'; import 'package:hms_room_kit/src/widgets/peer_widgets/name_and_network.dart'; import 'package:hms_room_kit/src/widgets/peer_widgets/screen_share_tile_name.dart'; import 'package:hms_room_kit/src/model/peer_track_node.dart'; diff --git a/packages/hms_room_kit/lib/src/widgets/common_widgets/video_view.dart b/packages/hms_room_kit/lib/src/widgets/common_widgets/video_view.dart index c6c3234cd..0154eeac5 100644 --- a/packages/hms_room_kit/lib/src/widgets/common_widgets/video_view.dart +++ b/packages/hms_room_kit/lib/src/widgets/common_widgets/video_view.dart @@ -83,8 +83,6 @@ class _VideoViewState extends State { // Similarly to avoid rebuilding the key should be kept the same for particular HMSVideoView. child: HMSTextureView( controller: widget.videoViewController, - addTrackByDefault: - !context.read().isOffscreen, key: Key(data.item1!.trackId), scaleType: ScaleType.SCALE_ASPECT_FIT, track: data.item1!, @@ -98,8 +96,6 @@ class _VideoViewState extends State { // Similarly to avoid rebuilding the key should be kept the same for particular HMSVideoView. child: HMSTextureView( controller: widget.videoViewController, - addTrackByDefault: - !context.read().isOffscreen, key: Key(data.item1!.trackId), scaleType: ScaleType.SCALE_ASPECT_FILL, track: data.item1!, diff --git a/packages/hms_room_kit/lib/src/widgets/peer_widgets/inset_tile_more_option.dart b/packages/hms_room_kit/lib/src/widgets/peer_widgets/inset_tile_more_option.dart deleted file mode 100644 index 5652f782d..000000000 --- a/packages/hms_room_kit/lib/src/widgets/peer_widgets/inset_tile_more_option.dart +++ /dev/null @@ -1,70 +0,0 @@ -///Package imports -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; - -///Project imports -import 'package:hms_room_kit/src/layout_api/hms_theme_colors.dart'; -import 'package:hms_room_kit/src/meeting/meeting_store.dart'; -import 'package:hms_room_kit/src/model/peer_track_node.dart'; -import 'package:hms_room_kit/src/widgets/bottom_sheets/local_peer_bottom_sheet.dart'; - -///[LocalPeerMoreOption] is a widget that is used to render the more option button on a local peer(inset) tile -///This is used in the [LocalPeerTile] -///It has following parameters: -///[callbackFunction] is a function that is called when the more option button is clicked -class LocalPeerMoreOption extends StatelessWidget { - final Function()? callbackFunction; - final bool isInsetTile; - const LocalPeerMoreOption( - {super.key, this.callbackFunction, this.isInsetTile = true}); - - @override - Widget build(BuildContext context) { - return Positioned( - bottom: 5, - right: 5, - child: GestureDetector( - onTap: () { - ///[peerTrackNode] is the peerTrackNode of the peer whose more option is clicked - ///We only show the modal bottom sheet if the peer is the local peer - var peerTrackNode = context.read(); - showModalBottomSheet( - isScrollControlled: true, - backgroundColor: HMSThemeColors.surfaceDim, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(16), topRight: Radius.circular(16)), - ), - context: context, - builder: (ctx) => ChangeNotifierProvider.value( - value: context.read(), - child: LocalPeerBottomSheet( - isInsetTile: isInsetTile, - meetingStore: context.read(), - peerTrackNode: peerTrackNode, - callbackFunction: callbackFunction, - )), - ); - }, - child: Semantics( - label: "fl_${context.read().peer.name}more_option", - child: Container( - height: 28, - width: 28, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - color: HMSThemeColors.backgroundDim.withOpacity(0.64), - ), - child: Center( - child: Icon( - Icons.more_vert, - color: HMSThemeColors.onSurfaceHighEmphasis, - size: 20, - ), - ), - ), - ), - ), - ); - } -} diff --git a/packages/hms_room_kit/lib/src/widgets/peer_widgets/local_peer_more_option.dart b/packages/hms_room_kit/lib/src/widgets/peer_widgets/local_peer_more_option.dart new file mode 100644 index 000000000..8e64da5a8 --- /dev/null +++ b/packages/hms_room_kit/lib/src/widgets/peer_widgets/local_peer_more_option.dart @@ -0,0 +1,74 @@ +///Package imports +import 'package:flutter/material.dart'; +import 'package:hms_room_kit/hms_room_kit.dart'; +import 'package:provider/provider.dart'; + +///Project imports +import 'package:hms_room_kit/src/meeting/meeting_store.dart'; +import 'package:hms_room_kit/src/model/peer_track_node.dart'; +import 'package:hms_room_kit/src/widgets/bottom_sheets/local_peer_bottom_sheet.dart'; + +///[LocalPeerMoreOption] is a widget that is used to render the more option button on a local peer(inset) tile +///This is used in the [LocalPeerTile] +///It has following parameters: +///[callbackFunction] is a function that is called when the more option button is clicked +class LocalPeerMoreOption extends StatelessWidget { + final Function()? callbackFunction; + final bool isInsetTile; + const LocalPeerMoreOption( + {super.key, this.callbackFunction, this.isInsetTile = true}); + + @override + Widget build(BuildContext context) { + return (Constant.prebuiltOptions?.userName != null && !isInsetTile) + ? const SizedBox() + : Positioned( + bottom: 5, + right: 5, + child: GestureDetector( + onTap: () { + ///[peerTrackNode] is the peerTrackNode of the peer whose more option is clicked + ///We only show the modal bottom sheet if the peer is the local peer + var peerTrackNode = context.read(); + showModalBottomSheet( + isScrollControlled: true, + backgroundColor: HMSThemeColors.surfaceDim, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(16), + topRight: Radius.circular(16)), + ), + context: context, + builder: (ctx) => ChangeNotifierProvider.value( + value: context.read(), + child: LocalPeerBottomSheet( + isInsetTile: isInsetTile, + meetingStore: context.read(), + peerTrackNode: peerTrackNode, + callbackFunction: callbackFunction, + )), + ); + }, + child: Semantics( + label: + "fl_${context.read().peer.name}more_option", + child: Container( + height: 28, + width: 28, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + color: HMSThemeColors.backgroundDim.withOpacity(0.64), + ), + child: Center( + child: Icon( + Icons.more_vert, + color: HMSThemeColors.onSurfaceHighEmphasis, + size: 20, + ), + ), + ), + ), + ), + ); + } +} diff --git a/packages/hms_room_kit/pubspec.lock b/packages/hms_room_kit/pubspec.lock index e84a0bdc1..c639d8658 100644 --- a/packages/hms_room_kit/pubspec.lock +++ b/packages/hms_room_kit/pubspec.lock @@ -204,10 +204,10 @@ packages: dependency: "direct main" description: name: hmssdk_flutter - sha256: "27dfc516ee4673ff092fc4e18487c315780b8470a2fbcf0f486bdfa529fc53cb" + sha256: f61fb1ffcaf7296e0e2eeff9bc34d699baf9190136b8570a15cde61819cf3276 url: "https://pub.dev" source: hosted - version: "1.9.4" + version: "1.9.5" http: dependency: transitive description: @@ -228,10 +228,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" js: dependency: transitive description: @@ -601,10 +601,10 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: b1c9e98774adf8820c96fbc7ae3601231d324a7d5ebd8babe27b6dfac91357ba + sha256: e9aa5ea75c84cf46b3db4eea212523591211c3cf2e13099ee4ec147f54201c86 url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "6.2.2" url_launcher_android: dependency: transitive description: diff --git a/packages/hms_room_kit/pubspec.yaml b/packages/hms_room_kit/pubspec.yaml index 8036542eb..961253565 100644 --- a/packages/hms_room_kit/pubspec.yaml +++ b/packages/hms_room_kit/pubspec.yaml @@ -1,6 +1,6 @@ name: hms_room_kit description: 100ms Room Kit provides simple & easy to use UI components to build Live Streaming & Video Conferencing experiences in your apps. -version: 1.0.7 +version: 1.0.8 homepage: https://www.100ms.live/ repository: https://github.com/100mslive/100ms-flutter issue_tracker: https://github.com/100mslive/100ms-flutter/issues @@ -14,8 +14,8 @@ dependencies: flutter: sdk: flutter - hmssdk_flutter: ^1.9.4 - intl: ^0.18.1 + hmssdk_flutter: ^1.9.5 + intl: ^0.19.0 permission_handler: ^11.0.0 provider: ^6.0.5 google_fonts: ^6.1.0 diff --git a/packages/hmssdk_flutter/CHANGELOG.md b/packages/hmssdk_flutter/CHANGELOG.md index a96440978..8c5adf1ae 100644 --- a/packages/hmssdk_flutter/CHANGELOG.md +++ b/packages/hmssdk_flutter/CHANGELOG.md @@ -5,6 +5,30 @@ | hms_room_kit | [![Pub Version](https://img.shields.io/pub/v/hms_room_kit)](https://pub.dev/packages/hms_room_kit) | | hmssdk_flutter | [![Pub Version](https://img.shields.io/pub/v/hmssdk_flutter)](https://pub.dev/packages/hmssdk_flutter) | +# 1.9.5 - 2023-12-15 + +| Package | Version | +| -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| hms_room_kit | 1.0.8 | +| hmssdk_flutter | 1.9.5 | + +### Added + +- Added `state` property to recording and streaming classes to get the current state of recording and streaming. + + Learn more about `HMSStreamingState` and `HMSRecordingState` [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/record-and-live-stream/recording#current-room-status). + +### Changed + +- Removed `addTrackByDefault` property from `HMSTextureView`. + + This should not affect any existing implementation as `addTrackByDefault` was set to `true` by default. + Learn more about `HMSTextureView` [here](https://www.100ms.live/docs/flutter/v2/how-to-guides/set-up-video-conferencing/render-video/hms-texture-view). + +Updated to Android SDK 2.8.3 & iOS SDK 1.4.0 + +**Full Changelog**: [1.9.4...1.9.5](https://github.com/100mslive/100ms-flutter/compare/1.9.4...1.9.5) + # 1.9.4 - 2023-12-08 | Package | Version | diff --git a/packages/hmssdk_flutter/README.md b/packages/hmssdk_flutter/README.md index b4bce227e..afe2dedff 100644 --- a/packages/hmssdk_flutter/README.md +++ b/packages/hmssdk_flutter/README.md @@ -21,6 +21,7 @@ With support for HLS and RTMP Live Streaming and Recording, Picture-in-Picture ( | hms_room_kit | [![Pub Version](https://img.shields.io/pub/v/hms_room_kit)](https://pub.dev/packages/hms_room_kit) | | hmssdk_flutter | [![Pub Version](https://img.shields.io/pub/v/hmssdk_flutter)](https://pub.dev/packages/hmssdk_flutter) | + 🧱 The Prebuilt QuickStart Guide is [available here](https://www.100ms.live/docs/flutter/v2/quickstart/prebuilt). 📖 Read the Complete Documentation here: https://www.100ms.live/docs/flutter/v2/guides/quickstart diff --git a/packages/hmssdk_flutter/android/src/main/kotlin/live/hms/hmssdk_flutter/HMSHLSVariantExtension.kt b/packages/hmssdk_flutter/android/src/main/kotlin/live/hms/hmssdk_flutter/HMSHLSVariantExtension.kt index 823ea8296..bebd5530e 100644 --- a/packages/hmssdk_flutter/android/src/main/kotlin/live/hms/hmssdk_flutter/HMSHLSVariantExtension.kt +++ b/packages/hmssdk_flutter/android/src/main/kotlin/live/hms/hmssdk_flutter/HMSHLSVariantExtension.kt @@ -12,7 +12,7 @@ class HMSHLSVariantExtension { args["meeting_url"] = hmshlsVariant.meetingUrl ?: "" args["metadata"] = hmshlsVariant.metadata ?: "" hmshlsVariant.startedAt?.let { - args["started_at"] = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(it).toString() + args["started_at"] = it } return args } diff --git a/packages/hmssdk_flutter/android/src/main/kotlin/live/hms/hmssdk_flutter/HMSRtmpStreamingState.kt b/packages/hmssdk_flutter/android/src/main/kotlin/live/hms/hmssdk_flutter/HMSRtmpStreamingState.kt index aca5ed6d1..04e62b4b2 100644 --- a/packages/hmssdk_flutter/android/src/main/kotlin/live/hms/hmssdk_flutter/HMSRtmpStreamingState.kt +++ b/packages/hmssdk_flutter/android/src/main/kotlin/live/hms/hmssdk_flutter/HMSRtmpStreamingState.kt @@ -6,67 +6,89 @@ import java.text.SimpleDateFormat class HMSStreamingState { companion object { - fun toDictionary(hmsRtmpStreamingState: HMSRtmpStreamingState?): HashMap? { + fun toDictionary(rtmpStreamingState: HMSRtmpStreamingState?): HashMap? { val map = HashMap() - if (hmsRtmpStreamingState == null)return null - map["running"] = hmsRtmpStreamingState.running - map["error"] = HMSExceptionExtension.toDictionary(hmsRtmpStreamingState.error) - if (hmsRtmpStreamingState.running) { - hmsRtmpStreamingState.startedAt?.let { - map["started_at"] = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(hmsRtmpStreamingState.startedAt).toString() - } + if (rtmpStreamingState == null) return null + + map["running"] = rtmpStreamingState.running + + map["error"] = HMSExceptionExtension.toDictionary(rtmpStreamingState.error) + + rtmpStreamingState.startedAt?.let { + map["started_at"] = it } + + map["state"] = rtmpStreamingState.state.name + return map } - fun toDictionary(hmsServerRecordingState: HMSServerRecordingState?): HashMap? { + fun toDictionary(serverRecordingState: HMSServerRecordingState?): HashMap? { val map = HashMap() - if (hmsServerRecordingState == null)return null - map["running"] = hmsServerRecordingState.running - map["error"] = HMSExceptionExtension.toDictionary(hmsServerRecordingState.error) - if (hmsServerRecordingState.running) { - hmsServerRecordingState.startedAt?.let { - map["started_at"] = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(hmsServerRecordingState.startedAt).toString() - } + if (serverRecordingState == null) return null + + map["running"] = serverRecordingState.running + + map["error"] = HMSExceptionExtension.toDictionary(serverRecordingState.error) + + serverRecordingState.startedAt?.let { + map["started_at"] = it } + + map["state"] = serverRecordingState.state.name + return map } - fun toDictionary(hmsBrowserRecordingState: HMSBrowserRecordingState?): HashMap? { + fun toDictionary(browserRecordingState: HMSBrowserRecordingState?): HashMap? { val map = HashMap() - if (hmsBrowserRecordingState == null)return null - map["running"] = hmsBrowserRecordingState.running - map["error"] = HMSExceptionExtension.toDictionary(hmsBrowserRecordingState.error) - if (hmsBrowserRecordingState.running) { - hmsBrowserRecordingState.startedAt?.let { - map["started_at"] = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(hmsBrowserRecordingState.startedAt).toString() - } + if (browserRecordingState == null) return null + + map["running"] = browserRecordingState.running + + map["error"] = HMSExceptionExtension.toDictionary(browserRecordingState.error) + + browserRecordingState.startedAt?.let { + map["started_at"] = it } - map["initialising"] = hmsBrowserRecordingState.initialising + + map["initialising"] = browserRecordingState.initialising + + map["state"] = browserRecordingState.state.name + return map } - fun toDictionary(hmsHlsStreamingState: HMSHLSStreamingState?): HashMap? { + fun toDictionary(hlsStreamingState: HMSHLSStreamingState?): HashMap? { val map = HashMap() - if (hmsHlsStreamingState == null)return null - map["running"] = hmsHlsStreamingState.running + if (hlsStreamingState == null) return null + + map["running"] = hlsStreamingState.running + val args = ArrayList() - hmsHlsStreamingState.variants?.forEach { + hlsStreamingState.variants?.forEach { args.add(HMSHLSVariantExtension.toDictionary(it)!!) } + map["variants"] = args + + map["state"] = hlsStreamingState.state.name + return map } - fun toDictionary(hmsHlsRecordingState: HmsHlsRecordingState?): HashMap? { + fun toDictionary(hlsRecordingState: HmsHlsRecordingState?): HashMap? { val map = HashMap() - if (hmsHlsRecordingState == null)return null - map["running"] = hmsHlsRecordingState.running - if (hmsHlsRecordingState.running == true) { - hmsHlsRecordingState.startedAt?.let { - map["started_at"] = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(hmsHlsRecordingState.startedAt).toString() - } + if (hlsRecordingState == null) return null + + map["running"] = hlsRecordingState.running + + hlsRecordingState.startedAt?.let { + map["started_at"] = it } + + map["state"] = hlsRecordingState.state.name + return map } } diff --git a/packages/hmssdk_flutter/android/src/main/kotlin/live/hms/hmssdk_flutter/HmssdkFlutterPlugin.kt b/packages/hmssdk_flutter/android/src/main/kotlin/live/hms/hmssdk_flutter/HmssdkFlutterPlugin.kt index e80b5aea7..06fb32e83 100644 --- a/packages/hmssdk_flutter/android/src/main/kotlin/live/hms/hmssdk_flutter/HmssdkFlutterPlugin.kt +++ b/packages/hmssdk_flutter/android/src/main/kotlin/live/hms/hmssdk_flutter/HmssdkFlutterPlugin.kt @@ -38,10 +38,7 @@ import live.hms.video.events.AgentType import live.hms.video.media.tracks.* import live.hms.video.sdk.* import live.hms.video.sdk.models.* -import live.hms.video.sdk.models.enums.AudioMixingMode -import live.hms.video.sdk.models.enums.HMSPeerUpdate -import live.hms.video.sdk.models.enums.HMSRoomUpdate -import live.hms.video.sdk.models.enums.HMSTrackUpdate +import live.hms.video.sdk.models.enums.* import live.hms.video.sdk.models.role.HMSRole import live.hms.video.sdk.models.trackchangerequest.HMSChangeTrackStateRequest import live.hms.video.sessionstore.HMSKeyChangeListener @@ -82,9 +79,10 @@ class HmssdkFlutterPlugin : var hlsStreamUrl: String? = null private var isRoomAudioUnmutedLocally = true - private val renderers = HashMap() + private val renderers = HashMap() private var hmsTextureRegistry: TextureRegistry? = null private var hmsBinaryMessenger: BinaryMessenger? = null + override fun onAttachedToEngine( @NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding, ) { @@ -136,7 +134,6 @@ class HmssdkFlutterPlugin : } } - override fun onMethodCall( @NonNull call: MethodCall, @NonNull result: Result, @@ -256,22 +253,22 @@ class HmssdkFlutterPlugin : } "create_texture_view" -> { - createTextureView(call,result) + createTextureView(call, result) } "dispose_texture_view" -> { disposeTextureView(call, result) } "add_track" -> { - addTrack(call,result) + addTrack(call, result) } "remove_track" -> { - removeTrack(call,result) + removeTrack(call, result) } "set_display_resolution" -> { - setDisplayResolution(call,result) + setDisplayResolution(call, result) } "get_peer_list_iterator", "peer_list_iterator_has_next", "peer_list_iterator_next" -> { @@ -617,144 +614,156 @@ class HmssdkFlutterPlugin : return null } - private fun createTextureView(call: MethodCall, result: Result){ - + private fun createTextureView( + call: MethodCall, + result: Result, + ) { val trackId = call.argument("track_id") - val addTrackByDefault = call.argument("add_track_by_def")?:false - val disableAutoSimulcastLayerSelect = call.argument("disable_auto_simulcast_layer_select")?:false + val addTrackByDefault = call.argument("add_track_by_def") ?: false + val disableAutoSimulcastLayerSelect = call.argument("disable_auto_simulcast_layer_select") ?: false val entry: SurfaceTextureEntry? = hmsTextureRegistry?.createSurfaceTexture() entry?.let { surfaceTextureEntry -> val surfaceTexture = surfaceTextureEntry.surfaceTexture() - val renderer = HMSTextureView(surfaceTexture,entry) - if(addTrackByDefault){ + val renderer = HMSTextureView(surfaceTexture, entry) + if (addTrackByDefault) { val room = hmssdk?.getRoom() room?.let { currentRoom -> - trackId?.let {currentTrackId -> - val track = HmsUtilities.getVideoTrack(currentTrackId,currentRoom) + trackId?.let { currentTrackId -> + val track = HmsUtilities.getVideoTrack(currentTrackId, currentRoom) track?.let { videoTrack -> - Log.i("HMSTextureView","Init Add Track called for track: ${track.trackId}") - renderer.addTrack(videoTrack,disableAutoSimulcastLayerSelect) - }?: run { - HMSErrorLogger.returnHMSException("createTextureView","No track with $trackId found","Track not found error",result) + Log.i("HMSTextureView", "Init Add Track called for track: ${track.trackId}") + renderer.addTrack(videoTrack, disableAutoSimulcastLayerSelect) + } ?: run { + HMSErrorLogger.returnHMSException("createTextureView", "No track with $trackId found", "Track not found error", result) return } - }?: run { - HMSErrorLogger.returnHMSException("createTextureView","trackId is null"," NULL ERROR",result) + } ?: run { + HMSErrorLogger.returnHMSException("createTextureView", "trackId is null", " NULL ERROR", result) return } - }?: run { - HMSErrorLogger.returnHMSException("createTextureView","Room is null","NULL Error",result) + } ?: run { + HMSErrorLogger.returnHMSException("createTextureView", "Room is null", "NULL Error", result) return } } renderers["${surfaceTextureEntry.id()}"] = renderer - val eventChannel = EventChannel( - hmsBinaryMessenger, - "HMSTextureView/Texture/" + entry.id() - ) + val eventChannel = + EventChannel( + hmsBinaryMessenger, + "HMSTextureView/Texture/" + entry.id(), + ) eventChannel.setStreamHandler(renderer) renderer.setTextureViewEventChannel(eventChannel) - val data = HashMap() + val data = HashMap() data["texture_id"] = surfaceTextureEntry.id() - result.success(HMSResultExtension.toDictionary(true,data)) - - }?:run{ - HMSErrorLogger.returnHMSException("createTextureView","entry is null","NULL Error",result) + result.success(HMSResultExtension.toDictionary(true, data)) + } ?: run { + HMSErrorLogger.returnHMSException("createTextureView", "entry is null", "NULL Error", result) return } } - private fun disposeTextureView(call: MethodCall,result: Result){ + private fun disposeTextureView( + call: MethodCall, + result: Result, + ) { val textureId = call.argument("texture_id") ?: HMSErrorLogger.returnArgumentsError("textureId is null") var renderer = renderers["$textureId"] - if(renderer != null){ + if (renderer != null) { renderer.disposeTextureView() renderer = null renderers.remove("$textureId") - result.success(HMSResultExtension.toDictionary(true,null)) - } - else { + result.success(HMSResultExtension.toDictionary(true, null)) + } else { HMSErrorLogger.returnHMSException( "disposeTextureView", "No textureView with given textureId found", "Key not found error", - result + result, ) } } - private fun addTrack(call: MethodCall, result: Result){ + private fun addTrack( + call: MethodCall, + result: Result, + ) { val trackId = call.argument("track_id") val textureId = call.argument("texture_id") - val disableAutoSimulcastLayerSelect = call.argument("disable_auto_simulcast_layer_select")?:false + val disableAutoSimulcastLayerSelect = call.argument("disable_auto_simulcast_layer_select") ?: false val height = call.argument("height") val width = call.argument("width") - textureId?.let {texture -> + textureId?.let { texture -> trackId?.let { val renderer = renderers["$textureId"] renderer?.let { textureRenderer -> val room = hmssdk?.getRoom() room?.let { currentRoom -> - val track = HmsUtilities.getVideoTrack(trackId,currentRoom) - track?.let {videoTrack -> - textureRenderer.addTrack(videoTrack,disableAutoSimulcastLayerSelect,height,width) + val track = HmsUtilities.getVideoTrack(trackId, currentRoom) + track?.let { videoTrack -> + textureRenderer.addTrack(videoTrack, disableAutoSimulcastLayerSelect, height, width) result.success(null) - }?: run { + } ?: run { HMSErrorLogger.returnHMSException( "addTrack", "track with given trackId not found", "Track not found error", - result + result, ) } - }?: run { + } ?: run { HMSErrorLogger.returnHMSException( "addTrack", "room not found", "room not found error", - result + result, ) } - }?: run { + } ?: run { HMSErrorLogger.returnHMSException( "addTrack", "renderer with given $texture not found", "renderer not found error", - result + result, ) } - }?: run { + } ?: run { HMSErrorLogger.returnHMSException( "addTrack", "trackId is null", "NULL ERROR", - result + result, ) } - }?:run { + } ?: run { HMSErrorLogger.returnHMSException( "addTrack", "textureId is null", "NULL ERROR", - result + result, ) } } - private fun removeTrack(call: MethodCall, result: Result){ + private fun removeTrack( + call: MethodCall, + result: Result, + ) { val textureId = call.argument("texture_id") val renderer = renderers["$textureId"] renderer?.removeTrack() result.success(null) - } - private fun setDisplayResolution(call: MethodCall, result: Result){ + private fun setDisplayResolution( + call: MethodCall, + result: Result, + ) { val textureId = call.argument("texture_id") val height = call.argument("height") val width = call.argument("width") @@ -762,7 +771,7 @@ class HmssdkFlutterPlugin : height?.let { videoViewHeight -> width?.let { videoViewWidth -> - renderer?.setDisplayResolution(videoViewWidth,videoViewHeight) + renderer?.setDisplayResolution(videoViewWidth, videoViewHeight) } } result.success(null) @@ -1193,7 +1202,7 @@ class HmssdkFlutterPlugin : * the stream URL. */ room.hlsStreamingState?.let { streamingState -> - if (streamingState.running) { + if (streamingState.state == HMSStreamingState.STARTED) { streamingState.variants?.let { variants -> if (variants.isNotEmpty()) { hlsStreamUrl = variants[0].hlsStreamUrl @@ -1262,7 +1271,7 @@ class HmssdkFlutterPlugin : */ if (type == HMSRoomUpdate.HLS_STREAMING_STATE_UPDATED) { hmsRoom.hlsStreamingState?.let { streamingState -> - if (streamingState.running) { + if (streamingState.state == HMSStreamingState.STARTED) { streamingState.variants?.let { variants -> if (variants.isNotEmpty()) { hlsStreamUrl = variants[0].hlsStreamUrl diff --git a/packages/hmssdk_flutter/example/ExampleAppChangelog.txt b/packages/hmssdk_flutter/example/ExampleAppChangelog.txt index 6292c0c06..92a1109c2 100644 --- a/packages/hmssdk_flutter/example/ExampleAppChangelog.txt +++ b/packages/hmssdk_flutter/example/ExampleAppChangelog.txt @@ -1,21 +1,9 @@ Board: https://100ms.atlassian.net/jira/software/projects/FLUT/boards/34/ -- Added TextureView in place of SurfaceView for better performance -https://100ms.atlassian.net/browse/FLUT-121 +- Beam Intermediate State Updates +https://100ms.atlassian.net/browse/FLUT-135 -- Disable editing username in preview screen if username is passed to prebuilt in options config -https://100ms.atlassian.net/browse/FLUT-158 - -- Getting 3 blank messages for flutter on stage user if declined 3 invite before -https://100ms.atlassian.net/browse/FLUT-172 - -- Active Speaker should come within first 2 tiles when doing Screenshare -https://100ms.atlassian.net/browse/FLUT-161 - -- Flutter iOS VNRT to stage, app crash. -https://100ms.atlassian.net/browse/FLUT-173 - -Room Kit: 1.0.7 -Core SDK: 1.9.4 +Room Kit: 1.0.8 +Core SDK: 1.9.5 Android SDK: 2.8.3 -iOS SDK: 1.3.1 +iOS SDK: 1.4.0 diff --git a/packages/hmssdk_flutter/example/android/Gemfile.lock b/packages/hmssdk_flutter/example/android/Gemfile.lock index b6be76cfe..84347bec1 100644 --- a/packages/hmssdk_flutter/example/android/Gemfile.lock +++ b/packages/hmssdk_flutter/example/android/Gemfile.lock @@ -8,12 +8,12 @@ GEM i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - addressable (2.8.5) + addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.862.0) + aws-partitions (1.864.0) aws-sdk-core (3.190.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) @@ -133,11 +133,11 @@ GEM google-apis-core (>= 0.11.0, < 2.a) google-apis-storage_v1 (0.29.0) google-apis-core (>= 0.11.0, < 2.a) - google-cloud-core (1.6.0) - google-cloud-env (~> 1.0) + google-cloud-core (1.6.1) + google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) - google-cloud-env (1.6.0) - faraday (>= 0.17.3, < 3.0) + google-cloud-env (2.0.1) + faraday (>= 1.0, < 3.a) google-cloud-errors (1.3.1) google-cloud-storage (1.45.0) addressable (~> 2.8) @@ -147,8 +147,9 @@ GEM google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) - googleauth (1.8.1) - faraday (>= 0.17.3, < 3.a) + googleauth (1.9.0) + faraday (>= 1.0, < 3.a) + google-cloud-env (~> 2.0, >= 2.0.1) jwt (>= 1.4, < 3.0) multi_json (~> 1.11) os (>= 0.9, < 2.0) @@ -160,7 +161,7 @@ GEM i18n (1.14.1) concurrent-ruby (~> 1.0) jmespath (1.6.2) - json (2.7.0) + json (2.7.1) jwt (2.7.1) mini_magick (4.12.0) mini_mime (1.1.5) diff --git a/packages/hmssdk_flutter/example/android/app/build.gradle b/packages/hmssdk_flutter/example/android/app/build.gradle index 76dd2e826..54a6d0ee7 100644 --- a/packages/hmssdk_flutter/example/android/app/build.gradle +++ b/packages/hmssdk_flutter/example/android/app/build.gradle @@ -32,8 +32,8 @@ android { applicationId "live.hms.flutter" minSdkVersion 21 targetSdkVersion 33 - versionCode 402 - versionName "1.5.102" + versionCode 407 + versionName "1.5.107" } signingConfigs { diff --git a/packages/hmssdk_flutter/example/ios/Gemfile.lock b/packages/hmssdk_flutter/example/ios/Gemfile.lock index 61114f35a..3973c327d 100644 --- a/packages/hmssdk_flutter/example/ios/Gemfile.lock +++ b/packages/hmssdk_flutter/example/ios/Gemfile.lock @@ -8,12 +8,12 @@ GEM i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) - addressable (2.8.5) + addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.862.0) + aws-partitions (1.864.0) aws-sdk-core (3.190.0) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.651.0) @@ -134,11 +134,11 @@ GEM google-apis-core (>= 0.11.0, < 2.a) google-apis-storage_v1 (0.29.0) google-apis-core (>= 0.11.0, < 2.a) - google-cloud-core (1.6.0) - google-cloud-env (~> 1.0) + google-cloud-core (1.6.1) + google-cloud-env (>= 1.0, < 3.a) google-cloud-errors (~> 1.0) - google-cloud-env (1.6.0) - faraday (>= 0.17.3, < 3.0) + google-cloud-env (2.0.1) + faraday (>= 1.0, < 3.a) google-cloud-errors (1.3.1) google-cloud-storage (1.45.0) addressable (~> 2.8) @@ -148,8 +148,9 @@ GEM google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) - googleauth (1.8.1) - faraday (>= 0.17.3, < 3.a) + googleauth (1.9.0) + faraday (>= 1.0, < 3.a) + google-cloud-env (~> 2.0, >= 2.0.1) jwt (>= 1.4, < 3.0) multi_json (~> 1.11) os (>= 0.9, < 2.0) @@ -161,7 +162,7 @@ GEM i18n (1.14.1) concurrent-ruby (~> 1.0) jmespath (1.6.2) - json (2.7.0) + json (2.7.1) jwt (2.7.1) mini_magick (4.12.0) mini_mime (1.1.5) diff --git a/packages/hmssdk_flutter/example/ios/Podfile.lock b/packages/hmssdk_flutter/example/ios/Podfile.lock index 5ee7a9fc4..f8bb6db68 100644 --- a/packages/hmssdk_flutter/example/ios/Podfile.lock +++ b/packages/hmssdk_flutter/example/ios/Podfile.lock @@ -25,15 +25,15 @@ PODS: - Firebase/Performance (= 10.9.0) - firebase_core - Flutter - - FirebaseABTesting (10.18.0): + - FirebaseABTesting (10.19.0): - FirebaseCore (~> 10.0) - FirebaseCore (10.9.0): - FirebaseCoreInternal (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/Logger (~> 7.8) - - FirebaseCoreExtension (10.18.0): + - FirebaseCoreExtension (10.19.0): - FirebaseCore (~> 10.0) - - FirebaseCoreInternal (10.18.0): + - FirebaseCoreInternal (10.19.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - FirebaseCrashlytics (10.9.0): - FirebaseCore (~> 10.5) @@ -45,7 +45,7 @@ PODS: - PromisesObjC (~> 2.1) - FirebaseDynamicLinks (10.9.0): - FirebaseCore (~> 10.0) - - FirebaseInstallations (10.18.0): + - FirebaseInstallations (10.19.0): - FirebaseCore (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/UserDefaults (~> 7.8) @@ -60,14 +60,14 @@ PODS: - GoogleUtilities/ISASwizzler (~> 7.8) - GoogleUtilities/MethodSwizzler (~> 7.8) - nanopb (< 2.30910.0, >= 2.30908.0) - - FirebaseRemoteConfig (10.18.0): + - FirebaseRemoteConfig (10.19.0): - FirebaseABTesting (~> 10.0) - FirebaseCore (~> 10.0) - FirebaseInstallations (~> 10.0) - FirebaseSharedSwift (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseSessions (10.18.0): + - FirebaseSessions (10.19.0): - FirebaseCore (~> 10.5) - FirebaseCoreExtension (~> 10.0) - FirebaseInstallations (~> 10.0) @@ -75,7 +75,7 @@ PODS: - GoogleUtilities/Environment (~> 7.10) - nanopb (< 2.30910.0, >= 2.30908.0) - PromisesSwift (~> 2.1) - - FirebaseSharedSwift (10.18.0) + - FirebaseSharedSwift (10.19.0) - Flutter (1.0.0) - flutter_foreground_task (0.0.1): - Flutter @@ -97,14 +97,14 @@ PODS: - HMSBroadcastExtensionSDK (0.0.9) - HMSHLSPlayerSDK (0.0.2): - HMSAnalyticsSDK (= 0.0.2) - - HMSSDK (1.3.0): + - HMSSDK (1.4.0): - HMSAnalyticsSDK (= 0.0.2) - HMSWebRTC (= 1.0.5116) - - hmssdk_flutter (1.9.4): + - hmssdk_flutter (1.9.5): - Flutter - HMSBroadcastExtensionSDK (= 0.0.9) - HMSHLSPlayerSDK (= 0.0.2) - - HMSSDK (= 1.3.0) + - HMSSDK (= 1.4.0) - HMSWebRTC (1.0.5116) - MTBBarcodeScanner (5.0.11) - nanopb (2.30909.1): @@ -217,17 +217,17 @@ SPEC CHECKSUMS: firebase_crashlytics: 9b80d1944507cc07fa1c4455797f7d2eb7c8873f firebase_dynamic_links: db9f2ebcc3ea646e76a1d3ee37e9e57890ff0a83 firebase_performance: d11d1fd9591547f6b75f325aaadd6550eaf7e090 - FirebaseABTesting: d8b10ff4c6d1a9d6b11f02a08463ad5fd9fc6b1b + FirebaseABTesting: bfa3b384b68cee10a89183649c64cd7998a37a12 FirebaseCore: b68d3616526ec02e4d155166bbafb8eca64af557 - FirebaseCoreExtension: 62b201498aa10535801cdf3448c7f4db5e24ed80 - FirebaseCoreInternal: 8eb002e564b533bdcf1ba011f33f2b5c10e2ed4a + FirebaseCoreExtension: c08d14c7b22e07994e876d837e6f58642f340087 + FirebaseCoreInternal: b444828ea7cfd594fca83046b95db98a2be4f290 FirebaseCrashlytics: b60329455285aff853e54139d8ddbfe1e5f2b9f9 FirebaseDynamicLinks: 8cb66c4f403aa6ddf86ff3bc3c383a652f344ce9 - FirebaseInstallations: e842042ec6ac1fd2e37d7706363ebe7f662afea4 + FirebaseInstallations: 033d199474164db20c8350736842a94fe717b960 FirebasePerformance: eee2f5da94fd7e5d15487649f8fe10a90c87c174 - FirebaseRemoteConfig: bbd42790a4e84fde6aab7eae810b608e7b5c0bf6 - FirebaseSessions: f90fe9212ee2818641eda051c0835c9c4e30d9ae - FirebaseSharedSwift: 62e248642c0582324d0390706cadd314687c116b + FirebaseRemoteConfig: a7fcc7a5941faa7e09248e91c8797340aa4c85f6 + FirebaseSessions: e5f4caa188dc8bc6142abc974355be75b042215e + FirebaseSharedSwift: f34eeb7d3ea87a34497629b6ca41657beadef76a Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_foreground_task: 21ef182ab0a29a3005cc72cd70e5f45cb7f7f817 GoogleDataTransport: 57c22343ab29bc686febbf7cbb13bad167c2d8fe @@ -235,8 +235,8 @@ SPEC CHECKSUMS: HMSAnalyticsSDK: 4d2a88a729b1eb42f3d25f217c28937ec318a5b7 HMSBroadcastExtensionSDK: d80fe325f6c928bd8e5176290b5a4b7ae15d6fbb HMSHLSPlayerSDK: 6a54ad4d12f3dc2270d1ecd24019d71282a4f6a3 - HMSSDK: 631908d772646b66b3c4f7f4e1fb2681f7abb990 - hmssdk_flutter: ce3c54bbda2a8e1d893be672a877510a546da012 + HMSSDK: 1bfd81ce70d61864cf2496018892d95335164b53 + hmssdk_flutter: b8e4641f6839d0492c447b338169a813cb443816 HMSWebRTC: ae54e9dd91b869051b283b43b14f57d43b7bf8e1 MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5 diff --git a/packages/hmssdk_flutter/example/ios/Runner.xcodeproj/project.pbxproj b/packages/hmssdk_flutter/example/ios/Runner.xcodeproj/project.pbxproj index b4f14f7ae..3f12e3fba 100644 --- a/packages/hmssdk_flutter/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/hmssdk_flutter/example/ios/Runner.xcodeproj/project.pbxproj @@ -7,14 +7,14 @@ objects = { /* Begin PBXBuildFile section */ + 13A4E967BFA539D9C281B0C1 /* Pods_FlutterBroadcastUploadExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FFB31E34C8F8BCED73A0DED /* Pods_FlutterBroadcastUploadExtension.framework */; }; 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; - 6A8DAA457993A7BBF808447F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 650E3B08A6C973442370ABD8 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - C45DFE66D74DCDD1B6244A17 /* Pods_FlutterBroadcastUploadExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 683C65A6AADC79CE61E0513E /* Pods_FlutterBroadcastUploadExtension.framework */; }; + D18F570DD3255ED3EA289977 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 41B8003D2A87475893EBDC35 /* Pods_Runner.framework */; }; EC1052B22858A77D005EAB9E /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC1052B12858A77D005EAB9E /* ReplayKit.framework */; }; EC1052B52858A77D005EAB9E /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC1052B42858A77D005EAB9E /* SampleHandler.swift */; }; EC1052B92858A77D005EAB9E /* FlutterBroadcastUploadExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = EC1052B02858A77D005EAB9E /* FlutterBroadcastUploadExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; @@ -56,17 +56,17 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0379B33E02429598E0E5B6DD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 238323F347131537C23069F5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 33004F7844D65ECDC49C7337 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 41AA5D92A2CC1BB27F1A83DE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 650E3B08A6C973442370ABD8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 683C65A6AADC79CE61E0513E /* Pods_FlutterBroadcastUploadExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FlutterBroadcastUploadExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 41B8003D2A87475893EBDC35 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4F65824659E8556B8219638A /* Pods-FlutterBroadcastUploadExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FlutterBroadcastUploadExtension.release.xcconfig"; path = "Target Support Files/Pods-FlutterBroadcastUploadExtension/Pods-FlutterBroadcastUploadExtension.release.xcconfig"; sourceTree = ""; }; + 6FFB31E34C8F8BCED73A0DED /* Pods_FlutterBroadcastUploadExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_FlutterBroadcastUploadExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 89EFF6EE4AAF69984055D76C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -74,9 +74,9 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B0623F8FBD08D7EF79FF5844 /* Pods-FlutterBroadcastUploadExtension.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FlutterBroadcastUploadExtension.profile.xcconfig"; path = "Target Support Files/Pods-FlutterBroadcastUploadExtension/Pods-FlutterBroadcastUploadExtension.profile.xcconfig"; sourceTree = ""; }; B44CF4C02A83BCF0003B3D5E /* RunnerRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerRelease.entitlements; sourceTree = ""; }; - CD3C8BA7497CF5A349499EE7 /* Pods-FlutterBroadcastUploadExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FlutterBroadcastUploadExtension.release.xcconfig"; path = "Target Support Files/Pods-FlutterBroadcastUploadExtension/Pods-FlutterBroadcastUploadExtension.release.xcconfig"; sourceTree = ""; }; + D0C8C6B4A94A6E15007F7D46 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + EA887658136F948769F1129B /* Pods-FlutterBroadcastUploadExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FlutterBroadcastUploadExtension.debug.xcconfig"; path = "Target Support Files/Pods-FlutterBroadcastUploadExtension/Pods-FlutterBroadcastUploadExtension.debug.xcconfig"; sourceTree = ""; }; EC1052B02858A77D005EAB9E /* FlutterBroadcastUploadExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = FlutterBroadcastUploadExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; EC1052B12858A77D005EAB9E /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; }; EC1052B42858A77D005EAB9E /* SampleHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = ""; }; @@ -84,7 +84,7 @@ EC3386D4296EBF6B00F565A8 /* Runner.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; EC638D182858ABE8005D0AF2 /* FlutterBroadcastUploadExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = FlutterBroadcastUploadExtension.entitlements; sourceTree = ""; }; EC9BCD2A26B1CFDB00D378A0 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; - FA1DA48EB088E64EABD2ADFE /* Pods-FlutterBroadcastUploadExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FlutterBroadcastUploadExtension.debug.xcconfig"; path = "Target Support Files/Pods-FlutterBroadcastUploadExtension/Pods-FlutterBroadcastUploadExtension.debug.xcconfig"; sourceTree = ""; }; + FF549B17CAF9408297610536 /* Pods-FlutterBroadcastUploadExtension.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FlutterBroadcastUploadExtension.profile.xcconfig"; path = "Target Support Files/Pods-FlutterBroadcastUploadExtension/Pods-FlutterBroadcastUploadExtension.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -92,7 +92,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 6A8DAA457993A7BBF808447F /* Pods_Runner.framework in Frameworks */, + D18F570DD3255ED3EA289977 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -101,7 +101,7 @@ buildActionMask = 2147483647; files = ( EC1052B22858A77D005EAB9E /* ReplayKit.framework in Frameworks */, - C45DFE66D74DCDD1B6244A17 /* Pods_FlutterBroadcastUploadExtension.framework in Frameworks */, + 13A4E967BFA539D9C281B0C1 /* Pods_FlutterBroadcastUploadExtension.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -112,8 +112,8 @@ isa = PBXGroup; children = ( EC1052B12858A77D005EAB9E /* ReplayKit.framework */, - 683C65A6AADC79CE61E0513E /* Pods_FlutterBroadcastUploadExtension.framework */, - 650E3B08A6C973442370ABD8 /* Pods_Runner.framework */, + 6FFB31E34C8F8BCED73A0DED /* Pods_FlutterBroadcastUploadExtension.framework */, + 41B8003D2A87475893EBDC35 /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -171,12 +171,12 @@ B2F80193CC408B94D74DE224 /* Pods */ = { isa = PBXGroup; children = ( - 89EFF6EE4AAF69984055D76C /* Pods-Runner.debug.xcconfig */, - 41AA5D92A2CC1BB27F1A83DE /* Pods-Runner.release.xcconfig */, - 238323F347131537C23069F5 /* Pods-Runner.profile.xcconfig */, - FA1DA48EB088E64EABD2ADFE /* Pods-FlutterBroadcastUploadExtension.debug.xcconfig */, - CD3C8BA7497CF5A349499EE7 /* Pods-FlutterBroadcastUploadExtension.release.xcconfig */, - B0623F8FBD08D7EF79FF5844 /* Pods-FlutterBroadcastUploadExtension.profile.xcconfig */, + EA887658136F948769F1129B /* Pods-FlutterBroadcastUploadExtension.debug.xcconfig */, + 4F65824659E8556B8219638A /* Pods-FlutterBroadcastUploadExtension.release.xcconfig */, + FF549B17CAF9408297610536 /* Pods-FlutterBroadcastUploadExtension.profile.xcconfig */, + D0C8C6B4A94A6E15007F7D46 /* Pods-Runner.debug.xcconfig */, + 33004F7844D65ECDC49C7337 /* Pods-Runner.release.xcconfig */, + 0379B33E02429598E0E5B6DD /* Pods-Runner.profile.xcconfig */, ); path = Pods; sourceTree = ""; @@ -198,16 +198,16 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - D769E267F13386F26EC49DC5 /* [CP] Check Pods Manifest.lock */, + 2FFBE73C2E229E9599BF0B6B /* [CP] Check Pods Manifest.lock */, 9705A1C41CF9048500538489 /* Embed Frameworks */, EC1052BA2858A77D005EAB9E /* Embed App Extensions */, - 7B56423DDF1948A38AE2EA10 /* [CP] Embed Pods Frameworks */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, CC19BBB77EA3E7F699588CF7 /* [firebase_crashlytics] Crashlytics Upload Symbols */, + 6F3F5B27EBB90D146ABDD315 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -223,7 +223,7 @@ isa = PBXNativeTarget; buildConfigurationList = EC1052BE2858A77D005EAB9E /* Build configuration list for PBXNativeTarget "FlutterBroadcastUploadExtension" */; buildPhases = ( - 402164D3899CD572C6304156 /* [CP] Check Pods Manifest.lock */, + 35CCB99FE7A87DC47FA18972 /* [CP] Check Pods Manifest.lock */, EC1052AC2858A77D005EAB9E /* Sources */, EC1052AD2858A77D005EAB9E /* Frameworks */, EC1052AE2858A77D005EAB9E /* Resources */, @@ -298,23 +298,29 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 2FFBE73C2E229E9599BF0B6B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 402164D3899CD572C6304156 /* [CP] Check Pods Manifest.lock */ = { + 35CCB99FE7A87DC47FA18972 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -336,7 +342,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 7B56423DDF1948A38AE2EA10 /* [CP] Embed Pods Frameworks */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin\n"; + }; + 6F3F5B27EBB90D146ABDD315 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -388,28 +410,6 @@ shellPath = /bin/sh; shellScript = "\"$PODS_ROOT/FirebaseCrashlytics/upload-symbols\" --flutter-project \"$PROJECT_DIR/firebase_app_id_file.json\" \n"; }; - D769E267F13386F26EC49DC5 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -730,7 +730,7 @@ }; EC1052BB2858A77D005EAB9E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FA1DA48EB088E64EABD2ADFE /* Pods-FlutterBroadcastUploadExtension.debug.xcconfig */; + baseConfigurationReference = EA887658136F948769F1129B /* Pods-FlutterBroadcastUploadExtension.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; @@ -775,7 +775,7 @@ }; EC1052BC2858A77D005EAB9E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD3C8BA7497CF5A349499EE7 /* Pods-FlutterBroadcastUploadExtension.release.xcconfig */; + baseConfigurationReference = 4F65824659E8556B8219638A /* Pods-FlutterBroadcastUploadExtension.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; @@ -815,7 +815,7 @@ }; EC1052BD2858A77D005EAB9E /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B0623F8FBD08D7EF79FF5844 /* Pods-FlutterBroadcastUploadExtension.profile.xcconfig */; + baseConfigurationReference = FF549B17CAF9408297610536 /* Pods-FlutterBroadcastUploadExtension.profile.xcconfig */; buildSettings = { CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; diff --git a/packages/hmssdk_flutter/example/ios/Runner/Info.plist b/packages/hmssdk_flutter/example/ios/Runner/Info.plist index 07f71b7bd..7cec9b70f 100644 --- a/packages/hmssdk_flutter/example/ios/Runner/Info.plist +++ b/packages/hmssdk_flutter/example/ios/Runner/Info.plist @@ -21,7 +21,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.5.101 + 1.5.107 CFBundleSignature ???? CFBundleURLTypes @@ -48,7 +48,7 @@ CFBundleVersion - 401 + 407 ITSAppUsesNonExemptEncryption LSApplicationCategoryType diff --git a/packages/hmssdk_flutter/example/lib/app_settings_bottom_sheet.dart b/packages/hmssdk_flutter/example/lib/app_settings_bottom_sheet.dart index dea898ac9..978aeb86c 100644 --- a/packages/hmssdk_flutter/example/lib/app_settings_bottom_sheet.dart +++ b/packages/hmssdk_flutter/example/lib/app_settings_bottom_sheet.dart @@ -28,6 +28,7 @@ class _AppSettingsBottomSheetState extends State { bool isDebugMode = false; HMSAudioMode currentAudioMode = HMSAudioMode.VOICE; bool isStreamingFlow = true; + bool nameChangeOnPreview = true; var versions = {}; @@ -72,6 +73,9 @@ class _AppSettingsBottomSheetState extends State { isStreamingFlow = await Utilities.getBoolData(key: 'is_streaming_flow') ?? true; + nameChangeOnPreview = + await Utilities.getBoolData(key: 'name-change-on-preview') ?? true; + WidgetsBinding.instance.addPostFrameCallback((_) { setState(() {}); }); @@ -89,6 +93,7 @@ class _AppSettingsBottomSheetState extends State { AppDebugConfig.showStats = showStats; AppDebugConfig.skipPreview = skipPreview; AppDebugConfig.isDebugMode = isDebugMode; + AppDebugConfig.nameChangeOnPreview = true; } Future _launchUrl() async { @@ -336,6 +341,36 @@ class _AppSettingsBottomSheetState extends State { setState(() {}) }), ), + ListTile( + horizontalTitleGap: 2, + enabled: false, + contentPadding: EdgeInsets.zero, + leading: SvgPicture.asset( + "packages/hms_room_kit/lib/src/assets/icons/pencil.svg", + fit: BoxFit.scaleDown, + colorFilter: + ColorFilter.mode(themeDefaultColor, BlendMode.srcIn), + ), + title: Text( + "Name Change On Preview", + semanticsLabel: "fl_disable_name_change_on_preview", + style: HMSTextStyle.setTextStyle( + fontSize: 14, + color: themeDefaultColor, + letterSpacing: 0.25, + fontWeight: FontWeight.w600), + ), + trailing: CupertinoSwitch( + activeColor: hmsdefaultColor, + value: nameChangeOnPreview, + onChanged: (value) => { + nameChangeOnPreview = value, + Utilities.saveBoolData( + key: 'name-change-on-preview', value: value), + AppDebugConfig.nameChangeOnPreview = value, + setState(() {}) + }), + ), ListTile( horizontalTitleGap: 2, enabled: false, diff --git a/packages/hmssdk_flutter/example/lib/main.dart b/packages/hmssdk_flutter/example/lib/main.dart index 7cdf8690f..e8b1509ef 100644 --- a/packages/hmssdk_flutter/example/lib/main.dart +++ b/packages/hmssdk_flutter/example/lib/main.dart @@ -290,6 +290,9 @@ class _HomePageState extends State { builder: (_) => HMSPrebuilt( roomCode: Constant.roomCode, options: HMSPrebuiltOptions( + userName: AppDebugConfig.nameChangeOnPreview + ? null + : "Flutter User", endPoints: endPoints, userId: "user_flutter", // pass your custom unique user identifier here diff --git a/packages/hmssdk_flutter/example/lib/qr_code_screen.dart b/packages/hmssdk_flutter/example/lib/qr_code_screen.dart index 7df014c7e..54a78eddc 100644 --- a/packages/hmssdk_flutter/example/lib/qr_code_screen.dart +++ b/packages/hmssdk_flutter/example/lib/qr_code_screen.dart @@ -78,6 +78,9 @@ class _QRCodeScreenState extends State { builder: (_) => HMSPrebuilt( roomCode: Constant.roomCode, options: HMSPrebuiltOptions( + userName: AppDebugConfig.nameChangeOnPreview + ? null + : "Flutter User", endPoints: endPoints, iOSScreenshareConfig: HMSIOSScreenshareConfig( appGroup: "group.flutterhms", diff --git a/packages/hmssdk_flutter/example/pubspec.lock b/packages/hmssdk_flutter/example/pubspec.lock index ba7af1473..1f981838a 100644 --- a/packages/hmssdk_flutter/example/pubspec.lock +++ b/packages/hmssdk_flutter/example/pubspec.lock @@ -286,15 +286,15 @@ packages: path: "../../hms_room_kit" relative: true source: path - version: "1.0.7" + version: "1.0.8" hmssdk_flutter: dependency: transitive description: name: hmssdk_flutter - sha256: "27dfc516ee4673ff092fc4e18487c315780b8470a2fbcf0f486bdfa529fc53cb" + sha256: f61fb1ffcaf7296e0e2eeff9bc34d699baf9190136b8570a15cde61819cf3276 url: "https://pub.dev" source: hosted - version: "1.9.4" + version: "1.9.5" http: dependency: transitive description: @@ -315,10 +315,10 @@ packages: dependency: transitive description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" js: dependency: transitive description: @@ -728,10 +728,10 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: b1c9e98774adf8820c96fbc7ae3601231d324a7d5ebd8babe27b6dfac91357ba + sha256: e9aa5ea75c84cf46b3db4eea212523591211c3cf2e13099ee4ec147f54201c86 url: "https://pub.dev" source: hosted - version: "6.2.1" + version: "6.2.2" url_launcher_android: dependency: transitive description: diff --git a/packages/hmssdk_flutter/example/pubspec.yaml b/packages/hmssdk_flutter/example/pubspec.yaml index ae66f6208..b152fd524 100644 --- a/packages/hmssdk_flutter/example/pubspec.yaml +++ b/packages/hmssdk_flutter/example/pubspec.yaml @@ -4,7 +4,7 @@ description: Demonstrates how to use the hmssdk_flutter plugin. # The following line prevents the package from being accidentally published to # pub.dev using `pub publish`. This is preferred for private packages. publish_to: "none" # Remove this line if you wish to publish to pub.dev -version: 1.9.4 +version: 1.9.5 environment: sdk: ">=2.16.0 <4.0.0" diff --git a/packages/hmssdk_flutter/ios/Classes/Models/HMSHLSVariantExtension.swift b/packages/hmssdk_flutter/ios/Classes/Models/HMSHLSVariantExtension.swift index 8d9e71ffc..965b9bd34 100644 --- a/packages/hmssdk_flutter/ios/Classes/Models/HMSHLSVariantExtension.swift +++ b/packages/hmssdk_flutter/ios/Classes/Models/HMSHLSVariantExtension.swift @@ -18,15 +18,14 @@ class HMSHLSVariantExtension { dict["metadata"] = hmshlsVariant.metadata - if let url = hmshlsVariant.url{ + if let url = hmshlsVariant.url { dict["hls_stream_url"] = url.absoluteString - } - else{ + } else { dict["hls_stream_url"] = nil } if let startedAt = hmshlsVariant.startedAt { - dict["started_at"] = "\(startedAt)" + dict["started_at"] = Int(startedAt.timeIntervalSince1970 * 1000) } return dict diff --git a/packages/hmssdk_flutter/ios/Classes/Models/HMSStreamingStateExtension.swift b/packages/hmssdk_flutter/ios/Classes/Models/HMSStreamingStateExtension.swift index 549e70c34..e1c1895a1 100644 --- a/packages/hmssdk_flutter/ios/Classes/Models/HMSStreamingStateExtension.swift +++ b/packages/hmssdk_flutter/ios/Classes/Models/HMSStreamingStateExtension.swift @@ -15,11 +15,13 @@ class HMSStreamingStateExtension { dict["running"] = rtmp.running if let startedAt = rtmp.startedAt { - dict["started_at"] = "\(startedAt)" + dict["started_at"] = Int(startedAt.timeIntervalSince1970 * 1000) } if let error = rtmp.error { dict.merge(HMSErrorExtension.toDictionary(error)) { (_, new) in new } } + + dict["state"] = rtmp.state.displayString().uppercased() return dict } @@ -29,12 +31,13 @@ class HMSStreamingStateExtension { dict["running"] = server.running if let startedAt = server.startedAt { - dict["started_at"] = "\(startedAt)" + dict["started_at"] = Int(startedAt.timeIntervalSince1970 * 1000) } if let error = server.error { dict.merge(HMSErrorExtension.toDictionary(error)) { (_, new) in new } } - + + dict["state"] = server.state.displayString().uppercased() return dict } @@ -46,12 +49,13 @@ class HMSStreamingStateExtension { dict["running"] = browser.running if let startedAt = browser.startedAt { - dict["started_at"] = "\(startedAt)" + dict["started_at"] = Int(startedAt.timeIntervalSince1970 * 1000) } if let error = browser.error { dict.merge(HMSErrorExtension.toDictionary(error)) { (_, new) in new } } + dict["state"] = browser.state.displayString().uppercased() return dict } @@ -65,6 +69,7 @@ class HMSStreamingStateExtension { } dict["variants"]=args + dict["state"] = hlsStreaming.state.displayString().uppercased() return dict } @@ -73,12 +78,13 @@ class HMSStreamingStateExtension { dict["running"] = hlsRecording.running if let startedAt = hlsRecording.startedAt { - dict["started_at"] = "\(startedAt)" + dict["started_at"] = Int(startedAt.timeIntervalSince1970 * 1000) } if let error = hlsRecording.error { dict.merge(HMSErrorExtension.toDictionary(error)) { (_, new) in new } } + dict["state"] = hlsRecording.state.displayString().uppercased() return dict } } diff --git a/packages/hmssdk_flutter/ios/Classes/SwiftHmssdkFlutterPlugin.swift b/packages/hmssdk_flutter/ios/Classes/SwiftHmssdkFlutterPlugin.swift index cc60287fb..158e8d361 100644 --- a/packages/hmssdk_flutter/ios/Classes/SwiftHmssdkFlutterPlugin.swift +++ b/packages/hmssdk_flutter/ios/Classes/SwiftHmssdkFlutterPlugin.swift @@ -1200,9 +1200,9 @@ public class SwiftHmssdkFlutterPlugin: NSObject, FlutterPlugin, HMSUpdateListene * the stream URL. */ - if room.hlsStreamingState.running { + if room.hlsStreamingState.state == HMSStreamingState.started { if !room.hlsStreamingState.variants.isEmpty { - hlsStreamUrl = room.hlsStreamingState.variants[0].url?.absoluteString + hlsStreamUrl = room.hlsStreamingState.variants.first?.url?.absoluteString } } @@ -1225,9 +1225,9 @@ public class SwiftHmssdkFlutterPlugin: NSObject, FlutterPlugin, HMSUpdateListene * the stream URL. */ - if room.hlsStreamingState.running { + if room.hlsStreamingState.state == HMSStreamingState.started { if !room.hlsStreamingState.variants.isEmpty { - hlsStreamUrl = room.hlsStreamingState.variants[0].url?.absoluteString + hlsStreamUrl = room.hlsStreamingState.variants.first?.url?.absoluteString } } diff --git a/packages/hmssdk_flutter/lib/assets/sdk-versions.json b/packages/hmssdk_flutter/lib/assets/sdk-versions.json index 56b239ded..17d0668de 100644 --- a/packages/hmssdk_flutter/lib/assets/sdk-versions.json +++ b/packages/hmssdk_flutter/lib/assets/sdk-versions.json @@ -1,6 +1,6 @@ { - "flutter": "1.9.4", - "ios": "1.3.1", + "flutter": "1.9.5", + "ios": "1.4.0", "iOSBroadcastExtension": "0.0.9", "iOSHLSPlayerSDK": "0.0.2", "android": "2.8.3" diff --git a/packages/hmssdk_flutter/lib/hmssdk_flutter.dart b/packages/hmssdk_flutter/lib/hmssdk_flutter.dart index 691329cea..121adadd8 100644 --- a/packages/hmssdk_flutter/lib/hmssdk_flutter.dart +++ b/packages/hmssdk_flutter/lib/hmssdk_flutter.dart @@ -100,6 +100,8 @@ export 'src/model/hls_player/hms_hls_cue.dart'; export 'src/model/hls_player/hms_hls_timed_metadata.dart'; export 'src/model/hms_peer_list_iterator.dart'; export 'src/model/peer_list_iterator_options.dart'; +export 'src/enum/hms_recording_state.dart'; +export 'src/enum/hms_streaming_state.dart'; //Views export 'src/ui/meeting/hms_texture_view.dart'; diff --git a/packages/hmssdk_flutter/lib/src/enum/hms_recording_state.dart b/packages/hmssdk_flutter/lib/src/enum/hms_recording_state.dart new file mode 100644 index 000000000..30e6afcee --- /dev/null +++ b/packages/hmssdk_flutter/lib/src/enum/hms_recording_state.dart @@ -0,0 +1,64 @@ +///Enum for the recording state in room +enum HMSRecordingState { + none, + + starting, + + started, + + paused, + + resumed, + + stopped, + + failed, +} + +extension HMSRecordingStateValues on HMSRecordingState { + static HMSRecordingState getRecordingStateFromName(String name) { + switch (name) { + case 'NONE': + return HMSRecordingState.none; + case 'STARTING': + return HMSRecordingState.starting; + case 'STARTED': + return HMSRecordingState.started; + case 'PAUSED': + return HMSRecordingState.paused; + case 'RESUMED': + return HMSRecordingState.resumed; + case 'STOPPED': + return HMSRecordingState.stopped; + case 'FAILED': + return HMSRecordingState.failed; + default: + return HMSRecordingState.none; + } + } + + static String getNameFromRecordingState(HMSRecordingState state) { + switch (state) { + case HMSRecordingState.none: + return 'NONE'; + + case HMSRecordingState.starting: + return 'STARTING'; + + case HMSRecordingState.started: + return 'STARTED'; + + case HMSRecordingState.paused: + return 'PAUSED'; + + case HMSRecordingState.resumed: + return 'RESUMED'; + + case HMSRecordingState.stopped: + return 'STOPPED'; + + case HMSRecordingState.failed: + return 'FAILED'; + } + } +} diff --git a/packages/hmssdk_flutter/lib/src/enum/hms_streaming_state.dart b/packages/hmssdk_flutter/lib/src/enum/hms_streaming_state.dart new file mode 100644 index 000000000..ad9b119a5 --- /dev/null +++ b/packages/hmssdk_flutter/lib/src/enum/hms_streaming_state.dart @@ -0,0 +1,50 @@ +///Enum for the streaming state in room +enum HMSStreamingState { + none, + + starting, + + started, + + stopped, + + failed, +} + +extension HMSStreamingStateValues on HMSStreamingState { + static HMSStreamingState getStreamingStateFromName(String name) { + switch (name) { + case 'NONE': + return HMSStreamingState.none; + case 'STARTING': + return HMSStreamingState.starting; + case 'STARTED': + return HMSStreamingState.started; + case 'STOPPED': + return HMSStreamingState.stopped; + case 'FAILED': + return HMSStreamingState.failed; + default: + return HMSStreamingState.none; + } + } + + static String getNameFromStreamingState(HMSStreamingState state) { + switch (state) { + case HMSStreamingState.none: + return 'NONE'; + + case HMSStreamingState.starting: + return 'STARTING'; + + case HMSStreamingState.started: + return 'STARTED'; + + case HMSStreamingState.stopped: + return 'STOPPED'; + + case HMSStreamingState.failed: + return 'FAILED'; + } + } +} diff --git a/packages/hmssdk_flutter/lib/src/model/hms_browser_recording_state.dart b/packages/hmssdk_flutter/lib/src/model/hms_browser_recording_state.dart index eab39848f..60dc9115a 100644 --- a/packages/hmssdk_flutter/lib/src/model/hms_browser_recording_state.dart +++ b/packages/hmssdk_flutter/lib/src/model/hms_browser_recording_state.dart @@ -1,28 +1,33 @@ // Project imports: import 'package:hmssdk_flutter/src/exceptions/hms_exception.dart'; import 'package:hmssdk_flutter/src/model/hms_date_extension.dart'; +import 'package:hmssdk_flutter/src/enum/hms_recording_state.dart'; ///100ms HMSBrowserRecordingState /// -///[HMSBrowserRecordingState] contains information about the borwser recording status. +///[HMSBrowserRecordingState] contains information about the browser recording status. class HMSBrowserRecordingState { final HMSException? error; final bool running; DateTime? startedAt; final bool initialising; + HMSRecordingState state; HMSBrowserRecordingState( {required this.error, required this.running, this.startedAt, - required this.initialising}); + required this.initialising, + required this.state}); factory HMSBrowserRecordingState.fromMap(Map map) { return HMSBrowserRecordingState( error: map["error"] != null ? HMSException.fromMap(map) : null, running: map['running'], startedAt: map['started_at'] != null - ? HMSDateExtension.convertDateFromString(map['started_at']) + ? HMSDateExtension.convertDateFromEpoch(map['started_at']) : null, - initialising: map['initialising']); + initialising: map['initialising'], + state: HMSRecordingStateValues.getRecordingStateFromName( + map['state'] ?? 'NONE')); } } diff --git a/packages/hmssdk_flutter/lib/src/model/hms_hls_recording_state.dart b/packages/hmssdk_flutter/lib/src/model/hms_hls_recording_state.dart index 840647dca..1ded6f1d6 100644 --- a/packages/hmssdk_flutter/lib/src/model/hms_hls_recording_state.dart +++ b/packages/hmssdk_flutter/lib/src/model/hms_hls_recording_state.dart @@ -1,6 +1,7 @@ // Project imports: import 'package:hmssdk_flutter/src/exceptions/hms_exception.dart'; import 'package:hmssdk_flutter/src/model/hms_date_extension.dart'; +import 'package:hmssdk_flutter/src/enum/hms_recording_state.dart'; ///100ms HMSHLSRecordingState /// @@ -9,8 +10,12 @@ class HMSHLSRecordingState { final HMSException? error; final bool running; DateTime? startedAt; + HMSRecordingState state; HMSHLSRecordingState( - {required this.error, required this.running, this.startedAt}); + {required this.error, + required this.running, + this.startedAt, + required this.state}); factory HMSHLSRecordingState.fromMap(Map map) { return HMSHLSRecordingState( @@ -19,7 +24,9 @@ class HMSHLSRecordingState { : null, running: map['running'], startedAt: map['started_at'] != null - ? HMSDateExtension.convertDateFromString(map['started_at']) - : null); + ? HMSDateExtension.convertDateFromEpoch(map['started_at']) + : null, + state: HMSRecordingStateValues.getRecordingStateFromName( + map['state'] ?? 'NONE')); } } diff --git a/packages/hmssdk_flutter/lib/src/model/hms_hls_streaming_state.dart b/packages/hmssdk_flutter/lib/src/model/hms_hls_streaming_state.dart index 3e2855d07..b1308cabb 100644 --- a/packages/hmssdk_flutter/lib/src/model/hms_hls_streaming_state.dart +++ b/packages/hmssdk_flutter/lib/src/model/hms_hls_streaming_state.dart @@ -1,5 +1,6 @@ // Project imports import 'package:hmssdk_flutter/src/model/hms_hls_variant.dart'; +import 'package:hmssdk_flutter/src/enum/hms_streaming_state.dart'; ///100ms HMSHLSStreamingState /// @@ -7,7 +8,9 @@ import 'package:hmssdk_flutter/src/model/hms_hls_variant.dart'; class HMSHLSStreamingState { final bool running; final List variants; - HMSHLSStreamingState({required this.running, required this.variants}); + HMSStreamingState state; + HMSHLSStreamingState( + {required this.running, required this.variants, required this.state}); factory HMSHLSStreamingState.fromMap(Map map) { List variants = []; @@ -24,9 +27,13 @@ class HMSHLSStreamingState { } } + HMSStreamingState state = HMSStreamingStateValues.getStreamingStateFromName( + map['state'] ?? 'NONE'); + return HMSHLSStreamingState( running: map['running'], variants: variants, + state: state, ); } } diff --git a/packages/hmssdk_flutter/lib/src/model/hms_hls_variant.dart b/packages/hmssdk_flutter/lib/src/model/hms_hls_variant.dart index d875b9f06..70cd49f67 100644 --- a/packages/hmssdk_flutter/lib/src/model/hms_hls_variant.dart +++ b/packages/hmssdk_flutter/lib/src/model/hms_hls_variant.dart @@ -38,7 +38,7 @@ class HMSHLSVariant { meetingUrl: map['meeting_url'] as String?, metadata: map['metadata'] as String?, startedAt: map['started_at'] != null - ? HMSDateExtension.convertDateFromString(map['started_at']) + ? HMSDateExtension.convertDateFromEpoch(map['started_at']) : null, ); } diff --git a/packages/hmssdk_flutter/lib/src/model/hms_rtmp_streaming_state.dart b/packages/hmssdk_flutter/lib/src/model/hms_rtmp_streaming_state.dart index 65b46dc8e..dc0af80e6 100644 --- a/packages/hmssdk_flutter/lib/src/model/hms_rtmp_streaming_state.dart +++ b/packages/hmssdk_flutter/lib/src/model/hms_rtmp_streaming_state.dart @@ -1,23 +1,30 @@ // Project imports: import 'package:hmssdk_flutter/src/exceptions/hms_exception.dart'; import 'package:hmssdk_flutter/src/model/hms_date_extension.dart'; +import 'package:hmssdk_flutter/src/enum/hms_streaming_state.dart'; -///100ms HMSRtmlStreamingState +///100ms HMSRtmpStreamingState /// ///[HMSRtmpStreamingState] contains information about the rtmp streaming status. class HMSRtmpStreamingState { final HMSException? error; final bool running; DateTime? startedAt; + HMSStreamingState state; HMSRtmpStreamingState( - {required this.error, required this.running, this.startedAt}); + {required this.error, + required this.running, + this.startedAt, + required this.state}); factory HMSRtmpStreamingState.fromMap(Map map) { return HMSRtmpStreamingState( error: map["error"] != null ? HMSException.fromMap(map) : null, running: map['running'], startedAt: map['started_at'] != null - ? HMSDateExtension.convertDateFromString(map['started_at']) - : null); + ? HMSDateExtension.convertDateFromEpoch(map['started_at']) + : null, + state: HMSStreamingStateValues.getStreamingStateFromName( + map['state'] ?? 'NONE')); } } diff --git a/packages/hmssdk_flutter/lib/src/model/hms_server_recording_state.dart b/packages/hmssdk_flutter/lib/src/model/hms_server_recording_state.dart index 127bd0c24..dbe833a92 100644 --- a/packages/hmssdk_flutter/lib/src/model/hms_server_recording_state.dart +++ b/packages/hmssdk_flutter/lib/src/model/hms_server_recording_state.dart @@ -10,15 +10,21 @@ class HMSServerRecordingState { final HMSException? error; final bool running; DateTime? startedAt; + HMSRecordingState state; HMSServerRecordingState( - {required this.error, required this.running, this.startedAt}); + {required this.error, + required this.running, + this.startedAt, + required this.state}); factory HMSServerRecordingState.fromMap(Map map) { return HMSServerRecordingState( error: map["error"] != null ? HMSException.fromMap(map) : null, running: map['running'], startedAt: map['started_at'] != null - ? HMSDateExtension.convertDateFromString(map['started_at']) - : null); + ? HMSDateExtension.convertDateFromEpoch(map['started_at']) + : null, + state: HMSRecordingStateValues.getRecordingStateFromName( + map['state'] ?? 'NONE')); } } diff --git a/packages/hmssdk_flutter/lib/src/ui/meeting/hms_texture_view.dart b/packages/hmssdk_flutter/lib/src/ui/meeting/hms_texture_view.dart index 35e188382..db56abf40 100644 --- a/packages/hmssdk_flutter/lib/src/ui/meeting/hms_texture_view.dart +++ b/packages/hmssdk_flutter/lib/src/ui/meeting/hms_texture_view.dart @@ -4,6 +4,7 @@ import 'dart:math'; // Flutter imports: import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart' show StandardMessageCodec; // Project imports: @@ -31,9 +32,7 @@ import 'package:hmssdk_flutter/hmssdk_flutter.dart'; /// **disableAutoSimulcastLayerSelect** - To disable auto simulcast (Adaptive Bitrate) /// /// **key** - [key] property can be used to forcefully rebuild the video widget by setting a unique key everytime. -/// Similarly to avoid rebuilding the key should be kept the same for particular HMSVideoView. -/// -/// **addTrackByDefault** - To call addTrack by default as HMSTextureView is attached to the tree. Default value is [true] +/// Similarly to avoid rebuilding the key should be kept the same for particular HMSTextureView. /// /// **controller** - To control the video view, this is useful for custom usecases when you wish to control the addTrack and removeTrack /// track functionalities on your own. @@ -57,9 +56,6 @@ class HMSTextureView extends StatelessWidget { /// Default is [false] final bool disableAutoSimulcastLayerSelect; - /// [addTrackByDefault] - To call addTrack by default as HMSVideoView is attached to the tree. Default value is [true] - final bool addTrackByDefault; - /// [controller] - To control the video view, this is useful for custom usecases when you wish to control the addTrack and removeTrack /// track functionalities on your own. final HMSTextureViewController? controller; @@ -70,18 +66,17 @@ class HMSTextureView extends StatelessWidget { this.setMirror = false, this.scaleType = ScaleType.SCALE_ASPECT_FIT, this.disableAutoSimulcastLayerSelect = false, - this.addTrackByDefault = true, this.controller}) : super(key: key); @override Widget build(BuildContext context) { return _PlatformView( + key: key, track: track, setMirror: setMirror, scaleType: this.scaleType, disableAutoSimulcastLayerSelect: disableAutoSimulcastLayerSelect, - addTrackByDefault: addTrackByDefault, controller: controller, ); } @@ -92,7 +87,6 @@ class _PlatformView extends StatefulWidget { final bool setMirror; final ScaleType scaleType; final bool disableAutoSimulcastLayerSelect; - final bool addTrackByDefault; final HMSTextureViewController? controller; _PlatformView( @@ -101,7 +95,6 @@ class _PlatformView extends StatefulWidget { this.setMirror = false, required this.scaleType, this.disableAutoSimulcastLayerSelect = false, - this.addTrackByDefault = true, this.controller}) : super(key: key); @@ -119,8 +112,10 @@ class _PlatformViewState extends State<_PlatformView> { /// (Android Only) if (Platform.isAndroid) { if (widget.controller == null) { - viewController = - HMSTextureViewController(track: widget.track as HMSVideoTrack); + viewController = HMSTextureViewController( + track: widget.track as HMSVideoTrack, + disableAutoSimulcastLayerSelect: + widget.disableAutoSimulcastLayerSelect); } else { viewController = widget.controller; } @@ -191,6 +186,7 @@ class _PlatformViewState extends State<_PlatformView> { } else if (Platform.isIOS) { ///UIKitView for ios it uses VideoView provided by 100ms ios_sdk internally. return UiKitView( + hitTestBehavior: PlatformViewHitTestBehavior.transparent, viewType: 'HMSFlutterPlatformView', creationParamsCodec: StandardMessageCodec(), creationParams: { diff --git a/packages/hmssdk_flutter/pubspec.yaml b/packages/hmssdk_flutter/pubspec.yaml index ecc8f88f7..5208094b9 100644 --- a/packages/hmssdk_flutter/pubspec.yaml +++ b/packages/hmssdk_flutter/pubspec.yaml @@ -1,6 +1,6 @@ name: hmssdk_flutter description: Add Real Time Audio & Video calls, Interactive Live Streaming & Recording, Chat, HLS, RTMP, PiP, CallKit, VoIP, Video conferencing, Stream Player & WebRTC-based communications API -version: 1.9.4 +version: 1.9.5 homepage: https://www.100ms.live/ repository: https://github.com/100mslive/100ms-flutter issue_tracker: https://github.com/100mslive/100ms-flutter/issues diff --git a/sample apps/bloc/pubspec.lock b/sample apps/bloc/pubspec.lock index 0353333d2..a2aba3ffb 100644 --- a/sample apps/bloc/pubspec.lock +++ b/sample apps/bloc/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" cupertino_icons: dependency: "direct main" description: @@ -159,10 +159,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" nested: dependency: transitive description: @@ -260,18 +260,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -292,10 +292,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" typed_data: dependency: transitive description: @@ -324,10 +324,10 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.3.0" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">=3.2.0-194.0.dev <4.0.0" flutter: ">=2.10.0" diff --git a/sample apps/flutter-audio-room-quickstart/pubspec.lock b/sample apps/flutter-audio-room-quickstart/pubspec.lock index b9ad621c8..802acb7e2 100644 --- a/sample apps/flutter-audio-room-quickstart/pubspec.lock +++ b/sample apps/flutter-audio-room-quickstart/pubspec.lock @@ -37,10 +37,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" cupertino_icons: dependency: "direct main" description: @@ -111,10 +111,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" path: dependency: transitive description: @@ -188,18 +188,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -220,10 +220,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" vector_math: dependency: transitive description: @@ -236,10 +236,10 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.3.0" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">=3.2.0-194.0.dev <4.0.0" flutter: ">=2.8.0" diff --git a/sample apps/flutter-hls-quickstart/pubspec.lock b/sample apps/flutter-hls-quickstart/pubspec.lock index 3cc98b632..e93e320f7 100644 --- a/sample apps/flutter-hls-quickstart/pubspec.lock +++ b/sample apps/flutter-hls-quickstart/pubspec.lock @@ -37,10 +37,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" csslib: dependency: transitive description: @@ -132,10 +132,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" path: dependency: transitive description: @@ -209,18 +209,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -241,10 +241,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" vector_math: dependency: transitive description: @@ -297,10 +297,10 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.3.0" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">=3.2.0-194.0.dev <4.0.0" flutter: ">=3.3.0" diff --git a/sample apps/flutter-quickstart-app/pubspec.lock b/sample apps/flutter-quickstart-app/pubspec.lock index 8f4622fce..707d7c566 100644 --- a/sample apps/flutter-quickstart-app/pubspec.lock +++ b/sample apps/flutter-quickstart-app/pubspec.lock @@ -37,10 +37,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" cupertino_icons: dependency: "direct main" description: @@ -111,10 +111,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" path: dependency: transitive description: @@ -188,18 +188,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -220,10 +220,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" vector_math: dependency: transitive description: @@ -236,10 +236,10 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.3.0" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">=3.2.0-194.0.dev <4.0.0" flutter: ">=2.10.0" diff --git a/sample apps/flutterflow-prebuilt-quickstart/pubspec.lock b/sample apps/flutterflow-prebuilt-quickstart/pubspec.lock index c259ef983..560354217 100644 --- a/sample apps/flutterflow-prebuilt-quickstart/pubspec.lock +++ b/sample apps/flutterflow-prebuilt-quickstart/pubspec.lock @@ -101,10 +101,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" convert: dependency: transitive description: @@ -425,10 +425,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" mime: dependency: transitive description: @@ -742,18 +742,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -782,10 +782,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" timeago: dependency: "direct main" description: @@ -926,10 +926,10 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.3.0" win32: dependency: transitive description: @@ -955,5 +955,5 @@ packages: source: hosted version: "6.3.0" sdks: - dart: ">=3.1.0 <4.0.0" + dart: ">=3.2.0-194.0.dev <4.0.0" flutter: ">=3.13.0" diff --git a/sample apps/getx/pubspec.lock b/sample apps/getx/pubspec.lock index d775b7e51..f362cecd1 100644 --- a/sample apps/getx/pubspec.lock +++ b/sample apps/getx/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" cupertino_icons: dependency: "direct main" description: @@ -151,10 +151,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" path: dependency: transitive description: @@ -228,18 +228,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -260,10 +260,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" typed_data: dependency: transitive description: @@ -292,10 +292,10 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.3.0" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">=3.2.0-194.0.dev <4.0.0" flutter: ">=2.8.0" diff --git a/sample apps/hms-callkit-app/pubspec.lock b/sample apps/hms-callkit-app/pubspec.lock index 181a17dfa..277674560 100644 --- a/sample apps/hms-callkit-app/pubspec.lock +++ b/sample apps/hms-callkit-app/pubspec.lock @@ -69,10 +69,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" cross_file: dependency: transitive description: @@ -276,10 +276,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" mime: dependency: transitive description: @@ -441,18 +441,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -473,10 +473,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" typed_data: dependency: transitive description: @@ -537,10 +537,10 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.3.0" win32: dependency: transitive description: @@ -558,5 +558,5 @@ packages: source: hosted version: "0.2.0+3" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">=3.2.0-194.0.dev <4.0.0" flutter: ">=3.3.0" diff --git a/sample apps/mobx/pubspec.lock b/sample apps/mobx/pubspec.lock index 2fa543676..f6a657bbc 100644 --- a/sample apps/mobx/pubspec.lock +++ b/sample apps/mobx/pubspec.lock @@ -141,10 +141,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" convert: dependency: transitive description: @@ -359,10 +359,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" mime: dependency: transitive description: @@ -516,18 +516,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" stream_transform: dependency: transitive description: @@ -556,10 +556,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" timing: dependency: transitive description: @@ -604,10 +604,10 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.3.0" web_socket_channel: dependency: transitive description: @@ -625,5 +625,5 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">=3.2.0-194.0.dev <4.0.0" flutter: ">=2.8.0" diff --git a/sample apps/riverpod/pubspec.lock b/sample apps/riverpod/pubspec.lock index ecdac52f5..7b8d8be33 100644 --- a/sample apps/riverpod/pubspec.lock +++ b/sample apps/riverpod/pubspec.lock @@ -37,10 +37,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" cupertino_icons: dependency: "direct main" description: @@ -135,10 +135,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" path: dependency: transitive description: @@ -220,10 +220,10 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" state_notifier: dependency: transitive description: @@ -236,10 +236,10 @@ packages: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -260,10 +260,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" typed_data: dependency: transitive description: @@ -284,10 +284,10 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.3.0" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">=3.2.0-194.0.dev <4.0.0" flutter: ">=3.0.0"