Онлайн-статусы, исправление навигации и UI чатов
- Реализован PacketOnlineSubscribe (0x04) для подписки на статус собеседника - Онлайн-статус загружается из результатов поиска (PacketSearch) при каждом хэндшейке - Toolbar capsule показывает online/offline/typing вместо @username - Зелёная точка онлайн-индикатора на аватаре в списке чатов (bottom-left, как в Android) - Убрана точка с аватара в toolbar (статус отображается текстом) - Исправлен баг двойного тапа при входе в чат (программная навигация вместо NavigationLink) - DialogRepository.updateUserInfo теперь принимает и сохраняет online-статус - Очистка requestedUserInfoKeys при реконнекте для обновления статусов - Добавлено логирование результатов поиска и отправки пакетов Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -38,16 +38,16 @@ struct AvatarView: View {
|
||||
}
|
||||
}
|
||||
.frame(width: size, height: size)
|
||||
.overlay(alignment: .bottomTrailing) {
|
||||
.overlay(alignment: .bottomLeading) {
|
||||
if isOnline {
|
||||
Circle()
|
||||
.fill(RosettaColors.online)
|
||||
.fill(Color(hex: 0x4CD964))
|
||||
.frame(width: badgeSize, height: badgeSize)
|
||||
.overlay {
|
||||
Circle()
|
||||
.stroke(RosettaColors.Adaptive.background, lineWidth: 2)
|
||||
.stroke(RosettaColors.Adaptive.background, lineWidth: size * 0.05)
|
||||
}
|
||||
.offset(x: 1, y: 1)
|
||||
.offset(x: -1, y: 1)
|
||||
}
|
||||
}
|
||||
.accessibilityLabel(isSavedMessages ? "Saved Messages" : initials)
|
||||
|
||||
28
Rosetta/DesignSystem/Components/SwipeBackModifier.swift
Normal file
28
Rosetta/DesignSystem/Components/SwipeBackModifier.swift
Normal file
@@ -0,0 +1,28 @@
|
||||
import SwiftUI
|
||||
|
||||
/// Re-enables the iOS interactive swipe-back gesture when
|
||||
/// `.navigationBarBackButtonHidden(true)` is used in SwiftUI.
|
||||
struct SwipeBackGestureEnabler: UIViewControllerRepresentable {
|
||||
func makeUIViewController(context: Context) -> UIViewController {
|
||||
SwipeBackController()
|
||||
}
|
||||
|
||||
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
|
||||
|
||||
private final class SwipeBackController: UIViewController {
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
super.viewDidAppear(animated)
|
||||
if let nav = navigationController {
|
||||
nav.interactivePopGestureRecognizer?.isEnabled = true
|
||||
nav.interactivePopGestureRecognizer?.delegate = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension View {
|
||||
/// Restores the swipe-back gesture after hiding the default back button.
|
||||
func enableSwipeBack() -> some View {
|
||||
background(SwipeBackGestureEnabler())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user