Skip to content

fix(ui): fixed callkit event silencing#1154

Merged
Brazol merged 8 commits intomainfrom
fix/fix-callkit-event-silencing
Jan 19, 2026
Merged

fix(ui): fixed callkit event silencing#1154
Brazol merged 8 commits intomainfrom
fix/fix-callkit-event-silencing

Conversation

@Brazol
Copy link
Contributor

@Brazol Brazol commented Jan 15, 2026

Fixed the silencing of CallKit events used to prevent event looping and silent CallKit call ending.

Summary by CodeRabbit

  • Bug Fixes

    • Fixed iOS CallKit event suppression to prevent repeated mute toggle loops during call handling.
  • Tests

    • Added comprehensive test coverage for ringing event suppression behavior.
  • Chores

    • Added example projects for push notification and noise cancellation packages.
    • Updated Gradle wrapper configurations with SHA-256 checksums for enhanced security.

✏️ Tip: You can customize this high-level summary in your review settings.

@Brazol Brazol requested a review from a team as a code owner January 15, 2026 13:14
@coderabbitai
Copy link

coderabbitai bot commented Jan 15, 2026

📝 Walkthrough

Walkthrough

Introduces a suppression-based mechanism in RingingEventBroadcaster to prevent repeated mute toggle loops on iOS CallKit by replacing silent/un-silence flows with event suppression. Adds comprehensive test coverage, initializes complete Flutter example projects with Android and iOS configurations, and documents the fix in changelogs.

Changes

Cohort / File(s) Summary
Push Notification Event Suppression
packages/stream_video_push_notification/lib/src/stream_video_push_notification.dart
Replaces silent/un-silence flows with RingingEventBroadcaster().suppressEvent() to prevent CallKit event loops. Introduces _RingingEventSuppression data container and _shouldSuppressEvent() filtering logic. Adds public suppressEvent() method with optional eventType, valueKey, and window parameters.
Push Notification Tests
packages/stream_video_push_notification/test/ringing_event_broadcaster_test.dart
New test file with mocked StreamVideoPushNotificationPlatform, covering suppression window validation, event type/value filtering, expiration timing, and multiple matching events within suppression window.
Changelogs
packages/stream_video_flutter/CHANGELOG.md, packages/stream_video_push_notification/CHANGELOG.md
Added "Upcoming" sections documenting iOS CallKit event suppression fix for repeated mute toggle loops.
Noise Cancellation Example Project
packages/stream_video_noise_cancellation/example/*
Complete Flutter example scaffolding: Android configuration (build.gradle.kts, manifests, resources, MainActivity), iOS configuration (Xcode project, AppDelegate, storyboards, assets), and project metadata (.gitignore, .metadata, pubspec.yaml, analysis_options.yaml).
Push Notification Example Project
packages/stream_video_push_notification/example/*
Complete Flutter example scaffolding: Android configuration (build.gradle.kts, manifests, resources, MainActivity), iOS configuration (Xcode project, AppDelegate, storyboards, assets), and project metadata (.gitignore, .metadata, pubspec.yaml, analysis_options.yaml).
Gradle Wrapper Configuration
dogfooding/android/gradle/wrapper/gradle-wrapper.properties, packages/stream_video_flutter/android/gradle/wrapper/gradle-wrapper.properties, packages/stream_video_flutter/example/android/gradle/wrapper/gradle-wrapper.properties, packages/stream_video_push_notification/android/gradle/wrapper/gradle-wrapper.properties
Added distributionSha256Sum for Gradle 8.13 distribution verification across multiple gradle-wrapper.properties files.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Suggested reviewers

  • renefloor
  • xsahil03x

Poem

🐰 A rabbit hops through CallKit's maze,
Where mute loops spiraled in a daze,
With suppressions swift and true,
The toggle flows now work anew!
No more silence cycling 'round,
Sweet harmony is finally found! 🎙️

🚥 Pre-merge checks | ✅ 1 | ❌ 2
❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is minimal and lacks most required template sections including Goal, Implementation details, UI Changes, Testing, and Contributor Checklist details. Expand the description to include: detailed Goal explaining why the change is needed, Implementation details describing the suppression mechanism, Testing explanation, and complete Contributor Checklist items.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title "fix(ui): fixed callkit event silencing" directly relates to the main change: replacing silent/un-silence flows with a suppression-based mechanism for CallKit events to prevent repeated mute toggle loops.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🤖 Fix all issues with AI agents
In
`@packages/stream_video_noise_cancellation/example/android/gradle/wrapper/gradle-wrapper.properties`:
- Around line 1-5: The gradle-wrapper.properties is missing
distributionSha256Sum to pin the Gradle distribution; add a line
distributionSha256Sum=<official SHA-256 for gradle-8.12-all.zip> alongside the
existing distributionUrl entry (keep distributionUrl as-is) so the wrapper
verifies the downloaded archive; fetch the exact SHA-256 from the official
Gradle release page for gradle-8.12-all.zip and insert it as the value.

In
`@packages/stream_video_noise_cancellation/example/android/settings.gradle.kts`:
- Around line 20-24: The plugins block declares AGP as
id("com.android.application") version "8.9.1" while Kotlin is
id("org.jetbrains.kotlin.android") version "2.1.0", which is incompatible;
either change the AGP version to a supported one (e.g., "8.7.2") or bump the
Kotlin plugin to a release that explicitly supports AGP 8.9.x—update the version
string in the plugins block accordingly so the AGP and Kotlin plugin versions
are compatible.

In
`@packages/stream_video_noise_cancellation/example/ios/Runner.xcodeproj/project.pbxproj`:
- Around line 361-379: The build configuration in project.pbxproj hardcodes
DEVELOPMENT_TEAM = EHV7XZLAHA in the buildSettings for the Profile configuration
(and similarly in Debug and Release), which causes signing errors for other
contributors; remove the DEVELOPMENT_TEAM entry (or set it to an empty value)
from the buildSettings blocks for Profile, Debug and Release so Xcode will
prompt each developer to select their own team (locate the buildSettings map
containing DEVELOPMENT_TEAM and delete that line for the configurations named
Profile, Debug and Release).

In `@packages/stream_video_noise_cancellation/example/pubspec.yaml`:
- Around line 13-18: The example's pubspec mistakenly lists runtime packages
under dev_dependencies; move the two packages "stream_video" and
"stream_video_noise_cancellation" from the dev_dependencies block into the
dependencies block (i.e., ensure there is a top-level dependencies: section and
place those package entries there) so the example app has them as runtime
dependencies rather than dev-only.

In
`@packages/stream_video_push_notification/example/android/app/build.gradle.kts`:
- Around line 1-5: The plugins block currently uses the shorthand plugin
id("kotlin-android"); update it to the fully qualified plugin
id("org.jetbrains.kotlin.android") to match the declaration in
settings.gradle.kts and ensure consistent plugin resolution; edit the plugins
block where id("kotlin-android") appears (next to id("com.android.application")
and id("dev.flutter.flutter-gradle-plugin")) and replace that identifier with
id("org.jetbrains.kotlin.android").

In `@packages/stream_video_push_notification/example/pubspec.yaml`:
- Around line 13-18: The pubspec.yaml places runtime packages under
dev_dependencies causing them to be unavailable at runtime; move the two
packages stream_video and stream_video_push_notification from the
dev_dependencies section into the top-level dependencies section of the
example's pubspec.yaml so they are bundled into the built app; update the
dependencies block to include stream_video: ^1.2.2 and
stream_video_push_notification: ^1.2.2 and remove them from dev_dependencies
(verify flutter_lints and flutter_test remain under dev_dependencies).
🧹 Nitpick comments (5)
packages/stream_video_noise_cancellation/example/android/app/src/main/res/drawable/launch_background.xml (1)

4-11: Consider theme-aware background to avoid white flash in dark mode.
If you want the splash to respect dark theme, use the system background color (or add a night resource).

♻️ Suggested tweak
-    <item android:drawable="@android:color/white" />
+    <item android:drawable="?android:colorBackground" />
packages/stream_video_push_notification/example/android/gradle.properties (1)

1-3: Aggressive JVM memory settings for an example project.

The 8G heap and 4G metaspace allocations are quite high for an example project and may cause build failures on developer machines with limited RAM. Consider using more conservative values (e.g., -Xmx4G -XX:MaxMetaspaceSize=1G) that work on a wider range of machines.

Additionally, android.enableJetifier is being phased out as most libraries are now AndroidX-native. Verify if it's still needed for your dependencies; if not, consider removing it to speed up builds.

packages/stream_video_push_notification/example/android/build.gradle.kts (1)

14-20: Consider merging duplicate subprojects blocks.

The two subprojects blocks can be consolidated into one for better readability.

♻️ Suggested consolidation
 subprojects {
     val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
     project.layout.buildDirectory.value(newSubprojectBuildDir)
-}
-subprojects {
     project.evaluationDependsOn(":app")
 }
packages/stream_video_noise_cancellation/example/android/build.gradle.kts (1)

14-20: Consider merging duplicate subprojects blocks.

Same as the push_notification example - the two subprojects blocks can be consolidated into one for better readability.

♻️ Suggested consolidation
 subprojects {
     val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
     project.layout.buildDirectory.value(newSubprojectBuildDir)
-}
-subprojects {
     project.evaluationDependsOn(":app")
 }
packages/stream_video_push_notification/example/android/settings.gradle.kts (1)

2-8: Add a clearer error when local.properties is missing.
If the file doesn’t exist, the current code throws a FileNotFoundException before the require message. A small guard improves diagnosability.

♻️ Proposed tweak
 pluginManagement {
     val flutterSdkPath =
         run {
             val properties = java.util.Properties()
-            file("local.properties").inputStream().use { properties.load(it) }
+            val localProps = file("local.properties")
+            require(localProps.exists()) { "local.properties not found; set flutter.sdk in local.properties" }
+            localProps.inputStream().use { properties.load(it) }
             val flutterSdkPath = properties.getProperty("flutter.sdk")
             require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
             flutterSdkPath
         }
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between c853aac and 523601d.

⛔ Files ignored due to path filters (46)
  • packages/stream_video_noise_cancellation/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png is excluded by !**/*.png
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png is excluded by !**/*.png
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png is excluded by !**/*.png
📒 Files selected for processing (80)
  • packages/stream_video_noise_cancellation/example/.gitignore
  • packages/stream_video_noise_cancellation/example/.metadata
  • packages/stream_video_noise_cancellation/example/README.md
  • packages/stream_video_noise_cancellation/example/analysis_options.yaml
  • packages/stream_video_noise_cancellation/example/android/.gitignore
  • packages/stream_video_noise_cancellation/example/android/app/build.gradle.kts
  • packages/stream_video_noise_cancellation/example/android/app/src/debug/AndroidManifest.xml
  • packages/stream_video_noise_cancellation/example/android/app/src/main/AndroidManifest.xml
  • packages/stream_video_noise_cancellation/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt
  • packages/stream_video_noise_cancellation/example/android/app/src/main/res/drawable-v21/launch_background.xml
  • packages/stream_video_noise_cancellation/example/android/app/src/main/res/drawable/launch_background.xml
  • packages/stream_video_noise_cancellation/example/android/app/src/main/res/values-night/styles.xml
  • packages/stream_video_noise_cancellation/example/android/app/src/main/res/values/styles.xml
  • packages/stream_video_noise_cancellation/example/android/app/src/profile/AndroidManifest.xml
  • packages/stream_video_noise_cancellation/example/android/build.gradle.kts
  • packages/stream_video_noise_cancellation/example/android/gradle.properties
  • packages/stream_video_noise_cancellation/example/android/gradle/wrapper/gradle-wrapper.properties
  • packages/stream_video_noise_cancellation/example/android/settings.gradle.kts
  • packages/stream_video_noise_cancellation/example/ios/.gitignore
  • packages/stream_video_noise_cancellation/example/ios/Flutter/AppFrameworkInfo.plist
  • packages/stream_video_noise_cancellation/example/ios/Flutter/Debug.xcconfig
  • packages/stream_video_noise_cancellation/example/ios/Flutter/Release.xcconfig
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcodeproj/project.pbxproj
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcworkspace/contents.xcworkspacedata
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  • packages/stream_video_noise_cancellation/example/ios/Runner/AppDelegate.swift
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
  • packages/stream_video_noise_cancellation/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
  • packages/stream_video_noise_cancellation/example/ios/Runner/Base.lproj/Main.storyboard
  • packages/stream_video_noise_cancellation/example/ios/Runner/Info.plist
  • packages/stream_video_noise_cancellation/example/ios/Runner/Runner-Bridging-Header.h
  • packages/stream_video_noise_cancellation/example/ios/RunnerTests/RunnerTests.swift
  • packages/stream_video_noise_cancellation/example/pubspec.yaml
  • packages/stream_video_push_notification/example/.gitignore
  • packages/stream_video_push_notification/example/.metadata
  • packages/stream_video_push_notification/example/README.md
  • packages/stream_video_push_notification/example/analysis_options.yaml
  • packages/stream_video_push_notification/example/android/.gitignore
  • packages/stream_video_push_notification/example/android/app/build.gradle.kts
  • packages/stream_video_push_notification/example/android/app/src/debug/AndroidManifest.xml
  • packages/stream_video_push_notification/example/android/app/src/main/AndroidManifest.xml
  • packages/stream_video_push_notification/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt
  • packages/stream_video_push_notification/example/android/app/src/main/res/drawable-v21/launch_background.xml
  • packages/stream_video_push_notification/example/android/app/src/main/res/drawable/launch_background.xml
  • packages/stream_video_push_notification/example/android/app/src/main/res/values-night/styles.xml
  • packages/stream_video_push_notification/example/android/app/src/main/res/values/styles.xml
  • packages/stream_video_push_notification/example/android/app/src/profile/AndroidManifest.xml
  • packages/stream_video_push_notification/example/android/build.gradle.kts
  • packages/stream_video_push_notification/example/android/gradle.properties
  • packages/stream_video_push_notification/example/android/gradle/wrapper/gradle-wrapper.properties
  • packages/stream_video_push_notification/example/android/settings.gradle.kts
  • packages/stream_video_push_notification/example/ios/.gitignore
  • packages/stream_video_push_notification/example/ios/Flutter/AppFrameworkInfo.plist
  • packages/stream_video_push_notification/example/ios/Flutter/Debug.xcconfig
  • packages/stream_video_push_notification/example/ios/Flutter/Release.xcconfig
  • packages/stream_video_push_notification/example/ios/Runner.xcodeproj/project.pbxproj
  • packages/stream_video_push_notification/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  • packages/stream_video_push_notification/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  • packages/stream_video_push_notification/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  • packages/stream_video_push_notification/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
  • packages/stream_video_push_notification/example/ios/Runner.xcworkspace/contents.xcworkspacedata
  • packages/stream_video_push_notification/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  • packages/stream_video_push_notification/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  • packages/stream_video_push_notification/example/ios/Runner/AppDelegate.swift
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
  • packages/stream_video_push_notification/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
  • packages/stream_video_push_notification/example/ios/Runner/Base.lproj/Main.storyboard
  • packages/stream_video_push_notification/example/ios/Runner/Info.plist
  • packages/stream_video_push_notification/example/ios/Runner/Runner-Bridging-Header.h
  • packages/stream_video_push_notification/example/ios/RunnerTests/RunnerTests.swift
  • packages/stream_video_push_notification/example/pubspec.yaml
✅ Files skipped from review due to trivial changes (33)
  • packages/stream_video_push_notification/example/README.md
  • packages/stream_video_push_notification/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  • packages/stream_video_noise_cancellation/example/android/gradle.properties
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  • packages/stream_video_push_notification/example/.gitignore
  • packages/stream_video_push_notification/example/android/app/src/main/res/drawable/launch_background.xml
  • packages/stream_video_noise_cancellation/example/android/app/src/main/res/drawable-v21/launch_background.xml
  • packages/stream_video_push_notification/example/android/gradle/wrapper/gradle-wrapper.properties
  • packages/stream_video_push_notification/example/ios/.gitignore
  • packages/stream_video_push_notification/example/ios/Flutter/AppFrameworkInfo.plist
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  • packages/stream_video_noise_cancellation/example/ios/Flutter/Release.xcconfig
  • packages/stream_video_push_notification/example/analysis_options.yaml
  • packages/stream_video_noise_cancellation/example/android/.gitignore
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
  • packages/stream_video_noise_cancellation/example/README.md
  • packages/stream_video_push_notification/example/android/.gitignore
  • packages/stream_video_push_notification/example/ios/Flutter/Debug.xcconfig
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  • packages/stream_video_push_notification/example/android/app/src/debug/AndroidManifest.xml
  • packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  • packages/stream_video_noise_cancellation/example/ios/Flutter/AppFrameworkInfo.plist
  • packages/stream_video_push_notification/example/ios/Runner.xcworkspace/contents.xcworkspacedata
  • packages/stream_video_noise_cancellation/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
  • packages/stream_video_noise_cancellation/example/ios/Flutter/Debug.xcconfig
  • packages/stream_video_push_notification/example/ios/RunnerTests/RunnerTests.swift
  • packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcworkspace/contents.xcworkspacedata
  • packages/stream_video_noise_cancellation/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  • packages/stream_video_push_notification/example/ios/Runner/Info.plist
  • packages/stream_video_push_notification/example/ios/Runner.xcodeproj/project.pbxproj
🧰 Additional context used
🪛 Clang (14.0.6)
packages/stream_video_push_notification/example/ios/Runner/Runner-Bridging-Header.h

[error] 1-1: 'GeneratedPluginRegistrant.h' file not found

(clang-diagnostic-error)

packages/stream_video_noise_cancellation/example/ios/Runner/Runner-Bridging-Header.h

[error] 1-1: 'GeneratedPluginRegistrant.h' file not found

(clang-diagnostic-error)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: stream_video
  • GitHub Check: analyze
  • GitHub Check: build
  • GitHub Check: iOS Build (Dogfooding)
🔇 Additional comments (45)
packages/stream_video_noise_cancellation/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json (1)

1-22: Looks good for Xcode asset catalog format.

packages/stream_video_push_notification/example/ios/Flutter/Release.xcconfig (1)

1-1: LGTM — aligns Release config with generated settings.

This mirrors standard Flutter iOS config practice and keeps Release in sync with Debug.

packages/stream_video_push_notification/example/ios/Runner/Base.lproj/LaunchScreen.storyboard (1)

1-36: LGTM — clean, minimal launch screen layout.
Centered image with constraints and a solid background is appropriate for a static Launch Screen.

packages/stream_video_push_notification/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (1)

1-101: LGTM — scheme configuration looks standard and complete.

No issues spotted in the Build/Test/Launch/Profile/Analyze/Archive setup.

packages/stream_video_noise_cancellation/example/ios/RunnerTests/RunnerTests.swift (1)

1-12: LGTM for scaffolding test file.

Standard XCTest template with a placeholder test; no issues.

packages/stream_video_push_notification/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings (1)

1-8: LGTM!

Standard Xcode workspace settings file disabling SwiftUI Previews. This is appropriate for a Flutter iOS project and aligns with the similar project-level settings file added in this PR.

packages/stream_video_push_notification/example/ios/Runner/Base.lproj/Main.storyboard (1)

1-26: LGTM!

This is standard Flutter iOS boilerplate for the example project's main storyboard. The FlutterViewController is correctly set as the initial view controller, and the structure follows the expected Flutter iOS template conventions.

packages/stream_video_noise_cancellation/example/analysis_options.yaml (1)

1-1: LGTM!

Standard Flutter lints configuration for the example project. This aligns with the similar configuration added for other example projects in this PR.

packages/stream_video_push_notification/example/.metadata (1)

1-33: LGTM!

This is a standard Flutter-generated metadata file for the push notification example project. The file correctly tracks the Flutter SDK revision, project type, and migration state. The unmanaged files list appropriately excludes lib/main.dart and the iOS project file from migration tooling.

packages/stream_video_noise_cancellation/example/.metadata (1)

1-33: LGTM!

This is a standard Flutter-generated metadata file for the noise cancellation example project, consistent with the push notification example's metadata. The file structure and content follow Flutter conventions.

packages/stream_video_push_notification/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md (1)

1-5: LGTM!

The documentation is clear, accurate, and provides helpful guidance for customizing launch screen assets in the iOS example project. Both methods (direct file replacement and Xcode drag-and-drop) are valid approaches.

packages/stream_video_noise_cancellation/example/ios/Runner/Runner-Bridging-Header.h (1)

1-1: LGTM - Standard Flutter iOS bridging header.

This is the expected boilerplate for Flutter iOS projects. The static analysis error about GeneratedPluginRegistrant.h not being found is a false positive—this file is auto-generated by Flutter during the build process (via flutter build or when running pod install).

packages/stream_video_push_notification/example/ios/Runner/AppDelegate.swift (1)

1-13: LGTM - Standard Flutter iOS AppDelegate.

This is the correct boilerplate for a Flutter iOS app delegate. The implementation properly registers Flutter plugins and delegates to the superclass.

packages/stream_video_noise_cancellation/example/ios/Runner/AppDelegate.swift (1)

1-13: LGTM - Standard Flutter iOS AppDelegate.

Identical to the push_notification example's AppDelegate, which is expected for separate example projects. The implementation is correct.

packages/stream_video_noise_cancellation/example/ios/.gitignore (1)

1-34: LGTM! Standard iOS/Flutter .gitignore patterns.

The ignore patterns comprehensively cover Xcode artifacts, Flutter build outputs, CocoaPods dependencies, and derived data. The exceptions for default configuration files (lines 31-34) follow iOS best practices.

packages/stream_video_noise_cancellation/example/.gitignore (1)

1-45: LGTM! Standard Flutter .gitignore patterns.

The ignore patterns are comprehensive and appropriate for a Flutter example project, covering build artifacts, IDE configurations, dependency caches, and platform-specific files.

packages/stream_video_push_notification/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (1)

1-8: LGTM!

Standard Xcode-generated workspace metadata file. The IDEDidComputeMac32BitWarning flag is boilerplate that suppresses repeated 32-bit deprecation warnings in the IDE.

packages/stream_video_push_notification/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata (1)

1-7: LGTM!

Standard Xcode-generated workspace contents file with the typical self-referencing FileRef structure.

packages/stream_video_push_notification/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (1)

1-8: LGTM!

Standard Xcode-generated workspace metadata, appropriately placed at the Runner.xcworkspace level (complementing the one at project.xcworkspace).

packages/stream_video_push_notification/example/ios/Runner/Runner-Bridging-Header.h (1)

1-1: No issue—this is standard Flutter iOS build pattern.

GeneratedPluginRegistrant.h is not part of the repository because it's dynamically generated by the Flutter build system during compilation (via flutter run, flutter build, or pub get). The bridging header import is correct and necessary. This pattern is consistently used across all iOS example projects in the repo and is part of Flutter's standard plugin registration mechanism.

Likely an incorrect or invalid review comment.

packages/stream_video_push_notification/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt (1)

1-5: LGTM!

This is standard Flutter Android boilerplate for the example app's entry point.

packages/stream_video_noise_cancellation/example/android/app/src/debug/AndroidManifest.xml (1)

1-7: LGTM!

Standard Flutter debug manifest with INTERNET permission for development tooling.

packages/stream_video_push_notification/example/android/app/src/profile/AndroidManifest.xml (1)

1-7: LGTM!

Standard Flutter profile manifest with INTERNET permission for development tooling.

packages/stream_video_noise_cancellation/example/android/app/src/main/res/values-night/styles.xml (1)

1-18: LGTM!

Standard Flutter night mode theme definitions following Android embedding V2 conventions.

packages/stream_video_noise_cancellation/example/android/app/src/profile/AndroidManifest.xml (1)

1-7: LGTM!

Standard Flutter profile manifest with INTERNET permission for development tooling.

packages/stream_video_push_notification/example/android/app/src/main/res/values-night/styles.xml (1)

3-17: Night-mode themes look consistent and correct.
LaunchTheme/NormalTheme are aligned with Flutter V2 embedding expectations.

packages/stream_video_push_notification/example/android/app/src/main/res/drawable-v21/launch_background.xml (1)

3-11: Looks good for API 21+ launch background.
Theme-aware base layer is appropriate here.

packages/stream_video_push_notification/example/android/app/src/main/res/values/styles.xml (1)

3-17: Day-mode themes look correct.
Matches expected Flutter V2 embedding theme setup.

packages/stream_video_noise_cancellation/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt (1)

1-5: Package alignment confirmed. The MainActivity package (com.example.example) matches the namespace and applicationId in build.gradle, and the relative activity reference in AndroidManifest.xml resolves correctly.

packages/stream_video_noise_cancellation/example/android/app/src/main/res/values/styles.xml (1)

1-18: Standard Flutter Android styles template.

This is boilerplate Flutter Android theme configuration for the example app. The LaunchTheme and NormalTheme definitions follow Flutter's standard Android embedding V2 conventions correctly.

packages/stream_video_noise_cancellation/example/android/app/src/main/AndroidManifest.xml (1)

1-45: Standard Flutter Android manifest configuration.

This is boilerplate Flutter Android manifest for the example app. The activity configuration, theme references, Flutter embedding v2 meta-data, and PROCESS_TEXT query declaration all follow Flutter's standard conventions correctly.

packages/stream_video_push_notification/example/android/app/src/main/AndroidManifest.xml (1)

1-45: Standard Flutter Android manifest configuration.

This is boilerplate Flutter Android manifest for the push notification example app. The configuration is correct and follows Flutter conventions.

Note: For a push notification example, you may eventually need to declare permissions like android.permission.POST_NOTIFICATIONS (required for Android 13+) and android.permission.INTERNET. These might be declared in a different location or added by the Flutter plugin automatically, but verify they're included if users encounter notification permission issues.

packages/stream_video_noise_cancellation/example/ios/Runner/Base.lproj/Main.storyboard (1)

1-26: LGTM!

Standard Flutter iOS storyboard boilerplate. The FlutterViewController configuration and layout setup are correct.

packages/stream_video_noise_cancellation/example/ios/Runner/Info.plist (1)

1-49: LGTM!

Standard Flutter iOS Info.plist configuration. Build variables are correctly used for bundle identifiers and versioning.

packages/stream_video_noise_cancellation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (1)

1-101: LGTM!

Standard Flutter iOS Xcode scheme with appropriate build, test, launch, profile, analyze, and archive configurations. The Flutter LLDB init file references are correct.

packages/stream_video_noise_cancellation/example/ios/Runner.xcodeproj/project.pbxproj (1)

1-619: Overall structure is correct for a Flutter iOS example project.

The project file properly configures:

  • Build phases with Flutter tooling hooks (xcode_backend.sh)
  • Debug/Release/Profile configurations
  • RunnerTests target with proper dependency on Runner
  • iOS 13.0 deployment target

Apart from the hardcoded DEVELOPMENT_TEAM noted above, the configuration follows Flutter iOS project conventions.

packages/stream_video_push_notification/example/pubspec.yaml (3)

2-4: LGTM!

Standard metadata additions for an example project. Setting publish_to: "none" correctly prevents accidental publishing.


7-7: LGTM!

Dart 3.9 was released and ^3.9.2 is a valid constraint for this example project.


26-27: LGTM!

Standard Flutter section enabling Material Design assets.

packages/stream_video_noise_cancellation/example/pubspec.yaml (3)

26-27: LGTM!

The uses-material-design: true configuration is appropriate for enabling Material Design icons and assets in the example app.


16-16: flutter_lints version 5.0.0 is valid and published on pub.dev.


2-7: Metadata additions and SDK constraint are appropriate.

The description, publish_to: "none", and version fields are correctly configured for an example project, and the SDK constraint ^3.9.2 is valid and aligns with other examples in the repository (such as stream_video_push_notification/example). This constraint allows Dart 3.10.3 (the current stable release) and is appropriately future-compatible.

packages/stream_video_noise_cancellation/example/android/app/build.gradle.kts (1)

1-44: LGTM!

This is a well-structured Flutter Android app build configuration. The plugin ordering is correct (Flutter plugin after Android/Kotlin), Java 11 compatibility is appropriate, and the TODO comments clearly mark areas requiring customization for production use. Using debug signing for release builds is acceptable for an example project.

packages/stream_video_push_notification/example/android/app/build.gradle.kts (1)

8-44: LGTM for the Android/Flutter configuration block.
Matches the standard Flutter template setup and looks consistent.

packages/stream_video_push_notification/example/android/settings.gradle.kts (1)

20-26: LGTM for plugin declarations and :app include.
Looks clean and aligned with standard Gradle settings structure.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

@codecov
Copy link

codecov bot commented Jan 19, 2026

Codecov Report

❌ Patch coverage is 87.50000% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 6.42%. Comparing base (cdbfaa3) to head (4508872).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
...cation/lib/src/stream_video_push_notification.dart 87.50% 3 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff            @@
##            main   #1154      +/-   ##
========================================
+ Coverage   6.28%   6.42%   +0.14%     
========================================
  Files        592     600       +8     
  Lines      41272   41947     +675     
========================================
+ Hits        2592    2697     +105     
- Misses     38680   39250     +570     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@packages/stream_video_push_notification/example/pubspec.yaml`:
- Around line 12-24: The dependencies in pubspec.yaml are misaligned with the
imports: replace the incorrect dependency symbol stream_video_noise_cancellation
with stream_video_push_notification in the dependencies section so the package
list matches the code imports; update the dependencies entry for
stream_video_noise_cancellation to stream_video_push_notification and keep the
existing version constraint (or adjust as needed) and ensure the
dependency_overrides still point to ../../stream_video_push_notification if
present.
♻️ Duplicate comments (2)
packages/stream_video_push_notification/android/gradle/wrapper/gradle-wrapper.properties (1)

5-5: Same checksum verification applies here.
Ensure distributionSha256Sum matches the official Gradle 8.13 distribution checksum and remains aligned with distributionUrl.

packages/stream_video_push_notification/example/android/gradle/wrapper/gradle-wrapper.properties (1)

1-6: Same checksum verification applies here.
Please confirm the checksum matches the official Gradle 8.13 distribution to avoid wrapper download failures.

@Brazol Brazol merged commit 0854661 into main Jan 19, 2026
16 of 18 checks passed
@Brazol Brazol deleted the fix/fix-callkit-event-silencing branch January 19, 2026 09:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants