Skip to content

Add sticker sending, fix sticker rendering, and integrate Find My Friends#188

Open
MrMistic wants to merge 3 commits intoOpenBubbles:rustpushfrom
MrMistic:rustpush
Open

Add sticker sending, fix sticker rendering, and integrate Find My Friends#188
MrMistic wants to merge 3 commits intoOpenBubbles:rustpushfrom
MrMistic:rustpush

Conversation

@MrMistic
Copy link

@MrMistic MrMistic commented Mar 16, 2026

Summary

Adds user-generated sticker sending support, fixes sticker rendering issues, and integrates Find My Friends for location display in the iOS chat header.


Find My Friends Integration

  • Fetches and displays the short address of a friend based on their location in the iOS (Cupertino) chat header, just like on real iPhones
  • Address caching to avoid redundant lookups

File changed: cupertino_header.dart


Sticker Rendering Fix (Addresses Issue #121)

  • HEIC→PNG conversion in sticker_holder.dart and reaction.dart using FlutterImageCompress (same pattern as loadAndGetProperties)
  • Error handling: try/catch around sticker image loading, firstWhereOrNull for safe lookup, errorBuilder on Image.memory()
  • Stickerback loading: Include stickerback in the attachment loading filter in chat.dart so reaction sticker messages get their attachments loaded

Sticker Sending

Enables users to save images as stickers and send them as proper iMessage stickers (not regular image attachments).
Creates a sticker folder on device to enable quicker selection for saved stickers

Save as Sticker:

  • Stickers directory in filesystem_service.dart at /Android/data/[package]/stickers/
  • saveAsSticker() method in attachments_service.dart
  • Save button in fullscreen image viewer (both Material and iOS skins, positioned next to the download button)
  • Save option in message long-press popup menu for image attachments

Sticker Picker:

  • New StickerPicker widget with grid UI, HEIC thumbnail support, and empty state
  • Integrated into the existing attachment picker

Send Path:

  • isStickerSend flag flows through conversation_view_controller.dartSendAnimation (sets balloonBundleId) → rustpush_service.dart
  • Rustpush detects com.apple.Stickers.UserGenerated.MessagesExtension bundle ID and builds PartExtension.sticker + ExtensionApp
  • Flag is cleared after send in conversation_text_field.dart

All Files Changed

Find My Friends header:

  • cupertino_header.dart — Location fetching + address caching

Sticker Rendering (#121):

  • sticker_holder.dart — HEIC conversion + error handling
  • reaction.dart — HEIC conversion for stickerback path
  • chat.dart — Stickerback attachment loading filter

Sticker Sending:

  • sticker_picker.dartNew file: grid picker widget
  • text_field_attachment_picker.dart — Sticker picker integration
  • details_menu_action.dartSaveAsSticker enum
  • message_popup.dart — Long-press save as sticker
  • send_animation.dartballoonBundleId for stickers
  • conversation_text_field.dart — Clear isStickerSend after send
  • fullscreen_image.dart — Sticker save button + dynamic action list fix
  • filesystem_service.dart — Stickers directory getter
  • attachments_service.dartsaveAsSticker() method
  • conversation_view_controller.dartisStickerSend flag
  • rustpush_service.dartPartExtension.sticker + ExtensionApp in send path

MrMistic and others added 2 commits March 16, 2026 16:40
Added Find My Friends integration to fetch and display the short address of a friend based on their location. Implemented caching for address retrieval to optimize performance.
…erback attachment loading

- sticker_holder.dart: Add HEIC→PNG conversion in checkImage() using
  FlutterImageCompress (same pattern as loadAndGetProperties), wrap in
  try/catch, use firstWhereOrNull, add errorBuilder to Image.memory()
- reaction.dart: Same HEIC→PNG conversion and error handling for
  STICKERBACK sticker rendering path
- chat.dart: Include 'stickerback' in attachment loading filter so
  STICKERBACK reaction messages get their attachments loaded

Fixes OpenBubbles#121
@MrMistic MrMistic changed the title Add sticker sending & fix sticker rendering Add sticker sending, fix sticker rendering, and integrate Find My Friends Mar 16, 2026
@MrMistic
Copy link
Author

Haven't been able to get pypush fairplay certs to work for me yet so I would love for someone else to test these features out!

- Add stickers directory in filesystem_service (Android external storage)
- Add saveAsSticker() method in attachments_service
- Add SaveAsSticker action to details_menu_action enum
- Add Save as Sticker button to fullscreen image viewer (both skins)
- Add Save as Sticker to message long-press popup (image attachments)
- Create StickerPicker widget with grid UI, HEIC support, empty state
- Integrate sticker picker into attachment picker message wheel
- Wire up send path: isStickerSend flag flows through SendAnimation
  to set balloonBundleId, then rustpush_service detects it to build
  PartExtension.sticker + ExtensionApp with UserGenerated bundle ID
- Fix fullscreen_image NavigationBar index mapping (dynamic action list)
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.

1 participant